TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The Two Cultures of Computing (2013)

63 pointsby kerckeralmost 9 years ago

11 comments

gavinpcalmost 9 years ago
Apprentice comes into the workshop and the master carpenter performs mysterious steps to make things.<p>Apprentice is baffled by what appears to be difficult and says, &quot;I was wrong about wanting to do this, if this is what it is. I&#x27;m going to Ikea, who&#x27;s with me?&quot;<p>Is it the master&#x27;s job to persuade the apprentices to stay?<p>This &quot;wait, come back!&quot; reflex is understandable. But even if we could make &quot;conversing&quot; with the computer <i>look</i> easy, it would still <i>be</i> difficult (since, as Alan Turing himself pointed out, anything routine should be automated). Would you feel differently if students were bolting (or merely appalled) when they hit those inevitable, real challenges?<p>I completely agree with the OP that interaction has not fundamentally advanced since the 1960&#x27;s (<i>edit</i>, well, I&#x27;d say 70&#x27;s, but still). As others have pointed out, the examples could have been better, but it doesn&#x27;t change the point.<p>Improving interactivity is <i>our problem</i>, especially since we spend the most time with computers. And it&#x27;s (still) one of the most interesting problems in computing. I would tell students that if you&#x27;re not satisfied with the state of the art, you&#x27;re not alone. And if you are satisfied with Ikea, then why are you here?<p><i>edit</i> moved side comment to a different post.
评论 #12235811 未加载
评论 #12237716 未加载
评论 #12236512 未加载
zekevermillionalmost 9 years ago
The problem I see is that it is very difficult to improve user tools when the users (such as myself) are stuck using the wrong abstractions. I&#x27;m a corporate lawyer, and the #1 and 2 tools of my trade are Word, followed by Acrobat. Typical process for negotiating a contract is to save new versions in .docx and run &quot;legal compare&quot; in some tool such as DeltaView or Workshare to show change dif between versions. This snapshot dif is then emailed to the people who need to see it. This is a relatively powerful abstraction for a limited field, but is hard to adapt. There is no feedback mechanism between users and developers of these tools. So they basically do not improve, and actually the experience of using them has only gotten worse with time for everyone involved. So the immediate benefit to switching philosophies is zero, though the long-term benefit is huge. But how do you overcome this initial starting friction?
评论 #12235396 未加载
评论 #12235282 未加载
评论 #12235338 未加载
et1337almost 9 years ago
These are not the most compelling tools to begin with. I know how to use Git and markdown, but I still use Google Docs for most things.<p>The key differentiating feature of programming is interactivity, and the most interactive programs are games, which is why they&#x27;re so great for teaching. You can&#x27;t make a game with Spotlight search.<p>I always tell people to start with HTML because it gives instant visual feedback, all you need is notepad, and it gets you used to typing words in a text file. Pretty soon they want interactivity, and suddenly they&#x27;re learning Javascript.
nxc18almost 9 years ago
The problem here isn&#x27;t that there&#x27;s two perspectives (in fact, there are many more than &#x27;two cultures of programming&#x27;), it is that you tried to teach people programming by bombarding them with 50 new tools (git, LaTEX, shells, piping, etc). Yes, those are extremely useful tools for engineers and serious programmers. However, they really aren&#x27;t necessary or core to programming so much as they are core to engineering, sysadmin-ing, typesetting, etc. To be honest, using LaTEX for your resume is just a bad decision unless you happen to be very good at it and very incompetent with Word. Not only was the author teaching them irrelevant tools, he was stretching them to bizarre use-cases that conflict with how any productive human would approach an everyday task.<p>The essence of programming that needs to be taught is how to think about problems. Those are harder to grasp, but really they are just different ways of thinking. Programmatic thinking is clearly applicable to many things and enriches your life <i>beyond</i> just programming. Throwing tools at people is only important after you&#x27;ve learned how to reason about problems and begin tackling them.<p>Like 1t1337 said, HTML is a good place to start for the basic concept of writing plaintext to control the computer. Beyond that, Python is great for teaching programming as it has an easy, intuitive (relative) syntax and supports many concepts without being too demanding re: types.<p>Don&#x27;t forget that people new to programming are <i>really</i> new to programming. Just the concepts of <i>int</i>, <i>double</i>, and <i>string</i> can be daunting because people just don&#x27;t think that way.<p>The biggest challenge I&#x27;ve seen in teaching&#x2F;coaching new programmers is the concept of assignment vs. equality and how that interacts with variables. Even very smart (young) math majors can get very caught up on the following:<p>number = 5<p>number = 6<p>In math (as everyday people understand it), that would clearly be incorrect. I suspect for math-oriented students, functional languages would be a better place to start. I personally learned about programming variables before algebra variables, so my experience was the opposite.<p>I truly believe an excellent introduction to programming course really doesn&#x27;t even require a computer to be involved, although of course when used correctly computers and live demos add a lot of value. Rather, an excellent course will teach the concepts (variable, typing, what memory is, functions, recursion, iteration, and turning real-world problems into computable problems, and so on) which are completely tool agnostic.
评论 #12235386 未加载
评论 #12235750 未加载
评论 #12236561 未加载
pjmlpalmost 9 years ago
It is not the programmer culture, rather the UNIX programmer culture.<p>The Mac OS programmer culture before Mac OS X was a thing and Windows programmer cultures, including the Xerox PARC ,Lisp Machines and ETHZ ones, have more to do with user culture than what the author is writing about.<p>I really dislike this hipster idea that the only programmer culture is the UNIX one.
willtimalmost 9 years ago
I&#x27;m not sure anyone would be impressed by Python via command line and nano&#x2F;pico, beginner or otherwise. An interactive notebook with graphics&#x2F;animations would be the best introduction. Something like this: <a href="http:&#x2F;&#x2F;haskellformac.com" rel="nofollow">http:&#x2F;&#x2F;haskellformac.com</a>
评论 #12234152 未加载
emodendroketalmost 9 years ago
It seems like maybe you&#x27;d be better off teaching these users VBA or something.
sbierwagenalmost 9 years ago
The purpose of programming is to do things <i>at scale</i>, to automate them. Writing a one-off Python script to search for the string &quot;widget&quot; is insane when Spotlight exists. But a script that performs searches is useful when you need to search for a thousand strings. Using the Imagemagick CLI to resize a single image is ridiculously cumbersome when Photoshop exists, but vastly more useful when you need to resize a folder with 50,000 jpegs in it.<p>The reason newbies question the usefulness of trivial examples is because they&#x27;re trivial problems. Programmer tools are only useful for big problems.
yuseealmost 9 years ago
If programming were easier, why would coders make six figs? Doctors and lawyers have regulatory bodies that protect them. We just make make our jobs too frustrating for non-nerds.
squeaky-cleanalmost 9 years ago
I don&#x27;t see any example of the two cultures here. Just an unprepared teacher who chooses bad examples to teach from.<p>The counter-arguments by hypothetical students actually make good points, and I feel are the best ways to solve that certain problem. They know to use the best tools available for their task. The problem is all their tasks are really simple, and the &quot;developer tools&quot; would be a slower solution, or at least not faster.<p>Why do you need to search for all uses of the word &#x27;widget&#x27; in python files? Did you write a script, but you forgot the file name and which directory it was in? Any search tool will work for that. Do you want to replace all instance of &quot;widget&quot; with &quot;module&quot; but only within your python scripts? Now the shell commands seem more appropriate.<p>Why can&#x27;t they just plot a graph with Excel? If you just want to view the line graph from some data points use whatever tool you know best. You can then share that Excel file with anyone else who owns Excel but doesn&#x27;t understand programming, or export the charts it to a non Excel format I&#x27;m sure. But what&#x27;s that? You want to serve the charts online? Well make them an image and host that. What&#x27;s that? They need to be dynamic and based on the user? Okay, now we need to code something. What&#x27;s that again? You just want a chart of some data points for yourself, but you need to compare it against data from an API call? Write something in Python to fetch from that API. You don&#x27;t know how to use matplotlib? Well output it to a CSV and use Excel for your charting.<p>The &quot;copy, rename, email&quot; is a bit of an ugly system. But it works, especially for simple student projects. Pretty much any undergraduate I&#x27;ve tutored did this (I guess the ones that knew git didn&#x27;t need tutoring), and it only starts to become a burden when you get to group projects. The other advantage of git, having a logged history of all your changes, possibly spread across branches for different purposes or features, isn&#x27;t really apparent when your longest homework assignment is a 4 week project. Git is really valuable when you&#x27;re working on a team, working on something large enough that you can&#x27;t keep it&#x27;s history in your head, or you need really quick access to that history (&quot;I just got an alert that our registration page is giving 500 errors after the last update. What did we change?&quot;). I don&#x27;t see a reason to confuse students who are already trying to understand so many other new things at once.<p>I&#x27;m not a professional teacher, so you can take all this with a grain of salt. I think the best way to teach programming is for the students to actually be chasing after something they want to finish. Not just synthetic tasks. No one takes a programming course because &quot;I want to learn Python!&quot;. They take it because &quot;I want to make apps &#x2F; websites &#x2F; video games &#x2F; do my math research more easily &#x2F; automate parts of my job&quot; and so on. And then they&#x27;re not just learning about loops and control structures because &quot;it&#x27;s going to be on the exam&quot;. They&#x27;re learning about them because otherwise, your game of blackjack ends after 1 deal, and that&#x27;s no fun.<p>You really should be able to provide a reason why you&#x27;re using a certain tool, and not another. Why are you using Python instead of Excel to plot a graph? You&#x27;re just faster with Python? That&#x27;s a valid reason. But &quot;because my professor is faster with Python&quot; is not.
andrepdalmost 9 years ago
I firmly dislike this style of writing. I call it ADD writing. It took 3x as many words to write and 5x as much time to read than if he had just gone straight to the point, instead of going off on some over-the-top rant or irrelevant tangent every other sentence.
评论 #12234855 未加载
评论 #12235513 未加载