In dev.life, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.
Today’s guest is Jared Parsons, Principal Developer on the C# Language Team at Microsoft. He is also the creator of VsVim, a Vim emulator for Visual Studio. He writes regularly about development on his blog.
Location: Kirkland, WA, US
Current Role: Principal Developer at Microsoft
How did you get into software development?
I didn’t really get into computers until high school and even then it was just to sneak into the computer lab to play Civilization II. Games weren’t really allowed, but the teacher agreed to let me keep playing if I’d agree to take the AP programming class next year when I was a senior. She showed me a bit of Pascal in preparation. I thought it was interesting, but I wasn’t truly engaged by programming at the time.
That all changed after a prank my friend, Sam, and I pulled our senior year. Sam was much more into computers than me and had found out about WinNuke. It was a simple command line tool that would blue screen any computer running Windows. All we had to know was the IP address and we could crash a machine a friend was working on from across the room. This of course required us to physically log into the computer and find the IP address. We decided to map out a couple of machines in preparation for pranking friends the next day. After mapping a few machines, I noticed a pattern: the addresses all had the same three numbers at the start, only the last number differed and it was basically sequential. I wondered if all the computers in the school followed that pattern. Sam, one step ahead, used this tool I’d never heard of called Perl to call WinNuke with 256 different addresses. As he hit enter we looked up in amazement as every computer in our room and across the hall blue screened… and then we made a quick exit to avoid getting into trouble.
It was a silly prank, but it was also the first time I’d seen programming applied to a real world scenario. The idea that you could affect things with code was amazing and really peaked my interest in programming. Eventually, I ended up majoring in Computer Science and I’ve been obsessed with programming ever since.
Tell us a little about your current role
I’m a developer on the C# language team. I’ve been working on all aspects of programming for the last nine years at Microsoft: everything from the compiler to the debugger. The last four I spent working in research on an extension to the C# language focused on performance and reliability. Recently though I rejoined the C# team and am looking to transfer some of the positive outcomes of the research back into the shipping C# language.
In my spare time I develop a number of tools, my favorite of which is VsVim. It is a Vim emulator for Visual Studio written in a combination of F# and C#. I started the project about four years ago and it still takes up a good chunk of my free time.
You’ll also occasionally find me hanging out on stackoverflow.com…
When are you at your happiest whilst coding?
When I’m refactoring or cleaning up old hacks in my code. It’s extremely satisfying. I often have to drag myself out of large cleanup operations just to get real work done.
What is your dev environment?
The one tool I cannot live without, no matter what platform I’m working on is Vim. Either using Vim directly or installing a Vim emulator into whatever editor I’m using at the moment. I started using Vim in my sophomore year of college and now, years later, the key bindings are simply burned into my brain. Sure the keystrokes necessary to do simple edits look like gibberish at first, but once you get past that initial learning curve it becomes a big productivity enhancer.
My biggest quirk is that I prefer an office to a team room environment. Not because I’m anti-social or subject to distraction (I’m actually quite chatty). It’s just that every now and then my computer doesn’t behave correctly and it needs a stern talking to. In a private office, I can close my door and tell my computer what I really think about it. In a team room environment, I’m just not sure how that would work.
What are your favorite books about development?
These are the books I recommend to all programmers:
- The Pragmatic Programmer by Andrew Hunt: Overall solid book on how to approach programming, in general. It’s a book every programmer should read.
- Purely Functional Data Structures by Chris Okasaki: Like many developers I learned programming on mutable data structures and imperative languages. It wasn’t until I left college and picked up this book that I was introduced to immutable data structures and functional programming. Learning these techniques gave me a whole new perspective on programming and fundamentally changed how I approach algorithms. It’s a must read for anyone without a strong functional background.
What technologies are you currently trying out?
I’m a language geek and every year or so I try and pick up a new language. It’s a great way to keep a fresh outlook on programming. Every popular language is great for something and occasionally I can find ways to incorporate that something back into the work I’m doing.
This year I’m going to learn Ruby. I’ve spent the last year or so on really tough static type system issues in C# and I feel the need to branch out. Ruby is about as far away from those problems as I can get and still be learning a new language.
When not coding, what do you like to do?
When not in front of a keyboard, I’m a very active person. I play soccer year round, run a couple of times a week and occasionally bike to work. In the summers, you’ll find me hiking around the Pacific Northwest with my wife Emily and our dogs.
What advice would you give to a younger version of yourself starting out in development?
There is a couple of pieces of advice:
- Don’t ever settle for one programming language or technology. Keep trying out new things and pushing your boundaries.
- Get involved with the developer community: contribute to an OSS project, answer questions on stackoverflow.com, join a local user group, etc. Constantly engaging with other people will help push you to grow as a developer.
Oh and read, read and then read some more.
Thanks to Jared for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.