Turbo Productivity In Programming Is The Only Thing October 05, 2008

After all my 27 years of writing code for a living (and 34 since I wrote my first line of code) the one thing matters most to me in choosing what to write code in is how quickly I can get the job done.

In my first job at a defense contractor, I met a couple guys (I thought they were old but they were probably my age now!) who had been writing code since the late 50's and then writing batch applications on an IBM mainframe. Since they could only compile/run once per day (and get the printouts the next day) they would work on 6-8 projects at the same time and weren't concerned when these projects might take years to complete. After two weeks on this I was ready to go insane and got switched to working on a supermini which at least had a realtime operating system. I could write code, compile it and run it at the same time. The only drawback was we had 7 people sharing one terminal at the start. Suggestions that each programmer get a terminal were laughed at initially. Being productive in such a limited time was really hard.

After a couple years I switched to working on PCs (which were just out) and having my own "computer" was wonderful. Working in Pascal and assembly still wasn't fast yet but at least I had my own space.

Then I got Turbo Pascal and life was forever changed. I could write, compile and debug applications virtually instantly and my need for speed has never looked back. Even on the compared-to-today crappy hardware I never really found another environment as fast until I started using PHP this year (which of course has no compilation).

Later when I started Mac coding in C we started off with a dreadful C compiler/linker that took 20 minutes to do its thing. When Think-C came out it was almost a Turbo moment again. Eventually it began to get slower and slower and we swtich to Metrowerks Codewarrior which was fast but the applications were getting so big that it still took 30-60 seconds to build sometimes.

When I moved to Java in 1998 compiling and linking still took a fairly long time until the IDEs (and the JVM) began to catch up to the hardware. Still nothing was ever as instant as Turbo had been, despite the hardware being 100x faster. One problem was that the environment the code ran in became so much more massive; loading your code into an appserver often took longer than the build did.

Why am I such a speed freak that any of this mattered? It goes back to the way I learned how to code, even in my first Basic programs in high school, I've always written a tiny bit of code, then desired to test it thoroughly; rinse, repeat. This bit at a time method has stuck with me through all the years of changes in languages, environments and targets. Anything which slows me down between the code change and the test directly messes up my productivity terribly. The more I am forced to batch up my changes the more effort it takes to produce a quality piece of code.

When it got really slow to do any work I thought I was going back to the "old" guys working on the mainframe.

At one job (forever captured in WTF Stories #2: Here Little Virus, Virus ) I spent 3 months trying to write Java code in an environment where the virus checker would unpack and check ever .jar file everytime you touched it. Opening the IDE took 20 minutes, deploying an app to Weblogic took 2 hours. Basically coding virtually came to a standstill. So to get my work done I switched to writing naked Ajax applications; mostly javascript will only data access code written in Java. This meant I could get work done without triggering the virus monster. I began to have that Turbo feel again (except when I had to compile the Java code, then I had to wait 30 minutes).

At my last job every project seemed to take forever to complete (in the 10 months I was there only one app actually was completed). Althought process in the company (waterfall) had a lot of blame, the standardized development environment (rigidly enforced) and the complicated set of Java technologies in use made sure nothing ever was accomplished.

I finally said to hell with it and switched to PHP. Despite its shortcomings I haven't gotten so much done since, well, the Turbo days. I can manage 6 projects at once, deploy stuff as I fix it, follow my a bit at a time development process and actually enjoy getting stuff done.

Now I am working on an iPhone app which means XCode (shudder) and compile/link cycles (not to mention loading up the simulator) so it's not all rosy.

For web coding though life is good; no more delays and both my productivity and my quality are way up again.

Why anyone would choose to pick complexity over productivity is beyond understanding. Of course not every type of application can be done in a language like PHP, Python or Ruby (to name a few) but with the speed of today's computers, it seems so lame to have to work with something that is way slower than writing Turbo Pascal on an 8088 IBM XT. You would think after 25 years things would be faster today but often they are not.

This may be the "I want it now" generation today but I've always wanted it now even then.

Just keep me away from the overnight batch runs!