As one of our first assignments, we read "Advice for Computer Science students" by the eminent Joel Spolsky, a leader in the field of software development and a man whose word is considered second to none in the field of computer science. Before I comment on the article itself, let us first ask a question: why?
Spolsky is the founder of Fog Creek Software, a dev shop in New York that makes products such as FogBugz and Kiln. As a user of FogBugz for a number of different jobs, allow me to say something: it's Trac with a slightly better UI, except it costs more and is less extensible. As far as I can tell having used Kiln, it too is an expensive aping of something which already works, and something which already works well: Mercurial. They aren't even bashful about it. Kiln is a Windows-only port of Mercurial which adds nothing except a GUI. Perhaps his sales figures will tell me differently but I think much of this project already existed.
FogBugz itself, upon going to its front page, says this: "We help the world's best developers make better software." The entire purpose of this company is not to solve problems or do something good for the world, but to masturbate to its own greatness and give Spolsky notoriety. They write software primarily for other programmers, which is an insanely saturated market and frankly, a large barrel of fish. The persistent message across his blog and company website is that his company is a great place for programmers that meet his criteria, not an entity which serves any real purpose. This pleases him, but (not that there is any threat of me impressing Spolsky) I don't know that you could pay me to work there.
I'm sure he's a fine, good man, so please don't let's get started on ad hominem attacks or judgment where none is needed. I simply think it is fascinating that I see this man's words so often touted as pure, alchemic gold created from mere oxygen via his capable lungs when his two most notable accomplishments are a to-do list and a thin layer over someone else's hard work. I'm sure more work goes into the projects than I'm giving him credit for, but I can only speak for the final products.
And let us also be clear that I'm not some genius or super-productive android pumping out tons of quality code all the time. This is partly due to my having other hobbies, and also partly due to my not really having any itches to scratch at the moment. I have nothing which I need written at the moment, and my life has other pursuits awaiting me. I did not work on Excel at Microsoft; I do not own and run a profitable software company; and, most likely, nobody reads my blog. It's a fair cop.
But I do think it is a bit short-sighted to take his sage advice as gold when his goals are necessarily limited: he is a man primarily focused on making a profit using his skills, rather than solving useful, important problems with those same skills. I am the opposite, and my opinions of his article will reflect this.
The most glaring problem with his article is his slander of computer science theory. He recounts how he was given a proof of something rather silly on the first day of a logic class which he had trouble working with and understanding. So, being the motivated seeker of knowledge that he is, he dropped the course.
Wait, what?
He says something with which I do agree, but from which I draw different conclusions: software engineering and computer science are two different disciplines. Why, then, is he giving students the advice of dropping out of theory courses in a theoretical discipline? Why did he major in a field which he considers useless and unprofitable? There are technical schools out there which teach programming, and there are businesses which, unlike his, will look beyond the GPA and filter candidates based on ability and experience. I have worked for several and enjoyed myself thoroughly.
Computer science is necessary because all "useful" (though he does nothing useful so far as I can tell) disciplines such as mechanical engineering, electrical engineering, aeronautics, and a host of others depend on theoretical work which provides the foundation. He does not refute this in his article, but he paints a very narrow picture of academics as silly old men frittering away their time proving that things will work, rather than marching forward and banging the drum of global capitalism like a good worker should. I think this is incredibly unfair and, to say the least, rude.
Other advice he gives is very sane: learn C; learn to write; understand economics. As a matter of fact, most of his article has good stuff in it. There is a reason I read the whole thing. However, I think it is important that at least one person point out that his advice works well for someone focused on profits, and having nice working conditions, rather than someone focused on using their abilities for good or useful things. It's an important point, and not all CS students necessarily have anything to gain from his anti-intellectual screed.