“The time for jacking around with Tesla coils and ball lighting in the garage is over.”
-From the sci-fi movie, Primer
Many people get into software development because it’s fun. They start programming or web applications or how to get the computer to do interesting things, and the learning begins to grow from there. It’s also a well-paying career, so many people make the transition from hobbyist to professional.
But the job usually isn’t as fun as the hobby, for reasons that are already stated in your average Dilbert comic strip. As such, many software developers continue to do their own side projects in their spare time (at least, developers who chose their career from their preexisting interest, instead of choosing their career as an alternative to accounting or dentistry.) Much of the open source movement is powered by this phenomena: the collective work of developers who have an itch to scratch and a desire to share their creations.
But if you look at many of these projects, most of them aren’t anything new or groundbreaking. Most of them are reworkings of already existing pieces of software, perhaps written in another language or for a different platform. I call these projects “building Tesla coils in the garage”; they are fun and cool and braggable, but ultimately nothing new and not very practical.
This isn’t always a bad thing. Providing open source alternatives is selfless and important. Recreating familiar programs can be good programming practice when learning a new language.
But this is also not always a good thing. How many of these projects are interesting or useful? You can evade the question by saying it is “just for fun”. But the world does not need another Tetris clone or Sudoku solver or thumbnail image gallery (BOCTAOE: but of course, there are obvious exceptions). These projects are fairly mundane and simple, so an individual developer can create Yet Another BLANK piece of software in a weekend. What is produced usually isn’t any better than what is already out there, because the individual developer is just scratching their own itch without regards for the requirements that other people might need.
Not every bit of software written needs to have practical value or a profitable return on investment. But the problem lies in the opportunity costs. These developers are reinventing the wheel instead of inventing new modes of transport.
This is a tough thing to do. Not only because coming up with something that is both original and useful difficult, but because it requires so much of the tedious work that makes software developer jobs not as fun as software developer hobbies: researching what is already out there, writing documentation, fixing UI or cosmetic bugs, etc. It is also much more fun to write new code than read someone else’s code, which explains why many people are much more willing to start new projects instead of joining already existing ones.
It helps to sit down and think about what the hard problems in software and computer science are, and why we aren’t working on them.
I have a couple reasons why I want to bring this Tesla coil-building to people’s attention. First, because I hate fun and am a bit of a workaholic (or at least some friends have confided to me). I obsess over creating works of impact.
But second, because I realized that I only have so many spare hours per week and that amount will only decrease in the future. Many of the little bits of software I’ve created over the years have been lost to disk drive crashes or simply forgotten over time. They filled a certain niche for me for a time, but in the end were just small and easily forgotten notches in my programmer belt. They served their purpose solving a problem I had, but I wonder how many of those problems could have been avoided or ignored in the first place.
My advice to other software developers: ignore the temptation to dive in and start writing code when an idea for a new project comes. Make a good faith attempt to find and use (or extend) what is already out there. That Tesla coil may look impressive when you first built it, but eventually it will just end up collecting dust in that garage.