Thu 16 Feb 2012
Here are some thoughts for students who are considering computing, including computer science and software engineering, as a career. While these tips are particularly geared for high schoolers going to my alma mater, Monta Vista High School, they can apply to many others.
What do I enjoy about computing?
Computers are capable of doing amazing things, but in reality, they’re really dumb. You have to give them precise instructions on how to do something. If you get it wrong, they can’t guess what you want them to do. I find taking a task, breaking it down into smaller pieces, writing instructions to do those small tasks, and putting it all back together inherently satisfying. You get a sense of mastery by getting a sophisticated piece of equipment to do what you want it to do.
I also enjoy the fact that my work has a direct impact of millions of lives. Every time someone searches for something on Google, code that I have written is executed. I certainly feel like I am making a difference.
My typical workday
As a software engineer at Google, my day is not just about sitting in front a computer monitor, pounding out “code” (the instructions that tell the computer what to do). The image of the solitary hacker is a myth.
Before writing any new code, I need to consider how it will work with code that Google already has. It’s like building a structure — you could slap your addition onto an existing building, but that could destabilize the whole structure. Or you can carefully design your addition so that it integrates well with what is already there.
So I will meet with my colleagues to discuss the problem I’m solving and how I intend to solve it, either face-to-face or through e-mail. I may also write a design document that gives all of us one document to refer to.
Sometimes I write code with a colleague, especially if the code is tricky. This process, called pair programming, lets one person type while the other looks up documentation or spot errors on the fly. It can be intense but also more fun, since you’re sharing your joy (and pain) with someone else. It also reduces distractions, since you can’t check your e-mail while your partner is waiting.
Once I’m done writing a piece of code, I then need to integrate it with the existing code. But before I can do that, another software engineer must review the code that I wrote. He or she may (and probably will) point out bugs that I need to fix before integration. I also review the code of other engineers.
Our project team has short status meetings everyday, which last five to ten minutes. Our larger group has status meetings every week, which often last only fifteen minutes. I also attend other one-off meetings about design issues that affect our whole group, and I answer questions that other engineers may have about the work our team is doing.
So a lot of time is spent designing, reviewing, and communicating my ideas with others, not just programming.
Now you’re interested in pursuing computing as a career. How do you start?
A straightforward way to try out computing is to take AP Computer Science in high school. Since the test uses the Java programming language, you may want to also take the Java programming class that Monta Vista offers, the year before taking AP Comp Sci.
However, suppose you don’t find either the Java class or the AP Computer Science class that interesting, but you’d still like to explore computing. Don’t give up! There are plenty of alternative approaches to learning how to program, a fundamental skill in computing (but not the only one), which you can try on your own. You can also try these before going into AP Comp Sci.
Instead of Java, you could choose another language like Python, which has many conceptual similarities with Java but is less verbose. There are a few tutorials for learning how to program using Python, such as A Byte of Python or Learn Python the Hard Way (I have not tried either of these myself).
There is also an interactive website for learning how to program called Codecademy.
If you’d like to learn programming in the context of a more visual and dynamic environment, Processing is a popular language for creating visual art and animation.
There are several other systems that lets novice programmers create games and visual simulations. These include:
- Alice from Carnegie Mellon University
- Kodu from Microsoft
- Scratch from MIT
- StarLogo TNG from MIT
- App Inventor for Android from MIT and Google
The key is to try these out, experiment, and have fun with it. It will take some time and persistence, but the rewards are well worth it.
By the way, you still have to pay attention to your other classes. Besides math and science, writing and speaking are the most useful skills in your career. If you can’t get your point across to your colleagues, your great ideas will never be accepted.
There is widespread agreement on the top four computer science university programs (in no particular order): Carnegie Mellon, MIT, Stanford, and UC Berkeley. However, there are plenty of great CS programs all over the country, including (but not limited to) Brown, Caltech, Cornell, Georgia Tech, University of Illinois at Urbana-Champaign, University of Texas-Austin, University of Washington, and University of Wisconsin-Madison. It’s hard to go wrong with any of them, so you should also pick a college based on your own personal preferences, such as small liberal arts school versus large research institution.
There are many different ways to teach computer science. For example, Carnegie Mellon, Harvey Mudd, and Georgia Tech design their programs to attract and keep women and underrepresented minorities to computing, which the field desperately needs.
No matter where you go, I highly recommend doing summer internships. These are becoming more and more important for getting a job after college, or for getting into graduate school. Internships expose you to how different companies operate and give you some real world experience.While I was in college, I did two summer internships (IBM and Microsoft).
If you’re considering graduate school, I also recommend doing undergraduate research work if your university offers the opportunity. For example, Caltech has Summer Undergraduate Research Fellowships.
Unlike other science and engineering fields, getting a Master’s or PhD degree in computer science does not automatically mean you will be earning more money or have higher job status than those with a Bachelor’s degree. However, attending graduate school, especially a PhD program, gives you different types of opportunities than a college graduate.
Getting a PhD in computer science means you want to deeply explore a specific topic within a specialty of computer science. This means that the school you will apply to will depend on what specialty you want to go into, such as artificial intelligence or operating systems. For example, the University of Wisconsin-Madison has an excellent program in databases but is not a great choice for human-computer interaction.
By the time you get your PhD, you will know lots of leading figures in academia and industry in your specialty. Networking becomes a key skill that you learn. You also learn how to figure out what questions are still unanswered in your field, and address it in a way that no one else has before. It sounds a little daunting, but that’s what graduate school is for.
In fact, throughout graduate school you come to realize that there are lots of questions out there, and the real problem is how to pick a problem that you can reasonably answer in a few short years, so you can graduate. Persistence and endurance, more than sheer intelligence, is the key to getting a PhD.
Once you have a PhD, you have the opportunity to get a job where you can look farther out in the future than most people, especially if you become a professor or join a research lab at a company like Microsoft or IBM. These jobs are nearly impossible to get without a PhD. But at the same time, you will become “overqualified” for jobs that only need a Bachelor’s degree. So getting a PhD changes your opportunities, but it doesn’t necessarily broaden them.
Give it a shot
I hope you consider computing as a career. It’s rewarding and satisfying in its own way, and the fact that it’s also in high demand is just a bonus. Even if you decide to do something else later, the skills you learn in computing will serve you well. Good luck!