Advice From An Old Programmer
learnpythonthehardway.org
learnpythonthehardway.org
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.
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.
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.
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.
Let's face it, there's a hell of a lot of moderately bright twelve-year-olds who know how to program adequately well.
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.
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.
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.
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.
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.
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.
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 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.
I've found that makes a bigger bang to any domain expert then just programming ability.
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.
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.
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.
When you're working as a programmer in a technology company, you're creating "core product". It's quite a different feeling.
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.
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 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.
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)
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.
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. ;-)
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.
http://www.reddit.com/r/programming/comments/i1j67/advice_fr...
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.
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.
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.)
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.
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.
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.]
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.
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.
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.
Barring a humanity-friendly intelligence explosion event, of course. (I'll leave the Googling to you.)
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".
"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).
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.
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.
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.
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.
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."
> 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.
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.
I think this subthread is providing a fine counterexample to the idea that hiding comment scores magically improves the quality of discussion on HN.
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.
To each their own.
Thank you Zed.
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.
"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.
Well done Zed. I always appreciate what you write.
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.
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.
Are you talking about anything in particular when you mention that? An example would really help your case here.
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.
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,
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.
You effect change and change affects you.
Something was done to your decisions so the right word is "affected".
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 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.
English is a language I'm always learning more about too!
Somehow....deep down inside I think you knew you wrote it wrong, but that was the "effect" you were going for wasn't it! ;)
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>
(http://www.merriam-webster.com/dictionary/affect)But it's still a good rule of thumb.
Otherwise your generalization is aptly put.
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.
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!
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.
"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."
http://www.amazon.com/Mindstorms-Children-Computers-Powerful...
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...
http://en.wikipedia.org/wiki/Art
But let's avoid an argument on the semantics of aesthetics and just leave it at that.
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.
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. :)
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.
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.
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.
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...
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.
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.
However, I think you're using "isomorphic up to X" incorrectly. Perhaps I don't know what you mean by "semantics", though.
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.
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.
By the way, I enjoyed track 2 of week 2 of your "random improv".
What about oral storytelling? Or just (re)telling jokes? Improv and related performing arts? Stage magicians? Mimes? Community murals?
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.
"Hard distinctions make bad philosophy." as John McCarthy (of Lisp and AI fame) would say.
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.
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.
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".
Are you serious? Like how everyone changes their own oil?
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.
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.
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.
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.
Really nice effort on this book, I wish I could teleport it back in time to my past self.
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.
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.
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.
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.
"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...
"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."
http://www.ribbonfarm.com/2007/12/05/the-fine-art-of-opportu...
Zed appears to be saying that he isn't happy as a professional programmer. Some people really enjoy it.
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.
Truer words have never been said.
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.
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."
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.
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.
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).
"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.
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.
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.
Programming is a cushy, stimulating, high-paying job - and don't you ever forget it.
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 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.
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.
Right, I'm the narcissist.
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.
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...
O RLY?
http://blogs.forbes.com/nicoleperlroth/2011/06/07/winners-an...
Good that I stopped reading the rant when I found out it was him.
Totally
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.
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.
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.