As an MIT student... should I not become a programmer? I do feel like I'm nearing the peak of my programming ability, and now would be the time to switch to a field with more "lock-in".
What would that field be? Medicine? Mechanical engineering? Consultancy?
If you love programming and are good at it, it is the best field there is, bar none. You'd be a fool to turn away from it for a lifetime grind with epsilon better prospects.
I'd do my job for half what I get paid; I just don't have to.
As for nearing the peak of your ability (assuming typical undergraduate age and experience): BWAHAHAHA! You'll be even better than you are now in 5 years, and again 5 years after that. Only then might you consider that you're near the asymptote. These will be "not small" qualitative differences, in my prediction. Come back and read this 5 and 10 years from, please. :)
(context: MIT '93; I just started my 45th orbit of our star.)
Wanted to put in a word of support for this point about looking back in 5 years. I nearing my fifth year out of college and the difference between now and then is huge.
It doesn't always feel that way because we often are comparing ourselves to last week or the guy at the next desk, but just in terms of expanded toolkit and knowing how to work within a big project and a big team, the difference is enormous. Lots of skills, both technical and "soft", that you don't even realize you don't have yet.
I think also, in college, you tend to think of your abilities in terms of A) how clever you are and B) how fast you can learn something new. Once you're working, your abilities are really judged more like A) how effective you are and B) how much you already know. Learning quickly is great, but having already accumulated knowledge and digested it for several years is even better. I could see myself feeling like I'm near the asymptote in 5 more years, but I could also see this going on for another 10 or 15 years. There is a lot to learn.
Yup. Hacker News is full of silly "programming exceptionalism", but programming is not all that fundamentally different from any other vocation. Go to a site for, say, doctors, and find people singing many of the same paeans to medicine that are here presented as specific to software engineering. People in many lines of work think that their field is the one thing truly worth doing.
Sports is different, in that the number of positions available that are good enough financially are very, very few. So for sports, you're just not good enough. As an analogy, if you were a doctor in a smaller town, in a tiny hospital, and you loved it and were good, you'd be fine.
That's probably because sports can't really be considered vocations except by those who play them professionally. Minor leagues aren't really professional level.
At the same time, I've been doing more and more training, and less and less day-to-day development, over the last few years. Not only do I enjoy it, but I find that my long-term perspective and experience helps me to explain things to the younger and less experienced developers.
That said, it's pretty amazing to see what today's kids have done before they've even finished their first college degree. It's a bit intimidating... until I demonstrate that I can still debug things faster than they can. :-)
Professor Robert Rose had some great advice for me as a freshman: as an MIT student, you can probably succeed at whatever you want, enough to enjoy life. So pick a field that gives you personal satisfaction.
Money is valuable and ego-boosting, but when you hit your 30s you will realize that enjoying your workday is much more important than maximizing your paycheck. (But there are also easy ways to increase your paycheck. If you can become better than a potted plant[1] at negotiating, you can boost your salary.)
All tenured MIT professors must be taken with a grain of salt on career advice. They got tenure by being #1 or #2 in their sub-field, as well as a number of other things like being adequate teachers, so the selection bias is extremely strong.
In general Professor Rose is generally right, but there are a lot of exceptions, and he's also much older than us, his experiences might not hold for the America/world of today and the future.
Unless you've been seriously programming for a number of years, with a fair amount of that in teams, including face to face ones, you're probably not nearing your peak. I'd suggest reading The Pragmatic Programmer: From Journeyman to Master (http://www.amazon.com/The-Pragmatic-Programmer-Journeyman-Ma...) and judge where you are in the range from journeyman to master.
If you're looking for "lock-in", i.e. be easily employable past your ability to fake looking under 35, I'd suggest getting a job with a serious security clearance, which can be a trick, or specialize in one of the fields that respects grey hairs like embedded (but only so much depending on the sub-field, e.g. Detroit car companies at least in times past recruited heavily from Course 6 because they too got rid of their older EEs and programmers).
If you goal is to really work for yourself, and you think you can eventually bill at a rate 5-6 times the income you want to receive---maybe talk to some professors who make a lot of money on their one day a week dedicated to that, albeit they do it with MIT Professor on the CV---yes, that's a very good way to go. But hard for most people. See e.g. this comment https://news.ycombinator.com/item?id=9499561 which points out you have to compete on quality, not price, and a couple of HN contributors who've written a lot about that.
Medicine: in a county, or the developed "West", where people by and large don't directly pay for their own medical care, and those who do pay are looking at a rapidly graying population, well, it's a field you ought to run screaming from, unless it's your calling.
Don't know about MechE and so on, in general you need to talk to older engineers, the people who run the department, professors, etc., of course adjusting for selection bias. If you haven't already identified a calling, well, you have a lot of options, especially if you're strong at math. Especially before the 2008 crash, a lot of EE strong and therefore math strong EECS graduates would get initial jobs in finance with their proven math chops, which if they were smart got them in a good financial position to do something they really wanted to do later.
A student feeling like they are nearing their peak of ability is more likely to just be reaching the point that, 10 years from now, you will consider to be simply a base level of competency.
I think the idea is that you can learn things like that pretty easily on your own, especially once you've had experience learning "harder" things in classes.
Well, I'm assuming that someone can learn all the other parts on their own, whereas the best practices surrounding versioning, patch management, code review, etc are things you really only learn by working on a large team (usually in a real job).
What would that field be? Medicine? Mechanical engineering? Consultancy?