When I was a kid, I was really into fantasy books and online text-based RPGs. I met some friends through one of those games, and they needed some changes made to their website and forum. Somehow, I ended up working on it. Then I asked my parents to get me a PHP5 book for Christmas. I think I was around 13-14 then. This was one of few programming books I've read thoroughly, although I don't remember anything from it now.
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.
Was offline and had no tech people or resources around, but got access to an unused 286 which booted into a mysterious "C:\" prompt
Slowly worked out how navigate the system, then tried running the various built in things I found
One of these was QBASIC.
Started reading through and messing with the example games which were part of the built-in QBASIC in MS-DOS
Reverse engineering how they worked gave a lot of the core concepts (variables, loops, procedures)
After writing a few (very) naff text adventures I stumbled across the intriguingly named "DEBUG" tool
Used debug to step through some of the other built in MSDOS utilities and try to work out what the mysterious symbols were doing (how I learnt assembler and machine code)
Later when I finally found BBSs I started debugging/disassembling some of the BBS mini-demos which were ubiquitous those days, which introduced me to manipulating graphical memory etc..
The smaller size of these, and fact that they were generally coded in assembler was much more useful than reading through compiled code
I do not recommend writing assembler in DEBUG, but wouldn't trade in the learning I got from exploring a total black box with no references or learning resources (beyond time and curiosity)
Happy to see a shoutout to QBASIC in this thread. That was my first programming language, taught in 10th grade intro to programming. I loved it! I then took C++ at the local community college then AP Comp Sci in 12th grade.
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.
Tracking Russian satellites at school, one of the younger teachers had an account on the local university computer. He did data reduction and orbit calculations in Fortran and showed me the code, letting me try simple stuff. I found the spherical trig nasty, but the Fortan easy to understand.
Shortly after at Uni I wrote a dating system for the Rag Committee (UK thing to raise money for local charities) whilst learning other languages. Had fun with it and annoyed a few people.
Got a job with ICL and they taught me more languages and let me write some useful software as well as some outside-work fun stuff.
These days I use Python, bash and SQL, with occasional Perl. Some of the languages I used to know have completely disappeared like S3, Snowball, Pop3, 1900 assembler and so on.
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!
In IT school back in 2008 (with 14). I had absolutely no idea about the school or programming, I was just knowing my way around computers, so I signed up for it. We started with C and I remember the first couple of weeks and exercises just doing stuff with printf. Then reading user input with scanf. It clicked pretty early for me, and I loved it.
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.
Fifth grade, early 90s, informatics class with Russian-built 8-bit computers (Corvettes). The "programming language" only had drawing commands (LINE, CIRCLE, etc) and the first program was the homework to draw a house. We were to write the program on a piece of paper and then type it up in class the next day. Everybody came in with your basic six-line box + roof. I had two pages of code with a 3D house, door, windows, chimney, shining sun, etc. I was hooked.
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.
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.
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.
Slowly worked out how navigate the system, then tried running the various built in things I found
One of these was QBASIC. Started reading through and messing with the example games which were part of the built-in QBASIC in MS-DOS
Reverse engineering how they worked gave a lot of the core concepts (variables, loops, procedures)
After writing a few (very) naff text adventures I stumbled across the intriguingly named "DEBUG" tool
Used debug to step through some of the other built in MSDOS utilities and try to work out what the mysterious symbols were doing (how I learnt assembler and machine code)
Later when I finally found BBSs I started debugging/disassembling some of the BBS mini-demos which were ubiquitous those days, which introduced me to manipulating graphical memory etc.. The smaller size of these, and fact that they were generally coded in assembler was much more useful than reading through compiled code
I do not recommend writing assembler in DEBUG, but wouldn't trade in the learning I got from exploring a total black box with no references or learning resources (beyond time and curiosity)
Felt like doing alchemy
https://www.topcoder.com/thrive/articles/Dynamic%20Programmi...
Shortly after at Uni I wrote a dating system for the Rag Committee (UK thing to raise money for local charities) whilst learning other languages. Had fun with it and annoyed a few people.
Got a job with ICL and they taught me more languages and let me write some useful software as well as some outside-work fun stuff.
These days I use Python, bash and SQL, with occasional Perl. Some of the languages I used to know have completely disappeared like S3, Snowball, Pop3, 1900 assembler and so on.
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!
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.
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.
Good times.