8 ms·
The Humble Programmer (1972)
- ColinWright 13y agoAn old friend, so many postings, so little discussion. Given the usual high standard of discussion here on HN, it's a shame that there's been so little about this popular submission. FWIW, I've upvoted this, because I really do want to see a balanced discussion about it from an up-to-date viewpoint. It was the Turing Award Lecture in 1972 - it's over 40 years old. Printed in "Classics in Software Engineering" by Yourdon Press, 1979, ISBN 0917072146. HTML: http://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html http://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.... PDF: http://www.cs.utexas.edu/~EWD/ewd03xx/EWD340.PDF http://www.cs.utexas.edu/~EWD/ewd03xx/EWD340.PDF Here are some of the previous submissions here on HN: https://news.ycombinator.com/item?id=86288 https://news.ycombinator.com/item?id=86288 https://news.ycombinator.com/item?id=109724 https://news.ycombinator.com/item?id=109724 https://news.ycombinator.com/item?id=126638 https://news.ycombinator.com/item?id=126638 https://news.ycombinator.com/item?id=135111 https://news.ycombinator.com/item?id=135111 https://news.ycombinator.com/item?id=156505 https://news.ycombinator.com/item?id=156505 https://news.ycombinator.com/item?id=449806 https://news.ycombinator.com/item?id=449806 https://news.ycombinator.com/item?id=1179277 https://news.ycombinator.com/item?id=1179277 https://news.ycombinator.com/item?id=1649246 https://news.ycombinator.com/item?id=1649246 https://news.ycombinator.com/item?id=1672262 https://news.ycombinator.com/item?id=1672262 https://news.ycombinator.com/item?id=1799296 https://news.ycombinator.com/item?id=1799296 <- 3 comments https://news.ycombinator.com/item?id=1894784 https://news.ycombinator.com/item?id=1894784 <- 8 comments https://news.ycombinator.com/item?id=2011732 https://news.ycombinator.com/item?id=2011732 https://news.ycombinator.com/item?id=3060828 https://news.ycombinator.com/item?id=3060828 https://news.ycombinator.com/item?id=5035560 https://news.ycombinator.com/item?id=5035560 https://news.ycombinator.com/item?id=5266220 https://news.ycombinator.com/item?id=5266220 https://news.ycombinator.com/item?id=6112467 https://news.ycombinator.com/item?id=6112467 (This item)
- pavs 13y agoI dunno about others, but I am a slow reader, and this will probably take me about 20 minutes to finish reading. I have a general rule on sites like HN and Reddit, if it takes more than 10 minutes to read something I will probably not going to read it (unless it's extremely interesting, important or relevant to present time based on comments). I spend about an hour on HN a day, in small bouts. Most of the time I will skim over titles to see if there is anything interesting, if there is and its a long read (like this one) I will save it to "Pocket" to read it later. I will probably get around to reading this few weeks or even a month from now. I suspect, very few people will read it on the spot, which is why even interesting submissions like this doesn't get a lot of discussions.
- prawks 13y agoDitto. This sounds like a great article, but it looks immensely dense. It's most definitely on my "To-read" list, but that rarely gets actually read through... Also, although the author carries immense weight, and I'm sure the ideas put forth in the article are fantastic, what benefit will I get out of the article other than "hmmm, well that was interesting"? It's not a tutorial on a tool I can put into practice, or necessarily any sort of technique I can use in my day-to-day life (at least before reading, it seems this way). It looks like a philosophical article about the art of programming and being a programmer. I love these kinds of articles, but their return on the large time investment required is ultimately not very large. This is in my relatively limited experience, of course.
- chaddeshon 13y agoThese are two of the most depressing comment I've ever read, not just on Hackernews, but on the whole internet. So much so that I wonder if they were written with sarcasm that escapes me. They represent a philosophy that is referenced often but always before as an unintentional consequence of our internal laziness -- a laziness that should be fought against. However here it is being presented as a conscious choice. Indeed a right, proper, and good, choice. The commenters seem to be arguing that reading is only worth the time if the content has been distilled to its basic facts, and further that that facts need to be immediately actionable. Have we no room for soul? Do we lack the energy to take general concepts and apply them to new areas in new ways? When we break a larger writing down and extract just the main theses, we make it easier and quicker to under understand, but we also neuter and even change the meaning. Sometimes what we learn or what we experience is subtle. Sometimes writing doesn't give us a todo list, but instead it ever-so-gently shades and nudges all our todo lists.
- LekkoscPiwa 13y agomaybe HN is not what you are taking it for?
- stiff 13y agoMaybe it is so because this is a very wordy article with Dijkstra having just his usual axes to grind? The debate about this article should be a debate about the merits of proving program correctness, even though people nowadays read in Dijkstra many other things he probably did not even mean; anyway, this debate has been done to death in the period when there was still any controversy about using it as a technique for day-to-day programming. I think the problem with Dijkstra is that A) he views every program as a huge algorithm, where 90% of programming now is doing IO and user interfaces B) he doesn't take into consideration that people can have different brain wiring than he has and be effective with other techniques that the ones he advocates.
- smoyer 13y agoI reread this piece every few years and agree that there's no reason this discussion can't occur every few months/years on HN (so I'm upvoting this too). And since there's a lack of comments on many of the threads, I'll add my opinion to this one. This was written by a man who's got a long-term love affair with programming. I recognize this because I am the same way, and it's actually rarer than you might think. Most of the people who were my colleagues have gone on to management, or more likely switched to other careers. I've been in management repeatedly (even C-level) and have had to talk my way back into software architecture and development. I wrote my first program 41 years ago and it's still my favorite past-time.
- davidp 13y agoIt's indeed a classic. I think one reason why there's relatively little discussion is that in the intervening years Dijkstra has been proven so correct that there's relatively little to say. But I suspect that the main reason why it's hard for most people to talk about his work is that they lack the historical context to understand what he's talking about. For someone who has never studied or used FORTRAN, ALGOL 60, or any of the macro languages he alludes to, his criticisms seem very abstract. For someone who has seen those languages, they're concrete and visceral. Looking back twenty years ago, I now understand that one of the highest-value courses in my CS degree was the "Survey of Programming Languages" class. We spent two to three weeks studying and working with each of LISP, FORTRAN, ALGOL-60, Smalltalk, and a couple others I don't remember. I enjoyed the class but at the time I wasn't developed enough to think more than "man, people sure have come up with some strange ways of doing things; ok, back to C, I love my filesystems class." Now I recognize how precious that exposure was. It's kind of like traveling; exposure to different cultures teaches you as much about your own culture as about theirs. You don't always realize what assumptions you're making until you see other people making different assumptions. This is the value of formal CS education, i.e. Dijkstra's life work. Some people ask whether a CS degree is worthwhile when the Internet makes it so easy to learn how to program. It's the difference between university and vocational training; if you only want fix cars, you just need some skills classes and time spent apprenticing in a mechanic's shop. If you want to be an automotive engineer, you need an engineering education. If you just want a job, you don't need college; if you want to participate in the core of what our civilization has to offer, you need an education (self-study or formal, doesn't matter). (Tip for the kids in school today: If you're at university and you find yourself frequently saying "Why do I have to learn this crap? I'll never use it!" then you might just be wasting your time and money. Do yourself a favor and drop out, unless someone else is paying for your play time. But if you learn for the sake of learning, if you recognize that learning how to learn, to prepare for a lifetime of learning, is the point of education, then stay in school, since you'll reap the rewards many times over.)
- lesterbuck 13y agoA recent version of programming languages survey class available to anyone is the Coursera class on Programming Langauges from Dan Grossman: https://www.coursera.org/course/proglang https://www.coursera.org/course/proglang It will be taught again in the fall. He covers three languages (SML, Racket, and Ruby) in ten weeks, hitting three of the four quadrants on strongly typed/dynamic and functional/object oriented.
- mratzloff 13y agoAny content aggregator where stories float to the top but are increasingly depressed according to the passage of time suffers from this. Articles requiring a few minutes are ideal, while longform essays are usually marked for later reading. By the time someone has a comment, the thread is buried under mountains of short, easily-digestible "Reasons I Like Go" and "New MySQL Vulnerability"-type posts.
- mjn 13y ago> Printed in "Classics in Software Engineering" by Yourdon Press, 1979 It's interesting how terminology has changed. In the 1970s you might have been able to say that Dijkstra was part of a field called "software engineering", in that he was writing about methodology for developing software. But in the 1980s it became a fairly different field, focused more on how to develop effective processes for large-scale development (modeling, testing, code review, team structure, tooling, etc.). By 1988 Dijkstra was vehemently against that version of software engineering. Here's his article on that subject: http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036... A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot.".
- karangoeluw 13y agoA tldr version please?
- Zoepfli 13y agoSince "tldr" means "too long didn't read", maybe you need some of that humbleness yourself?
- deleted 13y ago[deleted]
- RivieraKid 13y agoIt has nothing to do with humbleness.
- RivieraKid 13y agoI'd appreciate a tldr version too.
- tomrod 13y agoA humble man speaks about programming. Take some time, this one is worth stepping back from the Internet firehose of information and sipping the lemonade of prose.
- shiven 13y agoSorry, this ain't Reddit. If it is too long for you, then it is only good you don't waste your precious little time on this planet reading it.
- k4rtik 13y agoOne of my professors, Prof. Vineeth K Paleri, at NIT Calicut (http://cse.nitc.ac.in http://cse.nitc.ac.in) asks the students to read this article by Djikstra in their first class with him. Was an interesting read indeed.
- Ashuu 13y agoA really interesting read! I am glad I read this very long article. Worth the time!
- killahpriest 13y agotl;dr Programming has been ignored because hardware has a much more visible payoff. The impact of computers and the innovation in hardware will "be but a ripple on the surface of our culture, compared with the much more profound influence they will have in their capacity of intellectual challenge without precedent in the cultural history of mankind." That is, the intellectual impact of programming is more significant than the impact made innovation on the hardware side. At least thats what I think what Dijkstra is saying. Some gems: Test driven development, 1972. Today a usual technique is to make a program and then to test it. But: program testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence. The only effective way to raise the confidence level of a program significantly is to give a convincing proof of its correctness. But one should not first make the program and then prove its correctness, because then the requirement of providing the proof would only increase the poor programmer’s burden. On the contrary: the programmer should let correctness proof and program grow hand in hand. For loops have brain damaged us. Another lesson we should have learned from the recent past is that the development of “richer” or “more powerful” programming languages was a mistake in the sense that these baroque monstrosities, these conglomerations of idiosyncrasies, are really unmanageable, both mechanically and mentally. I see a great future for very systematic and very modest programming languages. When I say “modest”, I mean that, for instance, not only ALGOL 60’s “for clause”, but even FORTRAN’s “DO loop” may find themselves thrown out as being too baroque. I have run a a little programming experiment with really experienced volunteers, but something quite unintended and quite unexpected turned up. None of my volunteers found the obvious and most elegant solution. Upon closer analysis this turned out to have a common source: their notion of repetition was so tightly connected to the idea of an associated controlled variable to be stepped up, that they were mentally blocked from seeing the obvious. Their solutions were less efficient, needlessly hard to understand, and it took them a very long time to find them.
- ndefinite 13y agoThat point is really helpful. Reinforces that point that TDD is not just testing, it's forcing you to think differently. Conceiving simple tests to prove a simple piece of programming works, keeps it simple. Simple is powerful.
- stiff 13y agoHas anyone here actually learnt what Dijkstra advocates in almost all EWDs and used it to any benefit? Basically almost all his essays in one way or another end up being about the need to prove programs correct using formal logic and specifically a particular approach to correctness proofs he devised. In fact he even advocates starting from a formal logical specification of a problem and then deriving the program using purely syntactical transformations. I tried to read the "Discipline of programming" where he explains his approach, but it was barely understandable and it takes 300 pages for him to get to the point of developing simple algorithms of the type you meet in the first chapter of an algorithm textbook. It could have been the translation (didn't read the English original), but I doubt it, because I have never read anything technical from him that would actually be interesting. I am afraid his essays are liked because of the general sentiment for "more rigour" in programming, whatever it would mean, and not because of any understanding of what precisely he advocates and the merits of his techniques. The living proof is some comment in this thread how Dijkstra sheds insight into the value of TDD... So, if you upvote his articles, what precisely have you learned from Dijkstra?
- killahpriest 13y agoHow to get a rat out of a maze. http://www.cse.usf.edu/~rtindell/courses/DataStructures/Projects/RescueRemy2/Instructions.pdf http://www.cse.usf.edu/~rtindell/courses/DataStructures/Proj... On a serious note, you do have a good point. I haven't read much of Dijkstra's work myself.
- stiff 13y agoWell, he didn't derive his algorithm using the approach he advocated, here is what he himself has to say on it: One morning I was shopping in Amsterdam with my young fiancée, and tired, we sat down on the café terrace to drink a cup of coffee and I was just thinking about whether I could do this, and I then designed the algorithm for the shortest path. As I said, it was a twenty-minute invention. In fact, it was published in ’59, three years late. The publication is still readable, it is, in fact, quite nice. One of the reasons that it is so nice was that I designed it without pencil and paper. I learned later that one of the advantages of designing without pencil and paper is that you are almost forced to avoid all avoidable complexities. Eventually that algorithm became, to my great amazement, one of the cornerstones of my fame. I found it in the early ’60’s in a German book on management science - - “Das Dijkstra’sche Verfahren.” Suddenly, there was a method named after me Source: http://conservancy.umn.edu/bitstream/107247/1/oh330ewd.pdf http://conservancy.umn.edu/bitstream/107247/1/oh330ewd.pdf
- kostyakow 13y agoThis article feels like it's from a completely different era -- an early age of computers with wild discoveries and unexplored frontiers. But in reality it wasn't that long ago and a lot of the early computer pioneers are still alive. Computing is still a really young field!
- andrewflnr 13y agoI find his point about the "economic need" for programming to be more efficient interesting: at the time, software was about as expensive as hardware, and hardware was about the get drastically less expensive, and so If software development were to continue to be the same clumsy and expensive process as it is now, things would get completely out of balance. You cannot expect society to accept this, and therefore we must learn to program an order of magnitude more effectively. And yet, society has accepted it. It's now a truism that programmers cost more than hardware. Then again, it doesn't seem like his hoped-for revolution has occurred, either, so I guess he hasn't really been disproven and is merely guilty of being too optimistic.
- rdouble 13y agoIt's sort of swinging back around with the scale of some of the systems in place today. Relatively small increases in program efficiency can save a lot of money in power consumption, physical server space needed, and other related data center costs.
- dmethvin 13y agoThese are just engineering tradeoffs. Sure you need to weigh them carefully, but the fact that we spend more on software than hardware does not indicate a horrible failure in the industry. For example, processing power, communication speed, and storage has improved by orders of magnitude, but battery capacity is perhaps better by one factor of ten. Much of the advance in battery life comes from reduced power consumption by other components. Much of the advance in software development has come by creating inefficient abstractions that let us create things faster but squander CPU, network, and battery life. Most companies today are willing to burn up some hardware performance in order to reduce software development time. If they're burning too much, they'll fix it or they'll go out of business. Premature optimization is still not a good idea.
- andrewflnr 13y agoI guess my post sounds more pessimistic than I meant it to be. I don't think it indicates any horrible failure, I just find funny the exact way that Dijkstra's vision failed to come to pass. Honestly, as a programmer, I kind of like it that hardware is cheap and programming is expensive. ;)
- michaelwww 13y ago"[The speaker] managed to ask for the addition of about fifty new “features”, little supposing that the main source of his problems could very well be that it contained already far too many “features”. The speaker displayed all the depressing symptoms of addiction, reduced as he was to the state of mental stagnation in which he could only ask for more, more, more... " LOL
- virtualwhys 13y agoEnlightening, thanks for posting. "[LISP] has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.", that's pretty profound ;-)
- emmelaich 13y agoWhat's interesting to me is that Dijkstra (and Wirth for that matter) didn't particulary like Lisp or were very late to appreciate it.
- kostyakow 13y ago>The third project I would not like to leave unmentioned is LISP, a fascinating enterprise of a completely different nature. With a few very basic principles at its foundation, it has shown a remarkable stability. Besides that, LISP has been the carrier for a considerable number of in a sense our most sophisticated computer applications. LISP has jokingly been described as “the most intelligent way to misuse a computer”. I think that description a great compliment because it transmits the full flavour of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.
- mathattack 13y agoHas anyone here studied under Dijkstra? I only know of one programmer who did - one of the best hackers I've ever met, who eventually dropped out of UT to program full time. I never asked about his opinions of the professor, and anything I could write would be second hand. I had a professor out of UT for my programming languages class. When asked, "How do you go about debugging interpreters?" he responded, "I don't debug. I prove every line of code correct before I type it." Was Dijkstra inspiring? Or just a pedantic fuddy-duddy?