I don't feel like I ever learned how to code. The first program I wrote was in Flash, it moved a little triangle spaceship around a small frame and shot lasers. I had no idea what was going on. Later in college I wrote a lot of Python, like Django and simple algorithms. Still had no idea what was going on. After college I wrote lots of JavaScript targeting Web APIs and DOMs and strange frameworks. Still confused. We were serving on the order of 100,000,000 people a day, kind of just made it up as I went along. Now I write Elixir, and still only have a fuzzy idea of what I'm doing, but eventually it starts to work with the features and reliability I want.
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!
I “learned” to code in Visual Basic 6 to create programs mainly for AOL chat rooms (games, etc.) when I was a kid. I was more of a script kiddie than anything else, but I got hooked pretty quickly. Good times!
neopets was definitely a factor, who else? And "hacking" school computers, windows use to let you make folder backgrounds with html, could do some funny stuff.
I think the very first code I wrote was in QBasic, but the first _real_ code I wrote was in Visual Basic 6. I drew a row of dice and then a bunch of buttons and wrote a Yahtzee game (single player). It took me weeks and it was mostly a giant nested if statement.
On the brand new and shiny 486 running dos and windows 3.1 that my father bought, on the qbasic language. With only a paper book as reference. No llm, no stackoverflow, no pageranked search engine, no internet, and not even Ctrl+F. In these days when you had a bug, you could chew on it for days.
I wanted to cheat in video games. To cheat in video games. For the first couple of years I was content using the offsets published by others, but eventually I wanted to reverse the games myself. That's where people told me that the best way go get good at reverse engineering was to get good at programming.
ZZT! It had its own in-game editor and scripting language ZZT-OOP, which blew my mind as a kid. That was the gateway drug to Flash and ActionScript, HTML, IRC bots, Minecraft mods, and more. Self teaching by building something fun and exciting always worked the best for me. Back when coding was for fun and not money :-)
On the 6502, which a relative gifted me when I was around 9. The cool part was that they also gifted me a huge stack of boxes with C64 magazines in them that contained new games and programs the publishers found cool and wrote about. Then you could type in the code of those games and play or modify them, as a lot of them were commented codes.
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.
My father had a an old HP Vectra 286. Somehow I found the 5.25 floppies with QBasic 4.5 and the manuals and just started experimenting with it. I must have been around 11-12 years old. When I was 14 and doing work experience in system administrator I got a Free sad CD. That started my Unix journey.
When I was 11 years old my parents bought a 48k ZX Spectrum for the family. These were huge in the UK, and to a lesser extent they were popular in Spain too.
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.
Started by reading lots of articles on Topcoder (they have a dynamic programming tutorial which imo is the best material on DP). Then did exercises from CLRS before writing a single line of code. I considered it leg work and not of very high value (remains true though, the best paying jobs in tech are research and in finance its quant trading). Then I dived head first into C++ and Java, slogged through the pain and I got absolutely hooked. I learnt almost all of the computer science I know through books, good old fashioned working through exercises, doing lectures on MIT Ocw. Never paid a single cent for any professional courses or bootcamps or any of that jazz. I did write some Python in high school but most of the work I did while at uni studying something else entirely. My initial objective was not to build anything at all but to just get better at competitive coding. But then I built something reasonably complicated and I have been an engineer ever since. I have worked in ML, distributed systems, low level systems programming in the past 10years. To answer the question I learnt coding by self study.
Practical Common Lisp by Peter Seibel, and then The C Book by Mike Banahan, Declan Brady and Mark Doran. No clue why those books in that order, but they both proved to be decent choices.
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.
My father was a software engineer (working on satellite control systems ... very cool stuff) and he bought a ZX Spectrum in the mid 80s when I was about 8. That gave me access to Basic and I picked up the fundamentals from there. I didn't love it until university and using the Internet for the first time though. There's something about writing code that people can access from anywhere in the world that I find really exciting.
Considering I've spent 40 years coding things I really should be better at it.
I was probably about 12-13 when I started learning how to code. I liked video games, and I wanted to have a creative outlet. I started building games with C# and the XNA framework. Eventually, I turned it into a career. (Doing webdev, I've never done professional game development)
That was probably about 20 years ago, I'm 32 years old now.
There used to be a website called Planet SourceCode where everyone uploaded their own code. I would download the zip files from there and build clone programs by watching how everyone else did it. Mostly programs for Windows XP, Visual Basic and Delphi clones.
One BASIC class on a mainframe at the local community college in 7th grade. Then 5 years of teaching myself BASIC and 6502 assembly and Logo and Forth on the Apple //e that I begged my parents for. And one year of Pascal in high school.
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 started with x86 intel asm. i just derped around with ollydbg a lot while i referenced the intel instruction set pdf that i had.
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 =)
71 comments
[ 6.1 ms ] story [ 77.5 ms ] threadI 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!
Good times.
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.
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.
https://www.topcoder.com/thrive/articles/Dynamic%20Programmi...
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 =)