Chris Nash [macro1970]
How did you begin programming and at what age?
I began programming when I got myself a Sinclair ZX81 at the age of eleven. BASIC got old very quickly, and the full list of Z80 opcodes in the back of the manual was just too tantalizing.
What languages do you code, and in what platforms?
My heritage has been assembler, C, C++ and now primarily Java - mainly on Windows platforms, at least, that's what I do for a living. I still believe a lot in coding for fun, and keeping up with what else is out there, so at the moment my spare time fascination is Haskell.
What machine configuration and operating system do you use?
I prefer to use Windows XP on a Dell Latitude laptop - nothing out of the ordinary there, although I do prefer the portability of the laptop over a more powerful desktop system.
Please list web addresses where we can see some of your work
What motivates you to undertake a new project?
Obviously, for work I need to do whatever needs to be done - but still it's a matter of finding motivation in doing that. Often it's a matter of learning something new and growing from the experience. Spare-time activities it's often a matter of curiosity, an article I've read that's got me interested or a puzzle I'd like to solve.
What part of project development is most gratifying to you?
Design, more than anything. Finding a well-crafted solution to a problem and the fulfilment in doing so far exceeds the actual coding part.
From the outside, it seems a rational job, but is creativity necessary for programming?
Absolutely. It's the interplay between logical engineering and human ingenuity that makes this a great job.
What conditions do you need to concentrate when programming?
A room to myself without disruption from others. Background music is good - something I'm familiar with - not something that will make me stop to listen - and I must admit, I like it dark in my office. However, to be honest, this isn;'t the sort of job you just do at the times when you're at the keyboard. The thought processes carry on 24/7 - some of my best coding ideas have occurred at times far from the office and far from the 'development environment'.
After working for long periods of time, have you ever felt as though you were in a bubble?
Works both ways. Sometimes it's for the good and I can get really focused on the task in hand. Other times, any excuse for an interruption would be appreciated. Over time I've learned that if I'm beginning to feel disconnected, it's time to take a break.
When you check out code you wrote time ago, what's the main difference with respect to code that you write nowadays?
May as well have been written by aliens. Now I tend to code in a way that communicates my intent most clearly to humans; older code is evident I was trying to optimize for the computer. As time passes the first factor has completely taken over; the second is irrelevant. I feel my code now is more elegant and understandable - I used to settle for *any* solution, now I'll aim for a more elegant or readable one.
Do you still buy programming books, or do you learn everything from online sources?
I tend not to buy programming books (although I do read them online in places like Safari). Online versions of the books integrate much better with my workspace and they don't take up any space when I've moved on to the next project. I do tend to pool several sources of online information - after all, there's a huge variation in quality - but in general I find users and other software developers a far more reliable source of information than book authors. In fact, there's one category of authors I'll deliberately avoid - the ones that are fond to dispense software engineering advice, yet are now full-time authors. If programming had been such a great career for them, they wouldn't be writing books...
Do you think programming should be taught at the basic education level?
I think the concepts of programming should be taught - I'd like to get past the outrageous misunderstandings that computer geeks "sit aropund playing games all day" or "it's just typing". I believe the percentage of people out there who need to be exposed to actual programming is in fact very small indeed. You've got to be crazy to do this job.
What has been your experience in marketing your software?
For me it's more a matter of selling my ideas to the company I work for rather than selling actual products to end users. Nevertheless, it's still marketing - overall, if it's a good idea, it's an easy sell. If there's trouble selling it, you're probably best to move on to something else.
What do you learn from software users?
Absolutely everything - most importantly, I learn that no matter how much I thought I knew about the product I helped develop, seeing a user actually try to use it, and try to make it work the way *they* want it to work, rather than the way we *expected* it to work, is a very eye-opening experience. End users are quite happy to critique - they can't tell you what they want up front but they are happy to tell you if they got it wrong. This isn't resented - quite the opposite; it's welcomed. Keeping that line of sight open to the customer is priceless.
What would be your solution against piracy?
The best solution is to quit fighting against it - fighting piracy has, quite frankly, become such a time and resource sink that we are rapidly entering some ridiculous death spiral. Your resources are better spent making better products rather than adding ineffectual and expensive protection which, no matter what, will be cracked, and compensating for that by inflating the cost to legitimate end users.
Accosting legitimate users with ridiculous schemes such as DRM just sends out one message - you don't trust your users. Oddly enough, the end result of this is the users aren't willing to trust you, either. The research on this seems pretty clear-cut now - those companies who are willing to be honest with their users find their users are willing to be honest in return; in most cases (particularly with software), legitimacy produces such benefits when it comes to support and the end-user experience that those users are willing to pay what the product is worth. The extrapolations that 'piracy costs us X, therefore we must compensate by raising prices' just shows that greed is the overwhelming factor. If there are a number of people who'll only use your product if it costs them $0, that's a pretty good indicator of what your product's actual value is.
Apologies for going on about this for so long, but it really is something I feel very strongly about.
Would you consider yourself rigorous in the organization of the coding that you write and on commenting it?
Rigor is one of those things which can be taken to extremes. Too rigorous, and you are basically strangling the creativity and the productivity out of everyone. Do as much as is required, but no more.
As much as is required actually works out to be quite a lot - there's definitely value in making your code readable and easy to maintain. Getting into holy wars over coding conventions is counter-productive - it's very much diminishing returns. There's never an excuse to be sloppy, but don't be anal about it either - you'll never achieve anything.
How do you calculate the budget for a software project?
I'm not in that business, but I have some idea how it's done, and I must admit I disagree with it. By definition it's pretty much impossible to budget something that's never been done before - you can only rely on past experience to estimate that feature X is a lot like feature Y we did before and it took this long.
When I do my own time estimates, I try to stick to that - look at something I've done before, and even if I really think the feature will take a week, and the previous feature took 2 months, I'll stick with the 2 month estimate. Then dig my heels in when asked to reduce the estimate...
What are your favourite games and on what platform do you play them?
I love RPG's on consoles - some of my favorites have been little-known Gamecube titles which have been surprising treasures. The PC is good for strategy games - love those - I am definitely not fond of PC games that would work better on an xbox or a playstation. I tire of the endless first-person shooters and driving games - I'm looking for titles that tell a story and have an emotional interest. I'm very fond of my Nintendo DS for RPG's and puzzle games.
Games I'm currently playing:
DS: Chrono Trigger - thoroughly enjoying this remake of the classic SNES title which still ranks up there as one of the best RPG's of all time. On the lookout for the Puzzle Quest games and Disgaea.
PC: Darwinia (playing through for the umpteenth time) - I just love the visualization and imagery, great real-time strategy. For more peaceful moments I like to sit with Patrician III which is one of the most absorbing trading games I've ever played. I love to dig out old classics as well, I've revisited the FTL classic Dungeon Master and found it's still as absorbing as ever. Finally, World of Goo - this game alone convinced me that games still could possibly have a heart and soul.
Wii/GC/N64: Must admit, I'm horribly unfond of the Wii - most of the titles on it are absolute shovelware. Playing Tales of Symphonia 2 on it (wasn't as impressed as I was with the first on the GC) and it's a decent RPG. The Gamecube had some impressive sleeper RPG titles (loved Baten Kaitos). Enjoyed Fire Emblem on these platforms immensely. The Zelda games are always good but there are few that come close to "Ocarina of Time" and my personal favorite "Majora's Mask" - one of the best bits of in-game storytelling ever.
How often do you clean dirt-buildup on your keyboard?
You mean, I'm meant to clean that? Seriously, when the keys start to stick - I do have a little brush for the job but most of the time this seems wildly irrelevant. I'm more likely to dismantle and clean the dust out of the heatsink on my video card than this.
How do you feel when friends or family ask for your help in solving domestic computer problems?
Absolutely can't stand it. I've tried the stock answers (I'm software, not hardware, my hourly rate is, etc) and none of them seem to work. Outwardly once I leave work I try to explain to people that I'm sick of the sight of the thing, or how would they feel if they had to bring their work home, too.
I might complain about it, but I take it pretty much as par for the course - I'll be asked no matter what, and I'll do my best to help, but try to prepare them for disappointment up front.
As machines for development, what opinion do Macs deserve?
I personally wouldn't consider one - they're overpriced and far too closed-off - I know their fans will always proclaim about how much better they are, and they're the same folks who seem to always end up running a Windows session on the top for some inexplicable reason...
For me, a decently-performing PC for half the cost which I know full well I can get a hold of anything I need is a much better general-purpose proposition - as long as it's not running Vista.
How do you protect your computer from viruses?
Corporate is real tough on autoupdating operating systems and running antivirus software, so that line of defense is in place should all else fail. However I'm convinced that the majority of virus issues are caused by people being stupid.
In social settings, do people become interested when you tell them you are a software developer?
It has terrible social connotations - typically, once you explain what one of those is. Most people are hard-wired to assume 'geek' (if they're feeling generous) or 'nerd' at worst. Usually, the conversation turns to how they were terrible in math at school, or how such-and-such a program that has nothing to do with you or your line of business is a piece of junk. They simply stop listening.
It's also a terrible blanket term. You could be developing anything from video games, business software, civil engineering projects, kitchen and bathroom design software, or botnets to bring down governments - so I make sure I'm a bit more specific than that. Saying that I develop "business and productivity solutions" has a lot better chance for them to ask me for more details, and a far reduced chance they'll ask me about photoshop or why they can't burn a CD.
Do you work alone or in a team? Which do you prefer?
I work in a team, actually a network of teams - it turns out pretty well. I like however to be personally responsible for some particular functional area. That's a good balance between individuality and teamwork. Years ago I preferred towork alone but it's just simply not viable once things get beyond a certain size and scope.
Are you one of the first to update to new software when it comes out, or do you normally wait until more stable versions appear?
I don't go for the bleeding edge of anything, just enough to keep updated (for example service packs) and for most software if what I've got works fine I don't see any need to constantly chase upgrades - it's a waste of time. If it ain't broke, don't fix it.
Security issues are a different matter, but some new vanity function doesn't sell anything for me.
What is your main reason for not meeting project deadlines?
I could say because the deadlines are unreasonable in the first place. Taking a date and working backwards to make the project fit was asking for trouble. Fortunately this is something that's been generally well known (since Fred Brooks' book) and I work for a company that at least has some appreciation of that. As such, if a deadline is unreasonable, I see no problem with pointing that out and realigning unrealistic expectations with reality.
In your opinion, which company helps software developers the most?
No question, Google. A co-worker states, "if you can Google, you can code". It's a bit of an exaggeration but typically when developing I have a dozen Firefox tabs open for sites about my current development task, and Google got me to all of them.
If you expected answers like Sun or Microsoft, forget about it. Community input far exceeds any of these - and Google is the community index. Simple as that.
How many breaks per day do you normally take?
I break whenever I feel like it, step outside, take a smoke, go chat with co-workers. Could be a dozen times a day - those are likely to be the most productive moments though, because the brain never stops working on the current problem. Usually I come back energized and wishing the solution that's in my head would somehow crystallize on the screen without the need to type it.
At this point in your career, what would be the project of your dreams?
I tend to get some ambitious "what if?" ideas regularly - inspired by research, architectural white papers, and so on - and generally those ideas don't stick around for long which proves that maybe they weren't so good after all. I'm convinced that we are on the brink of something big as far as personal global communication goes; there seem to be plenty of missed integration opportunities that will literally make how we currently communicate and manage information look like it was from the Stone Age. I'd love to work on a project of that kind of scale.
Generally though, I think any project can possibly attain 'dream' status, but the reality of constraints such as chosen architecture and infrastructure take the edge off it. It doesn't matter what you work on, it's up to you to find the fascination in it.
What is your next project?
I'm fortunate - I'm likely to stay working on the same project I've been working on for several years, and it's still something I'm interested in. That's the work side covered. As far as spare time goes, I'm always looking for suggestions - there is a lot of research work I'd like to catch up on and some experiments I'd like to try.
Which websites or forums for programmers do you frequently visit?
Wherever Google takes me - seriously, I haven't found many sites that stimulate my interests for extended periods of time since what I'm working on changes so regularly.
There are a couple of notable exceptions because they work the way I'd like to see sites work, rather than how the site developers see them working. stackoverflow.com seems to be one of the best community-driven programmer advice sites I've seen - it just appears to work the way this sort of thing should work.
I read a handful of blogs - Joel on Software, Jeff Atwood's Coding Horror, Misko Hevery's. Those are dependably good and also occasionally not afraid of controversy.
What advice would you give to someone who wants to become a programmer?
Try it. Doesn't matter what language, what application. And, if you don't enjoy it, if it felt like hard work, if it was something you couldn't wait to see the back of, if it didn't stick in your mind every minute of the day, if you didn't get ideas about programming while sitting on the toilet, and you weren't excited to learn more or went out of your way to read about new things... if none of those things happened, then programming isn't right for you.
If, on the other hand, all these things happened - you've completed the training, and you've only just begun to learn.
What is your blog address? What subjects do you deal with?
I've settled on three blogs now.
http://chris-nash.posterous.com is my day-to-day blog. Pretty much any idea I get, I'll blog about here. Anything here is intended for a general audience.
http://end-to-end-development.posterous.com is intended to be my blog about software engineering. If I have any writing that's technical, it'll end up here.
http://amateur-philosopher.posterous.com is where I do my creative writing. Strange as it may seem, and although I'm an engineer, I do have an urge occasionally to write some fictional stuff and get some feedback.
What blogging system have you adopted and why?
I use http://posterous.com exclusively (although it does autopost to previous blogs I set up on Blogger). Quite simply, blogging by email is the most convenient method I've found - I can blog from a mobile device when I'm on the go and email is still by far the most mature means to communicate on the Internet.
It's surely no mistake that blogging and email both use the verb 'post'. It just makes sense this way.
Lexington, KY, USA