An essay by this dude for aspiring programmers.
Here are his points...
1. Learn how to write before graduating.
2. Learn C before graduating.
3. Learn microeconomics before graduating.
4. Don't blow off non-CS classes just because they're boring.
5. Take programming-intensive courses.
6. Stop worrying about all the jobs going to India.
7. No matter what you do, get a good summer internship.
You can skip point 6 ;-)
This guy has quite a reputed and popular blog. If you go over some of his archives you can see the quality of the topics (ex How Microsoft lost the API war). A publisher is actually putting out a book of his essays.
Anyway, regarding the essay itself, I think he makes some great points.
Points 1, 3 and 4 are basically there to encourage you to be a more "rounded" individual. Don't just know one thing... try to expand your horizons type thing. This is fine, but I don't see it being a NECESSARY quality for aspiring programmers.
Point 2, it's something we have discussed briefly before. Languages like Java, C#, Python etc... are becoming more popular and shield you from lower level stuff. Many colleges (in the US) are shifting or have already shifted to using Java as the language of choice. And since most CS curriculums hardly focus on languages, you don't get any exposure to C or even C++. This is both good and bad. Good in that the professors don't need to focus much on the language - Java is easy enough to pick up and you have less potential to blow your head off that very little time is spent teaching the language and more on actual course material. Bad in that you don't know what's actually going on under the hood. As a CS major you would be expected to know it and you aren't taught it. Like I said, this is the trend in US colleges. I think in India C/C++ is still in heavy use in colleges and even some older languages?
I can't agree enough about point 5. We have also discussed this before and he sort of reiterates our arguments - the practical vs theory stuff. However, it should be noted that he is looking at this from purely a software development perspective. Computer Science is a vast field and theory plays a large part in it. There isn't a lot of room for this theory in everyday programming, but it is important if you're looking for that kind of work. I'm sure the Google Labs guys are heavy on this stuff.
Point 7 is just about getting some real world experience before getting out of college. There's a huge difference between what you learn in college and how it's applied practically. It helps to see that and try to connect the two (if possible ;-)).