I didn’t encounter anyone who knew more about computers than me until I went to nerdy summer camp. That was only for four weeks of my life. I wouldn’t meet anyone who knew more than me again until RIT. There was barely an Internet, and there was definitely no Stack Overflow. How the hell did I learn this stuff?
Privileged enough to have money to buy computers. Lucky enough to go to a school district that had Apple// computers in every classroom and labs in every school. Lucky enough to have people encourage me to learn about computers. I had access to some books, and the literacy to read them. Yet, none of those things automatically result in learning. None of the other students learned as much as me.
I learned because I had curiosity and desire, so I futzed around with computers and figured it out. Every second someone would let me use a computer, I used it. had to tear me away. I did this a lot, and for over a decade. Especially from the ages of 12-18 I futzed for hours and hours every single day of my life. I experimented and tried things. Like taking a clock apart and putting it back together repeatedly, and then becoming a clockmaker. No apprenticeship necessary.
What was really significant was the luck of the time I was born. Computers were available, accessible, but still a huge pain in the ass. I wanted to play Mechwarrior 2, I had to learn about RAM. Boot disks. .bat scripts. DOS. I had to learn to upgrade the RAM in my PC. I wanted to play a MUD, I had to learn about TCP, telnet, ports. I wanted to download and play MP3s I had to learn about libraries, codecs, P2P networking. I had to connect to the Internet via modem, or play C&C Red Alert against friends, and had to learn some ATST phone crap. I wanted to make a web site on Geocities, I had to learn HTML. CSS didn’t exist yet, and JavaScript was still evil. I had to learn image editing, the difference between a gif and jpg and a png. I wanted to run Linux, I had to learn about file systems, storage, partitions, master boot records, etc. Hell, the fact that I even knew what Linux was and used it before the year 2000 put me way way ahead of the game.
And so on and so on and so on. Being born at this time put me in an environment where simply having a computer and having a strong desire and curiosity to use it automatically resulted in education. And again, I learned this way over the course of many many years.
Now you have an army of professionals who all learned this same way as I did. Of course we suck at teaching anyone else! We scoff and tell people to learn how we did, as if that is still a viable option. First of all, nobody has years to spend learning. If you want to make an app, you don’t have ten years. Apps probably won’t even exist by then! You want to get shit done now. But mostly, computers aren’t so crappy as to make learning easy.
If you’re a kid, your computing devices have so many layers of abstraction between the UI and the inner workings, and these abstractions actually work. You never have to learn anything about how the computer works. Yeah, you have to be a programmer to make a game, but imagine if you still had to be a programmer to play one like it’s 1985!
We have come a long way, and that is a fantastic thing. This was the goal that we were working towards, and we achieved it. We have made computers accessible to everyone in our society. The smart phone is actually in every pocket! It’s real! We did it! We used to imagine the flying car and the pocket/watch computer, and half of that actually came true!
The problem is we have not done nearly enough to update technology education for this world that is not even that new anymore. We need a new model of technology education, and I don’t know what that looks like.
The only hint I have seen is when I look at the speedrunning community. Some of them, especially those involved with TASs, Their goal is to finish video games as quickly as possible. The only way they can do this is by learning how old video game consoles work on the lowest levels.
Just like I HAD to learn about computers just in order to play games, we need to create some sort of scenario where people NEED to learn about low level computing concepts in order to achieve their actual goals. People will never go even one abstraction layer lower than necessary to achieve their goals.
If I had been born today, I would very likely not have become a technology professional.