It’s almost over. Almost. Just a bit over a month, and it’ll be over. Hopefully.
Looking back a bit at my journey through an undergraduate degree, I realize that Waterloo was definitely an incredible choice. Moreover, the choice of this school can be justified almost entirely just by the co-op program.
Maybe I was lucky, or maybe the program is just that good, but for each of my co-op (internship) terms I was matched with incredible peers, mentors and managers. As a result, I’ve learned a ton and grown both professionally and personally. This is a summary of my experiences from interview to end of the internship and what I’ve gained each time.
IBM (Summer 2008)
I remember having to do 20-something interviews in my 1B term within the span of 2 weeks. It was pretty brutal having 4 interviews in the same day too. Back then, I more or less knew nothing about tech companies, so IBM was probably the only company name that actually rang a bell, and it is also the only one of the 20 interviews that I can remember clearly now. Having not worn a suit in quite some time, I walked into the interview room at TC probably pretty awkwardly. Thankfully, I was greeted by a very kind looking grey-haired man, Edmund Reinhardt. I won’t bore you with the details, but it was enjoyable learning about the developer role. Also, this interview was where I received my first brain teaser: he asked me the 8 balls question. I don’t remember if I even got it right, but it had me googling when I got home for all kinds of questions like this, and I found out other big companies like to use these as well. The key thing I learned from the interviews that term is that displaying interest in the position and company are extremely important.
In the end I got 10-ish offers (although 2 IBM offers), but I thought the first IBM team was the best fit both from my impression during the interview and the fact that I thought it would be beneficial to have a big well-known company on your resume.
There was a whole bunch of shenanigans with moving to Toronto (going to the wrong office, living in a girl’s-only place, etc..), but I finally got ready for my first day of real work: a milestone! The day was actually full of boring presentations, but we did get some nice free stuff à la “leather portfolio” (see older blog posts for more details). During the work term, I worked with my mentor Brian Farn on George Voutsinas team. People were extremely supportive and it was quite fun changing teams every month or so to work with different people on new stuff. We did scrum and team leads I remember were Xuan and John(?).
Aside from writing code, I also got 3 IBM certifications and I think some lunch voucher for performance. Big companies usually have a lot of learning programs: take advantage of them since you’ve got nothing to lose (failure costs you nothing, but success gets you something for your resume). As a whole, what you would typically learn at IBM is big company culture, but it’s also great introduction to programming in the industry as opposed to assignment work. You might realize that things happen slower (you probably won’t see your code ship during an internship), but there’s still a lot happening that directly benefits you such as student round-tables with 3rd or 4th level managers (your manager’s manager’s manager’s managers). A quote I found interesting from one of these higher execs is: “Don’t kill yourself trying to finish all your work. If your manager is any good at all, you will have more work than you can possibly handle.”
I met some great people there, and funny enough, I’ll be living with one person I met there for my full-time job. Also, it was the only time I’ve had to wear a suit to work (although only for 1 day for a field trip to the main office with all the business people).
Big companies are definitely comfortable, but the downside is you’re bred into this institution that might make you incompatible with other types of jobs such as startups. In any case, you have to try it at some point to see if you like it. Also, looking back now, I think IBM is more of a consulting company than R&D from what I’ve experienced. However, it was great and definately prepares you for the real world.
Sun Microsystems (Winter 2009)
Sun Microsystems was a completely different experience. Sun Microsystems was a company I kind of heard about, but never really thought about working for. I just knew they did Java. A friend of mine was really interested in working for them and told me about all the cool stuff they do, so what the heck, I applied.
The interview was a video interview with one person I could barely see on the screen (it looking more like from a security camera than a webcam) and one person who I could only hear (a booming voice from the sky). I don’t remember what they asked, but I think I was mildly convinced it wasn’t a bad place to work. It was also the first US job I had been offered, so I took it.
The best part of the Sun package was that they paid for a rental car for you and for your apartment, and the apartment was really good. I think it would cost probably 2000-3000$ a month if you want to rent something like that on your on. Coincidentally, the only other person that received the offer was the person that recommended me the job.
Working at Sun wasn’t bad. We had our own office and such, and meetings were scarce, especially compared to IBM. It’s worth noting that this was also the research division of Sun. What you’ll probably find is that development goes pretty slowly. I’m not sure if I even saw a release during my whole internship either. However, the stuff you work on is pretty complicated and not your typically “use-case driven development”. You work on new algorithms for things like improving network performance in massive distributed systems and such. There isn’t too much pressure though.
Boston is actually a very nice city. It’s very similar to Montreal, but with more things to do (but a really confusing highway system). Notable things done were seeing friends I haven’t seen in decades and visiting the crazy people at MIT and Harvard. Also, I think I learned to drive a lot better during this work term since I had to drive to work every day. Some drivers are pretty insane though, and there was one time where we nearly got into an accident when some person drives 90 degrees across a large street. I honked at him, but my roommate said: “Be careful, it’s better not to honk. Some people might have guns here.” In a twisted stroke of fate, we actually ended up being the last interns at Sun (because of Oracle :p).
People I remember more clearly from the office were Tim Blackman and Jim Waldo. Jim Waldo, my direct manager, also taught part time at Harvard University. I really wanted to go to grad school after this term too and gained a lot of insight into this since almost all the other developers on my team were PhD’s. I would be pretty sweet if I could stay a few more years under the umbrella of academia, and then end up full-time at a research firm like Sun. It would beat developing at IBM, probably. So, I started rearranging my courses and picking harder ones in the C&O department and such.
Tagged (Fall 2009)
I was convinced by my second work term that I wanted to work in the US again for the superior pay/benefits and the ability to travel. So, I applied exclusively to US companies for my third work term. I wanted to try California that’s supposedly the “place to be” for software engineers.
For the interview with Tagged, I was interviewed by Brent Francia, and I think he gave me one of the toughest brain teasers yet (for a 2B student). It was the egg dropping question, which can either be solved by trial and error or dynamic programming. However, to be honest, I had never heard of Tagged before, and the only time I’ve seen the name is when it was listed as an Information Session at TC (which I hadn’t gone to), but it was San Francisco. Who would turn that down, at this point?
It was really something else. Tagged was the first company that I felt was actually prepared for interns and really wanted them to succeed. They had a whole process of matching every intern with a mentor (Josh) and manager (Diego). The mentor takes you out to lunch every so often, and teaches you cool things that make your life easier (my mentor showed me git, scala, haskell, intelliJ, etc). The manager assigns you projects and helps you work through the problems.
What’s more, the people there were brilliant; not brilliant as in book smart though, brilliant as in incredibly quick, creative and thorough. Previously, I thought that most meetings were spent turning in circles on a topics or making pretty trivial decisions, but I guess startups don’t have that luxury. This wasn’t the case here. Things happened ridiculously fast, and things only happened because they were absolutely needed. Meetings were very productive.
Tagged was an amazing experience, and in the end, this is something I would have been very happy to have ended up with.
Other perks included that the team is extremely small given the size of problems they tackle and the number of users they need to deal with. Also, they always ordered awesome food (at least when Brent was there). It was also the place where I learned the most both from my manager, peers and company events like weekly interview question contests. Finally, I could write a book about San Francisco, but you definitely have to go there to know what it’s like (for starters, the weather is probably unbeatable).
There’s an old saying that goes something like “what you put in = what you get out”, and I think this was the term where I really tried to put in a lot. As a result, I feel like I gained a lot too. By the end of it, I really wanted to work in a startup for the rest of my terms, and maybe even start one.
Google (Summer 2010)
Actually, I would have returned to Tagged after this term, but a whole bunch of things changed. First of all, I was in Hong Kong on exchange, so I couldn’t use Jobmine. Then, I was about to switch to the CS program and cut down my work terms to 4 instead of 6 (so, this would be my last work term). Finally, I wanted to apply for a job in Australia (for the girlfriend).
It was a complete shot in the dark, and I applied to a single job, which was Google. I had 3 phone interviews, and weeks of anxious waiting, I finally got the offer! It was pretty ridiculous. I think I was in shock because I can’t remember at all where I was or what I was doing when I read the email from my recruiter. Thus, the incredible journey began.
I think this quote came from one of the employees at reddit: “every software engineer should work at Google at least once.” I completely agree. I’ll write a more detailed post about the whole intern experience if I have time, but it was definitely something unlike anything I’ve seen before. Lots of activities, cool work and very cool people from literally all over the world (although the other interns were mostly from Europe).
Google was more or less a mix all my last three co-ops. It had all the good parts and very little bad parts. There was the “security” of a large organization like IBM, the geeky feel and freedom to choose your work similar to Sun Microsystems and the passion, energy and opportunity to impact an extremely large amount of people like Tagged. It was pretty ridiculous. The downside might be that there is a little bit more bureaucracy than in a real startup, but nothing that gets in the way too much as you always have a ton of work to do, and it’s very possible to work on things in parallel (with great tools like gmail!). Sydney is also on about the same level as San Francisco.
There’s a lot of posts about working at Google, so I won’t go into much detail. Suffice to say, it was great, and I can’t imagine much at all that could have made it better.
I think it was a good run, but others have undeniably done just as well or better. My advice for fresh co-op starting out in this program is three things.
- Ask for reviews of your work and performance frequently and take them seriously
- Try to learn as much as you can from your mentors/managers/peers
- Don’t work too much and explore the crazy cities you are in