SC08 Student Competition

http://sc08.supercomputing.org/html/CarnegieMellomExcels.html (Mellom?)

I was invited to compete in the SC08 student competition last November (yes, I’m behind on my blogging, I know). It was a fun couple of days: it’s amazing how much companies spend on convincing other companies to buy things from them. Some highlights:

  • Microsoft dressed up all of their booth reps in AstroTurf (they had a golf theme)
  • One of my teammates won a Wii raffle
  • There was more computing power than I’d ever seen
  • Winning the competition after 8 hours locked in a conference room coding

I’d like to give two incredibly huge thank yous:

First to the Pittsburgh Supercomputing Center for sponsoring the trip. They were really great, letting us do more or less what we wanted, and paying for everything. Thanks for putting up with us Laura!

The second to nVidia for their last minute donation of a prize. My entire team got Tesla C1060 GPGPUs. These things are insanely powerful: we got to program on them for part of the competition. Talk about generous: we had already won and it came up in some post-victory chats with nVidia reps that we got to program with their CUDA architecture (surprisingly easy), so they figured they’d let us keep coding on them. Now all I need is a kilowatt PSU and a mobo with 2 PCIe slots. Either that, or the card pays for my upcoming trip to San Juan ;).

Job Hunt Post Mortem

I’ve been meaning to write about this for a while, but I never really got around to it until just now. I wanted to share some experiences from my big job hunt.  It was definitely a fun experience: during last November alone I was on over 20 different airplanes.  I had at least preliminary interviews with over a dozen companies, and ended up with a really tough decision between two amazing options.  But more on that later. There are many different types of companies that I ran into in my interview process, and here are just a few experiences from them.  Note that whatever I say about these companies, I have the utmost of respect for them all.  They all treated me very well, and I had a great time interviewing with them (and I’m not just saying that on the off chance that they read this).

Job Fairs / Standing Out

The only place I looked for a job was Carnegie Mellon’s job fair.  It’s a really amazing experience: over 200 companies show up, most in the technology realm.  Thousands of students run around in suits trying to convince companies that they’re special: different than all of the other students running around in suits.  I had the opportunity to help a big company I was interning at a few years ago with manning their booth.  I collected resumes for a few hours, and honestly it was incredibly boring.  Most students slipped me their one page resume, gave me the same spiel about the courses they’re taking and the random programming job they did, ask me what I do, and wandered off.  Very few people stood out.  The ones who left a lasting impression on me had one or more of the following traits:

  • A really interesting story to tell about a problem they solved. I mean like get-a-rocket-into-space interesting.  No, not how you figured out how to multiply matrices on CUDA architecture, I want to hear something even a fifth-grader would say “awesome!” in response to
  • A unique background. I was more interested in a freshman who had been consulting for 3 years than a senior who had done the same.  Or even just a freshman who had the guts to show up at a job fair after only being in school for a month.  That’s exactly what I did, and I got tons of raised eyebrows and kudos (and an internship).
  • Personality! One guy was so incredibly energetic and excited to meet me that I couldn’t forget him.  Note that I really don’t recommend trying this unless you have the charisma to back it up, because faking that is incredibly difficult to get away with.  For a more toned down example: I ran into a company this last job fair that I really wasn’t looking to talk to (we had one of those you-made-eye-contact-now-you-have-to-talk-to-me moments).  We started talking and they admitted that this was their first job fair, as they used to not target recent grads so heavily.  My response was “Job fairs suck, don’t they?” and launched into my stories from working one.  The discussion had nothing to do with getting a job, but the friendly banter ensured they wouldn’t forget me.  My recruiter instantly remembered me by first name when I called her a month later.

Other advice for job fairs:

  • Learn to love people. One of my greatest assets at job fairs is that I genuinely love meeting new people.  Each booth I stop by is not only a chance to hear about a potentially interesting product (and get free swag), but also to meet someone and find out what they do.  It’s great practice for real life too: if you make an ass of yourself to a recruiter, odds are you’ll never see them again, whereas doing the same for a coworker or classmate would have longer-lasting implications.
  • Talk to as many people as possible. I’d much rather talk to 10 companies I’ve never heard of than wait an hour on line to talk to someone from Google (they require everyone to apply online anyway).  I had literally never heard of the company I ended up accepting an offer from.  Also, you can always decline interviews later on, but this is your best shot to initiate contact with these companies.
  • Relax. No one likes talking to someone who’s nervous.  It’s awkward, and shaking a sweaty hand is gross.  I would say for those who are always nervous that they should take a shot or have a beer (just one!) before hitting the job fair, but I’ve never tried this personally and can’t be held liable for the consequences.
Bad Interviewers

I had my fair share of botched interviews, but about halfway into my job hunt I realized that it wasn’t always my fault.  Sure, sometimes you walk into the room and instantly become stupid, and sometimes you’re just in the wrong place at the wrong time, either literally (I slept through an interview once) or figuratively (I once commented that I hate SML, only to immediately hear from my interviewer that “SML is my favorite language”). But other times the interviewers themselves suck, and there’s nothing you can do about it.  I’ve had awkward interviewers who didn’t seem to get how the process was supposed to work: they gave no feedback.  This wouldn’t be a problem for easy questions that everyone should be expected to answer, but some of their questions were the type that people aren’t supposed to know the answer to.  The goal is to start a discussion and evaluate process, eventually working your way to an answer.  I was told in a phone interview to “think about it and email me”, which is usually code for “I want to stop wasting my time with this call”.  I’m not going to eliminate the possibility that I just suck, but everyone I spoke to about the problem agreed that I couldn’t be expected to solve it without prodding.  Some people just don’t know how to run interviews, it’s the luck of the draw.

How much I cared in my classes

GPAs

I’ve never cared much about my GPA.  I would rather have an interesting consulting project than focus more on my grades hands down.  My mentality is that if a company values a high GPA over actual experience, I have no desire to work for them.  It turned out this was the right call, since only two companies that I was interested in asked for my GPA.  One still asked me for an interview, and the other only asked on their web form they made everyone fill out.  The other 20+ companies I handed resumes to didn’t even mention grades.

Warning: I am not advocating ignoring your classes.  Everyone has an average grade they would get if they put in their “I feel obligated to do at least this much” level of effort.  I was comfortable with what mine was, so I didn’t feel the need to do more.  Yours may not be in the same place: I recommend evaluating this carefully before making a decision on level of effort in classes.  Also, Carnegie Mellon has a reputation behind it that I’ve been told companies value more than GPAs.  If you go to a different school, your mileage may vary.

Wine-and-Dine Companies

These companies pull out all the stops for you, either to try and buy your love or just to give the impression that they’re doing really well.  One company flew me out twice, and both times sent a town car for me and put me in a $500/night hotel.  Then they took me out to really nice restaurants on interview day, including some really good (and I’m sure expensive) sake.  Granted, I think this particular company operated like this on a day-to-day basis, and all companies do it to an extent (one rented out an upscale lounge and had an invite-only event with an open bar for potential candidates), but my point is don’t let it affect you.  I let myself get sucked into the magic, and it clouded my ability to properly evaluate the company. It also made me more nervous during interviews.  Some companies provide lots of perks, some spend tons of money on little things, and some don’t.  While it’s important to evaluate these things when considering a company, be sure it’s weighted rationally.

Offer Negotiation

No, I’m not going to talk about salary negotiations, you’re on your own for that.  One thing that was important to me when deciding on an offer was my non-compete.  I’ve put a lot of time into building my relationships with my clients, and I don’t want to have to destroy that for a full-time job.  I also get bored easily, and like being able to work on projects without having to worry about whether or not I can open source them.  Also, if I get bored enough I could always tend bar on weekends, and I want to feel free to do that (surprisingly enough most of the non-competes I saw from outside of California barred me from doing that).  Having a paralegal for a mother means that I tend to assume the worst when it comes to legal stuff: I hear too many horror stories to think otherwise.  That’s why when I saw a non-compete that prevented me from doing any of the above items, I knew I couldn’t accept the offer as-is.  I was pretty upset, since that company was one of my top choices.

About a day after I saw the non-compete and knew it was a deal killer, I got a call from the CEO of the company (a really kind gesture that I didn’t expect) asking if I had any questions, so I mentioned this to him.  He told me that of course the company wasn’t looking to stop me from doing reasonable things, only not run to their competitors.  I mentioned that I had a family member who was in law, and he said that I was more than welcome to have her change it.  A little legal back-and-forth later and we had a new non-compete that everyone was happy with.

The moral of the story?  Negotiate!  If a company makes you an offer and you’re not happy with a part of it, whether it be paperwork, benefits, or plain old salary, say something.  Keep in mind that the company has decided they want you: at this point you’re both on the same level in the negotiation, since they need you as much as you need them (give or take).  The worst that could happen is they say “no”, in which case you’re no worse off than you were before.

My Story / Final Advice

