Following my last reflective post on advice for an aspiring technologist, I now present a laundry list of recommendations I have for a Columbia SEAS undergraduate majoring in computer science. One of the things I wished I had when I was in university was a mentor who would be able to give me this sort of practical advice and whom I’d actually take seriously. That said, part of the value of college, growing up, and life in general is stumbling upon knowledge and wisdom yourself that has been known for generations.
I wrote this over a year ago but never got around to publishing it; I’m quite frankly not sure how much Columbia has changed since graduating over two years ago, so some of this advice may be less applicable now than I can even imagine.
I guess a late addition would have to be, “Don’t eat the hot dogs in the vending machine in Lerner”.
- Take as many 6000-level (graduate) seminars as possible. These courses are the ones all computer science students look back on as models of a quality education. These courses were the most interesting in terms of curriculum content and work required, possibly because the professors were actively interested in the material. I met a lot of people who were similarly interested in the topic, and in computer science in general, and I was enabled to interact with some very cool professors.
- Take as many 6000-level (graduate) lectures as possible. Sometimes, a lecture-style setting will be all that is available because of enrollment. Still, these courses were challenging and rewarding.
- Don't wait to take silly, required courses like Physics Lab or Probability until your last semester. I guarantee from experience your life will become composed of dread going to these basic classes, knowing you only need them to graduate. They really put a downer on your finishing lap. If all else fails (which is exactly what you shouldn't do with these courses), try to take them with friends to take the edge off.
- Don't take Physics 2600 unless you're really a physics student.
- Yes, even if you got a 5 on the AP.
- Yes, even if you think you're a pretty smart fellow.
- Find a passion, if you don't have one already. And if you think you have one, reconsider it and/or find a new one. The people that have a passion are more interesting to talk to and are more in love with life. They see the world in a slightly different tint. They become more focused, out of discipline for the subject. They strive to move forward, instead of lagging. They understand how to transform an interest into a lifestyle. I always wanted to ask the people who didn't have "any clue" what they're doing after college what they spent their last few years doing instead of discovering themselves. You have four short years. Use them in the search for wisdom.
- Cry once in a while. Sometimes you might find yourself in a hard position, or in a situation that is deeper than you thought you could dig, and certainly bigger than you'd like to deal with. That's ok. College is the last chance for you to safely and routinely do this, have dozens of people around you to help you out, and still be able just to take a step back for some perspective. It's okay to get yourself in over your head; that's how you define limits. In fact, I argue that if you don't get yourself into these situations during college, you're doing it wrong. You're not pushing yourself hard enough. If you do it early on, college will be awesome by senior year. I distinctly remember calling home to my parents in tears over mental walls I hit. I felt horrible and pathetic at the time, but it was definitely formative and developmental for the years to come. Thank you, Mom and Dad.
- Get out of the Upper West Side and experience the city. You're going to Columbia University in the City of New York, not Columbia College in the City of Columbia, Missouri. Go see a show, a concert, go to that bar your friend told you about, the restaurant that got a good review in the Times. Go see and do things.
Oh, and: Read gothamist regularly. Figure out:
- The rules of how many blocks equals a mile (~20).
- How to tell which way is North (odd-numbered street addresses on numbered streets).
- The orientation and arrangement of proximate bridges (Brooklyn, Manhattan, Williamsburg, 59th St...)
- ...and main landmarks (especially helpful in The Rambles of Central Park).
- Know the direction of the clouds (generally East-ish) or the movement of the sun (East to West)).
- Learn more than just the Upper West Side subway stops.
You might become a real New Yorker just yet. (And, if you do,
- Please offer directions to strangers who are looking at maps at a street corner.
- Pick up random pieces of litter and properly dispose of them, even if they aren’t yours.
- Stand to the side when people are getting on or off of any form of mass transit.
- Pay attention and be cognizant to how you are affecting other people’s environments.
- Hold doors for strangers. Say “please” and “thank you.”
- And for your mother’s sake, even smile at strangers every now and then.
You might even make New York a better place to live in).
- Live on campus. A huge part of the undergraduate community is formed simply because walking drunkenly between dorms at 5am after watching 18 episodes of Lost is not a big deal. Make sure you do well enough in academics so your parents don’t know this kind of thing happens and so they allow you to stay on campus.
- Make friends with people who bake. This is particularly advantageous during finals for obvious reasons.
- Take the lower-level CS courses in order. Don’t think that you’re a hot-shot and should be exempt. Some very smart people took a considerable amount of time to figure out what you should be learning when and at what pace. I was the bloke who decided I’m better than the standard curriculum and had to keep my head barely above water the whole time. It was fun and challenging, but I would have been a better, more well-rounded student had I done the normal thing. On the other hand, I wouldn’t have been able to take as many 6000-level courses and I’m definitely a better technologist for having been exposed to advanced concepts early.
If you take the curriculum as prescribed (again, which you should), you will inevitably come to topics, sections, or projects, that you don’t enjoy or that are old news. Deal with it responsibly. Read a related, more advanced book that is highly respected. Spend a little more time on your project implementing some extra functionality or incorporating some other technology (especially if it relates to your interest; say, integrating Apache Lucene into a Advanced Programming project or using both Postgres and MySQL for your database project and comparing transactional throughput).
You won’t have the time to do this. You’ll be too busy following the rest of my advice. My recommendation: make the time.
- Create something amazing. This is one of the only opportunities in the rest of your life where there is such a huge concentration of interesting, curious, creative people. Use that to your advantage by creating something, something so awesome and consuming that you’ll think back about the weeks (and early mornings) you spent implementing it.
- Get really active in an extracurricular activity.
- Especially if it’s the ACM.
- If not, explore your culture.
- If not, explore your interests.
- If not, attend events designed for amusement.
- If not, explore someone else’s culture and reap the rewards of good, free food.
Being an officer in any organization is highly recommended. It shows you have the organization and the excess capacity to do something highly formalized in your free time for the betterment of others. That’s pretty powerful and commands respect.
A word on the ACM (not the Apostolos Campus Ministry). The Association for Computing Machinery (note that it is “for” not “of”; this is a large semantic difference: I am not a piece of computing machinery) is an organization that has a lot of potential to unify all of the computer geeks on campus and get people interested in computing. It does this better some years than others. During my tenure there, we were unable to realize our vision of what the ACM should be. That is a strong regret I have to this day. That said, the officers of that organization try very hard to have good programming. Check it out.
- But don’t overcommit to too many groups. Contributing is admirable. Being elected to a post is good for your resume, ego, and sense of self. But, trying to be 42,397 presidents at the same time is good for no-one. You may be skilled, but target that skill. No one likes to work with someone who is over-committed.
- Get a job related to your interest. Start with getting any job with real responsibilities, where your execution impacts a larger community than just yourself, where you can show your reliability. Then, if not already, get a job aligned with your interest. (This latter recommendation, however, should be taken seriously throughout life). After that, ride the opportunities that arise from it. Being an open-source programmer and team leader was much more appealing to me (and to prospective employers) than being a theater technician (my first job at college).
- Get a job or hobby not related to your main interest. Being a theater technician was a hell of a lot of fun and filled a lot of voids that computer science just cannot possibly fill. I still miss its physicality horribly.
- Take some classes related to a secondary interest. Taking “Kings, Caliphs and Emperors: Images of Authority During the Crusades” was humbling, intensely interesting (the professor was a fantastic instructor), and useful at cocktail parties simply because of its name. Oh, and there were cute girls to interact with about a topic they adored.
- See the sunrise every now and then. It’s quite beautiful. Make the number of times you see the sunrise for academic reasons equal the number of times you see the sunrise for social reasons. This is called work/life balance.
- Go to professors’ and TAs’ office hours. I was told this constantly and I never executed on it until senior year. Then I realized: most professors and all TAs are very interested, both personally and professionally, in helping you succeed. They really will take time out of their extremely busy schedules so that you can learn. Office hours are where the student-teacher relationship is nurtured. Coincidentally, that relationship can simultaneously break down, as professors can transition to become allies and friends.
- Don’t live in Carman freshman year. That is, unless you should have gone to a party school. Don’t be afraid of other dorms; you will make friends regardless of where you end up. I made my first real friends while I stood alone on a long line for free ice cream during orientation. (Friends, mind you, that I desperately need to call).
- If you should have gone to a party school, don’t go to Columbia. Your spot could be filled with someone who actually is an intellectual and doesn’t just pretend to be one on his or her application.
- Take pictures along the way. This may be the only way you remember college, as the rest of it could be filled with sleepless nights at Butler, in the lab, and on the bar at Lion’s Head.
- Have fun. Corollary: Get out of your dorm room.
Next in my series of reflection: tools and technology I know today that I wish I knew about before.