Twenty years into the millennium, programming jobs still pay well. Software is everywhere, and organizations need “construction workers” of code. A significant portion of the work in this field does not require a college education. New learning institutions (such as coding bootcamps) have emerged to fulfill demand. It was not always like this, of course. Back in the 80s when I wrote my first lines of BASIC, I did not learn to program in the belief that it would lead to a career. I did it because it was a fun and challenging hobby. Decades later, I believe that learning how software works is important even if you never intend to make a dime as a programmer. Why?
Over the history of humanity, we have learned to build all kinds of machines. Some of them are very simple. At first glance, one may not grasp the ingenuity it took to create them. Think of an hourglass, or a door knob. A kitchen stove, perhaps. If you see one of these for the first time, it may not be obvious how it works. If you are curious, you might want to take it apart and figure it out. Other machines are more complex. A car engine, a vacuum cleaner, a transistor radio. These mechanisms were invented much more recently, as the result of cumulative knowledge gained during the Industrial Revolution. If you wish to understand how one of them operates, you may need to study some basic science such as chemistry, mechanics, electromagnetism. However, all these machines are physical systems. There is a limit to their complexity because of space constraints and materials.
With computers, many of these limitations go away. When you write a program, you are building a machine simply by describing it. Think about the implications of this: you are using a physical machine (the computer) as the material support for a logical machine (the program). This second machine is extremely malleable. Unlike the fixed hardware of the computer, you can describe a practically infinite number of machines. A spreadsheet, a first-person-shooter game, an app to put cat noses and bunny ears on your selfies. The primary limitation is our collective ability to imagine these applications.
As you learn to code, you will experience several “aha!” moments as you gain new insights. Some examples:
- A computer is a very dumb mechanism. However, it is incredibly fast. If you make it do something stupid repeatedly, it will do it millions of times before you stop it.
- Once you have built one of these machines, you can copy it indefinitely. You will never need to build one like it from scratch again. Imagine if you could build a chair or an airplane just once and then clone it every time you needed one, for free.
- You can use a piece of software as a building block for new pieces of software. In other words, you can build machines using machines built from machines, ad infinitum. How many of them are collaborating to create your reading experience right now? How many people were involved in making them?
It is easy for me to write about these insights, but I cannot fully convey their significance with words alone. I might as well be talking about the ecstasy of seeing the Earth rise over the lunar horizon for the first time. I do hope these words inspire you to dip your toes in the vast ocean of zeros and ones. Just like there is no need to become a historian in order to enjoy history, we also do not need to aspire to professional software wizardry to appreciate the beauty of these machines created purely by thought.