So having learned all of this, I finally reached the end of my job hunt.  I had narrowed things down to two offers, and for the life of me I couldn’t decide between them. The salaries were comparable, both had great projects to work on, and both teams were awesome.  So I made a list. And I stayed up at night thinking. And I asked everyone I saw “Silicon Valley or Boston”, with mixes responses. In the end, it basically came down to two things. First, I had been in Silicon Valley for the last two summers: I knew it very well, and I considered that a bad thing. I wanted to try something different. I knew that I could always go to the valley and I would be comfortable there, but I worried that once I went there I would be too comfortable and settled to leave and regret it. At least if I went to Boston I would know enough about both places to decide which one I’d prefer. Second, Boston was closer to home. The though of being able to be home for Rosh Hashanah, something I haven’t done in 3 years, was comforting. There’s a lot to be said for being 4 hours away from family instead of 24.

So there you have it: in the end my decision came down to location, having nothing to do with the actual companies (with a touch of irony in that being in the valley drove me away from it, even though I loved, and still love, the area). It’s with that that I am thrilled to announce I will be joining TripAdvisor’s New Initiatives Team in May. My other option was Mozilla’s Webdev team, which I also would have been thrilled to join (having interned there, I can safely say that it is a wonderful place to work with an amazing group of people).

What final advice do I give? Try something new. I’ve never lived in Boston before, and while it’s scary to think of going to a new place when I could have had something I already know, I take comfort in knowing that I’m putting myself out there and trying different things. Challenge yourself to break out of whatever mold you’re in: challenge your assumptions and decisions every step of the way.

Also, if you’re looking for a job I’d highly recommend checking out TripAdvisor or Mozilla, they both have great people, and I feel privileged that they both felt highly enough of me to make me offers.

Why Software Engineering Sucks

Updated: Additional clarification added to the bottom of the post.

I’m currently taking two Software Engineering Master’s courses. I’ll be graduating in May with a minor in Software Engineering, and I can say with absolute certainty that software engineering sucks.

I’m sitting in the back of one of my classes listening to a professor talk about software architectures. He’s explaining why and how architectures should be built. I can’t disagree with anything he’s saying…he’s talking about modular code and reusability, and explaining the levels of complexity of different types of architectures. That’s great, and I definitely see use for software engineering and how it can help make development simpler and easier. But software engineering sucks.

“But why does software engineering suck Brian?”

Software Engineering Does Not Promote Innovation

This can be summed up in a quote by a fellow student in one of my SE courses. I was explaining my reasons for not liking software engineering, which I’ll get to in a moment, and he responded:

“I think following Software Engineering processes is the most important thing”

What? Have we really gotten so abstracted from the end goal that the process becomes most important? What happened to actually developing a good product? Here’s my list of priorities when developing a product:

  1. Develop a product I’d be proud to have my name on
  2. Achieve the client’s goals
  3. Learn new technologies

Notice that there’s no mention of process on that list. I don’t care what process I use, I care about the result. Software Engineering makes people dumb…it encourages them to follow a series of steps without evaluating the appropriateness and applicability of each step along the way.

Too often I see people follow these processes to the letter, sometimes due to their own ignorance, and other times due to the process itself (and management’s enforcement of it) leaving little room for innovation. How can there be innovation when individual programmers aren’t encouraged to think about something as small as the process they follow. Companies should be encouraging programmers to question everything every step of the way. Some of the best business ideas come out of programmers questioning current business paradigms (see countless Silicon Valley startups if you need examples).

A-Teams Don’t Need Software Engineering

Consider the following two groups. Group 1 is full of brilliant, self-starting people who are good communicators. Group 2 has a spectrum of programmers with varying levels of programming and communication skills. They’re both working on an internal tool for a 100 person company that handles money-related tasks, let’s say payroll.

Group 1
Group 1 sits down with management and asks “what does this need to do?” They ask the right questions, and burn through the meeting quickly. Then the team sits down with a whiteboard, draws out what they need the system to do, and talks about security. They copy down their work to the intranet, split up tasks, and go write the system, checking in with each other every once in a while. After the system is done, they test it thoroughly, perhaps write an email to the QA department telling them to really pound the security aspects, and release it.

Group 2
Group 2 performs an initial requirements analysis. They pump out pages and pages of documents with complex diagrams. They review the documents. Then, when they have every item speced out, including class diagrams, functional requirements, and every little detail such that even a monkey can code it from there, the team meets. They split up the work and write it, documenting every tiny thing along the way, and meeting every morning to discuss how they’re doing. After the system is done, they collaborate with QA to produce another large document describing every little detail of what was written, and how to test it, again even a monkey could execute the test plan.

