Welcome to our continuing series of Code Project interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we catch up with developer, author, blogger and instructor Chris Sells, who we previously interviewed back in 2000.
Who are you?
My name is Chris Sells and I'm the Vice President of the Developer Tools division of Telerik, a developer tools and controls company (among other things). The US subsidiary for which I officially work is in Boston, whereas the division that I lead is based at the company's headquarters in Sofia, Bulgaria. I, on the other hand, live and work in Portland, OR, and travel to visit the team about one week per month.
What do you do?
I've worked on countless projects, the details of which since 1995 can be seen on my blog at sellsbrothers.com.
Most recently, I spent the last year working on the Windows 8 Metro-style app tooling on the Visual Studio team. I did a number of things on that team, but most visibility I was the team lead for the Metro/JS templates you see today in the Visual Studio 11 Developer Preview.
My typical day, in the abstract, hasn't changed much since I joined DevelopMentor in 1994. I keep a running list of things that I can do to help make developers' lives better: a blog post, a book, a conference talk, a product, a feature, a library, an answer to a question, etc. Based on that list, each day I dive in, either doing the work myself or working with the team I need help to make it happen.
The combination of individual work and team-based work is still important to me. Because of the time zone difference, when I'm not visiting Eastern Europe to work directly with the team, I spend the first three hours of the day doing the collaborative work in meetings or emails while my team is still awake, then I switch to individual work. This makes for a very nice mix, since I still need to code and write technical articles to feel like I'm really connecting with my intended customer.
It is very much the case, however, that 2/3 of my 28-year career has been focused on that single question: what can I do to make developer's lives better? It's been a very satisfying choice.
What is your development environment?
Of those, I spent 10 solid years on C++ and 10 more solid years on C#. Both of them has their pluses and minuses, especially in a mobile computing world, but C# is the one I turn to for my own personal projects. It has the right level of spell-check unit testing (AKA the compiler), tooling (I love reliable IntelliSense!) and performance for my own personal needs.
My dev box is a 15" MacBook Pro with 8GB of RAM, 512GB of SSD and 8 cores of I7 goodness. It runs Mac OS X something (Lion? Pussy Willow? Who knows?), but that was just so I could run Boot Camp and get Windows 7 on there, which is my day-to-day OS right now. I plan for that to change soon with Windows 8, which I currently run in a VM inside Windows 7 using VMWare Workstation 8.
What is your coding pet peeve?
My biggest coding pet peeve is inconsistent coding style in a single source code file. In a team I once ran long ago, we had a coding style guideline document with two rules:
- Keep the coding style consistent in every file you edit.
- Use spaces instead of tabs.
Rule #1 allows a developer to use their own coding style on the files that they spend the most time in, while also teaching other members of the team the merits of a coding style different than their own. Rule #2 is just good sense.
Another recent pet peeve is based on code I'm reading a lot in C# these days, which just uses "var" everywhere. I really love "var" as a shortcut when I'm creating an instance of an obvious type:
var x = 42; // an int
var s = "foo"; // a string
var p = new Person(); // a Person
var wtf = GetSomeData(); // ???
The problem with the last line is that without hovering my mouse over "GetSomeData", I have no idea what type it is by reading that line of code. And I hate using my mouse. I'm a keyboard guy, especially when I'm coding.
I used to use Hungarian in my Win16 days — cuz all the cool Win32 kids were doing it. Likewise, I use PascalCase and camelCase when it's appropriate to do so based on prevailing language conventions. Really, as you can tell from my coding style rule #1, I just like to fit in. :-)
As far as code formatting, I'm K&R all the way. It reads better, fits more info into a smaller space without hampering readability, fits into books and slides better, etc. It's all goodness. I wish it were the default in Visual Studio. It's the one option I must change whenever I install a new copy.
How did you get started programming?
I spent my high school years programming Applesoft Basic on my Apple II+ in my parent's basement. I still remember the day when my mother took me to get it. I had the choice of an Apple II+ or an Apple IIe. The IIe was more expensive and I figured that 80 columns and lowercase characters were just a fad, so I went with the cheaper II+. I have always since purchased the most expensive computer I could afford.
Even so, I loved that computer. I'd come home every day after school, flip to Danger Mouse on TV, play computer games and write software. I wrote a D&D character sheet database for me and my friends. I wrote track & field score tracking software for my high school. I used the speech synthesizer card my grandmother bought me to write a program that would read 6502 assembly code listings back to me so I could find errors in programs I'd typed in from magazines.
BASIC programs on the Apple were available for listing just like the View Source programs in today's browser apps, which meant that I could learn how to program by reading programs written by other programmers I admired; the Beagle Bros. springs to mind as the top of that heap. To keep their IP, they would add a line 0 that would actually be executed when it was listed to cause the memory to be cleared and no more lines of code to be listed, so you learned to start listing from line 1. Then they moved their memory clearing code to line 1 and it was a cat — n' mouse game forever after that. I loved those guys.
As I mentioned, I'm a big fan of learning to code by reading other people's code. Whenever I look something up online, I skip the first few paragraphs just so I can get to that first code sample. In fact, one time I did that, found the code I needed, but kept reading because I found I liked the writing style. By the end I figured out that it was an article that I'd co-written with a friend of mine. Talk about focusing on the trees instead of the forest.
The programming community has had an enormous effect on my programming. I learned to really think like a programmer in a reading group during my first real job at Intel, spending lunchtimes discussing the next chapter in Steve Maguire's "Writing Solid Code," with my co-workers.
Teaching at DevelopMentor introduced me to a whole new community of speakers and conference attendees and heroes, like Matt Petriek, Charlie Kindel and Don Box.
Those developers inspired me to speak and write and to start a web site, which I did way back in 1995. That web site started to be shared around, so I added stuff and that got shared around and suddenly, I was a real community member, interacting with other community members, trying to one-up each other with the newest, coolest thing (I mean really "the MeowMoniker " what was I thinking?).
What advice would you offer to an up-and-coming programmer?
I would give a programmer this piece of advice: keep learning. The IT industry is a fast-changing place and to keep doing the coolest, most fun things, you have to be willing to spend evenings and weekends following your whims and learning new things. Build apps. Write blogs. Moonlight. Ask stupid questions. Try things that cause your computer to burst into flames. Whatever it is, keep learning new things all the time.
If you do that, you'll get to look back on your career like I have and say, "Really? You paid me to do that? I'd have done it all for free!"