MS Q&A

1. How did you first get interested in computer science and tech and what do you most like about (or doing with) computers now?

 

I've always been into problem solving. When I was little Lego was my favorite toy and I even participated in competitions. I loved exploring the possibilities of the blocks and pieces, and trying to find new and cool ways to put them together.

 

I first got interested in computers when I got to play with my neighbors C64 around the age of 11. After nagging down my parents for a while I ended up with an Amiga 500 and started fooling around with Amiga Basic. At 15 I built my first PC and played with QBasic. Since then I've been a computer and gadget freak, with weak spots for everything new and shiny. During school I originally planned to study law, and actually started doing just that, but after not even a year I figured out that computers was where I wanted my career to go. During my studies my ambitions specified into software development, which now is what my mind is set to do.

 

I look at software development as building with Lego. The more you know about the building blocks and tools at hand, the more options you have for creating functional, solid and changeable constructs. Additionally the creative process in figuring out these solutions is greatly improved with a good team, either with Lego or a .NET application, which makes it a social process as well.

 

 

2. Briefly describe what you see as your ideal job here at Microsoft.

 

Ever since I got my Amiga 500 I have been "on my own" in the learning process. Even during my bachelor studies I had a stronger drive than my peer-students. I have always searched for good developers to learn from, searched for a mentor, so to say. But so far I haven't been able to get into an environment where I have felt "mentored".

 

This is one aspect of why I want to work with Microsoft in general. I know there will be extremely intelligent people to work with, and I know I will have to make a great effort to meet their standards.

 

My ideal job would be to participate in a team where I would be a part of the design and architectural process. I enjoy the creative aspects of modeling and problem solving on an abstract level. In combination to this I'd like to put solutions to life programming managed code in C#.

 

I have a strong interest for software architecture topics and would like to contribute to the improvement of practices in the industry, directly or indirectly. I would also appreciate being in a project that involves community work, like GDN, MSDN or the Patterns & Practices initiative.

 

In general my main goal is to work in a team where I have the opportunity to grow together with my colleagues.

 

 

3. What are your strongest programming languages?

 

In school we used C++ for three projects. After that we went over to J2SE and then J2EE. I did some VB6 on the side in my one-man company, and when VS.NET was released, I started up with C#. C# has become my language of preference and I have used it in several projects the past two years. I have chosen to focus on C# to become as efficient as possible.

 

4. a. When was the last time you wrote C/C++ code?

 

The last time I wrote C++ code was in 2001, in the first year of my bachelors degree. I am completely focusing on C# at the moment although I believe the gap to getting efficient in another language is not very big.

 

 

4. b. What is the largest number of lines of C/C++ code you've personally written for one solo (not group) project? Did you write all the code yourself or did you use VC++ or other libraries?

 

My C++ experience is limited to three major projects. The first was a 2 semester RUP project where we were to create a complete booking system for flight tickets. We were supposed to share coding responsibilities, but in the group of 4 I did 95% of the coding. I am uncertain about the actual number of lines of code. We were working with Borland C++ (not C++Builder, but the stripped down free version) and used a range of STL libraries, mainly for basic list and vector needs. GUI was coded in basic commandline/ansi from scratch.

 

The second project was the first year programming competition. We were supposed to code a snakeclone with Borland C++. My friend and I submitted the winning game. He wrote most of the graphics functions while I wrote the game logic. The snakeclone used DirectX libs for graphics and FMOD libs for sound. The biggest challenge was to customize the DirectX code for the Borland compiler. The game included an Intro scene, a menu with high score, different snakefood, sfx, music and credits-screen on end.

 

The third project was a PalmOS application created in the IDE Falch.NET for Norwegian company SportSys. The application gathers information about exercise and training for athletes on the move, and lets them sync their data back to their web-accounts when they return to base. The sync application was written in VB6. This application was not large in code lines, but complex because of the limitations of the PalmOS, hard-to-debug sync, and unconventional (to me) storage mechanisms. The finished Palm application was less than 6k.

 

 

5. In a sentence or two, tell me about the most difficult group or solo project you've worked on recently including languages used and your role. If you could go back and do something differently, what would you change?

 

The most difficult project I've been working on lately has to be my bachelor project with EDB Syscon. Being the group leader of a J2EE reengineering project posed challenges as; determining stakeholders’ whishes/needs, taking advantage of existing reengineering methodology, compromising functionality vs. available time, and getting the most out of 5 group members while keeping the morale up.

 

For a similar project in the future I would place more emphasis on forcing the stakeholders to choose a specific reengineering/migration strategy. I would also spend more time on investigating the non-functional requirements in the organization (development frameworks, database limitations, code standards and tools). I would also have demanded more stakeholder involvement, as this lead to significant setbacks when the right people did not have the time to review in time, and we were working on inaccurate premises.

 

6. In a group project situation, what role do you usually play and what do you like about it?

 

In the group projects I have participated in so far I have been project manager, (lead) programmer, and architect. I have also done projects on my own, thus occupying all the roles.

 

In group projects I often find myself in a leading position. In school I was often asked by the group to act as project manager. But, as I enjoy coding and design of the product a bit more than maintaining GANTT diagrams and doing follow-up, I tried to choose different roles to gain the experience.

 

Being a PM attracts me because of the ability to participate in every part of the development process. I also enjoy making a team work together and produce results. The PM role also gives you the opportunity to work with people which is rewarding because I am a socially outgoing person.

 

My main drive for the programmers role is the ability to have complete focus on the problem at hand. I enjoy exploring the problem domain and identifying alternate solutions with the tools and technologies available. As a programmer I find it challenging to balance between speed of development and code/design quality, between perfectionism and effective project drive.

 

 

7. If you've got software testing experience, or you've spent lots of time testing your own code, and you enjoy it, what is it about testing you enjoy?

 

In our school projects we mainly used the Rational Unified Process and our testing efforts were focused on Use Case testing and simple manual unit tests.

 

In my more recent .NET projects I have used NUnit integrated with VS.NET and gotten rewarding results from it. Switching between strict Test Driven Development (test-first) and more loose writing of test fixtures on implemented classes I found myself saving a lot of time and producing better quality code. Especially in writing business-, and data access components this became evident. I no longer had to worry about bugs in the lower layers when writing asp.net, windows forms, .NET Remoting or web service front ends for my applications. It is worth mentioning though, that good tests are difficult to write. They need to be revised in an iterative manner as the real code. I still feel I have a lot to learn about writing good tests.

 

 

8. Do you like taking things apart, and if so, what is the most recent thing you took apart and why?

 

I want to know how things work. I have probably taken apart any electrical appliance and gadget available to me up through the years. The past years, physical disassembly has mainly been limited to practical purposes (like installing more ram in my moms computer). Today my disassembly urges gets satisfied to a large extent by digging into API's or unfamiliar code or applications.

 

Basically it's all about curiosity. The past couple of months I have been traveling through Cuba, Mexico, the US West coast, and Canada. My curiosity has been on high alert the whole time, absorbing local customs, social behavior, mentality in different subcultures and so on. In a way I have taken all the places I've been to apart, by constantly asking questions, reading literature, listening to guides, talking to locals and through own experience.

 

Now, close to the end of my journey, I am stilling my curiosity about getting to work for Microsoft.

 

No Comments