Good times.
Wait, MS QBasic had fantastic in built help, with examples. That is the best kind of help.
That set the train moving.
Personally find p5js/The Coding Train is the closest thing around to a modern equivalent.
The amazing part was the reader comment section in the end, where people were writing letters to the magazine publishers with their modifications to programs from one of the magazines before, so patches were literally transmitted via paper.
To me as a child, I never understood that this was programming. This was just how I could play games on the device.
Amazing memories with the C64, and I was so lucky to get one as a child because it was more common in the human generations before me. Getting a used 386 turbo as the second device was literally child's play when I was learning to write assembly for it when I discovered an assembler program on its hard drive.
Then I got a PC, and learned structured programming with Borland Pascal and later Turbo C. These were great IDEs for the time.
The tape-recorder which was used to load programs from cassette-tape did not work, so my sisters ignored the machine and I started reading the manual, which had instructions and an introduction to BASIC.
Got hooked on BASIC, then z80 assembly, later graduated to working in intel assembly and similar low-level stuff.
These days I'm sysadmin/devops/cloud/whatever pointless title and while I program for fun, and to do terraform, etc, I'm not a coder per se.
Then I had a couple of jobs where I was given access to data and opportunities to go beyond my expected duties by doing things with that data, i.e. automation and reporting.
Considering I've spent 40 years coding things I really should be better at it.
That was probably about 20 years ago, I'm 32 years old now.
When I was in high school, I needed to automate downloading torrents (I was downloading tons). So I plugged together a bunch of tools including:
1. QBittorrent to run a FileBot script once the file was finished downloading.
2. FileBot script was a Groovy script that renamed and rearranged the contents into proper folders and
3. A small Python script that called the Telegram API to send me a notification that the download was complete.
Then I got into college and learnt they had a web portal which showed metrics like attendance (which turned out to be important) and test scores. So I wrote a Telegram Bot that would scrape these figures and save it into a database and run some calculations such as
1. Tell me how many lectures I needed to sit through to get to a required threshold.
2. If I decided to bunk college on certain days, how much attendance I'd end up losing.
Then I opened up this bot to allow my friends to register. Near the end of the first semester, the test scores were only available on the website but there was no direct link to that page from the public portal. I had found it out playing around on it and noticed they had directory listing enabled on some endpoints which led me to those "unlinked" but functional pages.
I wrote a neat feature which would allow querying this page and send a screenshot of it via my bot. I was running this entire thing on a Raspberry Pi 3B at my home and one morning I woke up to see logs from students I didn't know trying to use the bot (and ended up crashing it haha). Word had gotten around that test scores are accessible only through my bot.
It was one of the best projects I ever worked on. At its peak, I had 300 DAUs and I would hear from my friends in other departments that their entire batch is using Telegram solely for my program. I was also able to monetize it towards the end which felt nice.
These projects served as a learning tool for a lot of stuff for me. I learnt how to manage VMs, containerization, async I/O, DB and ORM integration, how to write good docs.
I still miss it.
after i was able to do basic patches i learned C# (then 1.0) so that i could load and patch processes in Windows. my patches were relocatable and assembled in the hackiest way, heh. why didn't i do C or C++ like a sane person? dunno, but that's how i started =)
After that, I played around with HTML/CSS which led me to building things in PHP as this was the go to language for implementing logic on the web.
I got good at it by picking GitHub repositories I liked, making sure I understand their architecture top to bottom, as well as why specific technical choices were made. In addition to contributing features, solving issues for users really helped build a strong mental model for the code bases, and that is how I learned. All of this work was done while working towards my PhD, on evenings, weekends and during holidays.
Personally I think this approach has really worked for me! I do think that it does depend on picking great projects to contribute to, in which the quality of the code is extremely high. That is the best way to pick up good habits.
After that, a Logo-like language called Roo (with a kangaroo instead of a turtle) on school 286 PCs, then BASIC (with help from magazines) on home ZX Spectrum, and finally Turbo Pascal (with help from, well, the IDE help files) in after-school club, all during middle school. Made up my mind to become a programmer very early on.
After that I started creating websites, learning HTML and JavaScript. At some point I've found Clojure and functional programming and, immediately, decided it's better than anything else, so I started to learn it. Mostly, I learned by trying to make something, looking through the internet to find help, and joining some online communities. My parents didn't care much if I was focused on school or not, as long as I was doing something, so I had a lot of time to learn by myself.
In high school programming was one of the leading subjects in my class. There I realized I'm already quite proficient at it. I was not the best in math or physics, but was easily the best in programming.
And so it goes on for about 20 years now. I still mostly learn by doing. I read some programming books, but rarely as thoroughly as my first PHP book.
Plus C++ in first year "programming for engineers" and assembly in 4th year robotics
A few years later, it wasn't exactly programming but I was able to learn a bit about assembly on Macs in the 90s with ResEdit.
Also, didn't have the cash to go buy games from the local computer store so this was the next best thing...
I wrote some surprisingly complex interfaces for online services in Excel, without having much of a clue what I was doing. I didn't understand variables so memory was handled by reading and writing to the spreadsheet - arbitrary cells would hold values, rows were my arrays. In hindsight this very visual way of representing memory was probably helpful to my learning.
I made an 8-bit balloon that floated on the screen. It was magical. It is still after decades.
I didn't know how arrays or linking/including worked (or that they existed), so it was one long file with each creature having its own function to determine their behaviour and their own health_creature_1, health_creature_2 and so on. I really started wondering if there was a better way after a while.
I started learning to modify the games I was inputting, and then to write my own simple games. Somewhere in there I also was learning to write DOS batch files to do simple tasks. I wrote a DOS menu system that let you choose which program you wanted to run, to make it easy for me or my siblings to run any of various games, plus "serious" programs like WordPerfect. My dad got me a subscription to Dr. Dobb's Journal and a magazine called DOS World. They had program listings in assembly that I also typed in and tried to modify, just doing super simple stuff like playing the Twilight Zone theme song on the PC Speaker. A bit later I got into text adventures and wrote a few of those using special-purpose languages. I also wrote some games in ZZT. (And oh yeah, another comment on here reminded me I wrote some silly "games" in the variant of basic on my TI calculator, stuff like a Mad Libs generator.)
At some point in high school I started using Python. I think it was Python 2.1. By that point the internet had gotten to the point where I could learn a lot by searching for stuff, and so then I kind of shifted into using web tutorials and newsgroups and forums and stuff, which continued until today. Along the way I played around with a few other languages, like Haskell, and got reasonably conversant with JavaScript, but Python remains "the" language for me.
So I was self-taught, at first relying on books and later on whatever I could scrounge from the internet. I've never taken an actual class in programming or computer science.
Games were a major factor in my early programming development, the other main line being small DOS utilities. The David Ahl books were foundational for me, and I really hope people starting out today can find something like that, something that makes them go "Wow, look at all the things that I can actually do just by taking this code that I don't understand and learning how to mess with it." The "Using BASIC" book was similarly key in that it got me to understand how a programming language had a syntax, data types, and so on. Even when I moved away from BASIC, I pretty easily understood how when I was reading a tutorial on Haskell or Python, it was in some sense telling me the same stuff that that book was telling me, although the languages were quite different.
Since then I've taught programming a few times and I'm very informed by that early experience, basically the idea that learning to program involves just jumping in and wrestling with stuff, exploring and experimenting.
Then really learned Python in 2010s trying to solve a real-life problem - had to scrape an ecom website, used Scrapy. Now it's Go, quite complex projects, about to launch our SaaS startup.. took a while..
From there on I was always learning faster and more at home as a hobby, I was mostly ahead in school. A friend and classmate and I coded so many different projects during that time (2D terminal game, PHP forum, PHP CMS that was actually productive for a few years, thereby also learning how the internet worked).
It's just crazy how lucky I got to be interested in this thing at the right time. "Back then" I feel you got so much more time to learn something well, mostly because things weren't changing at crazy speed.
ipnon•1h ago
I suppose all of this is to say I still feel like I'm learning! If I ever feel like I have finished the learning process it will probably be on my death bed!