

Python is a great place to start. I’d recommend learning the command line, too. And doing so in Unix–that’s the Terminal on a Mac, or install WSL on Windows–or install Linux on a computer if you want to go for it. LLMs are now a great resource on getting this stuff set up. Sometimes getting your work environment going is the hardest (and most annoying) part of getting started.
I’ve written a Python programming guide here, that’s kinda done: https://beej.us/guide/bgpython/ (free, no ads or tracking, hand-written).
But you can also use an LLM as a tutor. Tell it you’re trying to learn to program and it should teach, not just give straight-up solutions. Or “here’s my code that’s not working. Please hint at what I’m doing wrong, but don’t tell me.”
LLMs are a tremendous double-edged sword. They can completely nerf your brain if you just ask it for solutions, but they can also turbocharge your learning if you use them right. Tell yourself you’re not allowed to ask for the solution until you’ve struggled with the problem for at least an hour. The struggle is where the learning happens!
Don’t fool yourself into thinking reading code is enough. You have to write it painstakingly in order to understand it and improve. Once you have a working solution, look it over and consider if you can see ways to improve it. Once you’ve finished that, show it to an LLM and ask it if there are ways to improve it. Be critical of its response. For each suggestion, have an opinion about whether or not you like it, and have a rationale for that opinion. You might later find you’re wrong, but it’s the thinking critically that’s more important than being right or wrong.
It’s OK to feel ignorant. We all feel that way–and I’ve been coding for over 40 years. Just choose a direction out of the things you don’t know and start attacking. The field is vast and no one will ever learn it all in a lifetime. “The things I don’t know fill libraries.” “The expert has failed more times than the beginner has even tried.”
The only differentiator between experts and failures is the experts get their asses kicked over and over and over, and they keep on attacking. “Every success is a learning experience. Every failure is twice that.” “Lose your first 50 games as quickly as possible.”
And try to have fun. Revel in being in the midst of solving a problem without knowing the solution. Turn it around in your head, looking for a way in. Maybe you don’t solve it today. Maybe step away for a short walk and see if that knocks something free. Try to make it relaxing instead of stressful. There are problems I’ve been considering in my head for years–I don’t think I’ll ever code them up, but it’s fun to examine the problems and see what bubbles up.
Lastly, I’d throw this at your brain: systems are made up of an interconnection of black boxes, each with inputs and outputs. In Python, functions are one way to model these. Each box should ideally do one thing only. Think of them like lego building blocks. Each one is made from code to do its simple task, and then you use more code to wire them together to do a greater task. And (here’s the secret) that greater task is a new block box with inputs and outputs! Black boxes are full of other black boxes–it’s all fractal layers of abstraction!
A cached version that hasn’t been overrun with AI slop, I imagine.