Hacker News new | past | comments | ask | show | jobs | submit login
Advice From An Old Programmer (learnpythonthehardway.org)
649 points by FraaJad on June 16, 2011 | hide | past | web | favorite | 220 comments

People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.

This is a nice sentiment but as someone who has been a programmer for biology and medical research, it's not true. It's just like any other mediocre programming job, but your office is a folding table under a decommissioned fume hood. Physicists and mathematicians who program are so underpaid they dream about the glamour and glitz of working in a cube on Wall Street. There are bad jobs with technology firms, but by far the programming jobs with the most "respect", most fun and usually highest pay are with tech firms and well funded startups.

"This is a nice sentiment but as someone who has been a programmer for biology and medical research, it's not true. It's just like any other mediocre programming job, but your office is a folding table under a decommissioned fume hood."

It depends on your level of domain knowledge. I saw a lot of programmers start into the world of biology seeking "interesting jobs", but with no background in the field. What they don't (usually) realize is that if a research lab is hiring a coder without research experience, they have some non-specific automation job that needs done. Think: maintaining the website, DBA work, basic sysadmin tasks, etc.

If you have a thorough understanding of a research field and you know how to code, life can be better. There is the potential of great upside (and the problems are usually far more interesting than building yet another caching/database system for a website). But even so, you aren't going to jump ahead of the guy who has spent his life studying the subject matter just because you breeze in with the ability to write code. Writing code is the easy part.

That said, academia is always a shitty place to be if you only want to make money and you aren't a football coach.

I agree with this, but I guess I don't know who he thinks needs this advice. I assumed his advice was for the programmer lackey who wishes they had a more interesting job. I would assume a biophysics PhD in this day and age probably already has been exposed to programming, maybe even in Python. I mean, my sister has an MPH and she had to take SAS programming courses, and she graduated 8 years ago. It's 2011, not 1979... most people realized computers were pretty important decades ago.

Yeah, I'd generalize the advice to: don't be a programmer, be a domain expert who happens to write good code.

I think that's still extremely valuable advice in a world where "hackers" are obsessed with the whizziest language, version-control system, editor, database flavor, etc., and other sorts of largely irrelevant technical ephemera that ages like dead fish.

Meanwhile, nobody understands statistics. It's a problem.

> don't be a programmer, be a domain expert who happens to write good code.

A million times, yes. I work in RF design, which feels like an extremely stodgy part of electrical engineering. People think Excel spreadsheets are the bee's knees, even when changing one potential part in your circuit means re-entering its parameters by hand. Don't even ask them to sweep across different frequency points (which affects part performance).

I get a lot more benefit out of writing some short programs in python that allow me to quickly iterate through possible designs, and across a serious breadth of options, than these "Excel engineers" do out of their worksheets. It's frustrating to watch so many people ignore so much potential to improve their work and output.

If there is a one takeaway for me here, it'd also be "don't be programmer, be a domain expert who happens to write good code". Well said!

As for the frustration you have by observing people doing mundane tasks; I bet every person who has had some decent exposure to programming have felt this way at some point (i.e "re-entering parameters by hand in excel"). And this seems so prevalent that sometimes I wonder if people should be force-fed process automation in their daily tasks. Say, we start from schools where children are deliberately given such exercises where where they have to perform tedious tasks; and then they are taught to spot and come up with ways to automate in order to speed up. Organizations could also have such culture in place where they constantly look for things that may be unnecessarily consuming employees' times, etc.

PS, obviously I am not talking about programmers as it's in their mindset to try to optimize any work they're confronted with.

See also "Programmers Need To Learn Statistics Or I Will Kill Them All", by the same author.


I'd personally change that to "human beings need to learn statistics or I will kill them all".

"Humans need to learn statistics or _it_ will kill them all."

Bayesian statistics, right?

I'd generalize the advice to: Math is really important, especially statistics!

I've found that makes a bigger bang to any domain expert then just programming ability.

Not true in biology, at least. You're correct that most people realize that computers are important, but most biologists can barely use a mouse, frankly. Being able to code doesn't make you a great scientist, but it's one more tool in your arsenal that you can use to attack scientific problems, and it's a fairly rare one in many fields of biology.

> programming for biology and medical research ... is just like any other mediocre programming job, but your office is a folding table under a decommissioned fume hood.

That is sooo spot on (left my bioinformatics job a month ago for the exact same reason).

What the author additionally misses is that when you have never programmed/developed as your primary means of making a living, you likely have never worked with people who do not consider programming to be scary voodoo magic, and thus you have missed out on a golden opportunity to learn from others who are better than you. If you value your skills, always try to be around people better than you, otherwise you will end up cut off from the rest in a dark corner writing silly musings like this one.

P.S. I guess you can interpret this comment as "Have read the article but ignored where it's from and who wrote it."

I get what you mean about learning from other people, but I don't think it's as black and white. I think working on FOSS projects with the community can be just as rewarding and educational as working with someone in a similar scenario in a business environment, particularly when it is taken seriously and you leverage the community to better educate yourself in areas you aren't familiar with.

I just think it's disingenuous to imply that the only programmers who are better than you (or I) do it as a 9-5 job. Some do it just for fun.

Hey I'm not putting down FOSS -- the only way I myself learned that there is a better world out there is through FOSS. My comment was more general (i.e. if you are a programmer, it will do good to you to be around other programmers at least for some time; if you are an artist, it will do good to you to be around other artists for a while, etc.).

Take it you don't like Zed Shaw?

I think you missed the point. It's not about being a programmer working those fields. It's about using programming to help you in those fields, about programming not being the primary occupation.

I can agree with that, but he confuses the point by saying:

Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier, you could actually just go run a fast food joint. You are much better off using code as your secret weapon in another profession. People who can code in the world of technology companies are a dime a dozen and get no respect.

I don't agree that programmers are a dime a dozen in technology companies and that they get no respect. I also don't agree that a programmer would be happier running an fast food joint. Finally, I don't even agree that using programming in another profession as a "secret weapon" is necessarily going to be interesting. For instance, if medical records were all in a portable format, we could do all sorts of interesting analysis on them. However, there's about a decade of boring and painful 1970s style database programming needed before that's even possible.


It's not about being "the lab's IT guy", writing content management systems for a pharmaceutical company, or parsing medical records. This is just another boring programming job.

Some real life examples. I know a social science university teacher whose undergrads are dabbling in statistical and field data-entry software, and it is getting them into amazing projects. Another example: a friend, comp-sci grad, moved to linguistics and is now a rockstar, researching natural language parsers, big data and statistics.

They're social scientists/linguists undergrads first, programmers second, but programming plays a vital role in their academic career.

They're social scientists/linguists undergrads first, programmers second, but programming plays a vital role in their academic career.

This is only because of the sad state of education where programming is this incredibly rare black magic that less than 1% of the people in your field know. (Mathematicians and Physicists obviously excluded.)

But this is changing, it has not been the case in physics since for ever, and it soon won't be the case in the softer sciences either. And when everybody is trained with at least a basic ability to program, then your super advantage is gone.

when everybody is trained with at least a basic ability to program, then your super advantage is gone

Yes, but like Math, not everybody can be trained in it. People either get math or they don't. Everybody has to take calculus to become a scientist or a doctor but most people never really get it and forget it shortly after taking the classes. I imagine the same will happen with programming: there will be a few required classes for a basic science education, but it will be lost on most people. Broader exposure will be good, but it won't magically give all scientists the ability to code.

I think you're overestimating the difficulty of programming.

Let's face it, there's a hell of a lot of moderately bright twelve-year-olds who know how to program adequately well.

There are thousands of 12 year olds who can really program.

But: that's still incredibly rare.

And: a top-.5% twelve year old being able to do something hardly means it's usual or unimpressive for an adult.

Yes, but like Math, not everybody can be trained in it. People either get math or they don't.

I refuse to believe this.

There may be some very tiny minority that truly is genetically unable to get math. But for everyone else I believe it is merely difficult. Education is the problem, not genetics.

1. Take this problem (with working-age Americans/First-world westerners):

2. Add 600 million Indians, 500 MM Chinese, 110 MM Americans, 100 MM Indonesians, 80+ MM Brazilians, and 40+ MM Russians under the age of 25 [1].

