Today sees our first full interview here at ReadWriteHack, with Richard Clark, a web developer from New Zealand. Richard is a coder who runs a one-man business designing and implementing code, networks and systems for clients at every scale, from tiny silicon valley startups to national corporates and government departments.
He has designed and built web applications for problems as diverse as energy network modeling, social media, stock market tracking, video processing and intelligence analysis.
We caught up with Richard to ask a few questions about his web development career.
ReadWriteHack: 1. How and why did you get into web development? How long have you been doing it for?
Richard Clark: There was never any question I was going to become a coder; I was writing code before I actually had a computer. The school library had some adventure style books where you could solve parts of the plot with a provided BASIC program. Since I didn’t have a computer myself, I spent unreasonable amounts of time modifying the programs and imagining how they would work.
When I finally managed to get my hands on an actual computer I could write code for I learned the same lesson we all do – computer interpreters are far less forgiving than our imagination! I still recall an early program I tried to write, which drew a lemon when I ran it. I was trying to draw a circle and to this day I have never been able to work out what I did to make it draw a lemon.
As computers became more available to me, I spent more and more time on them coding and playing games, but at the time the idea of Computer Studies at school involved being able to type and use a spreadsheet. It was only when I got to university that I actually had an opportunity to code for a purpose other than my own interest.
I wrote my very first web application at university in 1997. The task was simple, I was to write a “library program” that let the user check in or check out a book. This was done on Sun systems in C++, and the expected interface was a simple line by line menu on a terminal. At the time, however, I was too young to understand the concept of “Scope creep”, and as my despairing tutors looked on (they had to mark all the code) I wrote a web server into my code so I could use Netscape Navigator as the interface instead of a terminal.
This taught me a number of valuable lessons, including the fact that despite the presence of a fully-fledged web server, my lecturer was not going to give me marks if he got a segfault when he tried to check out a book. Even all these years later, I still use that example in my head whenever I start to get a bit too carried away with the “cool” bits of a project.
Shortly after that I was offered a position as a programmer at an ISP and never looked back.
RWH: 2. What are your preferred languages, frameworks and tools?
RC: The real answer to that question is “it depends”. Every project has different demands and one truth I hold dear is that it is easier to learn the right tool for the job than it is to bend the wrong tool into a job-shaped pretzel. A good example of this was an expert system for querying an intelligence database that I wrote as an employee. The problem involved a great deal of text parsing and I wrote the original prototype in two weeks using perl. The prototype was well received by the user and the full project was given the go ahead, with one caveat: all production code had to be written in Java.
Those familiar with perl understand that text parsing was one of its true strengths (the other being the ability to produce source code that closely resembled line noise). Java…not so much. The final java production version was completed six months later.
Since then I’ve done my best not to replicate that mistake in my own business. I generally work with clients who are platform agnostic; I get to choose the tools I feel are most appropriate. Right now most of the projects I’m working on use Pylons, PostgreSQL and MongoDB. Prior to that I wrote web apps in perl, PHP, and even C. I fully expect that I will end up using a completely different language and platform within the next 12 months. Perhaps NodeJS?
RWH: 3. You have quite a range of skills, such as coding, system admin and networking. Is there a reason why you do everything yourself rather than delegating certain tasks to other people?
RC: Hah. Well, lets start with the history. In 97/98 the net/web industry in New Zealand was still quite immature, and certainly there wasn’t a lot of money flying around. As a result people were building whole ISPs and webhosts on a shoestring. This meant both very cheap hardware/software (Linux and FreeBSD were enormously popular) as well as people like me who had no idea what they were doing but could learn fast and were willing to work for peanuts.
Of course, we all found ourselves well and truly in the deep end. I learned everything because there was nobody else to do it and it needed to be done.
Now 13 years after I got started, I do things myself because I want to and I can get paid for it. That’s not to say I don’t delegate, but I don’t tend to delegate to *people*. There was a time when I’d have built a server out of parts, these days I rent virtual machines, use nettica.com for DNS and Gmail for email.
RWH: 4. How long is your to-do list and how do you prioritise your workload?
RC: My todo list is infinite. There isn’t actually an infinite number of things on it but there might as well be, I could not possibly work fast enough to overtake the volume of incoming. My workload is prioritised in a kind of triage fashion – emergencies go to the top of the list, everything else goes in order of urgency. Many things never see the light of day, but I’m ok with that.
One big benefit of running your own business – your clients give input into how serious something might be, but with the exception of emergencies they don’t get to dictate what you’re doing. As a result I often get to work on tasks that suit my mood at the time.
RWH: 5. Do you attend any developer events? How often do you attend and what do you get from them?
RC: Not really, no. I’m really quite the geek in that way – I like my information delivered via text for the most part, because I can skip through it to get the nuggets I want. Talking is so slow!
That said, occasionally I like to go to the odd thing because of the talking (which is in direct conflict with what I just said above but Important Developer Lesson #6 is: People are the best kind of hypocrite. So that’s ok).
I like the Python User Group here in Wellington for example, there are some smart people there with a diverse array of experience and the structure is so loose we can go off on an interesting tangent for more than an hour and nobody minds at all.
RWH: 6. New products and technologies are being developed all the time. How do you keep up? What’s your preferred method of learning new skills?
RC: I find the most effective way of inspiring myself to go out there to find and learn new tech is to cultivate an overwhelming hatred for whatever I’m currently using. This is normally quite easy to achieve, and when it fails I know I’m onto a winner – at least for now.
Once I’ve decided to work with something the key to learning is doing. I really have to throw myself at a project using a piece of technology in order to get a feel for how it works. My business is good for that – I have new projects arriving constantly so I get to put new technology to the test on a regular basis.
RWH: 7. What’s your #1 tip for web developers?
RC: Remember that, in the end, it all comes back to people. This is the true sign of a professional web developer – that they understand that software is built by people, for people.
It’s built by people – often us. This involves all the things that people are. As Larry Wall famously said: the three chief virtues of a programmer are: Laziness, Impatience and Hubris. You will find all three of these in every project, and you need to optimize for that at every stage.
It’s built for people – as soon as you start believing that some aspect of your software can change human nature, you might as well just start rubbing the egg all over your face. The projects I’ve been most proud of in my life haven’t been the ones with the shiniest technical tricks or the most users, but the ones where I have done the best job of creating something that melds with the user in a way neither they, nor I, could have dreamed of before we started. I love it when that happens.
RWH: Thanks Richard for answering our questions!