How did I get started in software development?


Jason Meridth tagged me with this meme, so I’ll play along if anyone cares.

How old were you when you started programming?

I remember being 6 or 7 years old helping my brother open the box for our new Commodore Vic-20 (yeah, that’s right baby, RESPECT).  My Dad got us a book or two with BASIC source code in it for all sorts of things (recipe filers, video games, etc).  I seem to recall him getting us a magazine or two (or was it a subscription?) that had articles featuring BASIC code in it.

Of course the trick was, we didn’t have the tape deck at first, so we’d spend 3 hours transcoding (i.e. I would read from the book ‘ONE TEN, FOR, I, EQUALS SIGN, ONE to ELEVEN NEXTLINE, ONE TWENTY’ and so forth.  At the end of this, we’d have a dozen or two typos and other errors which we’d fix and then play the game or enter some recipes for our Mom and then we’d leave it on. Eventually it would get shut off and we’d loose all the work (yeah, that’s right: No storage! hah!).  Eventually we got a tape deck and were able to store our programs.

After that, I had a on and off again relationship with the computer. We eventually got an 80-88, then a 286, then a 386 Goldstar with MULTIMEDIA. I remember signing onto Prodigy and getting DOS debugging commands to hack values into the Sim City save game files to add more money, etc. Eventually I got a Hex editor and was able to poke values in all over the place. One summer I was able to map out most of the SimCity and Civilization save game formats and do all sorts of awesome things like make a 2×2 airport in SimCity (no pollution!) and make a flying troop-carrying battleship in Civilization that totally owned all over my CPU enemies.

My first real entrance into actual programming was my 6th grade computer class writing simple BASIC applications on the Apple IIe’s and IIgs’ (when I wasn’t sneaking a few games of Oregon Trail in, that is).

What was the first real program you wrote?

I’ll assume this means one that I authored from scratch, with no copying from a book or little assignments in a class or something like that.  I believe I wrote a VB3 or VB4 app to open a Civilization save game file and edit various characteristics (change your money, your form of government, size of cities, etc).  I wrote a lot of little one-off things back then, just playing around so I can’t remember which was THE first one.

If you knew then what you know now, would you have started programming?

If I had the KNOWLEDGE I had today or the wisdom?  If I had the knowledge, yes, definitely. If I had the wisdom I had today back then, I probably would’ve done a lot of things differently. I would’ve been involved with computers and some programming of some sort for sure, but I wouldn’t have been a corporate developer like I am now.

If there’s one thing you learned along the way that you would tell new developers, what would it be?

Oh, I’d have a lot of things to tell them. Probably the most important, in this order would be:

Personal

Humility

Do not give up your spirituality.  I went totally engineering/science-minded when I was young and put away my faith and anything that I couldn’t create/control/manipulate and I lost many years in my blindness and self-centeredness.  Yes, you can be faithful and science minded and I think you will find that they actually go together very well and that they compliment each other nicely producing a balance that further enhances your ability to do both.  Being mindful of your place in the grand scheme of things naturally forces a form of humility on you that helps to keep your ego in check. It doesn’t always work, but if you’re committed to it, it can really help in all areas of your life.

Creativity

Programmers are naturally creative beasts. Explore your creativity in other areas of your life and don’t let your life be dominated by your career or your programming. You’ll have a tendency to want to solve every problem with technology. Stop and search deeper and use your creativity to find the right solution, not necessarily the most technologically advanced solution.  There is unbelievable beauty and functionality in the simple things. Learn to appreciate that, and you will be much more productive and at peace in all areas of your life.

Suggestions? Take up gardening, Bonsai tree trimming, wood carving, or some other form of natural art. Working with life will help you appreciate subtleties and nuance and it will also teach you the very hard lesson that you’re not in control of everything and your value lies most in your ability to adapt to adversity. This was one of the hardest lessons I’ve learned I’m learning.

Work/Life Balance

Being able to just create working, functional software that solves people’s problems is a very intoxicating drug that can lead to obsessive behavior (i.e. just one more feature! one more screen! ten more lines of code! I have to get this feature working before I leave, darnit!). Don’t let your desire to produce dominate you.  Learn to make more use out of the time you’re there. Learn to be efficient with the checking of your email/reading blogs/twitter, etc. Learn to reduce coding friction as much as possible. Learn to put in place checks on yourself so that you can code with more freedom and not have the heavy weight of manually testing things all the time (which can be tedious and frustrating).

Professional

Automate Out Time Waste

Automate everything.  Do not repeat yourself or your actions more than twice. We are also creatures of repetition and habit and we waste TONS of time brute-forcing through code or repeating ourselves over and over again rather than just writing a little fluent-interface API to push down the repetition of things. For example, ever tried to use one of the bigger designer items from the Toolbox (i.e. GridView) or one of the 3rd party controls (like the big commercial uber-Grids)?  You know how much clicking and dragging you have to do. If you have more than one grid, you’re probably repeating about 80% of your work. If you do it a 3rd time, you’ve now already wasted more time than if you just wrapped a little thin API around the Grid Setup to drive it. We did this when I worked with Jeremy at our previous employer and it saved us a TON of time and it was well worth it.

This Includes Most of Your Manual Testing

And when I say automate everything, I certainly include testing in here. If you’re writing code and then firing up the debugger more than once in a session as a routine thing (i.e. hacking/fire-fighting sessions excluded), you might as well be throwing your employer’s money out the window (not to mention your own personal patience) because you’re wasting tons of time.

Use Tests to Stay Focused and Driven Towards Important Goals

Write your tests first. It helps to constraint your natural creativity (see above) and focus on what’s important: Business value. You can save your creativity for off the computer or you can put some of it into your test code which may benefit from more creative solutions to testing the real code.  Keep the real code boring and functional. Keep your tests lean, mean, easy to write, and as least brittle/resistant-to-change as you can make ’em.

What’s the most fun you’ve ever had … programming?

Pretty much everything since I found TDD and ReSharper. By adding enough discipline to my coding, it has opened up more freedom in the way I code because I don’t get the dread feelings as I’m coding that I’ll never be able to test all this and that I’m writing code for code’s sake, etc.

I’m not a real world developer