3. Mix thoroughly in your Internet's blender of culture and ethics.

4. Vigorously shake world economic dynamics, then allow 10 years to settle.

5. Voilà!

[1] Population data from Wolframalpha.

I am constantly worried about this. We (as software developers) are in a time where the ability to code is scarce, and very valuable. But, at some point in time so was being a carpenter, or a toolmaker, or any other skilled profession whose value over time has diminished. In 5 or 10 years, the sole ability to code will probably diminish in value, become more of a commodity, easier to learn, and maybe even become a low-end profession.

However, the ability to create a product from scratch, using programming as your toolkit, will always remain valuable. Focus on that - using programming as a means to an end of creating useful products - and you can't be marginalized by a glut of programmers.

Elance has been sending jobs to the UAE for a decade and developers still make above median wage in the USA.

Suppose the labour market floods with a bunch of newly skilled programmers. HN folks will still have years of experience on those who just finished Learn Python the Hard Way. And: even post this book, there is still a huge barrier to learn basic programming.

Experienced programmers might even like working in a world where more people can code. Imagine if your typical Design Client From Hell could do basic CSS and tweak reds for him/herself.

Hey, but my field is computer science!!! ;D

But to be honest, programming isn't black magic here. Not in an university. Music majors have to learn CSound, PureData and Max/MSP. Visual artists need Processing and Quartz Composer. Architects here have programming on the first semester (some of them wrote some badass Blender scripts in python). And that's just the ones I know.

Oh, and since I mentioned music software, a good portion of the indie audio-plugin community (the ones that gather around www.kvr-audio.com) is made of musicians, ex-musicians and the sort. Ableton Live (a game-changer in music software) was started by a german duo called Monolake.

I believe Zed's point is that there's a lot of potential for programmers outside of computer science and corporate software. Domain knowledge can lead to amazing things.

Programming plus domain knowledge is the killer combination. Programmers (or IT) got no respect from "business" people (finance, biologists, doctors, etc). They don't understand the difficulty of programming and think you are replaceable commodity.

But if you have the domain knowledge and the programming skill, you can turn the field upside down. Automate the jobs done by "business" people and commoditize them.

> Programmers (or IT) got no respect from "business" people (finance, biologists, doctors, etc). They don't understand the difficulty of programming and think you are replaceable commodity.

The inverse is also (probably even more-so IME) true.

> But if you have the domain knowledge and the programming skill, you can turn the field upside down. Automate the jobs done by "business" people and commoditize them.

Case in point. ;-)

Don't underestimate what you are doing though. Just because it's not super fun or interesting doesn't mean it's by any means trivial.

I looked for over a year for a job that I could love after I graduated with a BS in Applied Physics (and a ton of research experience) that would pay the bills, and I ended up mostly working on a pipelined batch processing framework, and web and database stuff, but at a DoE lab supporting physics experiments. It's a happy medium for me, I'm still around physics, I'm still hearing how people do the interesting things, and occasionally I get to drop back down into "find the novel mathematical way to solver this" mode.

Of course it's easy to be a quant and make money making rich people richer, and maybe it is glamorous, and many people prefer glamour, but glamour never cured anybody.

Hmm, you really got a problem with this don't you?


There you are on reddit, saying the same thing, and ignoring the fact that you're confounding your experience as a Biology postdoc with you use of code. Hopefully, as a scientist you know what confounding is. :-)

P.S. I'm the author.

EDIT: point at the exact comment.

It was really interesting for me to look at all of the different directions me and my fellow students took after completing our CS degrees. I always joke that I 'sold out' with my programming skills for going to work at a news/media company to build their websites, whereas a couple of the guys a I know are doing a much more honourable thing by working in Biology and Space Tech.

I think it's unquestionable that they are the ones who are deserving of more respect, but I still think that it's not just our jobs that define how well we've used our programming skills. We're always hacking away on our own little projects, and hopefully carving our own paths, creating useful software along the way (something you excel in, Zed). I think that having the drive to do this commands more respect than any specific career choice.

Have you worked those other fields? It's something I've thought about, trying to bring more automation to the wetlab world, but I'm not sure my advances would be greeted kindly.

I can confirm that post-docs have it harder than the staff that use programming as a tool to 'route-around them'

As someone with a math background who came into programming this statement is very true. It's ironic that I've worked on missile defense, NASA satellite, and UAV routing software only to see my coworkers dream of jobs with webpages or distributed systems. Science work _is_ interesting until you've done it for a few years. Then, it's just another application of the same thing you did last, in another context.

And by the way, you ever see the kind of code scientists write? You'd burn your eyes out. No, it's not "good code," it's "good science." There's a difference. The humble ones nod their head and say "I don't understand the difference." Good luck finding a company like that (www.aer.com <- John Baldwin's group, they're hiring and have awesome management.)

his is a nice sentiment but as someone who has been a programmer for biology and medical research, it's not true. It's just like any other mediocre programming job,

I think what he's saying is that a biologist that can program can vastly increase their output. He's not saying that being a programmer that works under biologists in a biology lab is better than being a programmer in a tech company.

And I agree. Being able to hack scripts for number crunching, quick simulations, and so on is vastly useful when you're not working as a programmer.

Agree. I found that working as a programmer with a bunch of biologists, you're somehow become the "support staff", the "computer guy". Sometimes, a "cost center".

When you're working as a programmer in a technology company, you're creating "core product". It's quite a different feeling.

I agree as well. That quote reads as a case of "grass is greener on the other side." People who make Augmented Reality software get respect. People who make accounting software don't.

To generalize, doing interesting things with user interface brings respect. Behind the scenes and office software doesn't. (and I mean strictly outside our "techie" circles)

Yea, I second that. Although I'd say that if you could have your cake and eat it too, it's the best.

Guys like David Shaw who funded their own trading firm to get the bitcoinz so that they could work on fun stuff like DE Shaw Research.

Or even the programmer that eventually published a Bioinformatics paper in Nature without any official affiliation, that just started by poking his head into UT labs; can't remember his name but probably pissed off all of the post-doc indentured servants who slaved away for years for minimum wage and in comes Mr.Programmer to take away their thunder.

But yea, speaking from experience working for Big Pharma IT has both good and bad. Low stress, good stability and decent pay but in no ways does it match the pace, (potential) pay-out of working at a prop desk/brokerage.

Once upon a time, I played poker for a living. The most important thing I learned was that the least important factor in how much I earned was my skill at poker. The most important skill was table selection, my decisions over which games to get involved in and who to sit next to. A close second was managing my resources, making sure I was playing within my financial and emotional means.

If you want to be world champion or mix it up with the legends in Bobby's Room, you need to be a phenomenal player, but being great at poker won't stop you from being broke and miserable. Everyone in poker knows a 'That Guy', a bona fide poker genius who keeps fucking their life up because they care too much about the game. The archetypal example is Stu Ungar; He won three world championships and over $30 million, but died aged 45, penniless and alone in a crappy motel because he just couldn't get his life in order.

Like poker, software is intrinsically meaningful only as an intellectual puzzle. It can be fascinating and beautiful and it can send you mad. Fall into the trap of believing that poker is a worthwhile pursuit of itself and you end up in the trap - living out of your car or on the crappy end of the Vegas strip, some weeks a millionaire, some weeks a bankrupt. You see them come and go, the bright-eyed but slowly dimming college dropouts who could be living the life of Riley if only they knew something outside of poker, if only they stopped trying to beat the hardest games for the sake of it.

Your usefulness as a developer is only indirectly related to your ability to code. There are bona fide geniuses working in poverty and obscurity, there are utterly mediocre programmers doing amazingly useful and important work. Github is overflowing with brilliant, painstaking solutions to problems that just don't matter. Your most important skill as a developer is choosing what to work on. It doesn't matter how lousy a programmer you are, you can still transform an industry by simple merit of being the first person to seriously write software for it. Don't spend good years of your life writing the next big social network or yet another bloody blogging engine. Don't be That Guy.

I seldom write any reply on hacker news. But this time I feel I have something to say.

The fundamental question behind all these arguing is, what can be considered useful? In the other word, what we do, couldn't be considered a waste of life?

