Last year in Programmers as Human Beings, I mentioned that I was reading Programmers At Work. It's a great collection of interviews with famous programmers circa 1986. All the interviews are worth reading, but the interview with Bill Gates has one particular answer that cuts to the bone:
Will not running make you a better runner? Will not playing tennis make you a better tennis player?
I think the physical analogies break down. Programming is a purely mental activity. And as I’ve cited multiple times in the original post and in the comments, the distribution of skill in programming is extremely lopsided relative to other professions. There’s no normal curve: it’s a double hump of those who can, and those who can’t.
So if you can do it at all, you can always do it. Your programming skills won’t deteriorate to the point that you can’t program. You won’t slide back over from a Sheep to a Goat. It’s impossible.
Will not thinking make you a better thinker?
Sometimes not thinking can, in fact, make you a better thinker. You don’t stop thinking entirely. You stop thinking about the same topics and instead think about related (or completely unrelated) topics that can lead to breakthroughs in other areas. Richard Feynman didn’t spend all his time thinking about physics:
Typical boooschwaa sensibility crap. Bill “I got rich cuz mommy had a hook up” Gates is a great swindler. Anyone who tries to justify thier greatness by saying you have to not do something to be good at it is trying to justify their own fear being looked at for what they really are.
Attitudes like the ones portrayed by these “lifestyle” programmers have no clue what it really takes because they have been getting others to code for them since they got thier cushy new office with thier ultra-geek pong clocks…
Excuse me while I barf all over my keyboarasdfa;lkj;alkdja;sldadj
Anyone can be a good programmer. The difference is that most people are not driven to become good at anything. They reach a point that is comfortable for them and stop improving. You see this in all aspects of life.
I completely disagree that a good programmer is apparent or not within a few years. What you might discover is if someone cares enough to improve themselves.
It has often been said that it takes 10 years to develop a mastery of any skill. In my experience this is a reasonable statement. It’s just a pity that in software development 10 years is just about a programmers expiry date.
that Gates is qualified to judge. may be not. IIRC, he’s never provided evidence that he ever wrote anything other than a BASIC interpreter (and legend has it that Allen was the primary author). is there any? being a critic of X doesn’t entail being good at X; usually, but not systems development. the quality of criticism here derives not from subjective preference (this picture pleases me more than that picture), but acknowledged superiority (i built a better mousetrap, and yours is crap because it doesn’t trap mouses). which brings us to…
that M$ is a demonstrable example of innovation, superior systems development, or creativity. if you go down the list; it was something they stole (DOS), something they built for hire then stole (Windows UI), something they built for hire then ported (Office), something they EEE (IE), something they lucked out on (DOS for IBM, who were clueless; and Lotus 1-2-3 which was made ONLY for DOS and thus made DOS mandatory), something they did that was illegal but didn’t get really punished for (the anti-trust stuff, and the continuing punitive contracts with OEMs; do you really think Dell, et al wouldn’t offer Linux if they could without penalty?). face it: M$ got where they are not by building better mousetraps, but by trapping folks into buying only M$ mousetraps.
folks are confounding understanding syntax (can you write tight code in X language?) with semantics (do you understand O/S prinicples or database principles or Knuth’s books?). the notion that what you know how to do changes in 4 years is the syntax trap. being able to absorb new syntax/languages in short order is a demonstrable skill. not the same as being a brilliant developer.
that coders are the same as developers. developers are different from each other (coders, too). having a deep understanding of the logic and structure of an O/S is different from (and have less $$$$ value), than deep understanding of how to build a databased G/L. in fact, i’d bet on it.
DaVinci wasn’t born doing that stuff; he learned his trade first. the aura of creativity is self-aggrandizement. even Picasso had different periods and made different stuff.
“Finding new minimal ways to represent patterns and mechanisms to verify the correctness of those patterns is more important to me than how it can be used in real life.”
“People with an CS background too often seem to get frustrated (or even angry) when their elegant solutions can’t handle the real world”
Interesting that both ends of the spectrum read this blog. BTW, the first post relates much to the previous blog entry about how much code you’ve written that’s actually in use. I assume the poster is an academe.
i’m 30, and went back to school after having a diploma (gifted, etc. - just lazy as a 10 year cat) and have learned that practice does indeed make better… I used to have the worst code ever, but was the most computer-literate person otherwise. Stuff I’d do would include extensive hard-code, redundant vars and such, and some of the worst logic ever (after I re-read it a week later). Now after a few failed jobs and such, I’ve realized how much code I did know and have now ‘grown’ a sense programming that I didn’t know I didn’t have.
I see the same problems that used to take me twenty lines of code i now do in five. So, I disagree… Spending time with the code does help - but the article is true about one thing… If a person is not comfortable with abstracts and meaninglessness, the concept of code would be lost.
i think that we should have a definition of what a ‘good developer’ is. let’s assume that a ‘good developer’ is someone who develops code that doesn’t hog the system’s resources and who uses the minimum number of lines of code and in minimum time.
i firmly believe that having a good design phase can greatly improve your coding.once you have your plan,you can start programming instead of constantly going back and forth between designing and programming.a good programmer knows how to translate an idea into effective code and having a good design phase will save you a lot of time and allow you to concentrate on other aspects of the project.
so i totally agree with the article that you can become a better programmer by not programming.by becoming better at designing, you can become a better programmer.
Isn’t everything in this post related to basically any creative field? If you’d replaced the programming references by music, art, literary, or performance references, you’d have the same point and there’d be nothing fresh about it. (Except that making an emotional connection to your audience is perhaps done in a completely different way.)
Expanding your horizons is also a key. Being personally supposed to teach software engineering this year, I have been having the same kind of concerns. See “The unteachable parts of software engineering”, http://blog.vermorel.com/?p=28
Also, being “good” involves many aspects. For example: is-it wise to implement (even if the execution is perfect) a product that either already exists or that does not reflect any business needs?
I disagree that you can’t get better. While certainly like anything else there are those that are gurus or prodigies at it. But every programmer learns better way of doing things as time goes on. Whether it is coding something by hand and then moving to wiring in a COTS to save resources or programming with Web Services for the first time as opposed to limit oneselves to a Windows Form. Some things cannot be learned overnight. 4 years is a long time. Nothing looks the same as it did 4 years ago. So I think it all can be boiled down to how readily a programmer adapts to new technology instead of for example still doing VB6 for everything in 2007.
I often find this blog overgeneralizes. The trend you speak of is inherent in anything. Not just programming.
The answer, of course, is that programming has an infinity of choices compared to chess. As others have commented, it’s so open ended that it’s more analogous to art, or writing, or other purely creative activities.
Also, just to clarify, I never said that you can’t improve as a programmer. Sure you can. But 90% of the improvements will be realized in the first four years of your professional career, and the rest will be incremental.
I feel that this posting does hold some weight though because a persons IQ is said never to change. There’s always some programmers code snippet that you find around the web that is just so clever it sometimes depresses me to think ‘oh, i would’ve never thought of that!’.
does reading, absorbing then implementing tons of good code, and adding you’re own little twist make you a good coder?, i don’t think so. So maybe those really good programmers are just the ones that make the breaththroughs… like david heinemeier hansson with rails for example… and i’m just the average guy who is just good enough to use it.
oh, and about the idea that not coding can make you better only makes sense if the reason why you’ve stopped is because you became over critical of yourself (i’ve done it). When you come back without all the negativity and a clear head… you’re automatically better.
… if i’ve repeated something, sorry, i didn’t have the time to read all the comments.