Thoughts from St. Louis: Interviewing and Campus Talk

I had a good trip to St. Louis this week.  I did two days of interviews at WashU and gave a presentation to a group of about 30 students on campus. 


The interviews went very well, I was impressed with the caliber of students that I interviewed, I have some hard decisions now on who we “fly-back” for another round of interviews. 

WashU uses Java as its primary teaching language.  The thing that surprised me was that none of the people I interviewed really liked Java.  Their #1 complaint was that it is just too slow.  Usually when I pushed on this I either got generalization (it has to be slow because it has a GC…) but some pointed out real issues such as startup time, small device or even throughput problems. One notable quote was: “I want to use C++ because Java is a toy language”.  A lot of this push back struck me because *some* of the same criticism of Java can be applied to CLR based languages such as C# or VB.NET… I certainly hope an informed developer would not call C# or VB.NET “toy languages”…. Frankly I would not even call Java a toy language. 

At any rate, as I did the interviews, I made a few notes of some things I found myself looking at in candidates.  Hopefully these are some helpful tips.


Be concrete – I can best judge your potential and experiences if are explicit and use lots of examples.  Didn’t just tell me you lead a group project; tell me exactly what you did to lead the project, what worked?  What didn’t?.  Don’t just tell me you like Napster, tell me what you like about it, and exactly what features you’d add.


Let your passion and excitement show – I want to hire people who will LOVE what they will do at Microsoft.  Those people typically find a way to love what they are doing in school as well.  If you have a project that you love doing, let that show through.  If you don’t currently have one, get one!  Even if it is outside of your direct school work.  Don’t let classes get in the way of your education ;-).


Get curious – Many of my interview questions revolve around why things work the way they do.  For example, it is not so much that you need to know how DNS servers work or how Java’s memory manager works to do well at Microsoft.  But if you use the internet and write Java code every day and you are curious about the world you will likely spend cycles figuring how they work and why they work that way.   


What you know maters, not your grade – Certainly, I look at the GPA, but I know it doesn’t tell the whole story.  Don’t take the easy classes to pad your GPA, I have (in previous trips, no comments on this trip, sorry) passed on 4.0 masters students and hired 3.0 undergrads.  Take the classes that will challenge you.  Do some AI and/or compiler design classes… do some projects outside of class. 


Love your mistakes – If you are not making noteworthy, meaningful, costly mistakes, you are not taking on challenging enough projects.   Don’t be shy to talk about your mistakes; I’d be worried if you don’t have any!  The most important thing to me is what you learned from your mistake.  How did you get smarter as a result?  What would you do differently if you had it to do over?


Come ready to code – Every CS major I interview gets to code.  Obviously the problems are different for developer candidates than for PM candidates than for developers in test.  By if you are in CS, you should be able to write some fairly simple code on a whiteboard.  I like it because it is so concrete… It is very hard to BS your way through a coding question.   That is not to say that everyone at Microsoft codes all day long (many do of course), but it is an easy way to demonstrated that you have learned.  Syntax maters, but more importantly I care about the whys.  Why did you use a recursive solution? Why do have to test for null there?  Why do you have to iterate through the loop again?



Last night I did a talk to about 30 students (mostly CS undergrads).  I did the standard intro to the CLR, plus I threw in a few bits about V2.0.  This was a good talk for this audience as only a couple of folks had any .NET experience, but they had lots of Java experiences (Java is the teaching language at WashU).   Microsoft kicked in giveaways (software, t-shirts, my poster etc) and pizza.    What I think was most interesting to the students was the Q&A time where the discussion turned from deep technical facts about how the CLR works to life at Microsoft and generally the tech industry trends.


I had a chance to talk about my own interview process at Microsoft.  (Which I talk about in my recent .NET Developer’s Journal interview)


I described what it is like to take “bugs” through the IE 4.0 war team.  During then end game of a project we want to control the amount of changes that go into the code base.  Because something like 1 out of every 3 bugs fixes causes some other bug, we want to be very careful about what we fix.  So, at the end game, each bug fix has to be approved by the “War” team… a team of senior leaders with the experience to know which are the right bugs to fix.  As a release PM I presented my team’s bugs one-by-one to the IE war team nearly every day.  It was a grueling process that forced me to learn my product inside and out in order to stand up to questioning from the war team and I got a chance to hone my interpersonal skills as I learned how to communicate with the war team, devs and testers under very tight time schedule.


The students where very interested in the competitive landscape Microsoft finds itself in.  We discussed Mono and in general what Novell is building and how it affects Microsoft.  FireFox and IE were the source of some good discussion as well as the general position of “open source” world. One of the students asked me if I expected MS to follow IBM’s business model.  IBM makes a huge amount of money on consulting services and MS makes a huge amount of money making software that is easy to use.  I argued that these were diametrically opposed business models.  I don’t see IBM doing what MS is doing, and I don’t see MS going after IBM’s model.  We have different views of the world. 


