True Power and Zeitgeist

Should you learn programming?

Olex
9 min readJan 5, 2015

Coding is powerful. Coding strikes at the heart of what our species is all about — recording knowledge, communication, and science. It is coding, as much as anything, that has enabled the progress (and flame wars) of the last fifty years.

And realistically, you can do something great with your own code in something like six months. You’ll have to climb onto the shoulders of thousands of concepts and gazillions of lines of other people’s code and run the code on a real computer somewhere.

Other species inherit culture and teach their young ones from one generation to the next. We, on the other hand, record our ideas in writing and other media, preserving knowledge from many generations and giving us refined understanding of history. In just the last thirty years, personal computers have emerged as both a communications platform, and the best way to make new media. Global interconnectedness has never been as possible as it is today with the help of computers.

Programming is the art and science of coding these machines.

True Power

A programmer built Twitter, another few built a company whose name became a synonym for “search”. Whenever those companies earn money, a whole lot of it goes to programmers. Programmers are powerful in their ability to create something a billion people might want to use. Any traditional, material power they have stems from that.

A program with proper tooling could accomplish almost any mundane task humans could want, and programs provide better ways of analyzing any task at hand. You can weave fabrics, test airplane wings, and synthesize music to your heart’s content with code. Most if not all items around you were built or influenced by a program at some point in their lifecycle. Programming helps regardless of what you’re trying to accomplish, and is the most versatile way to create tools that we have come up with so far.

Software becomes more diverse and powerful on a daily basis. The Internet as we know it is really young. Everything has changed since the first browser ~8000 days ago, and it has already all changed again since the iPhone was released ~2700 days ago. Amazon, Google, Twitter, and Fablequest have not been around for long, and we can expect in our generation to see new programs that are as revolutionary as the web browser.

As a coder, it is easy for me to see that code can help with any practical task: design, government, communications, science, art. Whatever it is that you work with — whatever product you want to make — programming shortcuts all the barriers and lets you interact with the latest and greatest technology for doing what you want to do. Writing something? Write it up and push it live. Designing jewelry? Skip the metalworking and send your design to a 3D-printer. History, Archeology? GPS, carbon dating, X-Rays, 3D scans, databases of digitized records. Regardless of topic, computers are at the core of taking art and science to new heights.

This is why programmers like what they do. We like being at the forefront, and enabling others who are working with computers.

(Aside: How much of the hype around computers has to do with AI?) As anyone who saw Her can attest, if there truly was a conscious computer program made by humans, it might be just as unsure, friendly, and depressed as we would be about the whole situation. Most programmers can’t say how conscious computers would behave — smarter? more logical? more intuitive? It all depends on the actual implementation, the sensors, and ultimately the creator of the program. As a ‘layman’ in this case, I don’t think the rhythmic and distributed nature of consciousness will be imitated in computers anytime soon. However, the mere fact that it is not out of the question is a hint at the ginormous power of programming.

There is beauty and lore in any difficult craft, and computer programming is no different: coding is both powerful and profound.

Not pictured: industrial robotics software, GPS and mapping software, satellite control software,
steel simulation software,
oil refinery software, car stereo software, sensor systems software, …

Limitations

The power of programming is still physically limited, and the opportunity cost of learning how to program is large — it takes a long-ass time. This combination means that people will be reluctant to learn it, and rightly so.

Programming on its own is weak. It takes a cognitive scientist to know a neuron. A biochemist to write “TCGACCCT…” in a petri dish. A designer to make a beautiful grid. But a cognitive scientist programmer might just implement the subject of Her, a biologist programmer can map the entire evolutionary tree with some help from a statistician, and a design-conscious programmer is probably starting a million dollar company today.

You can program new software for almost any industry, but you can’t push any physical boundaries with programming alone. If your idea has to affect something in the real world then you need hardware connected to the computer, a controllable tool, to use programming. You can’t all of a sudden reverse the laws of physics or have the computer generate viral videos and masterpiece advertisements or have it win a marathon for you. Similarly, if you have to convince people to buy and use your program, you’ll get nowhere without design and business skills.

Everyone already has a smartphone, and companies like Uber don’t need to invent any hardware or even interesting software — they are within current programming limits. Screens and people go a long way, but programming is not a superpower once the data is presented into the real world. And if you want others to use and love your programs, learning to program is just a small piece of a larger, and difficult, landscape. You need to know a lot of other skills to turn a script into something successful.

Programming is not all-powerful, so if your idea requires not-yet-possible sensors, or is outside the possibility of physics — sorry, learning to code won’t help you. And if your application just does the usual web stuff — uploading pictures, texting—you will need something truly special to stand out among the hundreds of social messaging startups that fail every year.

Not pictured: train operation software, monitoring software, communications software,
ticketing software,
load engineering software,
graphic design software,
surveying software,
power grid software,

Zeitgeist

