Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

"When, in the late sixties, it became abundantly clear that we did not know how to program well enough, people concerned with Programming Methodology tried to figure out what a competent programmer's education should encompass. As a result of that effort programming emerged as a tough engineering discipline with a strong mathematical flavour. This conclusion has never been refuted, many, however, have refused to draw it for the unattractiveness of its implications, such as

1. good programming is probably beyond the intellectual abilities of today's "average programmer"

2. to do, hic et nunc, the job well with today's army of practitioners, many of whom have been lured into a profession beyond their intellectual abilities, is an insoluble problem

3. our only hope is that, by revealing the intellectual contents of programming, we will make the subject attracting the type of students it deserves, so that a next generation of better qualified programmers may gradually replace the current one.

The above implications are certainly unattractive: their social implications are severe, and the absence of a quick solution is disappointing to the impatient. Opposition to and rejection of the findings of programming methodology are therefore only too understandable. We should remember that the conclusion about the intrinsically mathematical nature of the programming task has been made on technical grounds, and that its rejection is always for political or emotional reasons."

EWD611 (http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EW...)



Some of the most productive programmers I've known toss code together in a horrifying slapdash fashion but somehow get great things done. And sometimes people with far more precise and mathematical minds just get mired in their beautiful architectures. The common trait I've seen in all exceptional programmers is an ability to keep a tremendous number of details in memory at one time. Most real world code is not lambda calculus but a barely controlled mess.

Humanizing technology is a bigger win than technologizing humans, IMO.


  The common trait I've seen in all exceptional programmers is an ability to 
  keep a tremendous number of details in memory at one time
Would you care to elaborate on this? I'm a programmer with 'precise and mathematical mind' and I'd say that my one big weakness is exactly that: I struggle to large numbers of disconnected facts in my head at one time.


Most programming tasks involve reconciling a bunch of competing constraints. Abstraction techniques make it easier to deal with subsets of those constraints but abstractions leak and even well abstracted software still involves the interactions of many small pieces. This is why it takes 20-30 minutes to get your head into a programming problem - you have to pull enough of that problem space into your head to start manipulating it.

The best programmers can get into that space faster and pull a bigger chunk of a system into their heads at one time. This is why they don't necessarily write clean code because they don't have to. The less gifted of us need strong abstractions and code discipline or we just can't keep up. This is why somebody like Linus Torvalds can afford to be disdainful of a lot of common practices in software - he doesn't need the extra help those practices provide.

And all this happens well above the level of a strong mathematical formalism.


Same here - the best could just read APIs and start using them, while I was always referring back to them.

I've started meditation again; dual n-backed games are next to try and improve my working memory and concentration. Also, just regularly re-reading the core APIs I'm working with.


On the usefulness of N-back (scroll to heading "Notes from the author"):

http://gwern.net/DNB%20FAQ


An interesting excerpt from Accidental Empires (a great read) where this is discussed in passing: http://books.google.com/books?id=QMrfJ-OVIp4C&lpg=PA321&...


I'm not sure if that's quantifiable, or if it's a common trait. I'd say you either need that, or be really good at coming up with thought-efficient abstractions. The other way to put it is: you need to have great focus/concentration.


"Most real world code is not lambda calculus but a barely controlled mess."

Beautifully put.


thank you, i have a new motto.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: