Four Years Done!

Four years of my undergraduate college experience are coming to a close. I’ll be graduating in about a week and a half with a Bachelor’s of Science and Engineering in Computer Science from Princeton. Pretty exciting!

It’s been quite a solid four years and a hugely rewarding experience. I learned way more than I could have hoped for and I think I got out all what I wanted from an undergraduate degree. Computer science as I understand it now is absolutely, incredibly, remarkably different from what I thought it was four years ago. One of the most important things I’ve learned is that programming will always be the easiest part of a project if you plan it right. Said differently: measure twice, program once.

I’ve also learned a lot more about software engineering too. This is something I was feeling like I was lacking a bit in coming into my senior. This of course was mostly of my own choosing since I had favored theory classes to those that taught about the real-world applications of CS. But I was lucky in that my final semester I had the opportunity to take a course that specifically addressed this.

The class was Advanced Programming Techniques taught by Prof. Brian Kernighan himself. It was a long semester in some respects, but the project for that class (it was a project-based class mostly) exposed us to the real situations in which products and services are born (except for worries about funding like one might face at a startup..). I took the opportunity to learn more and implement part of the database infrastructure for our project, another area that I hoped to get more out of coming into my senior year. We struggled to get performance good for a table of hundreds of thousands of rows and coded it to be extensible to our needs. In the end, we got around a lot of the struggle by finally finding the right tools for the job. I’d say our project was a success although there were plenty of areas that could still use a bit of polish. More importantly though, we had the opportunity to interact with a huge number of technologies all on our own and somehow make everything work. I imagine the real world is not too dissimilar.

The next step now for me career-wise to to start full-time at Google around mid-summer. I know this will be nothing like I’ve ever experienced before (although I did intern there last summer, the project this time is entirely different) and I know I’ll feel lost and confused at first. But if there’s anything I’ve picked up about how to approach a situation, it’s that there’s always some point beyond which the difficulty of a given task or project drops off sharply. Knowing the existence of this point is motivation enough for me to keep trying til I get there. And so I know that while I’ll start off confused, I’ll eventually be able to pick up the right skills and continue maturing and developing as a software engineer. Pretty neat.