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).
>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.
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.
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.
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.
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.
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>
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.
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.
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.
"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.
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.
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.
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.
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.
"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.
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.
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,
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.
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 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.
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.
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.
"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.
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.
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.
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.
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.
> 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.).
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)
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.
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.
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. :-)
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.
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.)
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.
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.
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...
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.
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.
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.
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".
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.
> 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.
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.
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.
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.
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 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.
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.
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.
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.
> 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.
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.
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. :)
>>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.
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 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.
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.
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.
> 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 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.
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.
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..."
229 comments
[ 4.4 ms ] story [ 251 ms ] threadMy 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).
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! ;)
http://en.wiktionary.org/wiki/affect#Noun
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...
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 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.
http://zedshaw.com/essays/programmer_stats.html
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.)
God says... spectator Euodius retard Texas defers wazz_up_with_that wanderings acceptable teachest theirs nominally costs year's middle division raisedst comprehended equalled unsuitably inchoate
In complete denial on God. God said 640x480 16 color.
God says... shadows charge depending Michael ensues pupils
LoseThos is a 2ndary OS for recreational programming.
God says... honour Preacher crucifixion rashly musing monastery toiled stealing affections despairing straying sex Christian wings exorbitant misery OTHERWISE their Orestes Vacation why_is_it proffering resulting willed sparrows styled I vexed conferring tv applied affliction steer confiding stored Whatever shoutedst putrefied generation exuberance Supreme relax processing Wisdom's bride secretly Vacation cloud legal reply conservative flows sorry trials mainly limits roused punish studious precedest taste wisdom preventing severally ships hooah tenet unallowed applauses seldomness disembowelled discourses thickets intermitted whereupon qualified purified sin Knowing shrinking distrusted expressions discovers transitory thousand plants recollection alteration Thagaste dishonour commender dispenser conformably
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.
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.
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.
is a different style than: 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...
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.
Truer words have never been said.
Zed appears to be saying that he isn't happy as a professional programmer. Some people really enjoy it.
"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.
Compare Linux to MS, is not about what you do but about how you sell it.
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.
O RLY?
http://blogs.forbes.com/nicoleperlroth/2011/06/07/winners-an...