The biggest reason you will or will not succeed in CS.
There are arguably more obstacles to CS-ers than there are to participants in pretty much any other field out there. Consider, for example:
- There are literally millions of really, really smart people who not only do this for a living, but also for a hobby. In fact, more than any other profession, CS-ers are notorious for replacing friends, food, and even family, with computers.
- Many of them have been programming since their age consisted of a single digit. So they have lots of practice.
- These days, there is no entry barrier. Lumberjacks have to find trees to practice on to get good at what they do, but anyone can program. There are computers everywhere, and every successive generation is more computer-literate than the one before.
- The rise of the internet has made it stupid-simple to connect and collaborate. In turn this has caused the online programming community to flourish. Needless to say, this would have been utterly impossible a decade ago, and I probably don’t even have to mention the sites: github; bitbucket; Google Code; various mailing lists and forums, including those of Ruby, Rails, and Python; etc.
The bigger problem:
Not unrelated to the massive amount of talent that works essentially to the exclusion of all else is the tremendous rate of progress the field of CS has enjoyed. In particular, I’m talking about the internet. In the past decade, the internet has not evolved; it has risen and flourished in a manner that can only be described with words like “meteoric” and “cosmic”. It is a dramatic change in the way we do things. In the late 90’s we were impressed by the fact that the internet survived more than a few years. In the new millennium we were impressed when we discovered that it would actually survive the dotcom meltdown. Now, given recent advances, it’s hard to be impressed any more, but we would do well to remember that we now spend more time in our browsers than in any other application. And if the internet has not already eclipsed TV, it soon will.
For the programmer, this means that everything changes, all the time. We have Moore’s law and Kryder’s law to describe the behavior of hardware improvement. Now let me tell you a more important law:
The Law of Eternal Obsolescence:
Roughly 90% of what you know in CS will be wrong in 5 years.
50% already is.
At this point, you might be thinking, “Oh come on, 90%?”
Yeah, 90%. It’s my blog, and if I want to throw around statistics that I made up myself, I will. That, and regardless of the actual percentage, the fact is that we know it is very high, and the point isn’t really to be correct so much as to make a point.
In short, the philosophical aspects of this “law” intrigue me, but it is not a discussion for today.
Move forward or die:
If it isn’t searingly obvious at this point, the answer to this problem is that you need to be in love with learning to move forward in this field. Ask any really successful computer scientist and they will tell you the same thing.
As a matter of fact, any reputable company you would want to work for explicitly looks for that in all potential employees. Truly successful companies will know to cater to this type of employee by giving them perks, like being able to spend 20% of their time on their own projects. They know that this is the type of employee that will drive success in a powerful way. If you are not one of these people, then these companies will not be interested in you.
This is an important enough point that I don’t take my word for it. Consider the words of Eric Schmidt, CEO of Google, and one of the most successful computer scientists of all time:
http://www.youtube.com/watch?v=o0gtoWwx5Is
From the video:
It seems to me that people go to college, and they join their firms, and between the ages of 25 and 35 they learn a lot. And then all of a sudden, they want everything not to change. And inevitably, something new comes along: a new idea, a new fashion, a new country, a new war, whatever, that upsets everything. So the lesson to be learned after years of watching this is, the norm is change.
So what we want to do is to constantly reinvent ourselves. Now it’s easy to say that. How do you do it? In our case, we encourage our employees to spend 20% of their time working on whatever they’re interested in, not what their boss wants them to work on. Out of that most of our great products have come.
Challenging yourself is not enough:
The sad fact of the matter is that, if you are constantly forcing yourself to learn, you will not be able to compete with the people who want to learn. Because while you are staring out the window thinking of golf, they are staring out the window thinking about doing what you are supposed to be doing. Because they want to be doing what they’re doing, they will be better at it than you.
You need to want it.
Say that to yourself over and over. It is one of the most important things you will hear in your CS career.