Lots of good comparison questions on Java vs. CLR.  How generics in Java differ from generics in C#, performance difference in JIT’ed java code vs. NGen managed code.  Etc. 


I, of course, plugged by blog during the talk, so I may now have some readers that were at the presentation… if you were please add your comments here on the most interesting part of the talk for you.  I’d be interested in hearing from you.


Overall a worthwhile couple of days…

Comments (6)

  1. Hi, I’m a graduate student of the University of Trento – Italy. I read your post with some envy.. events like this don’t happen quite often here =) if at all.. =(

    I’m starting to work on my MsC thesis, on compiler extension for concurrent languages. And I like it, very much. I like seeing what a compiler can do, how can use the CLR to do some ‘tricks’ and I enjoy the research.

    So I’m trying to apply for an intership at Microsoft research to continue the job I’m doing. I chose FSE, the division of Shulte, because they are already working on a C# extension called Spec#.

    Do you have any advice? Do you know if here in Italy there are similar events?

    Thank you very much!


  2. Another thing. Here at my university Java became the teaching language as well. But we had our first OO class in C++ and we had classes in which used functional languages (ML and OCaml) as well.

    Now (as a grown-up =) ) my opinion is different, but I recall the first impressions using Java. For a newbie programmer, a first lesson in which the first line of code is

    public static void main(string[] args)

    is too much. There are 5 different constructs to explain in a sigle line of code, and the explanation is almost always "don’t worry, skip it".

    IMHO, students look at java as a toy language because of the way we learn it.

    For me, with a C++ background, was frustrating using Java because nobody taught me that I had to change the way to program. Not having a destructor, no stack allocated objects with automatic lifetime, no pointers (but NullPointerExceptions)… I continued using java the way I used C++, and the only result I could see was an increased load time, and sometime an increased run time.

    Not having the possibility to allocate object on the stack with automatic lifetime is still a thing that don’t please me, and also the lack of templates (I used generic programming much more than OO programming), but as I learned the way Java works, and later the CLR works, helped me programming better.

    Have an insight at how things work is fundamental to use a tool/language/platform well. And also, having the framework do things that are impossible in C/C++ makes me happy: metadata, strong typing and delegates are my favourite things provided by .NET

    Hope this helps =)


  3. Brad Williams says:

    Is it really surprising that students talk Java down during an interview with Microsoft? Sounds like some of them could have done it better, though, if you’re wondering how they could still like the CLR. Maybe they should have expressed disgust for primitive type wrapper classes or for throws.

  4. Kent says:

    I’m an ex-Java programmer with approximately four years experience and two years .NET (C#) experience.

    The most frustrating thing I found with Java was the community. It is so slow moving. For ages language features like enumerations and generics were deemed unnecessary. That is, until C# announced that it would support those features. Then there was a flurry of activity to incorporate support into the Java runtime. Java 1.5 (or Java 2, version 5 as it has been versioned) finally supports enums and generics, although the generics implementation is questionable at best – which leads me to my second point . . . backwards compatibility.

    One of the goals of the JVM is backwards compatibility. This is all well and good until you start sacrificing the quality of the language as a result. For God’s sake, why didn’t they just break backwards compatibility with V5 and make Java 3, version 1? Then they could have purged all the awful API mistakes and implemented features such as generics in a much nicer and efficient fashion. If language features such as generics don’t warrant a breaking version, I don’t know what does.

    It’s a pity – I really liked Java as a language and I feel as though it is Java’s community that is hurting it, not the language itself.

    Slightly back OT: my Uni experience (Uni of Adelaide, South Australia) was dreadful. The content was woeful and *wasn’t teaching me anything*. I don’t mean that in an arrogant way – I mean it was just too basic. We never had any interesting chats from industry experts like yourself and we were forced to buy shockingly boring text books authored by – wait for it – our lecturers. I stuck it out until mid second year and then quit and attended a private course.

    We used predominantly C/C++ and Ada at Uni – not a scrap of Java. I think it matters more how programming is taught than what language is being used. Sure, the language matters to a certain extent – you wouldn’t want Uni courses in GWBASIC, for example.

    I think languages like Java are prefered by Uni lecturers because *it makes their job easier*. They don’t have to explain such complexites as memory management, how strings are represented internally etcetera etcetera. Now these things don’t matter so much in Uni environments but they are critical to writing well-performing and well-behaved apps in the real world.

    Anyways, I could go on but no one is probably reading anymore so I’ll stop 🙂


  5. Thanks for the tips ! …… someday 🙂

    I’m just so so happy to find somebody calling Java a toy language 🙂 4 years back when my friend went to usa, he used to say that ppl here call VB6 a toy language which he knew I used in office. And he used to be learning Java all the time and taking its courses, and I used to be like "man forget about Java, learn c++, it’ll teach you more about CS.". And now, whenever he comes online in chat he is always asking me things about and C# 🙂

    Can you elaborate on what kind of coding problems do u present?