The other side of programming and its diversity is the drudgery and reality of any piece of code at any one time. What library is it using to do X? Where does data Y live? How do you push new code to replace Z? Any library you use to power your code will constantly change (or fail to change when it should), and you’re likely going to run into trouble simply setting up someone else’s “working” example about half the time. It takes a lot of knowledge just to know whether it’s your error, whether it’s easy to fix, and how to find the solution. This is what I call “Zeitgeist”– just the details of how a piece of code is written, why is it subtly different than an alternative.

Zeitgeist bullshit and true power exist together, unavoidably.

There’s so much code out in the wild, on every computer, on all the servers, it’s truly difficult to grasp or even estimate. All the data on every webpage is stored somewhere in a rack and gets beamed out to you via some tower. All of those towers and racks are interconnected by devices and wires that go on the fucking ocean floor; all the devices have unique addresses. There’s a maximum number of addresses — either 2^32 = 4,294,967,296 in Internet Protocol version 4, or if you use the fancy new IPv6 (~4–8% adoption so far), there’s 2^128 addresses. It’s a detail, but an important one. Can your left thumb’s backup transmitter have its own address? There isn’t even enough for every person to have a personal mailbox in IPv4, but with IPv6, sure. Programming is full of borderline inadequacy and niche alternatives.

Space Jam’s website is still up (I hope). It’s one of the few sites that got retained. As the computer industry grows up, its languages change. Application frameworks, data formats, and just about the whole software stack drift slowly like layers of plate tectonics. CSS, Java, Python, Windows, iOS, LTE, HTTP— they’re all plates in different layers of these drifts, and the more technical you get, the uglier it gets. The more sticky layers there are with fancy terms. Only certain version numbers of software A can talk with software B. Layers of incremental change get discarded, re-applied, incorrectly indented, and later forgotten. These layers are hard to pick through, and if it wasn’t for the lasting survival of HTML, Space Jam’s website would be long gone.

As a programmer, your work relies on this shifting landscape of disparate hardware and software standards, a mix of steady trusses and flaky shims. The territory will always change because hardware and software is constantly being improved.

Writing code is not a singular activity, like “fishing”. To say you “write code for a living” could mean anything from detecting the fish, counting fish, to figuring out what’s killing your fish, to fishing, to net-strength research, to observing the climate, to deciding who gets a fishing license and at what cost. In this insanely big landscape of concepts, islands, and acronyms it’s easy to get lost. You might get stuck reading about climatology when in fact you just need to go rent a dock, run an open-source FishingBoatFactory once, and start driving the boat. And don’t bother with the FishingBoatFactoryFactory, it’s a piece of junk; everything you read online sounds like it’ll make you a good FishingBoatFactory, but then none of the boats come out right. It’s all zeitgeist: if you find a useful statement like that about any particular software layer, it is only useful for a small subset of programmers, and it’s bound to change within two years.

Software is in fact best when released as “barely useful” and continuously improved. Other methods of development have proven to be delusional.

Software, whether open-source or proprietary, is made for specific environments with specific configurations, and is rarely designed to withstand huge changes in their underlying layers, much less a different operating system or different hardware. So many changes are already incoming to all the software you use that even “long-term support” generally means no more than 5 years.

Learning to code involves a whole lot of tweaking broken configurations, bashing your head against a wall with six tabs of stackoverflow.com open all contradicting each other, and reading timestamps to piece it all together.
As a programmer you’re bound to spend a good share of your time picking between subtly different options and bulldozing through zeitgeist bullshit. What might feel like a feather-soft bullet train of a website can be either a reasonable biplane design or Cthulhu on the inside. The more people designing the code, the more turnover there is in the team, the more fucked up the code is going to be.

I know for a fact that there are still companies who require their employees to be on Windows XP (from 14 years ago). They’re dependent on some software that was built for that era, or their security suite only works with some old-ass internet browser. Regardless, this is just some byproduct of other bullshit software choices someone else made years ago, and it’s zeitgeist that makes working in the IT department of that company utter hell.

The zeitgeist carries a lot of opportunities to improve, but you can’t get stuck spending your time improving every layer your code touches — or you’ll never get anything done. For many tasks, you just have to find some solution that works, drop it in, and move on. You can do a lot to help open source with small contributions, but it’s best to find a set of layers and commit hard when you can really make a difference. This mix of patience, empathy, and impatience when developing programs takes years to master. It’s essential to waging through the zeitgeist and getting things done.

Dive In

Learning programming will empower you toward whatever path you wish to follow. At the same time, it’s full of failures, cliques, and conundrums. It’s a maze of semicolons and WTF’s and {{undefined}}. Programmers are not upset when a program doesn’t work, they just work at it, fix it, and move on. They’re curious. They look things up. They’re all human.

If you are looking for inspiration, if you want to make something out of the ordinary, if you want to change the ebb and flow of things, seriously try programming. Dive deep and swim fast.

Break through the zeitgeist and remind us of a program’s true power.

Hi Medium! Please let me know what you think about this post on twitter: @olexpono. I’m working on more writing to help dispel misconceptions about programmers as well as other topics. Thanks for reading!

--

--