Chris Wuestefeld, New Jersey based developer and Donationcoder member gives us an insight into his life.
Q. Please tell us a bit about yourself.
Well… I’m 42 years old and married for 15 years. I live in the part of New Jersey that still has trees. I’m male, 5’8” tall, 166 lbs.
Q. How’d you get started with computers and build up your skill set? Did you “teach yourself” your skills, or did learn from a school or other resource?
A: I’ve been pretty lucky, in that I’ve pretty much always known what I was going to do with my life. Back in sixth grade, around ’78 or ’79, I had a chance to take a minicourse on computers, where I learned some rudimentary BASIC on a PDP-11. Around the same time, a friend got a TRS-80, and we fooled around with it together. From that time I knew I was good at it, and it seemed obvious that was the path I should take.
Learning wasn’t so easy back then. Computers were comparatively rare, as were people with any experience that could serve as a mentor. I tried reading some books, but honestly my foundation of skills wasn’t strong enough, so much of what they taught was lost on me. So much of what I learned was just through trial and error on my own. Even school wasn’t very much help at the time, although I think that my high school math class with geometric proofs helped me learn the correct mode of thought.
One learning experience I remember in particular came while writing a “Breakout” game on my Atari 800. I was reading using the joystick input through a bunch of IF statements to figure out how to move the paddle. I happened to see some sample code in a magazine though (no Internet to search back then). They were doing the same thing, but deriving the movement values from a lookup table in an array. Prior to that I didn’t even know what arrays were for, but by monkeying their approach I sped up my game appreciably. This “a-ha” gave me a great appreciation of using the proper data structures for a task.
Knowing what I wanted to do, I attended RPI, an engineering college, where I studied Computer Science. Let me warn everyone: don’t do this with the assumption that it prepares you for a career in software engineering. If I could do this over again I’d do it differently, because it turns out that there’s only minor overlap between software engineering and computer science. I don’t use even half of what I learned in college, and most of what I do need to know I had to learn on my own.
My first “real” job out of college made a big impression on me about skill sets. In 1989 we had a tough economy too, and it was difficult to find a decent job for someone with limited experience. I wound up working for a body-shop consulting company, deployed at IBM. Tough times that they were, I saw literally my entire department get laid off (except me, because my contract had been paid up through the whole year). These people that I’d worked with really couldn’t find a job at all, since their skills were with technologies a decade or more out-of-date, like COBOL. I resolved that I’d always work to ensure that my skills are marketable.
That’s one of the challenges of this field. We’ve got real jobs, but when we get home we’ve got another job in keeping our skills sharp.
Q. Which is your favourite programming language? Which tool you use for creating apps?
A: It’s hard to pick a favorite language, it’s kind of comparing apples and origins. I do most of my work these days in C# and SQL. I’ve come to appreciate the very meticulous way that C# has been designed. More than any other language I’ve worked with, this seems to be the product of a well-thought-out design. I have great respect for C in the way that it manages to give very low-level control while expressing itself in a fairly high level. But the evolution of C++ from C became mess. And Java suffered a similar fate, as people jumped on its bandwagon and rushed to achieve the level of functionality that C++ had. It seems that the field has learned many lessons from it.
I am alternately in awe of SQL for the fact that it has served for decades with the same underpinnings, and even in the 21st century remains the best way to handle large quantities of transactional data; and infuriated by some of the shortcomings that a modern language would surely avoid.
One skill I’ve been working on in my spare time is the Python language. One of the trends that I see in the industry is in dynamic languages (including C# adopting many of the concepts). I determined to learn these ideas, and the most obvious vehicles for this were Python and Ruby. A quick survey has me believing that Ruby suffers from much of the unfocused evolution of the other languages I mentioned, while Python seems to possess simplicity and elegance.
Q. How and when did you get involved in Donationcoder ?
A: I think I bumped into DonationCoder several years ago, searching for product reviews. And DC has always excelled in practical quality of the reviews that members have posted. I subscribed to the newsletter, and was always happy with the ratio of interesting stuff to noise. Reading the newsletter was how I learned of a couple of mouser’s applications, FARR and ProcessTamer, both first-class utilities. At first I thought the newsletter was just sort of a ‘zine, but eventually it sunk in that it was really more of a summary of the community’s events, and that there really is a community here. And by then it seemed clear that I was deriving enough benefit from the site that I really owed it to them to make my donation. And of course, loudmouth that I am, I can’t seem to keep quiet in any lively discussion.
Q. How much time do you usually spend on computers/programming ?
A: My “day job” is a project manager, responsible for a fairly big ecommerce web site, so I’m interacting with computers pretty much all the time. But the managerial responsibilities keep me from accomplishing very much of the programming that I like to do. So I try to spend time, at least a few hours a week, doing real programming on my own. Usually this is of the “keep my skills sharp” kind of stuff, but sometimes more fun pursuits like the NANY challenge.
Q. Do you have any other projects on the go other than NANY App?
A: I’ve been working on a major project for a couple of years. Like my LifeSaver Diary, I see a type of application that fails to accomplish some critical part of what I think it should be useful for, and so have set out to build something that really does accomplish that goal. Actually, my big project had been stalled for some time as the data persistence part of the system became … well … not fun. Part of my purpose with LifeSaver Diary was to shakeout another technology that I hope will streamline the implementation of my big project’s data persistence, and I was successful in achieving that.
Q. Do you have any experience with operating system other than windows? How much you get involved in it?
A: Since I’m almost a dinosaur in the industry, I’ve had opportunities to use giant systems running VMS and MVS. I’ve used unixes like Linux and AIX, but my professional responsibilities haven’t given me the opportunity to spend much time with them. I’ve grown up through all the microcomputer operating systems, from old days on Apple and Atari (storing data on cassette tapes) and Amiga, through the beginnings of the PC with DOS and a floppy-based system, Windows way back to version 1, IBM’s OS/2, and all the modern iterations of Windows – up to XP and Server 2003. I haven’t made the jump to Vista, largely on the philosophical basis that I object to devoting such a chunk of my hardware to DRM, a “feature” that I don’t even want.
Q. What are your hobbies and interests away from the desk?
A: My wife and I like to travel, and I’ve been to many remote parts of the world. When the weather permits I enjoy biking, both for healthy exercise and precisely to be out-of-doors and away from the computer. I’m an avid reader, and I typically have three books going at once: a science-fiction book for pure enjoyment and escapism; a technical computer book to hone my skills; and a book on philosophy or economic theory (I don’t like the way the world is going today, and I’d like to understand what needs to be done to make it a better place). I’m not much into professional sports, but I enjoy the high-tech forms of car racing like F1 and WRC, and I enjoy participating in kart racing myself.
Q. Who or what in your life would you say influenced you most?
A: One of the biggest events was my job consulting at IBM; I’ve already described how it influenced the way that I look at my career and my technical skills. On a more personal level, my grandfather influenced me from the youngest age, steering me toward technical pursuits. He worked on the Hubble Telescope, spy satellites and lasers and the like, and was always very interested in science and technology, and always cultivated that in me. He enjoys telling people how he helped potty train me by sitting me on the toilet and reading to me from “Sky and Telescope” magazine.
Q. Your favorite stuff from : Food/T.V.Show/Website/Books/Music ?
A: Well, it’s hard to be a programmer without an appreciation for pizza, particularly when it’s cold. And spicy foods like Indian, Mexican, Thai and Chinese are top on my list.
It’s rather hackneyed to say that television is a wasteland, but I really can’t get into the popular stuff like “American Idol” or “Desperate Housewives”. My guilty pleasure here is “Lost”, which is unusual in the degree to which the characters are fleshed out, and the way those characters interact and react to each other. Otherwise, my viewing is all Discovery and Learning Channel stuff like Mythbusters and Survivorman.
On the web, DC is naturally on my list of favorites. I never thought I’d say this, but I’ve been spending some time recently on Facebook. It’s been a treat to catch up with people that I haven’t seen since high school, and even participate vicariously in their lives. I mentioned my interest in philosophy and economics, and so much of my blog reading is from sites like the Volokh Conspiracy, EconLog, and Marginal Revolution.
I spend a great deal of time reading. I even carry a PocketPC, which I use more as an eBook reader than anything else. That way, if I’m standing in line at the bank, or any other time waster, I can pull out my book and read a few pages. For sheer pleasure I enjoy reading science fiction, particularly the “hard science” sub-genre as opposed to fantasy. For many years I was quite enamored with Robert Heinlein, but have grown to feel that he’s rather simplistic; nevertheless, this was the genesis of much of my Libertarian thought. SF literature has had quite a renaissance in recent years, turning out books that can be compared favorably to anything else being written. Authors like Card, Vinge, and Stross have met a challenge of rigorous scientific underpinnings with excellent character development and clear plotting to produce truly fine literature that is entertaining at the same time. Recent highlights are “Spin”, “A Fire Upon the Deep”, and “A Deepness in the Sky”.
There have been a few computer books that stand out to me as particularly important. “Effective C++” is probably the finest computer book I’ve ever read. Before I found this book I knew how to program in C++, but only after reading it (twice, at least) can I say that I understand the language. The Gang of Four “Design Patterns” book was also an eye-opener, showing me a whole new frontier.
The book “Inside ISAPI” is a pivotal book for me, if only because I’m one of the authors. Here’s another piece of advice for developers: writing a book is fantastic for your resume, but don’t ever expect to make any real money doing it. Considering the investment of time (for six months, nearly every waking hour that I wasn’t at work), I earned just cents per hour.
In non-fiction I can point to a few books that have really changed the way that I look at the world. At the top of this list is Friedrich Hayek’s “The Fatal Conceit”. It’s always nice to read something that agrees with you. But this is much deeper than that, taking a system of morals and economics that many believe viscerally, and proving a reasoned framework to prove it based on the Nobel Prize-winning work of the author.
When I have the opportunity to listen to whatever music I want, I tend toward progressive metal. As I see it, this genre is unique in the freedom it gives bands to express themselves in so many different ways. One finds bits of classical, thrash, folk, jazz, even the occasional operatic element. My favorite band is Dream Theater, which is a bit cliché for the genre, but I’ve recently been listening to Symphony X and Opeth as well. I have a guilty pleasure in old 70s pop music as well, and with other people I can enjoy nearly anything so long as it’s well done and stimulates some thought.
Q. Any advice you’d give to new programmers?
A: Probably people on DC are getting tired hearing my rants when people ask about advice for programming languages. Indeed, I’d like to see the term “programmer” discarded. Computer programming is fun, but it’s really not the point of the activity. So much software that we see today is junk, even if the programming behind it is excellent. Far more important than programming is figuring out what the program really needs to do in order to be useful for its intended audience. Every time you curse at a program because you can’t figure out how to make it do what you want, or it trips you up because you expected that a feature would have had a different expect, it’s because the developer failed at this task. Once you know what you want to do, you need to figure out how to go about achieving that. Having an understanding of data structures and algorithms is crucial, and you can get yourself a big head start by learning design patterns, as from the book of that name by the “Gang of Four”. You need to understand concepts like scalability, security, and maintainability, and these concerns – while handled differently – must be addressed regardless of the language you employ.
I also mentioned above, studying Computer Science also doesn’t give you the background you need to be a successful developer. A CompSci degree gave me the knowledge so that I know a dozen different algorithms for sorting a list of data. But in the real world that doesn’t matter: when was the last time you had to write that code? It’s already in the library. You need to understand that software development is an engineering discipline, and the core principles of engineering are most important: gathering requirements and specifications; designing your project; and documenting everything.
Q. Where do you see yourself in future?
A: This is something that we should all be asking ourselves, but is perhaps the hardest question to answer. I’ve found myself a pretty good life, I’ve got a great wife and I’m happy with what I do. So I expect that in most ways, my future will look very much like today. At the same time, I’d love to be able to do something that someone will remember. My book was a stab at that, but because of the fleeting nature of technology, not entirely successful.
On the other hand, I’m not happy with the way our society is going. If these seemed to be just the turmoil of the last few months, or even the last eight years, I could dismiss it as a temporary phase. But when I see so many people working so hard to abandon the principles that I was brought up to believe were the foundation of our society; worse, when those peoples are working to prevent me from living according to my own principles, I am deeply saddened. Worse, I fear that the future that I’ve worked for and ought to be able to expect is being taken out of reach. So I wonder if, at some point down the road, I’ll find that the only choice left for me is to pick up my life and try to find somewhere that the corruption hasn’t yet reached its heart.
[M] Thanks for the interview Chris. 🙂