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 talk to Mark Rendle.
Who are you?
I’m Mark Rendle, and I live in Hampshire in the south-east of England. These days I’m a freelance consultant, developer and trainer.
What do you do?
Ha, what don’t I do? Right now, I’m working on a Windows 8 launch application for a UK media company, consulting with a company looking to bring a big enterprise system up to date, and doing frequent Windows Azure workshops with lots of companies looking to move their web sites or internal systems into the Cloud.
I’m also working on my start-up project, StorageDeck, which is a web-based management application for Windows Azure Storage Services; that’s in early, invitation-only beta right now, but hopefully will be launching properly very soon.
On top of that, I’m writing a book, Building Windows 8 Apps - Problem, Design, Solution for Wrox.
Oh, and I do Simple.Data, a data access library, and Simple.Web, a light-weight web framework, both for .NET.
Over the last 20+ years, I’ve worked on dozens of things, including (in chronological order): a code-generator for Informix 4GL; a commercial class library for Gupta SQL Windows; a CRM system for non-profit organisations; the GameShaper social game framework; an energy-usage dashboard for British Gas; and the loyalty-card portal for The Body Shop.
There was also an odd couple of years (1999–2001) where I was a professional stand-up comedian, and a comedy writer at the BBC.
What is your development environment?
I’m primarily a C# developer, so I do the majority of my work in Visual Studio 2012 on Windows 8, but the open-source things mean I use MonoDevelop on a Mac as well.
For dynamic stuff (Ruby and Node.js) I use Sublime Text 2, and I also use WebStorm for Node projects.
Whatever I’m working in, though, I always have vi mode enabled: VsVim in Visual Studio; Vintage mode in Sublime Text; IdeaVim in WebStorm. I spent the first four years of my career working in vi on Wyse terminals, so I developed the muscle memory. It’s amazing how much more quickly you can throw text around if you really know what you’re doing.
All of them! I suffer from neophilic attention-deficit disorder. I really have a problem resisting the urge to try and learn everything at once, but I try to keep it down to one or two things at a time.
Right now I’m focusing on JavaScript, which is not new, but is definitely having a renaissance. There’s Node.js, of course, and some really exciting things happening in browser app development with frameworks like Knockout and Angular. I also prefer using HTML and JavaScript for the UI code for Windows 8 apps, although I still do the other bits (business logic, data access and so on) in C#.
Languages I’m interested in but not letting myself play with right now include Rust, Clojure, Go, Dart, Nemerle and C++11 (which has got so many new features it’s practically a new language).
What is your coding pet peeve?
Boilerplate. I hate all the extra code you have to write (or generate) to express the fundamental ideas of your application or service, or those cases where you have to repeat fragments of code over and over because there’s no abstraction or syntactic sugar to represent the idea.
The thing uppermost in my mind right now is implementing the INotifyPropertyChanged
interface in .NET, but there are good examples in all languages: callbacks and the function keyword in JavaScript; Rails-cruft in Ruby; header files in C++; GROUP BY clauses in SQL; ORMs in any language or framework; XML and all its bastard offspring.
How did you get started programming?
This is going to show my age. For my 10th birthday I got a Sinclair ZX81. It came with a few games you could load from tape, and you could buy a few more in the shops, but it was really designed to be programmed. The keys even had the BASIC keywords on them, so when you pressed “P” at the start of a line, it inserted “PRINT” for you. Kind of like IntelliSense, now I think about it. Anyway, the manual took you through some basic examples, so the first program I wrote was
10 PRINT "WHAT IS YOUR NAME?"
20 INPUT A$
30 PRINT "HELLO ";A$
Everything I’ve done since has really just been iterations on that.
So many ways. Pretty much everything useful I’ve learned in the last 10 years has come from blogs, user groups or conferences. I buy a lot of books to learn the actual detail, but you discover the ideas through the community and then go off and buy the book to learn the subject thoroughly.
I went from lurking to participating in the community a little over two years ago, and now I get to speak at conferences and user groups and people actually read my blog and things, and that’s the thing I get the most satisfaction from. That feeling of being a part of something, of a group of people who are passionate and enthusiastic and dedicated, is just really great, and it drives you to stay at the top of your game and keep learning and sharing and doing the best you can at everything.
Also, putting open source code on Github where everybody can read it really encourages you to write better code. :)
What advice would you offer to an up-and-coming programmer?
Build something, end-to-end, the whole thing, from user interface to data storage. It doesn’t matter what language you use, or what it runs on, or any of that stuff. If you can think of something that would “scratch an itch”, or solve a problem that you have, so much the better, but if you can’t, then try copying a simple application that you use a lot.
Whatever language you choose, find your nearest user group and attend as often as you can, read blogs, follow people on Twitter, and look for open source code to download and read.
Read a big, thick, thorough book on whatever language you’ve chosen, plus: The Pragmatic Programmer; Clean Code; Code Complete; Design Patterns; and Zen and the Art of Motorcycle Maintenance.
Finally, and this is advice for all programmers: don’t get too attached to anything, because in programming (as in life) things will keep changing, and you have to roll with the changes and see them as exciting opportunities to learn new things.