Philosophers have been arguing about this for 2000 thousand years. So I doubt there's going to an absolutely correct answer in near future. What I can offer, is just my personal choice.

Whether we like it or not, whatever we do, whatever we've build, good or evil, will vanish sooner or later. The human beings will extinct, the earth will become quite, the sun will extinguish. It's just matter of time. If nothing we do could make any sense in the long term, how can we consider something useful not?

Like any living things on this world, we, humans, are born to have many instincts, like to survive, to reproduce, to play. And when we don't obey these inner demands, we feel unhappy. So we eat, drink, sleep, f, and make money. However, that's because what we do is useful, or important, or has any meaning behind them.

Some people might feel happier when they can attain something that are useful* for others, which usually bring them more money, food, prestige, and many other things. But some might be satisfied enough by resolving some intelligent puzzles. As long as people don't end up in a crappy motel because they couldn't get their life in order, I guess these 2 attitudes towards life are both OK.

Although I like the grandparent's anecdote and up-voted him, I would have made the same argument as you did against his point. It's just confusing and therefore unsatisfactory to use usefulness as a tool to decide how to spend your life.

The reason why one shouldn't be That Guy is not because spending all your life playing Poker, or doing Maths, or playing Chess (as in the case of Bobby Fischer) just for the sake of it doesn't benefit others, but because when your level of obsession reaches a certain point, the point of diminishing returns, you just get confused -- you can't tell whether you are still getting pleasure doing it anymore. You've been off-balanced with other parts of life for too long that you've lost the ability to approach your passion purely from intellectual curiosity, as you used to.

So the bottom line is, solving intelligent puzzles is fun, as long as you don't abuse it.

> Whether we like it or not, whatever we do, whatever we've build, good or evil, will vanish sooner or later. The human beings will extinct, the earth will become quite, the sun will extinguish. It's just matter of time. If nothing we do could make any sense in the long term, how can we consider something useful not?

