evan_tech

Previous Entry Share Next Entry
I got an email from a 16-year-old asking for "advice concerning [their] future as a nerd". I probably got carried away in my response, but if you, too, want to know how you can be Just Like Evan, here's what I wrote:

Hi [name],

Regarding colleges, you can look around on Google. Try searches like [top computer science schools] -- though the rankings change from year to year and differ depending on the reviewer, the best ones are always near the top. Off the top of my head, I've met lots of bright people from good schools like MIT, CMU, Stanford, Berkeley, Cornell, University of Washington, Caltech, and Brown, but I'm sure if you look around a bit you'll find similar lists on your own.

But a good school is much less important than being a good hacker. I had plenty of classmates that I wouldn't hire, and I know also know people without college degrees who are great at what they do and make hundreds of thousands of dollars a year. Another way of looking at it (how I look at it) is that college gives a good environment to learn in, but the learning is ultimately up to you. Of course, depending on what you want to do, school becomes a prerequisite; but there's also a lot of benefits from school beyond how it prepares you for a job that makes it worthwhile.

I'm biased by my own experiences, but I think the best way to become a great hacker is by: (1) reading a lot of code and (2) writing a lot of code. And both of those are nicely addressed by getting involved in free software! If you get involved with a a large project, you get to read code by people more experienced than you and they'll give you feedback on your contributions. If you write programs on your own (even small ones) you learn how to go from idea to implementation.

If you glance around on my LiveJournal (evan_tech) you'll see I still write all sorts of programs in my free time (here's a URL for just my posts about projects I've been working on recently: http://community.livejournal.com/evan_tech/tag/project). I program (and have always programmed) because I enjoy it first, but it's also incredibly valuable at getting better at what you want to do. Find something that you wish was better, write a program to solve it, give it away, and see if it helps others -- it's incredibly rewarding.

When I was 16 I was really into graphics and games, so I was always writing programs that would do random cool effects. Check out http://scene.org for inspiration, though I guess things have changed a lot since. I asked a friend at work and he said when he was in high school he was really into computing digits of pi. When I was seventeen or so I had an internship writing a Windows app in C++, but that was sort of a weird situation. I definitely recommend getting away from web programming -- it seems like there's a lot there, but it's really just a corner of the wide world, and it's way too easy to just become a mediocre web programmer.

Others will disagree with me, but I also think one of the best things I did for my development in understanding computers was getting away from Windows. Once you have a solid understanding of how everything works, the platform you use doesn't really matter, but Linux showed me that I didn't really understand the things I thought I did. (Try writing a program with a graphical user interface sometime -- it's actually really complicated!)

It's also nice because the development environment is integrated into the system. A good Linux will come with more different programming languages for free than you'll have time to learn. Especially if you like playing with computers, you'll find that there is always more to learn about Linux, while with most other platforms you'll find you eventually hit a wall: on Windows you can learn to configure a network card, but you can't figure out what clicking the buttons actually does, while on Linux you can not only twiddle things at every level (GUI configurators, high-level configuration files, dhcp daemons, routing rules, ip addresses/netmasks, arp caches, network devices, kernel modules), you can also read the code all the way down to the device driver.

I got my job at Google like everyone else does: writing a resume, going in for interviews, etc. I do mind you asking what I get paid, but I've heard of people getting programming jobs for all sorts of price ranges -- even from my small group of friends I've heard from $50k/yr to $300k/yr. It really depends on your skill set and what you're trying to accomplish. I think that if you enjoy what you do, the money doesn't really matter -- even $50k/yr is way more than the median US income -- and I've heard of plenty of people who get paid more than I do doing programming jobs that I would hate. I'd gladly take a pay cut to have job I like more. (Certainly, money is a factor when choosing between two jobs. But other things, like location, company culture, and what you'll be doing matter far more for your happiness, which is ultimately what you're trying to optimize.)

Sorry for the length and best of luck!