My story of becoming a computer programmer is a cautionary tale about why you should never get a job doing something you enjoy.
I have been told by my parents that back in the early 80s, they bought a Sinclair ZX81, which was one of the earliest cheap home computers. Apparently my dad was kind of into modern gadgets at the time. I don't remember this computer, but i definitely remember the next computer they bought - the Amstrad CPC6128.
The CPC was one of the higher end 8-bit personal computers, which meant it was still on the low end of personal computers when it came out in 1985. It had a floppy disk drive (the very rare and indestructable 3" slab of plastic format), and a massive 128kB of RAM.
To understand just how little RAM 128kB is, it is not enough to fit the text of a short novel. It cannot fit even one second of CD-quality audio. And, into that space, the programmers of the day jammed the entire operating system, the application or game you wanted to run, and enough user data that people could still use the device to write full-length novels or compose real music! It was fantastically limited, but it was still lightyears ahead of using a typewriter or hand-writing musical notation.
My first experience using a computer was this era. You turn it on. You get a text prompt that says "Ready". You are now inside BASIC, which is a programming language. Everything you type into the computer is a command in the programming language, whose most recent line is executed when you hit return. If you prefix your line with a number, then instead of executing what you typed, it loads it into memory.
Most people know this:
10 PRINT "HELLO"
20 GOTO 10
This means: reserve a piece of memory with label "10", and when you get there run the command to print "HELLO" to the screen. Then reserve a piece of memory with label "20", and when you get there, run the command that forwards the processing to label "10". "RUN" tells the computer to go through all the numerical labels in order and execute whatever is there. So this creates an infinite loop of "HELLO".
If you wanted to run a program that was saved on disk, you did RUN "FILENAME", which overwrote the current memory labels with whatever was inside the file, then executed those in order.
It's a bit more complex when it comes to compiled machine code, but this is basically all that programming is - loading a list of commands into memory and telling the computer to run them.
I fell in love with the idea of being able to type stuff into a computer and have it do things. I thought it was so cool that the games i could play were things i could theoretically program all by myself. The credits of computer games back in those days were usually just two guys - the coder (who usually handled graphics as well), and the musician. The end. Writing a piece of software all on your own all felt eminently achievable.
But how to learn?
Back in those days, computer magazines printed pages and pages of code inside the magazine, and readers literally typed in the program line-by-line on their own computers so they could run it themselves. I also raided the 001.6 section at the public library. (Computer science has since been relocated to a different Dewey number.) There were lots of books teaching kids how to program, but every home computer was different, so if you got a book about the BBC Micro, the code would not work on a ZX Spectrum, or a Commodore 64, or any of the other home computers. Of course, as a precocious tween, i wanted to make it work anyway, so i typed them in just to see where they would fail. Through process of trial-and-error, and reading and re-reading the hefty tomes that came with the computer, i sometimes figured out how to make it do something similar to what the books intended.
I remember the first program that i created that was entirely my own was a Dungeons & Dragons character creator. Rolling up the random numbers was easy, but i was proud of the time i had taken to build the piece that generated random fantasy-sounding names. It did things like find consonants and vowels that worked together, and skipped consonants that didn't. Every character got a unique and usually pronounceable name. That was cool, because it was doing something more complex than you could do with a set of dice.
Later on we got an IBM PC XT with DOS and a green screen. Then the big one - a Compaq 486SX with a sound card! A computer that could play Doom and connect to the internet! PC gaming and the internet has changed a lot since the mid 90s, but it's still fairly recognizable. Certainly more recognizable than what was going on in the 8-bit days.
Anyway, the point is, i was playing around with computer programs from under the age of 10, and i never stopped.
It turned out that i didn't have the mathematics skills to become a so-called demoscene coder, who were the true rockstars of home computer programming in the 80s and 90s. They used these incredibly limited machines to build awesome 3D graphics effects and scrolling scenery that often eclipsed what was happening in commercial games of the era - and they gave it all away for free! You'd often see their "intros" on the front of cracked and pirated games.
Yeah, i was never that smart. I was also never smart enough to become an actual hacker, figuring out flaws in operating systems, dialing up random phone numbers and trying to break into governments or banks, crashing fifteen hundred and seven computers in one day, all that.
But i was still adjacent to those scenes. I knew enough to be excited whenever a cool new crack came out, or when a demoscene coder pulled another amazing effect out of their hat. Hobbyist programming back then was a bit counter-culture, often anarchist, sometimes libertarian, sometimes communist, but almost certainly anti-establishment.
Meanwhile in the academic programming arena, things like BSD and Linux were emerging, open source and free software was flourishing, the internet was being built... and then it took over the world! Those guys were perhaps more pragmatic than the teenage sceners i grew up idolizing, but by the end of the 90s i think we'd all found one another online and become part of a loosely-affiliated hacker subculture.
Anyway, fast forward, dot com boom, dot com bust, web 2.0, blah blah blah and here we are. I've been working in software development for over 20 years, i now get paid a lot of money to do the kinds of things i did for fun as a kid. But it's not fun. It fucking sucks. Part of the reason why it sucks is because i don't like feeling obligated to work just to survive. But it also sucks because capitalism is fucking shit and goes against the original hacker ethic. And it even more sucks because programming today means using abstraction layered upon abstraction layered upon abstraction, as each new generation of coders decide that they need to reinvent the wheel, while still leaving the old wheel that was already there underneath it.
Programming is not fun any more.
And it occurred to me the other day, that a large part of it is because a whole shit-ton of people got into this industry who do not really care about it at all.
The lack of care that many of my peers have about writing concise, robust, well-performing code - even in very "high status" companies - is sad. There is no real economic incentive to write good code, you see. Venture capitalists don't care about good code, they care about company valuation. They care about "MAU" (Monthly Active Users), or "YOY" (Year-Over-Year) growth, or whatever the fuck. Most professional software developers don't care about good code either, they only care about going home at the end of the day with a fat wad of cash in their pocket - two or three times the fatness of the wad the majority of people are taking home. They believe they're owed it, because their parents paid to put them through university, which taught them to always act like 10 PRINT "HELLO"; 20 GOTO 10 is some deep and esoteric shit the average person could never possibly understand. Meanwhile there are plenty of "uneducated" blue collar folks who are fully capable of tinkering with Linux in their spare time.
I really hate most of the people in my industry. A nice thing about my current job is that because the company has switched down a gear, most of the career developers left for another job, and the ones who remain are more like me, just putting in a few days a week and dedicating their personal time to other cool stuff.
Every now and then i see some of this cool stuff pop up in the contemporary tech media. One of these rockstar developers builds something nifty, like a completely reverse-engineered and functioning version of Grand Theft Auto 3, constructed by examining the binary machine code and trying to recreate the source code that compiled to it. (This project was promptly shot down and erased off the internet by the publishers of GTA.) Or the incredibly clever example of an executable file format that will run natively on Windows, Mac, Linux and BSD. The exact same file! No need to install any scripting language or virtual machine frameworks! These inspirational stories pop up every few months, reminding us of the spirit of what programming used to be. Simple. Elegant. Curious. Ingenious. Most importantly, free and unencumbered by copyright or corporate influence.
But then you see the reaction to these sorts of stories. The "what's the point?" guy. The "that's illegal!" guy. Or the parade of "oh this reminds me of [insert barely-disguised pitch for current employer's paid solution]". People trying to capitalize on the buzz to shill their startup, or their blog post, or whatever fucking shit. It's disgusting. And yet, these are the majority of people being paid to write software.
And it shows. It shows in the layers and layers of unnecessary cruft that has been developed over the years. It shows in the massive inefficiencies, the lack of craftsmanship, the busywork of rewrites and refactorings, anything to keep the right people employed and amassing ever-greater mountains of wealth.
It's killed any childhood enthusiasm i had for being a programmer.
Not that i was ever much of a hobbyist programmer. Mostly i just mucked around. My most recent "scratch the itch" project was something i did while living in China, a very simple command-line Chinese/English dictionary, which i wrote because it was pissing me off that i didn't have an app on my computer that could do offline translation, especially when a lot of good translation websites are intermittently blocked by the Great Firewall. I'll never be one of those rockstars who can reverse-engineer a AAA game, but i still care very much about writing good software. I recognize it when i see it, and i try to emulate it in my own work. I go back and refine, refine, refine, always trying to simplify and improve, even if it's just to tweak some stylistic bits for consistency.
And it's sad that even just that level of diligence or attention to detail is now considered unusual in the paid software industry.
I guess this is how it goes in every industry. Imagine how disillusioned i'd be with music if i'd pursued that instead! Or academia! In fact, i don't have to imagine, because a lot of my friends have worked in the music industry, and my mom was an academic. The answer is: it's shit. It always turns to shit the moment money gets involved.