Barring a humanity-friendly intelligence explosion event, of course. (I'll leave the Googling to you.)

Not that I'm disagreeing with you when it comes to being a professional developer, and neither am I equating programming with art, but you've just argued against being an artist and creating art for art's sake.

There is nothing inherently wrong with pursuing something out of pure passion. If we all thought like that, if all of us religiously avoided being "That Guy", the world would be a much less interesting place. Some of the people I admire the most, who's work has inspired and enriched my life have spend all of their lives being "That Guy".

That was insightful - Thank you.

You know, if we were standing around at an artist's gallery opening, or at a home having dinner and discussion, or just walking down the sidewalk in the flesh-and-blood world, that comment would have been considered a small, but useful and positive contribution to the discussion. In fact, you'd probably know that F_J_H is a successful business owner with 50 employees, so you'd note that that's how successful people behave and try to emulate him. But here, since there's "upvotes", it appears to have gotten a -1 (based on the shade of gray text).

And I want to take the opportunity to say that I think comments like this don't merit negativity. Treat them like you'd treat them in the world: polite comment, move on. It's like walking down the road and there's a purple thistle flower in all its spiny glory. Purple. Pretty. Move on. You don't have to go stamping it out just because there's a social belief that lawns should only have grass.

Seems like a simple matter of signal to noise ratio to me. That single comment by itself does no real harm, but if it's not discouraged, the practice will proliferate.

The situations you cite do not include the potential for noise overwhelming the signal, so they are not analogous.

I know that a downvote can seem like a judgment on the person, but it's more a judgment on the action, and it can be instructive if taken that way.

[Edit: Not that I've been here that long, but that's how I understand the phenomenon.]

As someone who has been here long, I can say for certain that HN would only benefit from politeness similar to F_J_H.

Consider me enlightened. Thanks.

Sorry. It's definitely not my place to "enlighten" you. I don't want to be that kind of person.

I just am compelled to speak up for what I believe to be right. I didn't mean to sound like I was attacking your opinion, so in retrospect, I shouldn't be saying things like "I can say with absolute certainty..." I don't know anything for certain.

I just believe that the world is a nice place when people can simply say nice things to each other every once in awhile.

this whole branch was useful to me, I now know that F_J_H is very successful and polite. context is one of the reasons I am here.

My guess is that I've been coding for longer than Zed, and I don't remember _ever_ thinking it was boring, and a lot of the stuff he says might be true for Zed, it sure as hell isn't true for the rest of us:

"Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier, you could actually just go run a fast food joint."

If this is actually true for you, and you can actually code, you really need to be making brighter career moves.

"People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines."

Well, maybe. But this sounds like random riffing from someone who hasn't held a senior, stable position in an actual tech company nor worked as a programmer in any of the long list of disciplines. I've met plenty of people who were the duty programmer in a non-CS area who were treated like shit.

But what would I know? At around the time I was messing around with software pipelined SIMD string and pattern matchers, Zed was pursuing the real business of a Working Programmer, which is to say, writing rants and offering to rent a boxing ring to fight people who made physical threats to him (which, I admit, is kinda cool).

I definitely got a different, more inspiring read out of this post. I'd sum it up as "programming for the point of programming will eventually reach a local maximum of enjoyment; focus instead on the creative potential and possible reach of the art programming has enabled you to create." In other words, "make something people want", and from that you will really receive fulfillment.

The true, lasting satisfaction that you'll look back on 20 years from now isn't the number of programming languages you've learned, but what you've created and the impact those creations have had on those who have used them.

You'll find that this part of the book gets interpreted by different people in different ways. Some folks, usually those who've invested their life in only programming, take it offensively and assume I'm insulting them. Others who are beginners or maybe having a hard time with programming find it inspiring. Still others just find it weird.

To each their own.

Your post reminds me to time when I did my first freelance project. I want to create software/applications that people can use, and can make their life easier.

Thank you Zed.

Programming like writing novels or painting is something you usually do because you love and enjoy but becomes boring when is your 9-5 job.

don't let Zed's online persona (they ZSFA type one) fool you. He's actually a brilliant coder, has done all the things that it sounds like he hasn't and is one of those who I think has actually given more to the community than the "community" has ever given him (I'm making reference to the phrase "give back to the community")

Sure, he has a fairly unapologetic and somewhat confrontational nature (much like DHH) that seem to irk people, but (also like DHH) his walk matches or exceeds his talk.

Oh, fanboys like you are the worst.

His online persona has one truth - he spits into communities.

And to compare DHH with Zed is unfair to DHH. DHH never made such idiotic rants like Zed.

Hi shevegen,

Like you I dislike the way Zed has a tendency to group all Ruby people together and target them as a whole, when in reality his complaints would be better directed at a specific subset. I'm a Ruby dev (not a Rails one) and it stings when Zed fires his literary shotgun at Rails, and Ruby, standing next to Rails also gets hit.

But... this isn't about Zed being a dick. I was pointing out that there's also a massive amount of good stuff he's done as well. I'm not a fanboy of his (Zed has fanboys?) but I do have a fair bit of respect for his ability and what he has done, and his writing does nothing to diminish the quality of his work.

The comparison with DHH I thought was positive. DHH has strong opinions and (it appears) an ego to match, but can back it up with code.

> My guess is that I've been coding for longer than Zed, and I don't remember _ever_ thinking it was boring

I didn't say programming was boring, I said the profession was boring.

It's a good thing I didn't write the book for you, since you seem to be unable to read.

From your article: "I have been programming for a very long time. So long that it is incredibly boring to me."

So, to continue rhapsodizing to each other about our inabilities, you're apparently unable to read _your_ _own_ _writing_. You may be remembering this sentence instead, which you also wrote: "Programming as a profession is only moderately interesting."

No, I'm referring to what you quoted:

> Programming as a profession is only moderately interesting.

Direct quote you pulled from my book and then commented on. The quote you just referenced is just what I think as my personal opinion, not a statement of fact.

So yes, you can't read, especially when you quote the material.

Sigh. You appear to be in a selective parsing frenzy. Have fun with that.

You attempting to draw Big Important Distinctions between the bits of that particular passage that are 'personal opinion' and 'statement of fact' is at least entertaining, given that the whole piece is _all_ pure opinion.

Can you two just get a room?

I think this subthread is providing a fine counterexample to the idea that hiding comment scores magically improves the quality of discussion on HN.

I don't think even the wildest optimist would expect hiding comment scores to tame Zed Shaw.

Though there is some wisdom in what Zed says here, I am getting quite tired of the 'actually, programming itself (especially as a job) is boring' meme, as if saying that marks you out as some sort of world-weary but insightful practitioner of the arts who has somehow risen above the mere trivial and seen it for the dull plod it really is.

Please stop telling me what I think + feel about my craft - you feel that way, you want to do it down, fine, but don't act as if it is some sort of immutable truth, especially when you are talking to people new to the craft which I think is quite unethical, frankly. Why assume your own experience/opinion is somehow necessarily correct and ought to be dictated as hard-won truths, when your entire schtick is 'dissecting others' logic'?

No matter how many times I read these sorts of things, nothing changes the fact that I find programming a joy, the whole thing of being able to render machines of such incredible power + complexity to do stuff at all a miracle and know it is something I want to spend as much time doing as I can for the rest of my life - no jaded naysayer, not even an 'internet famous' one can change my personal experience of the thing, and I am absolutely nowhere, a nobody in a CRUD job, and not even that good of a programmer, but my passion and love for it remains.

A funny thing about this is that no matter what pursuit you can think of, there are always those in it who say 'actually the reality of this is horrible', people who take that attitude exist everywhere in every field, no matter how wonderful and joyous it seems and often actually is. I think that's something to contemplate - if it were all true then nothing would be worth pursuing.

There is a lot of bullshit spoken about programming, lots of crap aspects to the reality of it, lots of crap aspects of dealing with other people in trying to get things done, but people seriously - this thing is amazing, let's be grateful and celebrate it for once, please.

If you read what I actually wrote, instead of what you wanted to hear, you'd see that I said the profession is boring. Why would I write a book teaching people programming if I thought it was boring? Coding is awesome fun and my favorite thing, but damn the job is really super boring.

With all due respect, I did read TFA -

"I have been programming for a very long time. So long that it is incredibly boring to me."

But you do of course later say:

"This doesn't mean I think programming is boring, or that you will think it's boring, only that I find it uninteresting at this point in my journey."

And, of course:-

"Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier, you could actually just go run a fast food joint."

To me that all seems a little contradictory, but ultimately seems to say to me 'actually, after all these years I've seen through all the naive bullshit and realised that it is, in fact, rather boring'.

There are obviously crap and boring aspects to any activity, but how on earth can you say the act of doing something is interesting, but the profession itself is not? Do you mean to say that everything in the profession other than the programming is boring? Well I'd disagree with that too, though less emphatically.

You know, half the reason Zed Shaw is so well known is not just that he is a prolific coder, but that he is quite an excellent writer as well.

Well done Zed. I always appreciate what you write.

Well, other than that he's completely mistaken about the career advice he offers here. I'd be very curious to know if he's ever been the highly-respected programmer in a science lab, or personally knows anyone who is. My science friends tell me the job doesn't exist; any code that needs writing, a grad student will do it sufficiently well (on top of their lab work) for no more money.

I’m not brave enough to speak in extremes/absolutes like "completely wrong" on a topic like this.

My experience aligns with his advice. As a finance student, I was selected for a research project because of my database/SQL knowledge, which got me mention in the Journal of Finance when my prof. was published, and which later paid unexpected dividends. Later, knowing to code in a finance/analyst job ultimately positioned me for a startup that has left me much better off financially than if I had stayed in my job. I also have a friend in the pharma research field that did very well because he could write code.

(Note that it’s not always the money that is the pay off. Sometimes it is an opportunity that leads to other opportunities that would have never been open to you had you not been able to code, as in my case. )

So, in my experience his advice has proven to be right on.

But was he a pharmacist that could code, or a programmer who showed up one day and said, hey, need any programs?

The former.

So wrong.

I worked in academia for a decade and the code written by Hgrad students is a problem... but 95% of faculty are so clueless about computers they have no idea. And decent grad students know it.

I've worked in physics and chemistry and I've seen this code... It is like a ten year old with cheez whiz sealing your bathroom. It works for a while, but it is not professional code. Smart domain experts know they are just barely passing with respect to coding solutions in their field,

Then why don't professors hire contractors to do programming? Because grad student code is "good enough".

A kinder interpretation is that he meant: be an expert in that field who can also code.

Which is probably pretty true already, much as everyone can use a word processor or spreadsheet. Programming to get a job done is not that hard, especially with languages like python. Over time, the tools will get even easier.

Being a tool-maker seems to have some mileage left - but that will also be made easier over time.

EDIT it's hard to predict what will happen, but for several decades, programmers earned above average wages. Cool... but weird. I saw a great explanation, that during that time, not everyone who wanted a computer had one, and each transition (mainframe/mini/workstation/PC) increased the market size, and therefore the demand for software. Higher demand --> higher wages. But according to this explanation, PCs maxed out their market around the year 2000. While this mightn't be strictly true, as the third world is unconquered, and people buy second and third devices (e.g. smart phones), the rate of increase has slowed.

Those above average wages will never return. There will just be average wages. But if you like programming, that's OK.

What I believe he means is that since code is the tool, to code within the programming industry is laboring on the tools themselves, but to code to solve the specific problems of another domain is applying the tools.

Ability to code in another domain gives you leverage for work done IN that domain. The caveat is that knowing ONLY how to code without working knowledge of the domain itself will not get you very far.

Well, good thing you gave up rather than using code to solve hard problems other scientists in your field can't solve.

"People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines."

Are you talking about anything in particular when you mention that? An example would really help your case here.

This jibes with my experience. Once upon a time I know a lot of grad students in the sciences, once they found out I was a professional programmer the fun was effectively over due to a barrage of programming questions. They all hacked on some sort of code.

Thanks, I really do appreciate that.

>Finally, I will say that learning to create software changes you and makes you different.

This is so very true in my experience. The way I think has fundamentally changed since programming became the primary professional/pastime activity in my life about two years ago. I'm 32, and everything from my politics to my decisions about where to live has been effected. (Whether I'm using the proper choice between 'effect'/'affect' is still a challenge...)

Programming has taught me more about critical thinking in two years than I learned in the previous 30. I can't stand many of the things I used to because of it, but thoroughly love many of the things I used to find painfully boring.

Seymore Papert, in Mindstorms:

"By deliberately learning to imitate mechanical thinking, the learner becomes able to articulate what mechanical thinking is and what it is not. The exercise can lead to greater confidence about the ability to choose a cognitive style that suits the problem. Analysis of "mechanical thinking" and how it is different from other kinds and practice with problem analysis can result in a new degree of intellectual sophistication. By providing a very concrete down-to-earth model of a particular style of thinking, work with the computer can make it easier to understand that there is such a thing as a "style of thinking". And giving children the opportunity to choose one style or another provides an opportunity to develop the skill necessary to choose between styles. Thus instead of inducing mechanical thinking, contact with computers could turn out to be the best conceivable antidote to it. And for me what is the most important in this is that through these experiences these children would be serving their apprenticeships as epistemologists, that is to say learning to think articulately about thinking."


Astounding; this quote nails my experience. Learning to program de-programmed the mechanical, "proceed until error" non-thinking conditioning that plagued my entire adult life.

Superb, that's going straight into my text file of wise words.

Effecting = Doing Affecting = Being done to

You effect change and change affects you.

Something was done to your decisions so the right word is "affected".

There are a lot of non-native-English HN participants, and I think this sort of language pedantry 1) accomplishes nothing, as OP will likely still use the wrong word, and 2) discourages those who lack confidence in their language skills from posting what may be very insightful comments.

I wasn't trying to being pedantic (although apparently it came off that way). I was trying to offer some genuine help to someone. I think that's in the spirit of HN.

You can only learn when people tell you what the right word is. We aren't born with a magic understanding of English. I appreciate it when people help me and in this case it seemed like the parent poster was genuinely interested because he noted that he didn't know which one to use.