Both plans will produce perfectly good products. However, an extremely talented individual will be incredibly frustrated in Group 2, since he will be pumping out form documents and going over every little detail that won’t make him more productive. On the other side of things, a mediocre programmer will be incredibly frustrated in Group 1, because he’ll be forced to make a decision that he doesn’t have the experience or knowledge to make, and he won’t have the wherewithal to ask for help. He’ll inevitably fall behind and not think to mention it to anyone. The problem with the first situation is that it’s dependent on every programmer being brilliant.

So we have reached the core problem: not all programmers are brilliant (and I’m not saying that I am or am not). Microsoft needs to use SE processes since they need too many programmers to guarantee that each one is brilliant. I’ve seen 100 person companies that are careful enough with who they hire that they are all Group 1s. That’s right: every single one of their employees grasped the big picture, did their jobs well, and were smart enough to ask for help when needed. My personal principle is that if you’re not smart enough to be able to communicate well and produce good code without a strict formal process, I don’t want to be working with you.

Another way to think of this is that the amount you can rely on programmers to make decisions is capped at how much you can rely on the worst programmer (or, as Penelope Trunk, who’s blog I’ve recently become a fan of, puts it: “you should always hire A players because one B player brings everyone down”).

That’s why many software companies spend so much on employee perks – video game consoles, free food, big monitors – because attracting good programmers creates more ideas, better codes, and less managerial bullshit. If the best programmers may make you a million dollars practically overnight, don’t you only want the best?

Let me be clear in saying that I don’t think programmers should hack away all willy nilly. In my education I have found that one of the main caveats of SE is the idea of bringing a set group of processes to the table, and I resent that. Otherwise I have no gripe with the concept of a “process”, but I don’t think one should have any paradigm in mind when starting a project. As an example, I recently gave a presentation on a practicum I took to a large group of SE professors and researchers. I got into a discussion with one of them at the end of the talk, and I mentioned that my team, though technically following Scrum, only met once a week because there were just two of us contributing 12 hours a week each. He replied “then that’s not Scrum”. This is a perfect example of my point: SE in its current form places too much emphasis on process. That’s all I’m saying…perhaps my title is a bit misleading.

Key Adventures

Fun story: I needed to borrow a friend’s car today. He gave me his set of keys, and said if he found his spare he would swap them. As I was leaving, he ran out. He had found his spare, and tossed them to me. My hands being full, I missed them, and they slid right into the vent behind me. They made a cluck as the hit the bottom of the vent. Then a few seconds later they made another clunk as they flew into the wall below. We both looked at each other and burst out laughing.

The next hour and a half was a parade of ideas and experiments trying to get to the keys. The opening in the vent was about 3 inches thick and twisted around a block of cement such that hands wouldn’t fit in the gap. Throughout the evening ideas were suggested that ranged from a coat hanger with a hook to an electromagnet plugged into a 110-volt outlet (we have a lot of Physicists and Mechanical Engineers in the house…).

We started with an exploratory mission: we taped a flashlight to the top of a webcam, taped the whole thing to a coat hanger, and lowered it into the vent. After a bit of digging we found the keys:

Keys in a Hole

We then spent about an hour sticking every contraption imaginable into the vent trying to grab the keys: magnets, hooks, balls of duct tape. The gap was just too small to maneuver. Finally, everyone had given up as I struggled with the hanger, and I too eventually gave up and went downstairs. That’s when another friend and I decided to try to get into the ceiling of the second floor instead of the floor of the third floor. We took apart a big light fixture, stuck our heads up, and lo and behold, we saw the light from the webcam contraption we still had sticking down the vent. From there it was a hooked wire and some careful reassembly, and we were golden.

Lessons Learned:

  • Open vents on the floor are a bad idea
  • Either I suck at catching or my friend sucks at throwing
  • If your current approach isn’t working, try a completely different one
  • When you get your friend’s keys back after he throws them in a vent, don’t scare him by throwing them at him

f8 Keynote Goof

During Ben’s talk at the f8 keynote they came to a slide where they discussed Academics, and listed a bunch of companies who were either teaching courses on Facebook (*cough*98-096*cough*) or doing research.  I know that Carnegie Mellon is doing research on Facebook, and have yet to find anything on Central Michigan doing such research.  Looks like someone screwed up when making this slide…they image searched CMU and pulled the wrong logo…

FB Ecosystem - Without Carnegie Mellon!