Justin Lín

Waterloo 4B

Why I Love Starcraft 2

June 8th, 2011 | Published in Waterloo 4B |  No Comments

*Sitting in a circle*

My name is Justin, and I’m a Starcraftholic.

..

No, but seriously this game is great. I think part of what makes it great (besides the cool look and well thought out UI) is that there are so many different dimensions to this game. More dimensions = more analysis = more depth = more fun.

The two basic dimensions of the game are micro and macro. They more or less have the same meanings as the meanings in economics. You need to micro your army to win battles and sustain fewer loses and you need to macro to make sure you are maintaining a stable economy and producing units. These two dimensions probably have the most impact on in influencing whether you win or lose the game. Although it sounds simple, it’s difficult to maintain both micro and macro at optimal levels during a game.

But, if you dig deeper, there are more dimensions to this game.

Timing: Economy of the opposing player is predictable (but you do not have complete information). This makes it possible to create strategies around attack timings where the opposing player’s economy is supposed to be weak. A simple example is that if you sense the player will fast expand, then a timing of before the 6 minute mark would be very powerful, but an attack after the 8 minute mark will usually result in a defeat.

When torrential water tosses boulders, it is because of its momentum; when the strike of a hawk breaks the body of its prey, it is because of timing. Thus, the momentum of one skilled in war is overwhelming, and his attack precisely timed. His potential is that of a fully drawn crossbow; his timing, that of the release of the trigger. – Sun Tzu

Building Placement: This often gets neglected and seems insignificant, but just your building placement has a huge influence on the game’s outcome. This post analyses the current preferred placement and suggests a better alternative. There is a ton of active discussion on all kinds of different building placements to counter different strategies.

The fact that roaches can target the weakest point of your wall even if you force field your ramp makes this rush a nightmare. Perhaps the best response is to wall-off completely with a pylon but then that pylon becomes exposed too. This is where our new wall-in really shines. The weakest parts of your wall are all out of harms way!

Race Mechanics: There are three races, each with their own mechanics. By playing the game you learn about the strength and weaknesses of each. Play by your strengths and exploit the opponents weaknesses: zerg cannot use their race mechanic without queens; snipe them.

Now, an army may be likened to water, for just as flowing water avoids the heights and hastens to the lowlands, so an army should avoid strength and strike weakness. – Sun Tzu

Meta-Gaming: This game already has strategies that have been discovered that exploit various dimensions of the game: cheeses. These strategies are typically devastating if you do not prepare for them, so people have started being able to detect cheeses using various clues: no gas, low wall-off, etc. One example is this infamous build, which has a low wall-off. Nothing forces you to continue the build after the wall-off, so by meta-gaming you can safely expand while your opponent is waiting for a rush that won’t come.

Thus, what is of supreme importance in war is to attack the enemy’s strategy. – Sun Tzu

Journey into the iPad

June 7th, 2011 | Published in Waterloo 4B |  No Comments

First off, I’ll admit that I’ve never been a huge fan of Apple products. I’ve owned iPods, but only because I received them as gifts or won them in raffles. They do the job well, but it wasn’t anything exemplary. All it had that was better than the competition in mp3 players was a nicer UI, as far as I could tell.

iTunes was horrible though what with all the random library deletions and mostly the annoying fact that I couldn’t just copy my music onto the device using a normal file manager. Also, it’s horribly slow and installs a ton of crap on Windows, kind of like malware.

Well, I recently received an iPad as a gift courtesy of Kontagent (great company!), and I’ve been using it for a few weeks.

My first impression was that this was really a luxury device. It pretty much did anything a phone could do, but with a much more convenient bigger screen size. The main things it did really well was videos and web browsing.

Then, I discovered the App Store.

Man, this thing was filled with apps that did the most useless things from 3D talking cats to newspaper interfaces (which I could just check in the browser). Shortly after though, I discovered other apps that I found extremely useful: Skype, Dropbox, etc.

To elaborate a tiny bit, Skype is pretty convenient to use on the ipad and the built-in mic is pretty good. Dropbox was good for putting travel documents (pdf’s of maps and itineraries) and have them available offline, instapaper was great for reading articles offline. Prompt is a great terminal, but the lack of a physical keyboard limits it’s effectiveness.

After a few weeks, I also learned about jailbreaking. I think it’s a testament to the ease of use of Apple products when your younger sister is able to learn and teach you how to jailbreak them. This opened up a whole new can of worms with even more apps.

Finally, I became pretty convinced that this type of device can fulfill about 80% of the use cases of a computer/laptop very well, and the other 20% or so relatively well (the main shortcoming being the lack of keyboard, so it’s a little bit painful to administer an ec2 instance). This is a pretty groundbreaking device despite the skeptics.

However, I believe it takes a fair amount of tech savviness to use it to it’s full potential. A friend of mine bought an iPad for his parents, and they have not enabled the app store after a year of use, let alone jailbreak. I still don’t understand why there isn’t a way to sign up for an account without submitting a credit card. The only other way to obtain apps is jailbreaking, of course.

What I’ve Learned from my Co-Op Terms at UW

May 20th, 2011 | Published in Waterloo 4B |  No Comments

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.

Epilogue

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

Dropbox: Achievement Unlocked?

May 7th, 2011 | Published in Waterloo 4B |  No Comments

I think I maxed out the maximum possible storage without winning competitions or paying money. Let me know otherwise!

Yea, I’m looking

April 12th, 2011 | Published in Waterloo 4B |  No Comments