I actually found a3camero's post informative! I am a native English speaker and I have never had any trouble differentiating between "effect" and "affect", but had never seen it written down as a rule. One of the fascinating things about language is that we "know" an awful lot of grammar rules without actually being able to explain how they work. Another example is the Spanish verbs "ser" and "estar", which both translate as "to be". As a (bilingual) native speaker of Spanish, I use them correctly, but it wasn't until I was in college and trying to help a friend with his Spanish class that I came across the rule that governs their use.

I think it's very easy to mistake "informative" for pedantic. In this case, the OP made it clear that he was unsure whether the word was correct and a3camero offered not just a correction, but a succinct explanation. I wish people would correct my grammar like that more often.

Thanks for the kind words. Appreciate it.

English is a language I'm always learning more about too!

I disagree. There was no condescending tone, and it seemed like a genuine attempt at helping someone learn the difference between affect and effect. I would label this helpful, not pedantic.

In spanish effect = efectuar, affect = afectar, a child could tell the difference between both, you're trying to make some effect but it doesn't affect me.

Ah, I see that my comment came below some other ones but when I was writing it there weren't any others. Might explain the downvoting...

(Whether I'm using the proper choice between 'effect'/'affect' is still a challenge...)

Somehow....deep down inside I think you knew you wrote it wrong, but that was the "effect" you were going for wasn't it! ;)

Could you give some examples of how programming has taught you about critical thinking?

I lost my job in PR in February. Instead of doing the knee getting another job immediately as my family urged me to do -- I am a single father after all -- I realized I'd make more money in the long term by living on the ~$5k I had saved up and free fall until school began again in the fall, at which point I'd have GI Bill + student loan money, and we could live off ramen.

During the free fall period I focused like a laser on programming and decided that that job was the last thing I'd ever do in PR or marketing. Lo and behold the hard work paid off when I got an internship last month. Pay isn't great but it's better than the $0 I was getting paid to hack at home. (Plus I do actual programming, not coffee-fetching and what have you).

What else... it's so many little things. It's made me be truer to principles which had been loosely held previously, i.e. drug legalization (legalize it all, along with prostitution and all that), religion (strict atheist now), politics (libertarian, obviously). Not that becoming a programmer made me more liberal, it's just that it forced me to evaluate some contradictory stances and come down on one side or another. It made me more honest with myself.

This is probably all pretty squishy stuff and not concrete examples you were looking for. But my life is going way way better than it ever has, and I credit the time and energy I've spent educating myself to be a programmer, and the things I've learned along the way, with that improvement.

Thanks for sharing that. I've been thinking on and off about moving programming from a hobby to full-time job and it's nice to see someone who took the plunge.

I'm curious to know if it was difficult to find an internship. Typically, companies are looking for people out of college and I would expect them to dismiss older candidates pretty fast unless you have a strong cover letter.

Good luck with the new endeavor!

I dunno about the age thing. I'm middle aged in programming years, and had no issues landing a job at the only Python/Django biz that I know of in central Indiana. I started attending local python & other meetups, and connections flowed naturally from there. That's how I got this. I poured a lot of time and energy into this pursuit, and it paid off.

It has been the purest, most gratifying & deeply rewarding transformation of my life, ahead even of 10 years of service as a Marine. Why? Because every second and calorie I poured into self-education about programming was out of pure passion, not because I was contractually obligated or faced court martial otherwise.

Programming is the most perfect creative outlet for me, and very day im absolutely giddy about going to work and am a little disappointed when it's quitting time. Achievement unlocked. If you want to do it then do it.

effect/affect is simple: effect is a noun and affect is a verb. when you affect something, it causes an effect :)

Alas, "effect" is also a transitive verb: you can effect change, i.e. cause it to occur.

And "affect" is also a noun, although rarely used.

  affect: the conscious subjective aspect of an emotion considered apart from bodily
          changes; also : a set of observable manifestations of a
          subjectively experienced emotion
          <patients … showed perfectly normal reactions and affects — Oliver Sacks>

But it's still a good rule of thumb.

At least this usage of affect carries a different pronunciation. The emphasis is on the first syllable here, rather than the second, making it SOUND like a different word than effect.

And alas, "affect" is also a noun.


The requirement for your argument is that the original poster of this side topic understands the differentiation between a noun and a verb.

Otherwise your generalization is aptly put.

Programming as an intellectual activity is the only art

Programming isn't an art.

Programming is a craft.

The difference is that you can use a craft to make art, but crafting isn't always artistic.

Let's not get over our heads and consider ourselves artists because we can code...

Oh, I'm so glad you, the one arbiter of all that is art, is able to correct our misunderstanding of the definition of "art".

The truth is, you can't define art, so in the same way I can use paint to paint my house, or use paint to create a portrait, I can use programming for art or just as a day job.

Finally, everything that requires skill has craft, even art.

while op is possibly being pedantic, aren't you agreeing with him?

shin_lao is suggesting that painting itself is not an art, but a craft. what you do with the paint defines whether or not it is art.

likewise, your code can create something menial the same way it can create something artful.

being able to program makes you no more of an artist than being able to put paint on a brush. whether or not being able to put paint on a brush makes you an artist, of course, is subjective. :)

I have no real idea what he's talking about, since like most pedants, what he talks about isn't really relevant to anyone but him.

>>Programming as an intellectual activity is the only art form that allows you to create interactive art.

Not true! Live performances can be plenty interactive. Which doesn't devalue programming--you can do things in software you actually can't do anywhere else--but this was perhaps poorly thought out.

The word art, in the past, was used in the same way that we, today, use craft. So, it's not quite that simple.


But let's avoid an argument on the semantics of aesthetics and just leave it at that.

And it still is (X is practising his art).

Or the commonly misunderstood 'state of the art' which appears to mean 'amazing' but actually means 'current best practice in this craft'.

I don't disagree with you, but painting, sculpting, playing an instrument, writing, etc, all crafts, by that definition.

For musical instruments, at least, there are clearly defined technical exercises with no artistic value. They are usually necessary, but not sufficient, to be able to perform artistically.

This is spot-on, and is a very succinct way to express it. Thank you.

Please, tell me what my words mean.

Some good points buried among juvenile posturing, I guess the "old" part must be irony. Would you take programming language advice from someone who has learned the language in "a day or a week"? I realize the point is the language doesn't really matter but statements like that and the general tenor of the post don't inspire me.

No, most languages are isomorphic up to semantics. the outliers today are the logic languages, the HM typed languages and the macro languages.

javascript, qbasic, java, c++, c, c#, ruby, python, perl, they are all very similar, some with their knobs exposed, some without, some with bad environments, some with better, some with closures, some without.

Once you grok the inner similarity of software, it's just not very interesting to learn new languages.

"At the time that I wrote this book I knew about 20 programming languages and could learn new ones in about a day to a week depending on how weird they were."

He's saying the entire range is a day to a week. The ones that are isomorphic would take a day or two, I agree.

But he's saying the ones that are not isomorphic also take just up to a week, and according to other discussions with him, it's not because he's already an expert in those other types of languages.

I agree with you.

However, I think you're using "isomorphic up to X" incorrectly. Perhaps I don't know what you mean by "semantics", though.

As an old programmer myself, who has learned many languages over the years, and written programs for pay in most of them, learning languages in a day or week is not at all unusual, or difficult. Especially after learning assembly for a few different machines, with widely different instruction set architectures.

Take a look at Agda (http://wiki.portal.chalmers.se/agda/pmwiki.php) and tell me if you could "learn it in a week".

It probably depends on how we are defining "learned". Does it mean memorizing all the functions in language x's stdlib? Is it learning the grammar of the language? Is it coding a project of x many lines of code? Have you learned a language when you can write a compiler / interpreter for that language?

The concept of "learning" a language is so hopelessly ambiguous it has almost no meaning to me.

I would say that I know enough of many languages to use them professionally, but I have deep knowledge of very few.

I believe that "learned" means "learned enough to work professionally with".

Deep knowledge of a language is always very desired, but on the real world very few programmers have it, or even need it. (Not to mention that "deep knowledge" is a very abstract concept on its own too, lol)

Not every professional developer can, for example, write a framework or a compiler from scratch in their language of choice, but they're still productive and fundamental to their team...

1. It's not a "post", it's a single chapter in a whole book http://learnpythonthehardway.org/book/ which I'm guessing you won't read because you clearly can't read.

2. I am old compared to a lot of programmers, but yes it was kind of a joke. There's several exercises where people know my age.

3. It's a good thing you're not my target audience. It's a lot harder for me to write in 2nd person passive voice like you're used to reading in all those academic papers you devour.

Zed, thanks for replying - I had heard of your book and actually quite like the style. Much better than the academic papers I usually devour, I just didn't really think that last chapter was very good.

By the way, I enjoyed track 2 of week 2 of your "random improv".

Quick, somebody called to question the effectiveness of your statements when you lace them with arrogant statements! Attack them!

When you get to the point where you understand that all programming languages are just implementations of turing machines (some more limited than others), and have much experience with a few languages, I'd say yes, you can give quite good advice regardless of the language, even if you've never once used it.

There's a phrase for this fallacy: Turing tarpit

That's just false, though.

If you only measure the computational power of programming languages, then it is mostly equivalent (though there are some languages which are not Turing-complete, because they have proofs of termination).

If you also measure other properties, like what kinds of guarantees your language gives you, then they differ even more.

I have to admit, I came into this discussion in support of the chapter and the author (http://news.ycombinator.com/item?id=2664502 for example), but after reading Zed's replies I'm turned off by his elitist replies, such as on multiple occasions telling people that they "can't read".

Clearly there's a lot of support (443 votes and counting), but resorting to this sort of insulting just doesn't lend anything to the conversation. And I think it's a worthwhile conversation to be had.

> Programming as an intellectual activity is the only art form that allows you to create interactive art.

What about oral storytelling? Or just (re)telling jokes? Improv and related performing arts? Stage magicians? Mimes? Community murals?

While the same thoughts crossed my mind, I think he probably meant art in the age of mechanical reproduction.

Still, programming affords a combination of the widest reach and lowest barrier to entry: it rarely requires the artist, performer(s), or specific location(s) to be consumed as a medium.

I agree with what he meant, but I dislike his use of the word "only." I hate to be really anal, but that kind of thing always sticks out in writing to me.

"Hard distinctions make bad philosophy." as John McCarthy (of Lisp and AI fame) would say.

I think his statement is incredibly short-sighted. Has he never been to an art museum with interactive sculpture, etc? Perhaps he could hedge on the 'degree' of interactivity offered, but with such an emphatic 'only', I think its more likely that he is simply wrong.

Ah, pedantry, the pinnacle of all evaluations of a single statement one could make. Next you should criticize how the book doesn't cover decorator generators that use @wrap or how it doesn't cover discrete mathematics. That'll be very effective.

If he thinks he can learn any programming language in a week, he's still ignorant about programming languages.

I challenge his knowledge of/about Haskell, Agda, etc.

Also, I am sure there are plenty of "old programmers" who are still excited about programming languages, and think they matter.

I've gone through http://learnyouahaskell.com/ and it wasn't too hard. About the only difficulty is the pointless and contradictory jargon like "point free" or the hand-waving about Monads and how they violate their purely functional execution model. Never heard of Agda, but then I sort of don't care.

Obviously, there are old programmers who are into programming languages, but they usually sit around writing crappy programming languages that nobody can use because they never ask anyone if their programming languages are usable. You know, kind of like Haskell.

The mark of whether you "know" a programming language isn't whether you've gone through a tutorial; it's whether you can write useful programs in that language.

Uh yeah, there's this thing called experience which allows me to learn a language well enough to realize it's a total load of bullshit. Haskell was exactly like that.

Zed, why do you think Haskell is spoken of so highly if it's so crap? Or are you being hyperbolic? I'm not in a position to judge, but when Peter Thiel gives a 19-year-old $100k to do a Haskell project, that gets my attention.

Really nice effort on this book, I wish I could teleport it back in time to my past self.

> About the only difficulty is the pointless and contradictory jargon like "point free"

It isn't pointless, and it isn't contradictory. If you think it's contradictory, then you don't know what the word "point" means in that context.

It is a useful way to describe the style of functions.

  f x = postProcess (businessLogic (foo (preProcess data)))
is a different style than:

  f = postProcess . businessLogic . foo . preProcess
It is useful to have words to describe the two styles.

> or the hand-waving about Monads and how they violate their purely functional execution model

What? You obviously weren't listening. Monads do not violate the pure functional execution model. Monads are used, amongst many other things, to functionally compose non-pure program specifications.

> Never heard of Agda, but then I sort of don't care.

Some of us care about the forefront of research about static guarantees. Agda is a language that makes it possible to guarantee arbitrary properties (of our choosing!) about our code. If you are not excited about such guarantees, then you are clearly not a PL guy, but those of us who are interesting in PL research find it fascinating.

> Obviously, there are old programmers who are into programming languages, but they usually sit around writing crappy programming languages that nobody can use because they never ask anyone if their programming languages are usable. You know, kind of like Haskell.

I sense your frustration and difficulty of picking up Haskell. Maybe if you give it a bit more time, you could understand it.

Zed, I am also trying to learn Haskell and I must admit I have a hard time with it, so I am kind off jealous about you finding it not too hard and having the ability to learn so fast. Even though I used over 5 languages in the last 20 years, for me Haskell is so different and difficult, that I find myself put back to when I was 16 and learned the first language - C on MS-DOS. Still I find Haskell attractive and I hope I will be able to "tame" it. I am facing difficulties with all the terminology which seems strange.

I started with the book "Real World Haskell" (http://book.realworldhaskell.org/) which I find very good, but I got stuck after chapter 5. Then I discovered the Channel 9 lectures "Functional Programming Fundamentals" and I started to watch the videos. It helped me to grasp some of the terms and some of the beauty. But only at the 11th video (http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Gra...) I got kind of hooked. From this point on I started writing my own programs.

From every programming language I looked into so far I still find Haskell to be so different, unique and at the same time beautiful - nothing I had experienced since the first language that I learned.

"You know, kind of like Haskell."

Ow ow - come on now, there are definitely practical applications of Haskell. It just has a painful learning curve, but it's very elegant in the end.

Hey, I have to call it like I see it. I find Haskell very unusable and their base philosophy just doesn't jibe with what I know of actual software development or logic.

How much did you try to use Haskell before declaring it "unusable"?

Haskell is very different from other languages, which means your expertise in other languages doesn't translate. That makes it harder to start off, almost like learning programming from scratch. But if you encounter this and decide it is "unusable" then you are describing your own lack of expertise in the language as an objective property of the language itself.

Haskell has interesting advantages and disadvantages. It is already used successfully in many contexts. It is a joy to program in, and it's one of the languages where successful compilation actually means a whole lot (bugs that go through the compilation process uncaught are an order of magnitude more rare than in other compiled languages).

It has some useful tools not found elsewhere (hoogle type search, djinn, pl/unpl).

It performs extremely well and manages to be more expressive/concise than Python while still far exceeding it in performance.

It's a pretty impressive piece of design.

Or like python?

You missed the point of his article. I believe Zed has shown that his mind is perfectly capable of seeing and processing the macro picture. Whether that be language theory, software engineering, or whatever he puts his energies towards. I may not agree with some of his opinions but the volume and quality of his output is indeed impressive.

Haskell's type system _is_ complex, but so are most things that are looked upon with foreign eyes. Zed is known for a bit of hyperbole. Are programming languages exciting? Sure, probably at any age. That wasn't his point though. They're just a thing, a tool. To a novice this very well may be novel advice looking upon the rest of us chattering away about the next bit of cooltech on the horizon.

I hate the tool argument. Programming languages are as much a tool as mathematics or English. I think of them more as a method of communication, a way to express your thoughts and ideas. Not only that but they are executable and unambiguous (most of the time heh). A programming language not only has the power to allow you to express your thoughts, but even to even shape them.

The power of this field is in its infancy. There will be a day when "programming" as we call it is as natural part of the user experience of machines as browsing facebook might be today. In fact it will be expected, and products that do not allow this rich interaction from the user will be shunned. Programming will be second nature and humans will not desire it, nay they will demand it. It is akin to granting freedom to those subjected to slavery. It really changes ones entire world view.

But by dismissing these powerful constructs as mere simple tools this vision will never be realized.

This is the flaw in Zed's argument. Learning new languages may not have been valuable to him (which in reality I doubt) simply because he hasn't expanded enough into the areas less explored. There is so much room for innovation here that the journey hasn't even begun. He is writing off something so incredibly powerful and world shaping simply because he lacks the imagination to see it. The sad part is that he is inflicting this view on those new to the profession that may across his old "wisdom".

I appreciate your comment. I tend to have a lot of sympathy for the "programming as a tool" argument and forget the potential that programming languages ultimately have. Programming languages, just like any language, are a means of communicating ideas. As this becomes easier and more expressive it will revolutionize the field, many times over.

I think the real problem is that most languages that are made these days are just minuscule iterations over whats currently available. From that perspective there is little to no value in keeping up with whatever monstrosity some overeager researcher squeezes out of their head. But completely new paradigms, or new ways of doing old things, certain have much value; to the programmer learning it and to advancing the field.

Exercises in style do not make books (Raymond Queneau nonwithstanding). If you just try out a load of languages, learning what's possible but not doing anything with it, what's the point?

I don't think he is discouraging learning new stuff, looking at new techniques. What he is saying is that a solipsistic attitude about programming is a waste, and that resonates with me. I've seen many a time people who can make awesome demos of SLIME, have Haskell tricks up their sleeve, write languages on weekends, and yet ultimately do absolutely nothing. It's scholarly, for sure, but that's it.

To be fair, I agree that there's explorations to be done in this realm, but the sorts of explorations that create value on a visible scale tend to go hand in hand with some application. "ERLANG'S SO AWESOME" because its ingenuity meets reality quite rapidly, and you can build stuff with it. In a societal scale, that's the true value.

" There will be a day when "programming" ... is as natural part of the user experience of machines as browsing facebook might be today."

Are you serious? Like how everyone changes their own oil?

I don't see why this idea is so hard to grasp. With the current state of programming languages, definitely not. But I believe much more intuitive forms of programming languages will eventually be made such that your average intelligent user can accomplish non-trivial computation.

Programming languages are the computer analog to natural languages. The real problem is that most of our brains aren't wired for programming languages. If we can bridge that gap, that will completely revolutionize the way people interact with computers.

Yes I am very serious.

I got bored with programming so I started to break out into more mathy things like machine learning and computational linguistics. It's the best of both worlds.

I got bored with programming so I started studying guitar. Way more fun.

I would also recommend board games, such as Go, or Chess (actually, let's just pick Go; Chess is undeservedly popular, you know, like Java).

Who is the old programmer that Shaw interviewed for this section? He should have credited him.

"they can go to hell"

"people who tell you it is are just jealous that you have picked up a skill they never in their wildest dreams could acquire"

As much as I get worked up by his writing, I think Zed Shaw always goes a little over the line...

The piece is definitely tainted by the author's personal experience but the closing message is uplifting and empowering,

"Finally, I will say that learning to create software changes you and makes you different. Not better or worse, just different. You may find that people treat you harshly because you can create software, maybe using words like "nerd". Maybe you will find that because you can dissect their logic that they hate arguing with you. You may even find that simply knowing how a computer works makes you annoying and weird to them.

To this I have one just piece of advice: they can go to hell. The world needs more weird people who know how things work and who love to figure it all out. When they treat you like this, just remember that this is your journey, not theirs. Being different is not a crime, and people who tell you it is are just jealous that you have picked up a skill they never in their wildest dreams could acquire.

You can code. They cannot. That is pretty damn cool."

It seems likely to me that the dual specialization strategy Zed describes is beaten by the strategy of being an opportunist who has the ability to code as one of the tools in their toolkit.


For all his faults, Zed Shaw is really a great personality to have in the programming world. He loves to code, but doesn't get caught up in the minutia and cargo-culting.

Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier, you could actually just go run a fast food joint.

Zed appears to be saying that he isn't happy as a professional programmer. Some people really enjoy it.

I'm just going to start linking to Shoshin every time I see a weary, old coder blogger post: http://en.wikipedia.org/wiki/Shoshin

While I'm yet a young programmer, the primary paid experiences/internships/jobs I've had with programming have been in the biomedical/bioinformatics field. My first day on the job? Did probably all the work they'd expected of me the entire summer (all using a simple "programming" trick with Excel) then proceeded to write them a few program to make their data-entry/processing jobs a lot easier and more precise. I was like a magician.

It was pretty cool.

I've had nowhere near as much experience as Zed or many of the people replying on here, but my experience in different labs and situations has been similar.

On another related note; I was talking with an international finance/investment profession when I expressed my dual interests in finance and neuroscience. She immediately made the point that I'd be infinitely more valuable in finance with a hard science background (particularly in financing the field my background was in).

Moral: Domain knowledge and niche/cross-discipline expertise is valuable.

Addendum to your moral: get a job in finance and don't waste your time making CRUD apps and being Super IT/DBA Guy at some uni's bio research lab. Much better pay, and if you're lucky you can train on in maths and the like to move up from day trading to being a full on quant. Then you can have the midlife crisis after you've amassed some capital and connections to start your special startup in SoCal.

For all the flack that Zed gets, this is actually one of the sanest/most inspiring things I have seen him write.

Truer words have never been said.

You may also like this essay of his: http://zedshaw.com/essays/master_and_expert.html

I think this becomes apparent to anyone with experience with multiple languages and multiple platforms. The language is just the tool you use to accomplish the goal. Its good practice to learn new and different languages and paradigms just to see how they work and how you can take the good and add it to your arsenal.

I just don't like when he calls himself an old programmer. He is only like 10 years older than me - oh, wait..

As someone who's been trying to hire good software engineering professionals for some time now, I'm going to tentatively agree with, "people who can code in the world of technology companies are a dime a dozen"; however, I'm going to posit that, in the world of technology companies, good software engineers who are passionate, diligent, and bent on improving themselves and their field are rare. So, please do not despair because you've read the Old Programmer's advice and you're not fluent in biology, medicine, government, sociology, physics, history, or mathematics. I can say that even as a generalist, you can help advance the field of software engineering, and I represent one technology company that will value you for that.

I found the book that contains this chapter quite impressive. It represents the only attempt I've seen to document the procedure many self-taught programmers followed to learn programming by exploring. At first, reading the instructions about carefully typing in the exercises, it took me some time to realize the point (and I don't think someone would get much value out of only typing in the exercises); however, once I read some of the "Extra Credit" exercises it made perfect sense as an introduction to learning by exploration. If typing in the exercises and running them doesn't give you an irresistible urge to tweak them and see what happens, you probably won't find programming fun.

>People who can code in the world of technology companies are a dime a dozen and get no respect.

That may be a bit exaggerated, but...

>People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.

This is quite true. I'm involved a bit with a few circles outside the whole web-tech sphere, and it's quite different. Someone who understands the web and technology can create things that others cannot. Being involved in a certain field gives you knowledge and social contacts in the field. Put those together, and the business ideas you can come up with can be ones that can really change things.

> People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.

So true. I'm a aeronautical engineer and notice things everyday that could be revamped through coding. The problem is the vast majority of aeronautical/mechanical engineers aren't comfortable with code, and if anything broke or any improvements were needed after I left, no one could do anything with it. So we're back to our "database" of 200+ Excel files and nested folders for CAD "version control."

I think a craftsman is entitled to reflect upon his work and profession and not have that introspection be neat an clean for everyone else's consumption.

There are moments of doubtful introspection and unwelcome truths that are insightful and illuminating. Stop and listen to the perspective and perhaps just spend a moment with it... That is want it means to be human.

Spouting of some knee-jerk reaction shows you are not even beginning to listen and haven't begun to hear what this person is emoting. There is a lot more here that is heartfelt and true than simply what is written.

This is a fantastic piece of writing. Was actually very inspired by it.

I totally agree, it's quite an inspiring article.

My dad suggests that I take over his business which I might but I'm still sticking to programming as a career. May be I won't be earning a lot of $$$ but atleast I'll be doing something that I totally enjoy.

You should learn to apply your knowledge of programming to his business.

I find that that when knowledge of programming and software systems is combined with business, one has the potential to create a highly profitable autonomous system which only requires the initial investment of time (and hard work, of course).

Zed's a strong cup of coffee and guys like him generally play a really healthy role in the community they are a part of, driving discussions in directions they might not have taken and playing the part of Gadfly at Large -- every community needs a Zed to keep from becoming complacent.

"Rails is a Ghetto" notwithstanding, Zed's writing is always worth engaging even when you strongly disagree. In that respect he's always reminded me of Steve Albini.

What Albini would do with Fret Wars, however, is another question entirely.

Actually, I tend to think "Rails is a Ghetto" is one of his most beneficial works. It was angry and juvenile at times, but I think it did help make rails grow up. It also called out a lot of the fanboy-ism in the community and helped people who actually cared about engineering to rise.

Programming as an intellectual activity is the only art form that allows you to create interactive art.

I would venture to say that music composition is also interactive. Music, to me, is art twice: first in the composition and second in the performance. Somewhat like programming, composers create something and send it out into the world so that others can use it, give it life, perform it.

I agree that it's more important to have some additional domain knowledge than to be some superprogrammer. I'm not the best programmer but I have some (human) language learning knowledge and thus could set up my own business at http://www.chinese-course.com/ Best thing you can do as a programmer is be your own boss.

People who can code in the world of technology companies are a dime a dozen and get no respect

Wow, where have you been coding? I am not as proficient (and DEFINITELY not as prolific) as you are, but I've only had that feeling once working as a programmer in Singapore, and that was because the boss in question happened to be an asshole.

Oh please. You can't make as much money running a fast food joint and you will not be happier, unless that's in your blood. (I know one of the owners of a super-high-grossing KFC and have run a small business myself.)

Programming is a cushy, stimulating, high-paying job - and don't you ever forget it.

And, your risk in running a fast food joint is much, much greater. Franchise fees of $100k+, managing employees, avoiding lawsuits because your parking lot has a bump in it, and being in the shop everyday versus...

learning a language is free + telecommute, flexible deadlines + server crash leads merely to whining + Idea Guys have to pay developers and not the other way around.

I'm surprised than in this whole wall of critique, almost nobody has pointed out about the last 3 paragraphs.

I don't think "They can go to hell" is a good enough advice. There are nerds out there who are struggling socially, may be even virgins and I think they deserve better advice.

If you haven't watched Peepcode's Play by Play with Zed Shaw, you should. Really insightful stuff.

Since the best programmer, the most intelligent person or the best working people can be the lowest paid person, I think that what you must learn is to sell your skills.

Compare Linux to MS, is not about what you do but about how you sell it.


Coding and software engineering are not the same knowledge. Coding is just a small part of the big discipline. The difference between software engineer and a coder with even years of practice is the same as between a poet and a full-time typist.

Memorizing syntax (and may be even some standard idioms) of 20 different languages doesn't make you a software engineer, and of course, you can code something after a day to week of practice, but it will be a mere amateur coding, not a programming.

Of course, such kind of coders are dozen for a dime, because having a dictionary doesn't make you a translator or even speaker of the any human language. After memorizing some basic words and you can use some very basic vocabulary and copied sentences from a phrasebook, but you cannot read even a news paper, let alone a non-fiction or a scientific book. You cannot even watch a TV - they're speaking too fast.

The idea behind reading other people's code is not about finding familiar syntax or code blocks, or even use Ctrl-C, Ctrl-V it is about appreciating and understanding the ideas which leads to this exact code and not the other, why this and not that, which is impossible without engineering knowledge.

No amount of memorized syntax can compensate the lack of practice. You may learn the syntax of 50 programming languages, it is not a substitute for years of practice with at least one of them.

Memorizing standard idioms also does not make you a programmer. You should understand why there idioms emerge and remain here, which ideas are behind them, which technology, what are advantages and disadvantages. This knowledge makes you a software engineer, and this knowledge will give you respect of others.

Producing yet another python tutorial, without ever realizing that keeping it short, full of idiomatic examples, and ability to grasp the big picture in an couple of hours is a huge advantage of the classic tutorial http://docs.python.org/py3k/tutorial/ doesn't make you a teacher of humanity.

And of course, language matters. just look at this http://hyperpolyglot.org/scripting and try to appreciate the differences in readability and self-explanatory between PHP and Python/Ruby. Try to grasp why carefully chosen syntax of Python/Ruby is different from chaotic approach of PHP. Unfortunately we can't see the bloatedness of Java syntax on the same page.

Wait, so you link to the wikipedia page on Narcissim, then spend 9 paragraphs pontificating on my experience and how you know all about me in a way that assumes everyone cares what you think?

Right, I'm the narcissist.

I don't know what this way of expressing my ideas assumes. If you have something to say about these ideas - you're welcome.

I found the discussion about domain experts interesting, as if there is no domains within CS. Wouldn't domain expertise in networks, machine learning, DSP, data bases, operating systems etc. be of any value.

the first time i read this i remember thinking to myself, "oh boy, i wish i'd read this 8 years ago. i would have still been a programmer, but i would have chosen a different degree..."

I find that the hallmark of my writing is that people seem to find their own issues in reflected in what I say. This is a great example of that.

> At the time that I wrote this book I knew about 20 programming languages and could learn new ones in about a day to a week depending on how weird they were.

Funny. I've been programming quite a bit too and feel comfortable in a handful of languages. Knowing what's happening in the compiler and in the hardware or vm (runtime) is a different story. Being able to understand what programs do no matter what language they're written in is also a different story. We all know 20 different languages.

I like the point mentioned that we should avoid being allied to a particular language and reflect on solving the problem.

Lovely end to a book. To say other forms of art are not interactive however is a little short sighted.

Isn't this the same guy who complains about not being able to find work and how pissed off he is that Google only offers him "junior system administrator" jobs?[1]

Not sure I'd want to get my career advice from him.

[1] http://techcrunch.com/2008/01/01/zed-shaw-puts-the-smack-dow...

"People who can code in the world of technology companies are a dime a dozen and get no respect."



O HAI! You found an article about programmers getting respect in Silicon Valley. You totally proved me wrong, since it's exactly like Silicon Valley in...New York.

Good to know, but if I'm a coder who wants respect, it seems like it'd be easier to move across the country than develop an entirely new set of skills.

you're the man, Zed

Thanks, I appreciate that you liked it.

zed shaw taught me python, cured my hemorrhoids and showed me a how to be a real man.

Must have been hard for you to get those rimmjobs on your massive hemorrhoids.

hah, well shit way to spoil the end of the book for me!

Zed Shaw is trolling again. His ego is so boring.

Good that I stopped reading the rant when I found out it was him.

I'm clapping my hands right now! Good text :)

> People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.


Totally as in, you have observed this phenomenon first-hand?

I disagree. People who code in the world of technology companies get respect, and quite a lot of it. Getting paid for your work is a form of respect.

Getting paid is only a form of acknowledgment that you worked, but it in no way denotes respect.

It simply says " to the best of our knowledge s/he did <insert type of job here/> work for the duration of this pay period.

I agree that some people do get respect in this industry, but too many of us are simply cogs in a wheel.

What's so bad about being a cog in a wheel, if you're enjoying your life?

I think that's precisely one of the the points Zed is making. That is, that coding is a cool, rewarding pursuit. But that you shouldn't expect a coding profession to necessarily be the either cool or rewarding.

If you're happy in that profession, great. I don't think the chapter in this book says you shouldn't be, in fact I think it would suggest that you have the right disposition for such a profession and are therefore fortunate.

I think it really depends. I have seen a lot of teams / managers would prefer a so call team player to sit there and write 500 lines of bad code, and ditch a good coder who don't go to all the bullshit meeting for write 500 lines of good code. And the glory go to the 500 lines of bad code, for showing up in meetings and talk about shits. That's respect.

I doubt you get paid comparable to your contributions to the bottom line. Or, maybe you do. :-)

What I discovered after this journey of learning is that the languages did not matter.

This sounds a lot like my journey. I was overwhelmed with the details of ~20 programming languages and data formats. Eventually it actually got rather frustrating to work with all of them. Then I discovered Lisp.

Registration is open for Startup School 2019. Classes start July 22nd.

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