Ask HN: How many "self-taught" programmers and how did you do it? - <AUTHOR> I was wondering to what degree the HN community of programmers is self-taught.
1) How did you learn to code? Totally self taught from books and RTFM // Self taught plus MOOCs or comparable resources // Some classes in college but no CS degree, remainder self-taught // Self taught plus a developer bootcamp or some non-degree related formal education // CS degree and personal efforts
2) When did you start learning (perhaps informative because of the recent rise of MOOCs)?
3) At what point (if yet) did you start working as a programmer professionally relative to your initial efforts?
I had been wondering about this for a bit and the discussion here (https://news.ycombinator.com/item?id=6467914) motivated me to finally post it.
Administrative note: I'm below 200karma so I can't make this a poll, if an admin wants to throw some polling categories in here that'd be cool too.
Edit: added quotes to the self-taught in the title since I realized that with the advent of StackOverflow and various other social learning tools that there are very few who can truly claim not to have learned at someone else's digital knee at some point or benefitted from the currently robust community that exists online now. <comment><USER3> I am "self-taught". Started in 1981 when I was 10 years old and my mother bought me a sinclair zx81 instead of the Atari 2600 I wanted for Christmas. It came with a bunch of games in the form of 3 books. After my initial shock and disappointment wore off I started to input the games and became hooked on programming.

I did study a uni CS and EE for a couple of years, but left because my school was way behind what was happening in the real world at the time. I was consulting in the IT world, and thought at the time that the CS stuff was hopelessly outdated. I realised years later that I should have stuck with it because now I know that some of the theory is universal and timeless and would have stopped me from reinventing wheels a lot.

I've mainly learned by doing, solving problems using technology. I learned in the beginning from books and usenet, then gopher was my friend and eventually of course the web. I still find a good book is the main foundation I use for learning, supported by things such as forums and MOOCs (I've yet to find a MOOC I agree with, mainly because I am personally not a big fan of video learning - I still like books the most)

I've worked on and off in the IT world for 25+ years, currently I am an English teacher, I do IT projects on the side and I'm about to tackle e-learning head on with a new start-up. I would have trouble finding a job because I have no formal degree (people toss my CV/resume) and I am late to the world of github so nowhere to point people to see my work as most of the problems I have solved are internal problems businesses have. So most of my work comes through word of mouth recommendations, and I only take projects nowadays that have an new, interesting angle for me - point in case I am learning NoSQL and Graphing DBs to create a recommendation system for a network of insurance brokers. (I think the problem could actually be solved trivially with Postgres and judicial use of statistical analysis, so I am creating 2 solutions in parallel to see which one will perform better at scale as well as more accurate). I've never done rec systems before, but I'm a big fan of AI and ML, so this seems like an interesting problem to research and look into, as well as having the opportunity to be a little profitable.

</comment><comment><USER4> I know I'm going to get some backlash for this comment so hold on to your hats. By going for a degree you're going to the route most often travelled by most developers, you'll spend three or four years trampling over territory frequently covered and thoroughly documented, you may be required to specific materials and use specific languages. Three to four years is a long time and during that time many things may have happenned in the IT industry, you may also find that your enthusiasm might have dwindled somewhat. And then you'll be faced with the biggest dilemma...

How do I get a job?

Sure, having a degree might add some weight to your CV/Resume but it will not have the same weight as three to four years of experience in a skillset that is modern and relevant.

The problem with the approach of avoiding the degree route is what some might see as a lack of depth/insight into computer science. And that really all depends on what career you want. If you want to build mobile Apps and Websites then you probably don't need the in depth computer science knowledge. On the flipside, if you want to get into games programming or device driver programming or programming of computationally intensive tasks then you need to know that computer science stuff.

People here might say that the computer science you'll learn from a degree is invaluable, but honestly it's mostly boring junk that most people sat in an lecture hall of three-hundred people will struggle to get through because of the tediosity of it's presentation. In educational institutes you (the student) are expected to go out and seek the answers to the lecturers questions - makes sense right? But you're doing the work there, and most of the time students don't know why they need to know what's been asked of them.

A few final points: most of the self-taught programmers I've known have been head-and-shoulders above their CS counterparts. They have had an insatiable appetite to learn and most have learned from a young age.

I started programming at a very young age, and actually wanted to study Physics at University because I was slightly tired of computer programming by that age... little did I know I was going to make a career out of it.

</comment><comment><USER5> I learned by having problems I needed to solve, and I knew that a computer could solve those problems.

For me the most important thing is not having a rule book. If you believe deeply that you need a CS degree or to follow a popular route into the industry then I believe that you will fail to learn as everything will seem to be an obstacle that you are not privileged enough to overcome.

Without a rule book, and with the belief that anything is possible... and if you can break down your problems into logical things you can describe... then you can teach yourself how to solve the problem.

My first step was a simple one, I had a manual mailing list which was names and addresses on bits of paper that I photocopied onto Avery label sheets. This was in 1993 and when the mailing list exceeded 2,000 I knew a computer could do this easier then I could. I purchased an IBM 386 and had no internet access (or knowledge that it existed) and could only learn from books as I also knew no programmers.

I purchased a book called Programming Perl, and just set to it. I think it took about 2 weeks to get the full mailing list application built, with flat- file datastore, printing, etc all complete and working. Looking back, everything was horrible about the implementation, it was ugly, inefficient, virtually unmaintainable... but it worked.

By 1996 I had started selling merchandise to the mailing list and written stock management, VAT accounting and reconciliation, the paper mailing list, an email marketing list, a shopping cart web-site, a community area on the web-site. This was effectively a shift from hobby programmer into a professional programmer and the start of a career in computing.

If I had been told those things were hard, or belonging to the problem domain of highly educated programmers, then perhaps I wouldn't have tried.

Believing in advance that anything was possible gave me the motivation to persevere, an obstacle would clearly be overcome if I could just stand back and think clearly about it.

After that... just carry on solving problems. Every time you have a new problem you gain fresh experience. Over time, that adds up.

<comment><USER6> you said "I knew that a computer could solve those problems." Where did that knowledge come from? It's not an obvious fact to most people. I have tried to convince students of this, but they tend to be skeptical.

</comment></comment><comment><USER7> I just got obsessed with it while still in grade school and spent all of my spare time learning and trying stuff. I started hundreds of little useless projects, all of them out of my league.

Pre-planned courses never appealed to me at all, maybe because of some slight ADD tendencies. They try to titrate knowledge in a steady, regulated, and pedagogic way. That just bores the shit out me. The only thing that even remotely excites me is diving into doing things that are too difficult for me, failing, beating my head against my desk, asking real people for help (not supervisors or TA's), making tiny exhilarating steps of progress.

I'm generally very skeptical about all kinds of teaching, upbringing, and so on. Like when parents and educators try to ensure that their kids turn out good by adhering to various "time-honored" methods and curricula, and fail to realize that they're just locking their kids up for decades, ineffectively preaching at them while they wait for the break so they can talk about whatever they're actually, genuinely, vitally interested in.

Maybe I'm just weird, but to me joining a MOOC seems like tying oneself up in chains to learn how to walk. There does seem to be people who actually find sustainable motivation in that sort of thing, but the statistics seem to say they're not as many as those who only think they will.

By all means dabble around with some courses to get your feet wet, but don't expect to become a good programmer by following other peoples' curricula!

<comment><AUTHOR> I know what you mean by the "not as many as those who think they will", but I would say that largely those stats seem to be measuring the wrong thing. Course completion is only one side of the coin. I've learned a TON from free MOOCs, and taken significant parts of about 10. I've finished maybe two? Sometimes the curriculum hits things I already know, so I skip them. I don't have a "complete" course, but I learned what I came for, and since they're not for credit, what do I care if I miss out on internet points? For instance, right now I'm trying to figure out how to do some more complex (for me) HABTM relations in Rails. If there is one lecture in an entire MOOC that makes the concept click with me, I'm happy with the time invested.

</comment></comment><comment><USER8> Self taught. Born in 1988, had some early exposure to QBasic and Pascal before 13, at 13 I really wanted to start writing computer games, so I grabbed a C++ book and it went on from there. Gamedev was a big hobby of mine 'till last few years. 3 years ago I picked up Lisp and Erlang, which was one single biggest breakthrough since starting to learn programming in the first place.

One thing I'd attribute to my success in self-teaching myself programming is the lack or very sketchy access to the Internet since before high school (I pretty much only downloaded OpenGL examplex over the phone modem; anything else and my parents would have killed me for the phone bills). I also had the attitude to fix all my bugs myself and never ask for help (and then when I got reliable Internet connection, to help other folks a lot, but never ask for it myself). Even when I spent a day debugging some stupid things I did, it wasn't a time wasted - I forced myself to actually understand the problem in order to fix it.

Nowdays I still try to fix everything myself, but I'm not afraid to Google some StackOverflow questions if I'm stuck with a problem related to webdev that is stupid (mostly because of poorly documented / poorly working libraries or weird bugs like support for HTML5 video has).

</comment><comment><USER9> After I graduated from university back in 2006 (studying Management Science), I decided that I liked computers more than I liked Banking or Management Consulting, so I worked for a friend of a friend doing web design, and began to learn Ruby and Ruby on Rails. I read the Pragmatic Programmers books, and spent 6 months at home learning Ruby and Rails in my free time.

About a year later (summer 2007), I got a job working for a ticket search engine called Tickex, doing Rails. I was paid £9 per hour, and worked at a BBQ table and chair. It was a really enjoyable time. we were Seedcamp finalists and nearly got funding from Sequoia, but sadly the funding ran out and the business moved back to California and then shut down. Since then, I've worked at a few other startups, at a web agency called New Bamboo, at AOL, and now I work in a small business. I also had offers to interview at Square and Facebook, but a temporary lack of nationality/family circumstances meant that I couldn't move to California.

The decision to deviate from the path offered by my degree has been one of the best in my life. Before I had learnt to program, I had ideas but no ability to program, so they remained as ideas. Having learnt to program, I have the ability to have ideas and do something about them.

</comment><comment><USER10> My parents bought me one of these when I was in basic school: [http://en.wikipedia.org/wiki/ZX_Spectrum](http://en.wikipedia.org/wiki/ZX_Spectrum)

I was happy playing games for a few weeks and then it broke. It took one month to fix, so meanwhile I was left with the BASIC manual it came with. I read it to withstand the cravings and when I got the computer back I was already more interested in coding than playing games.

<comment><USER11> I started with a ZX81 around age 12, one or two models before Spectrum. It didn't have any games, but making games was a big motivation for me when getting it. Hell it didn't even have a tape station or any way to store your programs. So I would turn it on and type in some basic code from various computer magazines - usually some simple game - which would then be lost as soon as the computer was turned off again. It had 1kb of ram, which could be expanded with a bulky external cartridge of 16kb.

So I taught myself Basic. Later in school I was taught Comal 80, some variation of Cobol taught in Danish schools. I learned Pascal later, also in School. When Internet came to Denmark in 1995 I taught myself PHP v1+2+3, and later Javascript, and started my own little business creating websites, based on a selfmade CMS. PHP + javascript has served me well for 18 years, but I think its time to move on to something like Go - so thats what I am planning now.

<comment><USER12> I got hooked on programming because the ZX Spectrum 48k my parents bought the family, at age about 12, came with a broken tape deck.

Instead of playing any of the bundled 12(?) games we had to wait for shops to open to get the drive swapped, and instead I read the thoroughly comprehensive manuals. Initially playing in BASIC, then later hand-assembling via the opcode table at the back of the book.

</comment></comment></comment><comment><USER13> Self-taught, ran a game development company, now a happy Googler.

1) There was a ZX Spectrum at home, which booted to a BASIC interpreter. My dad taught me the basics (no pun intended) and I picked up the rest from experimentation and copying listings from Microhobby ([http://www.microhobby.org/](http://www.microhobby.org/)). Later moved on to gwbasic/QBasic/Quickbasic on the PC. I discovered C++ at 13 and I'm still trying to figure it out ;)

2) I was probably 4 or 5 - 1985/1986\. My first documented "thing" is dated Sep 1986 ([http://www.gabrielgambetta.com/img/1986-listado.jpg](http://www.gabrielgambetta.com/img/1986-listado.jpg)). At 10 I was making "games" ([https://plus.google.com/110907875579750723363/posts/8RkT5K2K...](https://plus.google.com/110907875579750723363/posts/8RkT5K2KR18))

3) I got a less-than-part-time job at 15, writing payroll software for a small real estate developer.

More details than you can possibly care about here: [http://www.gabrielgambetta.com/about_me.html](http://www.gabrielgambetta.com/about_me.html)

</comment><comment> V-2 TL;DR ahead ;)

(Born in 1981) at first I attended some programming language courses: Turbo Pascal, Visual Basic, Delphi, in my early teen years, that is in 90s. I even co-authored a series of articles on the subject to a nationwide magazine. (Poland, not USA).

Subsequently I lost interest in the IT, I went on to study political science and only turned back to programming in about 2007.

Starting from scratch, I picked up C#. I learned from books and by programming. I attended MCTS courses in college and got myself certified, but in retrospection I think it was a waste of money.

I had quite an inferiority complex regarding my lack of formal education and experience. I didn't even start looking for a job until 2011, when my girlfriend forced me to get up on my feet and start sending CVs out :) So it was like 4 years after I began, but I worked full-time and didn't learn very intensively.

Anyway, once I began looking for it, I landed a job quickly and needless to say, the moment I saw the code written by some of my predecessors in the years when I thought I wasn't ready to get paid for programming, some swear words left my mouth.

<comment> V-2 "I learned from books and by programming" \- I didn't even mention StackOverflow, it feels so obvious that it gets transparent :) but for the record, yes of course I used it

</comment></comment><comment><USER14> I'm _mostly_ self-taught. When I was very young (kindergarten age, if I recall correctly), I attended a few QBasic courses at a local college, took some VB (it was billed as "advanced computer programming") at a summer camp when I was 15 or so, but other than those, no formal training.

I remember writing BASIC on the Apple IIGS computer in my first grade classroom, playing with HTML in second grade, but my big breaks came around 6th iirc. I helped move an online community from a hosted bulletin-board provided (ezBoard) to a hosted phpBB instance, and hacked on that code for a while, but was nothing serious. Write a few scraps of PHP here and there before getting into Python, and did web development in that for a while.

Over time, though, I've followed this gradual descent down toward the metal, learning C from K&R (great book) while holding down a Python/ActionScript day job and occupyng myself outside of work learning how to design C APIs and writing a few libraries. The second-to-most-recent position I held involved Python and Ruby at work, and I contributed some code to the Linux kernel in my free time (some USB audio stuff). The position after that was for Linux kernel development and other low-level embedded systems work. I've tried to get into infosec a few times but nothing's panned out.

Currently I'm getting a startup off the ground (surprise, surprise). Desktop software, audio production, lots of real-time DSP, lock/wait-free data structures, some OpenGL...I'm happy as can be.

To answer your questions:

1/ Totally self-taught from books and RTFM. Lots of help from the Internet as well, though I own my fair share of college texts.

2/ I'm 24 now, started learning around 2001 I think (when I was about 11).

3/ Got my first development gig at 17.

</comment><comment><USER15> 1) Self taught from books, some urging from my mother but not a lot of real help. Occasionally she'd show me tricks. I remember seeing my first loop from her when I was trying to make a line of text scroll across a screen.

2) Five or six. My mother owned a ZX spectrum - this would be around '93 '94 - and she had a bunch of old magazines that had programs in them, so I started typing them in. I'd also done some programming on a BBC before this - but that was with my mother's urging so not really a self-taught thing.

3) I was 16 when I sold my first program to a shop I did some volunteer work at. It was a simple thing that just did ranked correlation coefficients to arbitrary sets of data so that they could keep track of what their KPIs were telling them.

More substantially, I did it after uni. Graduated with a philosophy degree, which was the subject I found least objectionable, and found myself largely unemployable in any other line of work.

</comment><comment><USER16> 1) Self taught from breaking stuff and trying to fix it. Started out creating games in BASIC, then hacked around with PHP and got into writing bespoke plugins for a phpBB community. I also wrote a few patches for OpenTTD and learnt some C doing that. Next I got "The RSpec Book" and learnt about testing and Rails. I then went and did a CS degree, however I feel it didn't really give me anything I didn't already know - I have never needed to know what a red-black tree or hill climbing is in my professional life, although I'm sure if I didn't do it I would regret it [0]. After that got a proper job doing Rails and learnt a lot more from working with others.

2) 2002

3) 2009, although if I didn't do three years of university it would have been sooner.

EDIT:

[0] I think university is also good for life experience, and I still think it holds true that most companies (even non super-mega-corp) prefer people to have degrees.

</comment><comment><USER17> When I was 9, Dad brought home one of these: [http://colinappleby.com/Images/Newbrain.jpg](http://colinappleby.com/Images/Newbrain.jpg) \- it was a Z80 with a built-in BASIC interpreter and that got me started. I graduated to a PC and moved onto Turbo Pascal and then x86 assembler in my spare time, all RTFM and help from my parents and friends, until I got to Uni and finally had internet access (this was in the late 90s), and then I learned a fair amount from online articles and Usenet.

My first professional programming job was when I was about 22, writing C on Unix, then I moved into C# at about 24-25 and have been doing that ever since.

I've had no formal training (that I can think of anyway!) but mainly learned through a combination of intense fascination and a desire to improve my skills for professional advancement.

</comment><comment><USER18> I'm a self-taught iOS developer (language: Objective-C) — an interest that began when I was 15/16 in 2009. Tried to learn it from Apple's documentation and the few online manuals there were back then, but wasn't ever able to grasp making apps any more complex than just a few buttons!

Started again properly about a year and a half ago when I began college (I'm 20 now - and I'm doing a Business Management degree), and haven't looked back since. You are right in saying that StackOverflow has literally changed the many people learn code because of how vast its library now is (for iPhone especially). Never had any formal education whatsoever — I've only ever read one book ([http://www.apress.com/9781430236023](http://www.apress.com/9781430236023)), which was a complete beginner's guide. Everything else has been online tutorials (make sure you do your research and corroborate information on which blogs/sites are best to learn from for your chosen language), and Apple's amazing documentation.

As I am still in college, most of my projects are 'side'-projects, but with each iteration they're getting stronger. Collaborated with an SME to make an educational app and now have a contractual and in-house app lined up before Christmas. It's difficult to freelance like this, but the funding (loan) that comes with going to college means that I haven't needed to find a 'proper' job _yet_.

Never give up trying to learn, if you enjoy doing it. If you don't enjoy it, don't try to learn it past the point of caring. I constantly felt an 'impostor' syndrome-like feeling when working for the first company I worked with, but in reality, consistent hard work for at least a year will put you ahead of most average outsourcing operations for basic stuff. Try and validate your learning, too — keep a blog and constantly ask questions, either on SO or your language's forum of choice. A milestone for me was when I was accepted on student scholarship to attend WWDC this summer. Take it from me, you can achieve something similar if you make sure you don't slack!

I wish you the best of luck.

</comment><comment><USER19> I'm self taught and it was an "interesting" wade into the water, so-to-speak. One of my first projects was building a small forum starting around 1995-96 as a teenager (originally in Perl/CGI, then ASP/VB and finally ASP.Net/C#). I was very late to PHP and despite most of it's warts and incredible ease with which to shoot yourself in the foot, I still think it's easier to start for a novice and one of the best intro tools to web development.

Along the way, there were forums like FxZone (of Eyeball-design), which closed unfortunately, and a myriad of other tutorial sites, forums, communities (most of which had closed... what's up with that?) and finally landing on sites like CSS Zen Garden which introduced a whole new world of front end concepts.

While turning the forum into VB, I learned there were these things called subroutines or 'functions' that broke problems down to incremental chunks and got reused a lot (you can reuse code?! Why, yes) and then I learned about these things called 'databases' where you can search for things. Finally, no more text files for storage!

My dinky little router was rubbish, so I took an old PC and turned it into a router/gateway and that lead me to learn about networking.

I wanted it to be accessible from the web, so I had to learn about DNS.

Everything I learned allowed me to turn that forum into a continual learning experience where I slowly turned a _script_ into an _application_ and later _platform_.

So basically, one project turned into a learning thing and the learning thing became a goal in itself. That brought in some jobs that allowed me to learn and train on the job.

In a way, this sort of hodgepodge learning turned out to be a good thing, because I've had to touch on hardware, networking, DBA, programming. So a whole spectrum of problem solving that I doubt I would have had a chance to work on.

The most (pleasantly)frightening thing about learning is how quickly you realize how much more there is to learn. It's like firing a gun while riding atop a rocket and then trying to catch the bullet. Your goal will always going to be ahead of you.

</comment><comment><USER20> I am a CS Student, but I have been programming years before I got into college.

1\. Self taught from internet resources and experiments. I still remember stuffing my 128MB flash drive with HTML pages so that I can read them at home. Originally got into programming to cheat in some games. Started with making trainers/ memory editing and bot for MMOs.

2\. 3rd year of middle school. Around 2005, I think. Accessed the internet for the first time.

3\. Not yet. but I have been trying to learn more about the topic ever since I realize whats possible with it, and my decision to learn more seriously about programming led me to taking CS degree in college.

</comment><comment><USER21> I'm self-taught and a relatively late starter. I've also never studied computer science in a formal setting (i.e. at a university).

I started programming when I was studying for a PhD (in mathematics) around 2006-07. I was 23 at the time. That was mainly in Matlab and Fortran. My code from those 3-4 years is, frankly, pretty horrifying.

When I got my first job in industry (quant at an investment bank in 2010) I had to learn Java, and a language called Q[0], which is a very fast array- processing language with a functional feel and a built-in query language for the KDB database. I also picked up a little bit of R, mainly because I was building a lot of statistical models and it was far easier than doing it in Java.

That piqued my interest in functional programming, and I subsequently learnt Haskell using the book Learn You A Haskell[1]. I picked up Python around the same time when I was trying to write a web scraper, and finding it painful in any of the languages that I currently knew. For that I used Learn Python The Hard Way[2].

When I started a new job in 2011 I started writing Matlab again, causing me to finally learn it properly. Around that time I decided to try and learn a low- level language, so I picked C, mainly because there was an interesting edX course [3] that I wanted to try (the Harvard course CS50).

I'm at a weird in-between stage now. I can write comfortably in half a dozen languages, but there's a whole swathe of programming that is completely alien to me (web design, networking, and any kind of formal software architecture). I've written a lot of heavily numerical and mathematical code, but never written a CRUD app or a web page. I still don't know Javascript.

[0] [http://en.wikipedia.org/wiki/Q_(programming_language_from_Kx...](http://en.wikipedia.org/wiki/Q_\(programming_language_from_Kx_Systems\))

[1] [http://learnyouahaskell.com/](http://learnyouahaskell.com/)

[2] [http://learnpythonthehardway.org/](http://learnpythonthehardway.org/)

[3] [https://www.edx.org/](https://www.edx.org/)

<comment><USER22> I'm in the same situation as yours, except that I quit finance to work in data science, and I taught myself some basic javascript/html.

</comment></comment><comment><USER23> All self-taught. Expertise accreted gradually from the age of about 8. Learned ST Basic and GFA Basic from the manuals in the late 80s/early 90s, JavaScript from a library book in 1997, and Cocoa/Obj-C from a couple of books off Amazon, otherwise all picked up online, or from colleagues, or through learning-by-doing.

I tend to be a bit suspicious of people who've "been on a course" (short of having done a CS degree), since those people when I've worked with them often don't seem able to think like a developer, let alone write code.

</comment><comment><USER24> I am self taught, started learning programming around the age of 7-8. That was in 1987-88. The funny thing is that i did not know any english at the time, being from the middle east and french educated. I learned Basic from a french science magazine my dad used to get me, called "Sciences & Vie" (Life and science), and that used to have a programming section in Basic at the very end. Obviously all the basic commands are in english, luckily the magazines coders commented their code thoroughly in french. Initially, and before my dad accepted to get me a computer, i used to "think the code" and write it down on a my notebook (a real paper notebook), i think i still have that somewhere, i wrote some basic stuff like a simple text encryptor, calculator etc... Finally in 88 my dad got me a used commodore64, then two years later a used 80286 etc... It was quite difficult at first, for my lack of knowledge of english, much of my learning was by deduction from how magazine code was supposed to work and comments. There was no internet, no programming books around, the country was in the middle of a civil war, and few people knew anything about computers. But then, around age 12, the war was "over" and english was added to our curriculum, and things got a lot easier. I sold my first software at age 16 for 350USD, it was an internet & LAN gaming cafe management software, that used to time usage on computers and report to a central invoicing "server", written in Visual Basic.

</comment><comment><USER25> I taught myself from the late eighties to mid nineties. I started with BASIC on the Amstrad CPC then Blitz Basic and 68000 assembly on the Amiga. Then got a PC and learned C++, then got into web development via Java (day job), now I'm doing indie games in C++/objective c. I was coding for a long time before I was able to make it a full-time job (2005) though I did a lot of small projects before this.

Although computers were simpler back then, learning to code was difficult as my main resource was computer magazines. I couldn't afford many books and had no access to any programming communities or academic culture. It wasn't until I got online in the late nineties that I was able to really flourish as a programmer. I feel a lot of regret about this as I believe I could have made it into game development in the Amiga era as a teen, if I'd had enough resources and confidence. I also had trouble keeping my computer up to date as I couldn't afford it. All this slowed me down.

Coming from a working class uk background, university wasn't even mentioned to me at school (unbelievable, right? The anger I have towards the education system is almost limitless), so I always focused on self-education as my way ahead.

Some people think that self-taught coders are lacking in terms of computer science theory, but that's ridiculous when anyone can download SICP and similar books. I've met plenty of CS graduates who slept through their algorithms class.

</comment><comment><USER26> I've got a degree in Computer Science, yet I still consider myself self- taught. In fact, my Computer Science program never taught any languages--they simply had assignments that required development in various languages (C, C++, Scheme, Matlab, Pascal, Fortran, YACC, and 680x0 assembly were all languages used by assignments during my degree, yet none were taught).

Meanwhile, in addition to the aforementioned languages, I've coded professionally (as in I've delivered code and gotten paid for it) in Ruby, Perl, Rexx, Bash/Bourne shell scripting, Python, PowerShell, VBA, QBasic, C#, XQuery, Fortran 66, Fortran 77, Fortran 9x, SQL (various forms), Javascript, ECMAScript, CoffeeScript, Cobol, FoxPro, SPARC assembly, x86 assembly, Java, LISP, Sed/Awk, ColdFusion, Curl, Objective C, and PHP. I've also tinkered around with (as in I have not gotten paid for it) Scratch, Boo, Groovy, F#, Haskell, J#, and Scala. I'm not sure if these are exhaustive lists.

If you aren't an autodidact, either you won't last long as a software developer (i.e. you'll get promoted to management) or you will get stuck working on legacy code. If you want to remain employed as a software developer, you need to keep learning, to keep that fire burning that got you started with programming.

Now, for the answers to your explicit questions.

1) I learned to code by teaching myself on an Apple ][ (predating the ][+ and ][e) with Basic. I then read cover-to-cover a Pascal book for several years before I had a Pascal compiler. I credit this (reading the Pascal book) with my ability to read textbooks and learn from them, even if I don't apply the ideas right away. Very often, there was no FM to read, so much of my learning is through experimentation. A combination of tinkering (i.e. applying the ideas), book learning, and a high tolerance for frustration...

2) I started learning in 1979. I was not yet a teenager. Our school bought an Apple ][, and nobody knew how to use it. They turned over 2 of the "bright" kids to it, and I ended up teaching programming to the person that would become the computer programming teacher.

3) I started working professionally as a programmer while in high school. I ended up consulting in university--it ended up paying my way through school.

</comment><comment><USER27> I'm self-taught, mostly. Started programming on Basic on handmade ZX Spectrum 64K, purchased by parents from classified ad in local newspaper, when I was 8 y.o., just to be able to write my own games.

Switched to Turbo Pascal (and to Tasm) in school, when I was in 6th grade (11 y.o.), after "inventing" bubble sort. By that time we were hacking good old computer games to get infinite lives and money. Primary role of my C.S. teacher by that time was to give me computer time and employ in school as part-time computer classes technician when I was 14.

When our class was 16, we were told that there is new cool language for web, called Java and we will have an exam on it by the end of the year. We happily dove into it. Our teachers were learning it together with us (they also were setting up Linux for the first time, but I and my friends were too busy playing funny game of hacking/counter-hacking the admin passwords to the Novell network we had in our school).

When I was 17, I graduated from school and moved to Moscow to study quantum physics and electronics in MIPT, but it was quite busy time to survive (1998), so I learned HTML and started developing web sites for money for beer. Few years later I've got my first full-time job as Java developer and from that time I've never gave up a hobby that one day had become my profession.

Forgot to note, that I was learning by books, not from Internet. When I was a MIPT student, my spending on books could be up to 50% of my income ($400/month or so).

</comment><comment><USER28> Almost all of my knowledge is fully self taught with internet (no books) except for proper OOP like in cpp. That I did when they taught me in college. But I learned html5/css3/js/php/mysql/unix command line etc on my own. I was "introduced" in 10th grade in high school when school wanted to make a website. I took up the offer and they were glad their student was making it. It looked hideous (at least the first iteration did) used tables and in-line js but this was like 2008 and I had no previous knowledge. I never really looked back since then. I keep doing something. There was always something I was looking forward to learn/do. I wanted to solve my own problems and find solutions or make things easier for myself. Now I make things easier for others and it feels great. I spent most of my time on Google/SO. I had to work _very_ hard. I remember it very well, it was never easy (it still is not) but work is now a lot less frustrating. The most important thing I learnt myself was probably ow to solve problems. With google primarily, but ability to find solutions to your coding problems via google is very important. And I learnt it the hard way. And college is fun because I have basic html in my next year of college but I know that stuff for at least 4 years. So it should be fun.

</comment><comment><USER29> I am almost completely self taught.

In 1988 after a back injury knocked me out of construction work, I started with 16bit intel assembly language on an old XT. I was guided by listings from Byte and Dr. Dobbs magazine and the fine folks on FidoNet and RIME/Relaynet. I eventually learned C, tried qbasic and turbo pascal and eventually settled on C++.

I was initially driven by the desire to write a game similar to the first NES Zelda game, but for multiple people. I got it somewhat working so 2 computers could play with stick figures over a serial or parallel cable. My lack or art skills torpedoed it, but... It was what kept the fire burning for almost 2 years.

I eventually learned Perl (to help out a friend of a friend with his business web site), Python (again for a FoaF), Rexx, shell scripting, awk and a few others that coincided with a move to Linux in the late 90s when OS/2 died. The draw of games kept me in Windows machines from 3.0 to Win7...

If not for Joseph Carnage, Jerry Coffin, Bob Stout, Doug Azzarito and the others on the BBSs, I would not be what I am today. Almost all gave their time selflessly in helping me learn to think and function as a professional programmer.

25ish years later, I'm still doing things in Python and C++ and trying to wrap my head around Haskell along with various and sundry things that fall in my lap and need doing. :)

</comment><comment><USER30> I am above average developer who learnt by myself, to answer your questions -

1) How did you learn to code? Totally self taught from books and RTFM // Self taught plus MOOCs or comparable resources // Some classes in college but no CS degree, remainder self-taught // Self taught plus a developer bootcamp or some non-degree related formal education // CS degree and personal efforts

Unfortunately I never worked in any company so had to learn all the coding by myself and I strongly feels, if you want to be a good developer, you should work in a company and on real world applications with people who knows more than you which speeds up the learning. Though I am working full time on my own marketing product, if given a change, I would love to work part time in any company for free. There are few things which you can never learn from books and tutorial videos

2) When did you start learning (perhaps informative because of the recent rise of MOOCs)?

I do have a computer science degree from a reputed engineering college but I learnt nothing there, though I do have exposure towards programming for 10 years, I only started building real world apps in last 12 months.

3) At what point (if yet) did you start working as a programmer professionally relative to your initial efforts?

last 12 months, I am learning and writing code in parallel.

</comment><comment><USER31> I started back in the third grade, when I was 7. I, like many of my friends, played Club Penguin. I wanted to make a website dedicated to Club Penguin, so I taught myself HTML (and eventually CSS) and hacked something together. That soon led to the introduction of JavaScript and eventually C++ and Java. My parents weren't huge fans of computers, so they severely limited my access to computers, limiting my ability to learn at the time.

I taught myself Objective-C in the 6th grade after I bought my first laptop with money I made from doing contract web development work for local businesses. I made a few simple iPhone apps and and started to appreciate the beauty more than before.

In the 8th grade I started to find school severely lacking and enrolled as a computer science major at a local community college. The courses weren't great, but I learned how to get through a textbook, which I've learned to appreciate.

I got my first proper job at a small (3 person) startup when I was 15. I'm still at this job and have loved every moment of it. We're set to ship our first product sometime next week.

Answers to your specific questions:

* How did you learn to code?

Coding, running into an issue, fixing it, repeat. Books. MIT OpenCourseWare. Community college. And some MOOCs.

* When did you start learning?

Back in the 3rd grade, when I was 7.

* At what point did you start working professionally?

I started doing contract work in either the 4th or 5th grade. Got my first full-time job at 15.

</comment><comment><USER32> 1)

Early 80's: TRS-80 / Apple / C64 BASIC, Z-80, and 6502 assembly-language via books and the wealth of magazines available.

Mid 80's: Turbo Pascal via a local CP/M community and a couple of books. I did take an introductory Pascal class.

Mid/late 80's: C, 80x86 assembly-language, and AWK from books and magazines and by necessity at my job.

90's: C++, SQL, Perl, Java, JavaScript HTML, and many other "learned as needed" languages in the profession. I used Delphi, C, Perl, and TCL for various side-projects.

I work primarily in Java, JavaScript, HTML. As a hobby, I like to tinker with Lua, Clojure, Erlang, and Go. While I still buy books, I depend more on the Internet community for more timely information and for code reviews and such. Publishing code for all to see via a blog or Github is a great way to invite constructive criticism and to learn the philosphy ( and not just the syntax ) of a particular programming language discipline.

Beyond coding I picked up development strategies ... version-control, team coding strategies, testing methodologies, ...etc. initially from the job, supplemented by reading material.

2) I was 15 when I started learning basic in 1980.

3) I was 21 when I got my first full-time programming job, but it was unrelated to my self-taught skills, at the time. I had taken vocational training in IBM mainframe ( COBOL, Assembler ) technologies and worked in those for about a year-and-a-half before I moved onto a new-to-the-company MS- DOS team ( programming initially in C ).

</comment><comment><USER33> I started as a 7 year old kid in the mid 80s learning BASIC, from type in programmes in magazines and from a few books. Though don't over estimate what I was capable of back then. It was mostly dozen line programmes that made cool patterns on the screen.

A gradually got better, and in the mid 90s as a teenagers I taught myself Assembly language, again from books and magazines.

And then as an Adult starting about 8 years ago, I started learning C, from a couple of books and lots of websites.

</comment><comment><USER34> 1) When I was 8 I just started reading a GW-Basic programming book, not knowing what programming was at all, just wanted to know more about computers. My dad had it on the shelf. He then told me we had GW-Basic installed on our 8086 and together we figured that out a bit. From thereon _, books from the library (no internet), a floppy disk from a friend with text-files about game programming. Later internet, University and a lot more internet. At University we learned Java, which was my first OO experience (talking 1999 here).

2) As I said, when I was 8

3) 10 years later, on and off (but often in a setting where I had job X and rolled into doing all IT around it up) until I became a scientific programmer 4 years ago (after quitting my Phd in Neuroscience, but that is another story) and started working as a self employed app developer in mHealth last January.

_) Edit: PS: I think I outpaced my dad very soon, so most of that was all by meself. I especially remember a 1400+ pages book (in Dutch called 'PC Intern 4') that I borrowed many times from the local library - and given the topic it wasn't really surprising that it was always available: it went into PC hardware programming as detailed as possible, specifying all int 21h calls, explaining how to program the 16 bit Soundblaster and write stuff immediately to the VGA video memory.

PPS: I've teached myself programming in GW-Basic, Q-Basic, Asic (which was mainly Basic but had a compiler, WOW!), Assambly, Pascal (inline ASM, WOW!), C (Dos 4GW, WOW!), Java, PHP, JavaScript, Perl, Objective-C. I also did Prolog at the University. And I've done a bit of scripting left and right in Ruby as well.

</comment><comment><USER35> My parents got me an BBC Micro (Model B) when I was about 10 years old. The instruction manual had programming examples in it and I started off copying things out of the user manual. [1]

I took a computer science course in high school and learnt Pascal. I wrote a dinghy sailing (racing) management program when I was 17. I created a windows style GUI using ACSII codes. It worked quite well.

I went to university and was taught C++. I hated it. I wrote some C and Delphi during that time as well. By the end of university I wanted nothing to do with computers. For me, Computer Science in university was a disaster.

I took two years away from computers and worked in a completely different vertical. A friend got me interested in computers and programming again and I got bitten by the bug again.

I learnt some HTML and then got a job at a web agency as a junior trainee. I learnt ASP scripting and SQL. From there I went to work for a big computer company working on their online presence.

From there I bootstrapped my own web development agency (which died) and I've been freelancing ever since.

When ASP.NET came out I taught myself C#. Soon after Ajax became "the thing" so I learnt JavaScript.

Sometimes I have to hack around PHP, Python or Java. I sometimes think I should make the jump to Node or Rails, but all of my industry contacts are tied to Microsoft technologies. For the moment I will stay where the work is, and if it dries up then I'll learn something new.

[1] [http://en.wikipedia.org/wiki/BBC_Micro](http://en.wikipedia.org/wiki/BBC_Micro)

</comment><comment><USER36> I believe any programming is self-taught. I know that I had some course in a community center when I was very young, probably like 10 or so, and while these courses probably got me interested and taught me the basics, I think most of my skills came from solitary practice and studying books.

Moocs can be a better introduction to programming than mere books, but I haven't seen any evidence on how successful MOOCs are at teaching programming.

<comment><USER37> > I believe any programming is self-taught

I think it is as self-taught as, say, carpentry, or playing an instrument.

That is to say, it is certainly possible to be excellent at what you do by putting in the hours, and you don't need anyone to achieve that, but it is wrong to think that only you can teach yourself. Learning from others can definitely accelerate your development.

<comment><USER7> This is an opening if we wanted to discuss education in a general sense. I think you've pointed out a very interesting duality: self-taught versus taught-by-others.

Of course, the reality of learning is very complex. It's always about engagement. For a teaching situation to function, there has to be a genuine engagement between the teacher and the student.

In cases where students are, for whatever reason, very highly motivated, the "lecture" style of teaching might work. A sign of a functioning lecture would be that students ask relevant questions. This has not been the case in most of my university experience, where students mostly take notes of whatever is written on the blackboard, drink coffee, and ask things like "is this going to be on the exam?"

It's interesting to think about the prospect of teaching carpentry through books, lectures, and online courses. Maybe it's possible. But I think simply having access to an environment of practice and active people to ask for help is the biggest factor. Hands-on help with an actual task at hand plus lots of individual experimentation.

</comment></comment></comment><comment><USER38> 1) Totally self taught. When I first got online, I thought the concept of websites was really cool, viewed the source of the first page I knew existed (from an ad in magazine!), copied it and edited. There was only one HTML course worth reading at the time in my language and that's what got me started. Then another developer on IRC told me about PHP, then got into server administration and so on. By the time I got to uni I had some small commercial projects under my belt; University wasn't helpful, as most of the stuff we were taught was outdated, but I did learn to work in groups better.

Most of my basic programming knowledge came from PHP manual and the comments within.

Since then, a lot of my knowledge just comes from experience.. you learn by doing, something has gone wrong - Google it. Now that I'm working, when I'm desperate, I have peers to bother too, but prefer working it out myself.

2) 1999 at the age of 12 - that was just HTML/CSS at the time, got into PHP within a year or so, then more advanced JS / node.js / Ruby in the last 3 years of working professionally.

3) Got my first job not long after finishing University - <USER2>

</comment><comment><USER39> Self-taught. My dad brought home a decommissioned server (a 286 with 6mb of ram and a 40meg hard drive) one day which had DOS on it, but not much else. Naturally I found qbasic and the sample games that came with dos, and was able to start figuring things out. I played with batch files to create a menu system for the computer, but abandoned that as silly once I started to understand the computer better. He got me a copy of the Borland C++ compiler; version 3 as I recall. It included a thick reference manual that explained a lot about C and C++, so I was able to puzzle some things out from that (although it would be years before I really understood what I was doing enough to actually use a pointer correctly; there were so many crashes until then).

I discovered Javascript when I started poking around the source of the Mozilla Suite (which eventually became Firefox). I learned Scheme from watching Abelson and Sussman lecture from SICP. Learned some Erlang at some point, etc, etc.

I started all of this when I was 9 or 10. I started programming professionally after I discovered Javascript, which was my first year of college.

</comment><comment><USER40> Started in a rural town in eastern europe in 1998 when the internet first came to town. Didn't even have a computer of my own. Just figured if I could make things that the world can see from the middle of nowhere and with no money at age 13, nothing could beat that.(I'd seen censorship in my country so that was a big selling point)

Volunteered at internet cafes, so I could use their machines at night and learn html/css/js via the web (no software required). Started a web dev business soon after and ran that for 5 years before coming to the US. There was no school for this kind of stuff anywhere nearby and I was too young to go to college in my country so there you have it. I got my CS degree in the US years later.

In reality most CS programs can't teach you even a quarter of what you need to know to be a great developer. Tech moves too fast to be teachable. The best just learn faster, and dig deeper than the rest on their own via web communities, head-to-wall action, and resources available to everyone.

</comment><comment><USER41> I started with programming lessons after school, I was 13 and that was 1990. I had a ZX Spectrum at home and I could write basic, so that was the beginning for me.

After that it was mostly self-learning, specially reading other's people code (back then, CD-ROM included in magazines were gold). During my time at the university (CS degree) I learnt interesting things, but I think it was equivalent to reading good code.

My professional career started when I was 19 I think, just after my first year in university. So that was 6 years after starting programming, but to be fair I didn't have a "proper" computer until I was 18 (before that I did mainly gwbasic and cobol because my 80188-compatible PC didn't have HDD and I had to swap diskettes three times to compile a C program).

After I bought my first "modern" PC, it was like each month was equivalent to a year of learning compared to my previous experience. Something like that happened again when I got Internet connection at home, circa 1998.

</comment><comment><USER42> 1/ At first I learned by self-teaching thanks to books and thanks to the great resources available on the internet. Mostly web development. When I decided to go professional, I attended a 8 month training with .Net followed by a 4 month internship, to be sure that my skills were compliant with what the market needed.

2/Grew up in the countryside, without access to computers. So I'm a late bloomer: I started programming around my 20, while doing a degree in biology. Enjoyed it so much that I first thought about doing a mixed cursus, then completely put aside my degree.

3/Started to program professionally 4/5 years after having written my first line of code (did some short internships and some programming for friends before that, but I consider it to be professional programming only from the point when I joined a company).

I've now been working for three years, still learning in the background to grab a maximum amount of software engineer and CS skills. Been promoted recently to team lead.

</comment><comment><USER43> I'm a self-taught programmer. When I was 8 I would check out BASIC books from my school library and type them into our Apple IIe during recess. My parent's got me a programmable graphing calculator with BASIC to encourage me, and I was married to it for a few years.

Later my parents got a 486 and I got into the wide world of DOS/W3.11 gaming.

In high school I learned how to build computers and install linux. I bought C++ Primer Plus but I never made it past Chapter 4 or so. C++ was way too complex for me. I drifted away from programming.

When I was about 27, I got a job as an entry level Linux sysadmin and built all sorts of systems. I touched a lot of code and changed and wrote all kinds of scripts, rekindling my interest in programming. After I got canned, I ditched administration and poured my efforts into web development.

I impressed a web design freelancer enough to get him to use me on his bigger projects. We were going to start a business together but I got cold feet and pulled out. I've been bouncing around different web development jobs ever since.

I don't see much value in Computer Science and don't personally value such degrees very much. It might become useful to me at some point but every time I start to look at CS course work, my eyes glaze over and I want to just go build something. So much of it seems to just boil down to "be careful what you put in your loops".

What's going to get you jobs is being able to do stuff. Knowledge is secondary to action. Get out and do stuff. What's going to allow you to retain your sanity is knowing how to do stuff without adding unnecessary complexity. So go over every project and do a post-mortem, buying books to shore up your understanding.

You don't need someone to teach you how to program. You just need the drive to teach yourself.

</comment><comment><USER44> I started teaching myself in the early 80s on an Atari 400 with Atari BASIC. At elementary school, I got some coaching from the librarian in Apple Logo. By sixth grade, I had participated in a few school district programming contests.

In junior high, I got involved in modeming and wrote a BBS for my Atari 130XE in Turbo Basic XL. When I got an Atari ST, I released my first public domain program, a VT52 "animation" editor, compiled from GFA Basic.

Afraid of the social stigma of being too involved with computers, I gave up programming for the rest of my teens, only picking it up again in my last years at college, when my curiosity about the expanding Internet led me to explore MUSHes, MOOs and HTML.

I found a job building static intranet pages from technical documentation and learned the basics of JavaScript, although at the time, it wasn't useful for much beyond client-side form validation.

Then I got a customer service job at a rising e-commerce site and began hitting the books in earnest, learning UNIX shell programming, regular expressions, Perl and SQL. I started writing command-line tools and CGI scripts and moved over from customer technical support to working on the customer service toolkit.

I hit a kind of plateau, though I didn't realize it at the time. Though I continued to crank out scripts, my efforts to become effective in compiled languages such as C and Java stalled repeatedly.

Eventually, largely through exposure to the work of experienced developers, I began to understand principles of computer science as well as practices of large-scale software design. As I became comfortable with a greater degree of abstraction, I branched out from reading books on specific programming languages to reading up on broadly applicable concepts and practices. I've been working in software for over 15 years, and I continue to read avidly.

</comment><comment><USER45> 1\. A close friend had gone to Berkeley to do an information masters - he was self taught and suggested I give it a try. I didn't like my job and when Google Glass was announced I decided to actually quit and find something part- time so I could study. Thus Codecademy, Lynda.com and then countless paper books after I got a taste for the whole thing. I did the Udacity CS101 MOOC as well, just because the lecture series of CS fundamentals seemed like a good idea.

I also found coding meetups in my city and bothered my friends who were professional developers with lots of questions. My friend at Berkeley in particular is definitely owed a few beers...

[edit] One of the most important things about the 'how' of learning to code is finding out that you enjoy it. If you don't have the gumption to put in late nights to fix things or study after your day job in the evening, then you won't see it through.

2\. July 2012.

3\. I did some freelance work from about six months in, but got a full-time job in June of this year.

</comment><comment><USER46> It started when I was a gradeschooller, with a debug mode cheat code in Sonic The Hedgehog 2. I became obsessed with how I could break the game's rules, and it singlehandedly taught me what I call "programmer's logic" \-- understanding intuitively the principles of how programs are nothing more than mechanistic reactions to states. By the time I wrote my first program, I knew how to code. One of the first things I wrote was a 15-page multiplayer Pacman with a level editor, which I did with trial and error and reading help pages.

It wasn't long before I discovered the internet and started breaking things on AOL. It was almost all exploration, with a bit of RTFM and IRC thrown in.

I ended up going to school for CS but that what nothing more than a formality to land a west coast tech company job.

I'm not convinced there's any way to cheat this process. I think you just need to have an insatiable curiosity, seriously intrinsic motivation, and 10,000 hours.

</comment><comment><USER47> I am self-taught. And I get asked alot about how I did it.

For me, it happened in two phases.

When I was 14 or some years old, we did not have a computer at home, so the only way I could play with one was to participate in our science fair and work with one. I participated to make a static HTML website that year. I knew nothing about it, so I got a book and learned basic HTML from it and made one. I liked doing that so much so I kept on doing that for 3 years.

Then I picked up some Visual Basic, because I could build some "cool" UI components with that.

Mind you, till here I hadn't taken "official" CS classes.

But then I joined college for CS and hated every bit of it, as most of it was out of touch from reality (maybe specific to my university) so I changed my major to Computer Engineering and then learned programming in this "second phase" on my own while developing projects.

So far that is the best way I know how to actually learn programming. Try to solve a problem. And ask people if you get stuck on something. You will feel like shit every day for awhile, but that would make you a better programmer and a person.

Just learn basic syntax of a programming language. In my second phase I did that with Python (for APIs) and Obj C (for iOS).

Just learned the basic syntax and then mostly relied on the developer documentation (please get used to reading those, that is the best way to stay upto date with any changes that happen in the future). Also, stackoverflow. But only use stackoverflow if you cannot figure it out for days. Try working on it on your own first. mostly things have solutions online. try searching.

But most importantly, build. Build and solve problems. That is the most rewarding and effective way. It would make you a better problem solver.

I hope that helped!

</comment><comment><USER48> 1) Self taught from RTFM, various websites/tutorials, IRC & mailing lists.

2) Around 12.

3) 19

I first started to hack around on Linux, which progressively moved me to code stuff to hack around.

I've started working at 17 as a system administrator (at an hosting company then a startup), when it occurred to me that most SA work can be automated or controlled by code (I sometimes like to say that system administrators are the result of a code error), so I decided to became more a programmer than a SA around nineteen.

Before that I'd have developed a lot but just personal projects or sysadmin needs.

Since that i've worked in a couple of agencies, done some freelance stuff, and joined two years ago a startup with some ex-colleagues.

I've kept doing sysadmins tasks, perfecting my knowledges and learned new stuff like JavaScript & client side frameworks. I really love my sysadmins skills because I think they make me a better dev, as i'm able to understand how my code will run on the servers and the different complications.

</comment><comment><USER49> If you are serious about programming and have any possibility of doing this at all, by all means get a CS degree at the best university you can access. I have worked with or interviewed a few programmers without any university degree and time and time again their confidence in how getting a degree is a total waste of time was directly proportional to their ignorance of basic facts from various areas of CS and inability to solve problems in a systematic way.

A lot of those people simply never get any external validation, have problems getting along with other people, and are unable to accept any kind of mentoring (while they desperately need it), in the end growing up believing in the greatness of their skills which in reality are not even mediocre. Since this seems to be the reason a large fraction of people does not finish their degrees, by this point as a recruiter I would just not hire a person without a degree.

For this reason, I would also ignore a lot of the testimonies that invariably will appear here of self-taught programmers proclaiming supposedly doing great, unless they have projects and code to back their claims up.

There certainly are exceptions, but do not start with the belief you will be one. Getting the same kind of wide perspective you get from a college degree from self-studying is several times as hard. I have self-studied mathematics after finishing my CS degree for a few years now and that's my practical experience. If you don't have the possibility to attend university, make sure to get as many opportunities as possible of verifying and testing your skills in different areas and stay modest.

This post by Notch of Minecraft fame illustrates all that I have said very well:

[http://notch.tumblr.com/post/15782716917/coding-skill-and- th...](http://notch.tumblr.com/post/15782716917/coding-skill-and-the-decline- of-stagnation)

As far as practical advice goes, as soon as you are able to at all write working programs of non-trivial complexity (say, a platform game) MIT OCW is the place to be:

[http://ocw.mit.edu/courses/electrical-engineering-and- comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-00sc-introduction-to-computer-science-and-programming-spring-2011/)

[http://ocw.mit.edu/courses/electrical-engineering-and- comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/)

[http://ocw.mit.edu/courses/electrical-engineering-and- comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-042j-mathematics-for-computer-science-fall-2010/)

[http://ocw.mit.edu/courses/electrical-engineering-and- comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-006-introduction-to-algorithms-fall-2011/)

Taking those four courses in this order will provide a great basis, but I would be surprised if someone would be able to complete those in less than two years when self studying (I solved most exercises from SICP, learned a lot, but took me more than a year). To get the equivalent of a university degree, you would still need to heavily study at least four more topics: networking & security, compilers, operating systems and databases. Those two books might be a reasonable shortcut to learn some of this:

[http://www.amazon.com/Programming-Language-Pragmatics- Third-...](http://www.amazon.com/Programming-Language-Pragmatics-Third- Edition/dp/0123745144/ref=sr_1_1?ie=UTF8&qid=1380539950&sr=8-1&keywords=programming+language+pragmatics)

[http://www.amazon.com/Programming-Language-Pragmatics- Third-...](http://www.amazon.com/Programming-Language-Pragmatics-Third- Edition/dp/0123745144/ref=sr_1_1?ie=UTF8&qid=1380539950&sr=8-1&keywords=programming+language+pragmatics)

Source: I started working full-time as a developer when I was 19 and did it ever since, did a four year CS degree as evening studies after work (already having significant programming experience when starting the degree) and spent a significant amount of time self-studying (I worked through almost all of SICP, read the "Dragon Book", wrote a compiler etc.). I would never be where I am today (wherever it is) without teachers and colleagues from the university, there would be just lots and lots of gaps in my knowledge I would never get aware of.

<comment><USER50> "by this point as a recruiter I would just not hire a person without a degree"

While the variability of self-taught is higher than those with a CS degree, there are plenty of self-taught (without CS degree) software engineers who rise to the top of hard core software engineering companies (e.g. Microsoft, Facebook, VMware etc.), besides high-profile college drop-outs like Bill Gates and Mark Zuckerberg.

I suspect that your recruiter position expose you to lower than average quality candidates, as most good engineers never needed a recruiter -- they are simply referred by their friends and colleagues.

<comment><USER51> _While the variability of self-taught is higher than those with a CS degree, there are plenty of self-taught (without CS degree) software engineers who rise to the top of hard core software engineering companies (e.g. Microsoft, Facebook, VMware etc.), besides high-profile college drop-outs like Bill Gates and Mark Zuckerberg._

I am not sure if Mark Zuckerberg can be described as self taught,especially if you consider his high school's CS curriculum.

[http://www.exeter.edu/documents/COI/COI_Final_2013_14.pdf#pa...](http://www.exeter.edu/documents/COI/COI_Final_2013_14.pdf#page=25)

</comment></comment></comment><comment><USER52> I'm self taught. The first time I got in touch with a programming language was at age 10, when my math teacher showed us an algorithm for the greatest common devisor. I wrote it in qbasic at the time and was astonished by the power of this 286 machine to do my homework. I went on to adapt open source games like nibbles and gorilla. I was especially proud about figuring out the math to turn the bordered nibbles world into a donut. Subsequently I read anything about computers I could get my fingers on. The DOS manual was my evening lecture for several month :D my interest stayed confined to math & algorithms until I got a new physics teacher at age 14, who taught us about fractals & recursion with me starting to learn Delphi and windows apis. I wrote my first self replicating office viruses and trojans and learned about sockets to report back. Couldn't solve the problem of data errors over the internet and went on to other ideas. At age 15 I went for an exchange highschool year to the US. I got suspended for hacking into the principals account. no damage was done, so my visa got reinstated and I was able to leave the country. Back at home I joined a computer class and started learning about cryptography and security. For my final high school exam I implemented RSA. In university I finally learned proper software development and chose a browser rpg Ai as a personal side project to get really good at this "object oriented" stuff :D it ended up being completely autonomous with pathfinding and map building, monster fighting, selling and archiving items and would report gold levels daily, which I would then sell on Ebay. It had to break login Captcha and would use my own wget based API to interface with the browser game. Later I finished a master in Ai. This was 4 years ago, and the rate at which I am creating side projects now a days wouldn't fit in here. As a general rule: for the last 18 years I always had a sideproject to work on and this is how I got good. Feel free to ask specific questions if you want to know more ;)

</comment><comment><USER53> 1) Mostly internet tutorials at first. Also with a few of free books (thanks to MS publish for translation!), code reading and RTFM. Recently, it became manuals (again) and StackOverflow. There's not that much usable materials because I am not a native English speaker. Eventually, I was getting to be able to read/write English, and I met a whole new world.

2) Actually I don't remember precisely. I was doing something like programming when I was mid-high school student. It was just beside me always. But that was just a 'script for fun' level with Visual Basic. I restarted real programming at 2007 with AS3.0 and C#. And now it finally became C/C++/Objective-C.

3) I have a B.A. degree in computer graphics design major. Programming job gave me real opportunity to make money. And actually I paid a lot more by programming stuffs when I was student. Also this fits to me a lot more than graphics design.

</comment><comment><USER54> From the outset, I learnt programming by craving to build a thing. It started with tic tac toe that I built in vb6 in school, with computer as a player, sound and lighting effects. Then I built a full-disk media player/ image explorer hybrid. Followed by a multilingual word processor with screen reader and brail keyboard input and ...Finally full-stack web apps.

At the core of my learning was always a desire – that I wanted to build this thing, and rest was the details that I figured out from the internet and MSDN CDs (yes, that used to be my primary and definitive source during initial years of learning.)

In my experience, when I'm passionate about building something, I do not need to motivate myself to learn the details.

Edit: Finally I also did post graduation in CS to cover the gaps of CS fundamentals. Degree is also essential for getting a job at reputed companies which usually have it as the first filter to auto-reject candidates.

</comment><comment><USER55> I wrote my first code in visual basic when I was around 12, following internet tutorials, but the lack of consistent access to a computer / internet made me give up on it fairly soon.

Later on, when I was 16/17 I started tinkering again after the fascinating revelation that any piece of code running in my windows machine used a common set of APIs and that I could read/change the code if I just learnt x86 assembly. So I did.

It was probably a combination of books, one-off university lectures I would skip high school for, internet tutorials and surrounding myself with other likeminded people online.

I've rarely felt that the lack of formal education is holding me back. The only time I remember was when I was getting into data science, but research papers are available online for free and books / lectures on youtube bridge the gap quickly.

Plus I imagine the typical university graduate has to go through the same process anyway.

</comment><comment><USER56> I first learned BASIC with a friend that owned a Spectrum. We made some funny programs: a naive game similar to Space Invaders, a tracker that I feeded with a Bach fugue, things like that.

Years later, I enrolled CS. But 90% of what I learned was at home with a 286 that another friend lent me. Materials: books from the university library and technical manuals for the languages. TurboPascal manual was excellent.

I guess they're outdated to recommend, but my favourites were _Pascal and Data Structures_ by Dale & Lilly and _File Structures: A Conceptual Toolkit_ by Michael J. Folk & Bill Zoellick. I wrote a B-Tree implementation that put Clipper's to shame.

When Delphi was released (95), I bought it, binge-read the manuals and did several personal projects. The rest, at work, facing difficult problems, reading a lot, consulting online forums... and specially _answering_ others' questions.

</comment><comment><USER57> Got Atari 800XL when I age 12. It came with simple Atari BASIC programming manual. My friend (also Atari owner) had more advanced book so I borrowed it from him after some time (curiously he didn't become a programmer).

I moved from Atari BASIC to Turbo Basic (superset of functionality and much faster) , to ACTION (compiled language, high level but translating very straightforwardly to machine language), then 6502 assembler. Then Kyan Pascal just to play with. The I got PC (age 16 or so). So Turbo Pascal, Delphi, Borland C++ Builder. Then I stared learning for my master degree and computer science. Most formative experience during college was building sample app in PHP with two teammates. I ended up doing mostly this for profit during last year of college and ever since (I don't always use PHP). During college I picked up Java and C#. Since then I picked up Python and Ruby.

</comment><comment><USER58> I consider myself completely self-taught, I started with BASIC learning a bit from my Dad + books / magazines when I was a kid.

I progressed on to HTML and JavaScript in my early teens, learned mostly from websites. Naturally that progressed on to PHP/MySQL, and now I mostly do Ruby.

I did do a CS degree (Computer Games Development) which taught me some C++ and Assembler, but most of that was learning in my own time, and a lot of it felt like applying what I already knew onto different technologies.

After Uni I started freelancing, and 5 years on I'm still doing it :)

I think like you say no one is really "self-taught", and I think it is mostly down to how you like to learn. I've always preferred to teach my self things, it's how I learned to play instruments, as well as recording and music production. I've just never really got on being taught by others.

</comment><comment><USER59> Self taught. No choice about that in 1967. No computers in schools, no such thing as a CS degree, and anyway for family reasons I had to drop out. By pure chance I got a job as a computer commissioning tech at a local computer manufacturer - Elliott Brothers Automation; my job was to take room sized discrete component mainframes from their hand-wired manufacturing stage and make them work so they could be shipped to their new owners (typically universities or research labs). First day on the job, 19 years old, they lead me to a work station, point at the 'scope, the Crown sized blueprints, and the machine, and say "make it work. See you at lunch". I did. Both. No idea how, pure babe in the woods, but turned out my mind just works that way. So after a few months, I had noticed they turned the reference machine off outside 9-5 work hours, and got permission to turn it back on for my own purposes. The rest is history.

I have been at this for over 45 years as a cross-disciplinary hardware and software designer ever since. Still techie, at 66 years old, still nicely gainfully employed, still young at heart (if with a few creaky bits now:). Still mostly self taught, still inventing stuff that did not exist before. Yes, along the way for my own satisfaction I got the B. Sc and most of an M. Sc, but neither were required by my employers. Also, as somebody already mentioned, I have been recruited to every change in my career, or founded start-ups (with funding based on my design abilities), by people who knew me. Other than that first chance, I have never got a job by submitting a resume. And even that first job was by referral from an interviewer for a different job, after we had chatted for a while. Every change always started with my phone ringing.

I do not attribute this career to inborn talent, although I certainly turned out to have some. I attribute it to wide eyed curiosity and a perpetual feeling of "what? you want to actually _pay_ me to do this?", and its concomitant continuous learning and inventing. And to nobody telling me what I wanted to do was impossible.

</comment><comment><USER60> 1) Totally self taught, no books, all online (Google and planetsourcecode.com!)

2) I started around 12 years old; began with HTML trying to replicate websites I liked, then Visual Basic, then to PHP/JavaScript, then to Java, then to C++, back to Java when Android came around in 2009. With competence in countless other languages along the way.

3) I freelanced with PHP from I was ~15, just tiny projects.

I made money writing bots for RuneScape (in Java) when I was 15.

I went to school for Physics, (age 18), no programming involved.

I published my own (paid, successful) games to Android when it was first around, in 2009 (age 19). I freelanced in Android projects at the same time.

I got a job offer from my main freelancing client a few months before graduating (age 21), and moved to the US. I'm still working for the same company, as the Lead Developer, and things are going great (age 24).

</comment><comment><USER61> I started by writing BASIC code on my TI calculator in high school. First I just dumbly recopied some sample code in the manual, then I started tinkering with it and adding functionality. I was so bored in high school that I spent most of my time on my calculator writing code.

When the BASIC started to feel too slow and limited I switched to C. I never really learned the language "formally", my original code was filled with GOTOs and local variables (I was coming from BASIC after all). Then with practice it gradually improved. I still fondly remember the "wow" moment when I understood the point of function-local (stack allocated, but back then I didn't know what the stack was...) vars.

Now I write low level C code for embedded systems for a living.

</comment><comment><USER62> 1) I was dragged into it - I was 12 years old and a member of a forum that was shutting down. My limited experience in HTML + CSS and a bit of naivety made me think I was an expert in web development, so I offered to take over. I basically had to learn PHP + MySQL overnight and over the course of my 2 month summer I spent late nights reading code to try and figure out what it did (i.e. no books, just trial and error and a lot of Google).

2) Started around the time I turned 12 years old, so June 2006.

3) I started making money in varying ways almost right away. I took over the site and installed Google ads within a few months. I probably started doing freelance within a year. My first full-time job was this past April doing an internship after first year university.

</comment><comment><USER63> 1) Self thought from copy pasting code and changing out parts until it works, moved on to books later. What was always most important for me was to have a goal in mind, something that you build towards or really want to accomplish, with brute force and excessive Googling if necessary.

2\. Read my first programming book when I was 15, on ASP of all things but I had been learning HTML on my own prior to that, following tutorials online. My school also offered a short course on Turbo Pascal.

3\. Got my first job as a Flash programmer when I was 18 and I'm soon turning 27, employed as a Full Stack Developer (don't hate) without having a CS degree. I do have a bachelors degree in Media but it's essentially worthless and has nothing to do with my work.

</comment><comment><USER64> By mistake.

The original idea was learn to repair computers and do networks.

Unfortunately, in the moment of inscription was no more seats. The only ones was for "programing". What is that? "Something similar" they say. I apply (I have 14 years, the tech school was owned by my uncle, so that is why I can do it ;)).

I was there 2 years. Amazing good teacher. Learn to do a single project, FULL project, with forms, reports, database, etc (foxpro).

After that, I lear by myself delphi, python, .net, sql. Still do that.

BTW I enter to the university. In full contrast the quality of teaching was terrible. I give some classes as student!

For example when I note the teacher don't know about OO in exchange to NOT BE in the class --I was working and studying-- I do that parts at the end.

</comment><comment><USER65> 1) How did you learn to code?

It started with a book named "Basic para niños" (BASIC for Kids,) which as you may guess, taught me some BASIC when I was 8 years old. Then a few years later I learnt some basic Pascal (I don't remember where from, it may have been a class in my school, when I was around 11 or 12.) Then I taught me some assembler from a book (around 15) and Visual Basic (and Visual Basic for Applications) around that time, too. I didn't learn anything new until 17 when I started with Lisp and a little later, Python. Then in my university I was taught C (which I complemented by reading TFM, i.e. the K&R book.) After that I've learnt on my own many more languages, up to a certain fluency. The list of things I can at least write a "hello world" (actually if I have learnt it I can write something larger once I get back into the language structure, because every language I learn is for "something") includes Basic, Pascal (well, actually I don't remember much about Pascal,) C, Lisp (that's Common Lisp mainly, and quite a lot of Emacs Lisp... I can write Scheme, but somehow I never got really into the deeper parts of it that make it "Scheme",) Prolog, Forth, Go, Javascript (that's for the browser and for node.js,) Awk, Bash (heh,) Java (ugh,), octave/Matlab, R, PHP and probably 1 or 2 more I'm forgetting right now. I'm currently writing quite a lot of Go, trying to find some use for J to learn it (it's f __ __g crazy!)

2) When did you start learning (perhaps informative because of the recent rise of MOOCs)?

When I was 7-8, that's (whoah) 23 years ago, in 1990-91, before I even had a computer at home.

3) At what point (if yet) did you start working as a programmer professionally relative to your initial efforts?

I'm not sure when the correct timing is. When I was working as a researcher I wrote quite a lot of code as part of my work, and now even if I write a lot of code for work, my main work is not being a programmer. It took a long time, of course, because I started early and didn't start to do real work until right after college.

</comment><comment><USER66> Forty-something programmer (diversified into various forms of consulting). Self-taught from printed matter before the Internet existed. Started coding on a ZX81, moved up to Apple ][, then to Macs. Dropped out of college to start working as a coder at 20. I started out as a freelance games programmer but that was a bit beyond my business (not coding) skills of the time, I took a job at a startup(ish) instead.

Nearly all of my learning happened on the job, as a result of taking on projects involving technologies that I had no clue about when I started and mostly mastered by the time I finished. Pretty much what is now called a "full stack" developer as a result.

</comment><comment><USER67> 1) Started with QBasic. Didn't have internet back then. Literally just read the help file for every single command listed and whatever wasn't explained about its usage I learned through trial and error. (To this day I don't know how I bricked my mothers computer with bload/bsave and somehow overwrote cmos.. according to the tech who fixed it).

2) I started when I was 8 or 9 years old.

3) I started doing freelance on and off when I was 21, and eventually started making more than my part time job. It took about 2 years though before I went full time. I tried to go full time twice but would have to go back to part time work due to both motivation and client issues.

</comment><comment><USER68> 1) I started back in 1996 and taught myself HTML with books only. I went to a technical high school that taught the typical plumbing, carpentry, etc., but they also had an IT track in which I learned more about HTML and web design. I kept teaching myself via books and online tutorials through college, because college was not teaching what I wanted.

2) I started learning in 1996.

3) I started working professionally (part-time) my Junior year in high school for a dot-com business. I have been moving my way up the chain since then. Now I am a partner at MadGlory building custom large scale web apps and web properties for the gaming industry.

</comment><comment><USER69> I had no computer until I was 18 (couldn't buy one :/), so in order to compensate, I stayed in the school's computer lab whenever I was allowed, where I played mostly with TurboPascal and BASIC. Just after the high school, I started volunteering in the local IT company, doing some VB stuff. After 3rd month they have employed me on a full-time basis. 11 years FF, I am in Germany where almost everybody working in the IT has a degree, developing PKI-related products in .NET, and before that I rejected a CTO offer.

I still learn and read a lot, I have always one course going (most recently on Coursera).

</comment><comment><USER70> 1\. Learned Basic from copying/modifying programs from a magazine when I was in elementary school; learned (most of) C/C++ by reading the books that came with Turbo C++ in middle school; formal education was Pascal in high school CS, C in high school taking classes at community college, C++ and Java at university (no degree); taught myself Perl/PHP/shell/Python/JavaScript/HTML/CSS/etc after college.

2\. Started in the early-mid 80s.

3\. Programming's always been a part of my job but not the primary focus. I guess the first time I got paid to do something like it was around '99.

</comment><comment><USER71> 1) I got started using Basic on BBC micro, using book borrowed from the local library and bit of help from my parents. Not long after I switched to Q Basic on a PC, then Visual Basic. Until I was about 13, all the equipment I used was borrowed from my dad's work, so without that most likely I wouldn't have started that early. I learnt Java at Uni and later PHP. I droped in and out of programming in my teens, I didn't seriously start programing bigger projects until Uni.

2) I must have been 9 or 10 when I started.

3) I got paid to do some static HTML stuff when I was 16 but I first go paid to do code when I was 20.

</comment><comment><USER72> 17yo here, started to program when I was 9 in c#, moved to C when I was 13 and then started using NodeJS slightly after it came out. All self taught, it helps a _lot_ if you have a project that you're passionate about that can give you that bit of motivation to keep learning. For the last year I've been bootstrapping my startup (in the infosec field, still stealth mode) and have been recently (~5mos) employed by a small yet global company as one of their main developers so I can earn a bit more money and experience until I can get my own stuff off the ground!

</comment><comment><USER73> Age 35 now, starting programming as a kid by reading the manual that came with my Spectrum, getting books out of the library and typing in "listings" from magazines etc..

Had to check wikipedia for when the machine I had came out, but according to that I must have been 8 years old. Kind of scary, since I have a 6 year old myself now.

Learned a lot by reading the original Wiki, which was like the StackOverflow of its day, though more about concepts than specific problems and solutions:

[http://c2.com/cgi/wiki](http://c2.com/cgi/wiki)

</comment><comment><USER74> Self-Taught myself when I was around 14; Joined a CS course at 17; Am 24 now;

I started learning c/c++ because I found books lying around and found the compiler installed on my windows 98. I later fiddled with some HTML at school and picked up with CSS & JS to show off cool/pretty things. I tried building small games and php websites until I moved to college where I picked up backend development.

Once I got into college, I started taking up freelance projects as a hobby for extra cash. But a professional job didn't happen until I graduated.

</comment><comment><USER75> 1) Self taught. Books, mags, studying code others wrote.

2) In 1972 the community college near me had public accounts available to any person who walked in off the street and said they wanted one. Learned APL from a used textbook.

3) Was working a comm tech at a finance company (also self-taught btw) and started using computers + code I wrote to solve problems at work. Had been coding for fun at home on Apple ][, C/PM and Mac. Figured I could be coding for a living, so left and found work programming. Been doing it professionally since 1987.

</comment><comment><USER76> 1) I started with some High School courses in VB6/VB.NET/C++. Eventually I stumbled upon C# which I fiddled around with for several years. I had some college, but I quickly realized I preferred writing useful applications to studying theory.

2) Reading through these posts makes me feel like I started learning later (15/16).

3) After I landed the internship I effectively dropped out of college and started working as a contractor. I hope to go back one day, but I have too much fun with my day jobs to take a break.

</comment><comment><USER77> These days a lot of folks take the HTML route into programming. They start by fiddling with web pages, then add CSS, some Javascript and then building backend stuff. But this is a risky route to take. You might end up being just good enough to make a few bucks at it, pick up some PHP or Ruby on Rails, and drive yourself straight into a dead end.

None of this is really programming. Sure there is a bit of going through the motions, but you have all these frameworks supporting you, whether HTML or Rails or whatever, and you fail to get to the heart of the matter.

Far better to get a book like SICP (now freely downloadable) install one of the free Scheme packages out there and struggle through writing all of the code for all of the exercises in that book. It will be tought. You will suffer. And at the end you won't have much to show for it; i.e. no pretty websites. But you will have trained your mind to think the way programmers need to think. And you will also have learned to persist in the face of disappointment and failure because that is what programming is really all about.

Of course, there are more marketable languages like C# and Java and it is definitely worth while to work through exercises from a good book in a similar manner, but you won't get as good an education as someone who pushes through SICP. Those of us who learned programming in an imperative language like Java, are now either in a stagnant rut adding features to big balls of mud that hang like chains around the neck of our employer or else we are slowly pushing our way along the path blazed by SICP.

If you already know a bit of programming in any language, you could also take Functional Programming in Scala followed by Reactive Programming at Coursera. They run these courses a couple of times a year and they are good. SICP is recommended reading for this course even though the language is completely different. True programming is all about mathematics and using it to solve problems in a simple way. You need to understand functions, sets, boolean logic, lambda calculus, algebra, category theory in order to truly excel. Mathematics is something that you build inside your head and something that you can apply to any programming language or platform.

By the way, most CS degrees do not teach this. If you find a school that DOES teach this, then by all means, get the degree if you can afford it. But too many schools leave the real stuff for the Masters and Doctorate level folks. If you self-learn, like I did, then you can do better. But you better be prepared to work real hard because most of the time there is no course to keep you on track. Learn every day without fail and you will get there.

</comment><comment><USER78> Self-taught here. I started with a intro to CS text in java then oracle's java reference book. If you really want to learn programming these books will help though:

[http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming](http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming)

and

[http://mitpress.mit.edu/sicp/full- text/book/book.html](http://mitpress.mit.edu/sicp/full-text/book/book.html)

</comment><comment><USER79> I learned to program in C in the late 80s, before the web, and then went on to do a CS degree at university.

Learning to code was _very_ difficult in those days.

1\. There were no free compilers outside of academia.

2\. Compilers cost hundreds of dollars

3\. Programming books cost $50 each

I used to buy $5 shareware disks that claimed to have compilers and tutorials on them and they never had exactly what was advertised.

In the end I managed to buy a second-hand slightly out-of-date compiler (Turbo-C?). I still seemed to spend any spare cash I had on books.

<comment><USER80> I challenge you on #1/#2 since there was Personal C (PCC) around the mid/late 80s. The version I had didn't have a graphics library though, so I learnt 8086 assembler and CGA/EGA calls (memory is hazy here, but probably CGA) and made my own :)

I was lucky enough to be leant a good C book by a family friend (whoops... Still have it almost 30 years later!!).

But I agree with your overall point that it was much harder to self teach back then. On the flip side however is that now there is so much choice that getting started can be a challenge as there are so many routes to choose!

<comment><USER79> I was on the Amiga at that point and even if there _was_ a free compiler it was never on the shareware disk it was supposed to be on and there was usually a bit missing. I got a copy of Turbo-C (with a book, maybe?) and programmed (on a PC) at work after hours.

I, too, learnt assembly mostly because there were a few good free assemblers available.

<comment><USER80> Yeah those shareware disks were such a scam... So much promised and so little worked... And so many copies of PKUNZIP!

</comment></comment></comment></comment><comment><USER81> i'm self taught.

i coded C64 stuff as a kid. i read the manual, took it from there. then during my teens i did other stuff (mostly party).

when i with 19 i realized that i will be a father shortly after my 20th birthday i decided to get a job (it was 1998). i looked into the newspaper (dead tree with ink on it) and there were a lot demand for "web-designers" (the dot com bubble finally reached europe). i went to a job interview. told them "yeah, i can do it" and that i will start in two weeks. bought a book about HTML and one about webdesign directly after the interview. read the books and "coded" (i know HTML isn't code but at that time it counted) for two weeks, started the job. did the same as before (reading books, "coding") now for good money.

that was the point that i realised, if you read a (good) book about a technical topic - and understand it - you know 99% more abut this topic then anyone else on the planet about it. you are not an expert, no, you still have a very long road to go to become an expert, but well, you are in the top 1%.

then i repeated this pattern: CGI, perl, flash (version 2 i think, or was it 3), PHP 3, ... some years down the road ruby, node.js, coffeescript, clojur, haskell, ....

so what are the three things you need

       * motivation (becoming a father and don't have any real
         money is in most cases a quite effective motivation)
       * a good book (at that time i just chose the next oreily
         book, today i would say check out pragprog)
       * the will to make sacrifices (no party, no alcohol, no TV,
         these are time and motivation black holes)

</comment><comment><USER82> 1) Mostly self taught, but a lot of credit goes to helpful people on various game development forums; people who were almost personal tutors, answering any stupid question I had and fixing my code for me. I did do a comp sci degree, but consider it a total waste of time/money (apart from gaining a little appreciation for testing and design patterns).

2) About aged 14, after getting my first PC. In the year 2K!

3) Couple years ago I started earning from it, aged ~24.

</comment><comment><USER83> I got my first computer when I was 15 (in 2001), and after 8-9 months of just playing video games I ended up playing with HTML in Dreamweaver. Over the next year that'd expanded to include CSS, JS, and PHP.

Between the age of 16 and 22 I primarily worked as an IT technician while programming on ever more ambitious projects on my free time. The most ambitious of then was Zynapse, a VERY Rails-like PHP5 framwork I started in 2006. It had i18n and other things from the start, which Rails didn't gain till years later. I never finished though, so uploaded it to Github as-is 4-5 years ago: [https://github.com/jimeh/zynapse](https://github.com/jimeh/zynapse)

When I was 22 and moving to a new city I decided it was time to get paid for programming. Specially since where I was moving to actually had big companies employing programmers, compared to where I used to live there was no local businesses at all hiring programmers. Hence I probably could have started professionally programming earlier if I had easier access to programming jobs.

The first programming job I got was for a Rails shop, so I spent around 10 days familiarizing myself with both Ruby and Rails before they let me work on any real-world projects.

It's now 5 years later, and I live in a much bigger city (London) in another country, and I'm still programming for a living.

As for how I learned to program, it's all been self-taught based on what the internet has to offer in terms of source code, documentation, blog posts, books, and generally just playing around with things to see how it works, and what's the best way to do something.

I should also note that to this day, I haven't actually finished any of the programming books I've started to read. I always end up skimming through them instead to pick a few really interesting things, and then go back to my general goofing-around-for-fun kinda learning style or whatever it might be called.

But as far as I'm concerned you definitely don't need a CS degree or anything fancy to program for a living. I'm sure it helps a lot if you do, but it's definitely not required. You just need to be curious, interested and have some spare time to learn.

P.S. Sorry for not adhering to the 1, 2, 3 structure of your question, I might have gotten a bit carried away :P

<comment><AUTHOR> No worries for not adhering to the structure, it was just there because I wanted to urge more than "Yes"/"No" replies, I enjoyed reading your post. Very cool story.

I'm self taught at the moment, about to go to a dev bootcamp to really solidify my understanding of web-centric ideas (most of my stuff has been data crunching). Glad to see that so many people are happy in the field without a CS degree.

</comment></comment><comment><USER84> Self taught, learned to program on a TRS-80. Studied electrical engineering in college, but switched to business so I could get a degree quickly and get out. No regrets.

I think computer science undergrad degrees are highly overrated. If you weren't already curious about computers as a child and didn't figure things out for yourself, what are you going to get by having your parents pay all this money to attend classes?

</comment><comment><USER85> * I learned from books and some online tutorials. I would use coursera and similar tools, but the were not available in 2000. I made some friends online trough irc & xmpp but beside that i had no contact to fellow programmers during the first 4 years. * I started to work as a programmer around 7 years later. First i finished school than i worked in an unrelated field for 2 years (great experience).

</comment><comment><USER86> I was able to teach myself Basic programming on a TI-99/4A, Atari 2600, and Commodore 64 from 4th grade (in the early 1980s) because the languages were simple, the machine was simple, there were magazines (Compute!) to crib code from, all the freeware and shareware programs were in source, and my dad said "There's the manual." when I asked him to teach me. :)

I spent time programming because I didn't have a modem. It turns out this was the best thing for me, since I didn't waste my time on BBSes. A friend of mine who had, dropped out of the CS program at Penn State after a digital logic course I loved.

In high school I took a year and a half of Basic and Pascal, but more importantly spent three periods a day in the computer lab exploring every nook and cranny of programs I had to write, programs I wanted to write, and the shell language of the school district's VAX.

Seemed clear to me that I wanted to do computer science, but I switched to computer engineering after that digital logic course. Took college classes in Pascal, C, C++, assembly for microprocessors, common lisp for ai, vhdl for processor design, operating systems, and wire-wrapping a microcontroller system.

Grad school courses in Smalltalk [edit: and computer architecture and petri nets and, most importantly, self-taught makefiles for a class project build system].

After I got out of school I took company courses in Java and Perl, but more importantly taught myself the Unix environment from books, and had opportunities to use it every day at work.

On my own, I read books and did programming exercises in Haskell, Ruby, and Go.

[edit: I dug seriously into make and bash for ten years, writing the build system for a telecom network.]

I have a real passion for functional parallel programming in the Inferno shell, so I'm working on a blue-sky build-tool project. [edit: [https://github.com/catenate/credo](https://github.com/catenate/credo)]

On my job I'm now picking up Python because I have to maintain a build system code base in it.

Overall, I'd say I've probably taught myself more than been taught, but only because I had about 8 years of formal instruction in a programming span of 30 years. The education was essential though, because there were so many concepts I would not have gotten to on my own.

</comment><comment><USER87> I'm a self-taught programmer, my background is actually in Financial Economics.

I believe the best way to teach yourself is to solve your own problem or build something you're truly passionate about. You can either do something new or improve something you currently use. This is how I taught myself to code in PHP, although now I can also write applications in Python.

</comment><comment><USER88> Self-taught.

1) books, and working on personal projects to "scratch an itch"; progets grew larger, at some time I started doing it professionally

2) ages ago :)

3) I started as a sysadmin since that's what I self-learned from, programming came later maybe 3-4 years

Reading other replies, I totally forgot to mention I first started programming in Basic on a TI-99 with a tape recorder for storage. :D

</comment><comment><USER89> 1) self tought qbasic,c++ and php.Via book learn qbasic and tutorial in msdos 5.0 2)After had trouble not enough income work in mechanical engineering company(Car industry).target want to make spc.. 3)After taking certificate in 2007 4)Still learning other language like java,.net mvc razor but still fallback to php for real life working.

</comment><comment><USER90> 1\. By reading the source code of tape programs and magazine source listings. The BBC Micro boots to a command prompt and has Basic in ROM, so that was fairly helpful... and from then on for other languages, self-taught by viewing source code. 2\. As soon as i could! (aged about 7) 3\. My second job, after 3 months of hell in telesales.

</comment><comment><USER91> My Dad got a PC through work in 1987, I was about 13 or so at the time. From the moment we switched it on I was hooked. One of the first programs I tried was called GW-BASIC and typed in a listing I found in some magazine. Two years later I was coding demos in Assembler. I'm fully self taught and I still program today.

</comment><comment><USER92> 1\. Books and Computers. 2\. Between 7th and 8th grade. Learned assembly in 9th. 3\. 18. Published article, which is what gave me legitimacy.

My first book was on BASIC, and I had no computer so I wrote out what the computer program and what it'd do in a notebook.

It's been 26 years since, and I'm still going strong.

</comment><comment><USER93> "Self taught" is an unhelpful distinction. It is the work itself that teaches. Helpful voices found in university programs, books, and boot camp courses may point you toward useful habits, but there are no shortcuts to experience. At day's end, everyone is self taught.

</comment><comment><USER94> 1) I often preffered to stay at home writing code than going out with people i wasn't interest in, I started with RPG Maker when i was about 15, then kept reading programs, trying stuff, no books or courses.

2) about 8 years ago with rpg maker xp. after that vb 6 and php

3) I left italy and found a developer job.

</comment><comment><USER95> I learned almost entirely from books. Reading computer books now is an addiction :-) the only real thing I learned from technical college was the very basics of relational databases... And even then when I revisited the concepts I'd been taught a lot of misconceptions.

</comment><comment><USER96> I'm self-taught - when I was in my early teens at high-school, my parents wouldn't let me watch TV or play computer games until the evening. Fiddling with HTML looked enough like school work that I got away with it during the afternoons after school.

I built a bunch of personal websites, and sold my first professional website (static HTML) to a local estate agent when I was 15, back in 2000. I charged £300 - around $500 at the time. I worked for them for a couple of years, updating properties etc.

I studied Law at university, but worked on websites for my college, the student paper and various sports teams. I started my first startup when I was 19 - I wrote a lot of bad PHP and inline MySQL queries whenever I needed data in what we now call "views". There was no test suite, no version control and I often made changes straight into production, because I couldn't get a LAMP environment running consistently on my PC. This repeatedly took the site down for hours at a time. This was back in 2004. The bad old days.

I took a break from coding to join a management consultancy for almost 3 years, although I ended up automating a lot of my work in Visual Basic (through Excel), and went on to teach the Excel course to colleagues.

I started my second company at the start of 2011, during an enforced 3-month period of "gardening leave" between two jobs. I decided that I wanted to learn how to code properly, so I bought "Agile Web Development with Rails", published by Pragmatic Programmers, and worked through it in about 3 or 4 days, non-stop. This was an epiphany - web development all started to make sense, and we launched the first version of our site about 2 weeks later. I knew enough Ruby to be dangerous, but probably not enough to get a job as a professional programmer.

As my co-founder was teaching himself HTML & CSS at the time, we didn't really have expertise in-house, so I spent a lot of time on the #rubyonrails channel on freenode - a wonderful place to get help on anything Rails related. Stack Overflow was also very useful.

By March or April of 2011, we'd been accepted onto Y Combinator and hired our first (extremely capable) engineer, who had a CS degree. This spurred me on to become more technically capable, so I just started devouring programming books. I've mostly steered away from the classics (Gang of Four just didn't make sense from a Ruby point-of-view), but there are often more practical, up- to-date equivalents in the language of your choice. "Design Patterns in Ruby" and "Eloquent Ruby", both by Russ Olsen, stand out for me.

Ruby Koans, and then implementing a bunch of common sorting algorithms have kept me keen to keep learning the more theoretical side of stuff. I've had a little more time on my hands recently, so I've divided into open-source software - I'm currently trying to help out with Resque 2.0 (pull request coming soon, I promise!).

I've recently played around with Clojure and Go, but I'm struggling to get into them without a practical project to spur me on.

I'd say I'm now competent enough to have a good shot at getting most Ruby- based development jobs out there, if that was a path I wanted to take. And it only took 14 years!

</comment><comment><USER97> 1) my father taught me to code in BASIC, some programmign classes in the college; then books, internet, rtfm, coding for myself (in the beginning) and coding as a paid job 2) when I was 12, in 1985 on a 48kb home-computer hooked to the TV-set 3) quite early

</comment><comment><USER98> Considering I've done a bit of both...3 years of CS for the fundamentals and everything else self taught..I recommend getting the degree if possible. It made things significantly easier when I started diving in to concepts I was interested in.

</comment><comment><USER99> I'm a 27 year old full stack PHP developer.

1) Totally self taught, mostly using the internet only. But at my current level I often read books. 2) Started with HTML when I was 13, ASP at 15 and switched to PHP at 16. 3) When I was 20

</comment><comment><USER100> 1.) RTFM + STFW 2.) I've been doing it for 3 or 4 years. 3.) I got a consulting gig a couple weeks ago, but there isn't much programming involved :(

</comment><comment><USER101> No CS degree. Learned programming at an institute. Worked at the same institute as programming teacher for 3 months before getting a job as a programmer.

</comment><comment><USER102> Clickable: [https://news.ycombinator.com/item?id=6467914](https://news.ycombinator.com/item?id=6467914)

</comment><comment><USER95> Oh my goodness!

 _Every single_ reply is "self-taught"!

Why have courses?!!

</comment><comment><USER103> Started off self-taught. Got some college learnin' in me eventually.

2) Wrote my first code at 8.

3) Got my first programming job at 16 at the US Air Force Research Laboratory in Rome, NY. I'm pushing 30 now and still going strong.

1) How did I _first_ learn to code? Caveat: I think how I learned is a lot different from how most people learn today. I didn't have the Internet, or even a modem. I lived in a tiny, tiny town (~500 people) in Northern NY (closer to Canada than NYC).

But to answer the question, I picked up a book - the Commodore 64 BASIC Manual if I remember the title correctly. Some friends and I wanted to make a game. I remember my friend's dad telling me that I'd need to learn to Program a computer. I didn't know what that was, but I wanted that game, dammit. He didn't teach me to program (he didn't know how, either), but he did let me rifle around in a box of books he had.

A bit later I switched to coding various nefarious tools for AOL (punters, phishers, crackers, mass mailers, etc) on the Mac (Macfilez/zelifcam, anyone?). Everything was done in this tool called OneClick that forced everything to be fairly open and modifiable, so I learned that by example. Incidentally I stumbled into A/B testing by writing automated 'phishers' on AOL (Anyone got any <M>< ?? Press 666 or IM me to trade <>< !!). Turns out that telling people they won something (like a free month of AOL) is far, far more effective at getting them to pony up their password than telling them AOL was hacked. I know better now, I didn't then. I was 12.

A bit later I switched to a PC running windows 98, and I picked up a pirated copy of VB 3.0. I learned that from a For Dummies book, I believe. I eventually shifted to 5.0, then 6.0, and started learning ASP and web stuff. I did a bit of work here and there for myself and for my school.

Eventually I got lucky and one of the Project Managers at the AFRL offered me a job. The AFRL is really slow to do anything, let alone hiring teenagers to build chem/bio weapons detection systems, so he dumped a bit of extra money into one of his contractors and they hired me. He even worked with my high school so that I could juggle my classes around and get out after a half day. Department of Defense letterhead goes a long way. Eventually the bureaucracy came around and the AFRL offices in Rome modified their internship program to include local high school students. I believe the program is still quite active, and it's been hugely useful for both the kids in the nearby po-dunk towns as well as the AFRL. From my end, it was an _amazing_ experience. I had access to tons of awesome equipment, lots of _very_ enthusiastic and _very_ good mentors, and I got to do real work on a real project that had real users (hard to find in DoD work sometimes, especially when it falls under the 'research' umbrella).

I started formal schooling a year and a half later. My university thankfully placed a lot of emphasis on cross disciplinary collaboration. It is a technical university, and CS was a popular program there. For non-computing degrees (engineering, sciences) CS students were often seen as useful, and quite often other programs required that their students pair up with one of us to be successful on larger projects. As a result I spent a ton of time in my university's marine sciences/engineering department. I ended up working for a professor there building in situ oceanographic sensors. It was there that I really learned the "power" of having a domain, and that computing extends far, far beyond computers.

Today I'm still learning, but it's really just your run-of-the mill on the job type stuff. Occasionally I geek out on a side project when I get excited about some new technology which isn't applicable to my day job. This keeps me sane, and often teaches me things that I can bring back to my day job. It's kind of like an individual-scale space program, and the new tricks I learn are velcro, styrofoam, etc.

The question not asked: How do I think a newcomer should learn? Two big, big things that nobody really mentions: find motivation, and completely ditch the 'this is hard' fear.

On motivation, just give yourself a goal which writing some software will help you attain. For most people who aren't already implicitly motivated by the 'compters are neato!' vibe, this _must_ be a goal which is related to something you already care about.

On fear, I've seen the 'this is hard' assumption/mentality cause sooo many people to quit long before they ever gave it a shot. If it's hard, find something that makes it easy. The best resource is a mentor if you can get one.

Also regarding the 'this is hard' fear/mentality, take up rock climbing if you can. I can't think of an activity more analogous to building and debugging software than trying to figure out a climbing problem. It's hard? Then you're not attacking it from the right angle. In bouldering especially sometimes the difference between hard and stupid easy is whether or not you're stepping on the inside or the outside of your foot.

Don't bother with finding good 'learn to code' resources until you've found motivation and ditched the fear (if you ever had it).

Hope this helps. Contact info is in my profile if you want to get in touch!

</comment><comment><USER104> self-taught. I was a Physics student in college when a friend showed me how you could simply combine a few commands in a linux shell to make more complicated commands. I think he probably showed me grep something | wc -l. And that piqued my curiosity. I went from playing with bash to learning Perl and eventually a job as a webdev guy.

</comment><comment><USER105> 1) I read a book, a bunch of tutorials and then got a job where I was able to learn whilst working.

2) Around 2008-2009

3) The end of 2009

</comment><comment><USER106> Books and practice really. That and Google. Lots of Google.

</comment><comment><USER107> I started coding at about 8-ish. QBasic, DOS, other basic stuff. My mom contemplated changing her career from marketing to programming and took some courses, but she had a completely different mindset — so in middle school I ended up helping her with Perl and C++. While Perl was just an ordinary syntax hell (especially after Visual Basic for me), C++ was a completely different beast. My mom was trying to understand every line that she was writing and do everything "the right way", but courses that she was taking didn't employ the best of teachers. They heavily relied on some magic code and "we always do it this way" explanations, so I had to figure out a lot of stuff on my own — it was actually pretty frustrating and confusing. I fear (often implicit) complexity of C++ to this day, and prefer to use something more "simple" and "safe" whenever possible. Around this time we also got Knuth books around the house, and I spent a lot of time trying to understand them. I don't think that I got much, but a lot of it stuff really stuck.

I successfully applied to a math-specialized high school (remnant of soviet special school system, was rated the best in the city and one of the best in the country at the time). The main thing that I learnt in three years there was that I was not, in fact, really smart — not compared to my classmates, anyway. Definitely not smart enough to be a mathematician. I did MIX emulator as a summer project in Delphi, but afterwards decided not to pursue a programming career, and go into bioengineering/bioinformatics instead.

Fast-forward 8 years. I dropped out of university (apparently, being math/physics geek with no interest in general biology isn't the best background to go into biological field) and became a game designer. Applied for a job, passed the interview and then made a career of constructing virtual worlds, later — social & mobile games with free2play monetization. I worked on some management, producer positions, and even started & failed my own offer- based monetization business in the process. But after a few dozens failed projects (fail rate is pretty high in gaming industry, but especially in this part of it) I kinda burned out and decided to change it again. I never stopped programming, and was following and fooling around with Unity3d engine since 2.6, so it wasn't hard to pass a coding interview in the same company I've been working on before. And here I am — coding for a living in the first time in my life for the last three months.

There's a lot to being a software engineer that programmers don't appreciate enough. I'm only responsible for whatever I myself do and have power over. I have clear goals & tasks. Arguments that I have are a lot more objective and much more rarely rely on "feelings" and estimates. I don't necessarily want to stay a programmer forever, but I learn a lot and I'm much more happier then before. And finally, I'm really surprised of how much I'm worth on the job market — being a software engineer almost feels like some kind of easy cheat code in life for a person with my mindset.

</comment><comment><USER108> I loosely consider myself a self-taught programmer:

1) a)My middle school (~2000) used to have a computer co-curricular course. I learned some BASIC, some HTML, and made websites/applets that trolled the user (the cancel button that runs away, icons and buttons that didn't do what they said, hidden buttons and urls via formatting, etc). Turns out I studied UX anti-patterns via trolling.

b) When I was 13 (~2002), my brother was studying Computer Science for his Indian CBSE 11th grade concentration. I bugged him incessantly about what he was writing, helped him debug, tried to come up with better ideas and algorithms for what he was writing. He was torn between enjoying teaching me stuff and getting my help, and feeling inferior if I actually came up with a better idea than him. Regardless, he was vital to me becoming as much of a hacker as I am today, because he was an excellent teacher, constantly challenging me and giving me interesting things to think about without making me do mindnumbingly boring tasks. While being taught is not really self- taught, that I seeked to learn it without any external motivating factors and purely out of interest, and I just capitalized on the nearest and most effective resource available to me I think makes it close enough. This is probably the answer to (2), by the way.

c) I followed in my brother's footsteps (2005), but I already knew the material, having been progressing through it on my own in my spare time in the interim. Taking the course just meant I could dedicate that much of my "not free time" to doing something I intended to learn! I skipped most of the homework, got mediocre grades, didn't know the algorithms asked on the exams, but enjoyed being vindicated in sitting in front of the monitor staring at code, making my first Tank game, a hangman game, a file encryption/decryption system, etc, all in C++.

d) I started pursuing a degree in Electrical and Computer Engineering at the hands-on school Olin College in Greater Boston, where I was encouraged to learn to _do_ , and less about _theory_. This is where I really stopped learning computer science, and really started teaching myself programming. I hated CompSci more with every class, and at some point found myself writing way more code the semesters I had no CompSci credits, because I was enjoying it so much more programming controllers for electromechanical projects to do cool things, than learning how Turing Machines and Regular Expressions flip things on and off.

3) I had no real opportunities to work internships in the Middle East where I grew up, the industry was very young and elitist where it existed there. And I'm glad I didn't get numbed to professional programming work there. I worked as a tools developer for an electrical engineering lab where I also did research for a couple summers. I then went on to work at IBM for an internship (2010) and discovered it was a pit of doom for someone like me who could see it "being pretty alright," but never feel fulfilled being a cog in someone else's machine that I didn't care about. There was nothing wrong with the work, but I'm glad it was just an internship. I made something I was proud of, some bigwigs clapped when I presented it, they shook my hand, asked me questions like they were interested, genuinely made it sound like they would use it in a product at some point (I stopped checking a year ago), and I was on a tiny high in my first professional dev job. I fled from corporate software dev, and now live poverty stricken in the Bay Area making (about 50% of) something really exciting, with people I'm excited to see everyday to work with.

I think at some level anyone who pursues programming to fulfill their dreams is self-taught. School does not teach you how to make the things you really care about making, but it can help you a bit.

</comment><comment><USER109> 1) Inspiration followed by Realisation followed by Ambition. I started messing around in Microsoft Frontpage age 11 (2000ish). I was shown how to make a simple VB6 program by my father (2002). Here I came to understand logic and how GUI's make stuff happen on computers. I wrote trolling/phishing tools for AOL for about a year making use of more complicated hooks written by other people (2003). I then turned back to the web with PHP, since it was a more accessible way to get my things into the hands of people (2004). I played computer games back when you could mod them - I wrote scripts, made 3d models and textures. This is where ambition set in. My first PHP real project when I thought I'd learnt what I was doing was a messaging app with login / registration (2005). I found MySQL doing this. I had a MySQL book which I referred to but it was the only book I really used to learn. My peers found security holes in my app, the login had a redirect which included the user id in a get argument, which you could simply change (true story). This taught me the importance of considering how people will attack my code. _This was a critical factor in helping me learn to code_ When you consider from another perspective, you more deeply understand what it is you're doing. I continued with PHP and MySQL and the front end stack, I kept pushing myself, starting ambitious projects (hell, I can build Facebook) that ultimately I'd never finished. I got bored quickly, I was always doing something new. Back to PHP, Zend Framework (my first framework) provided another giant leap in my understanding (2006). I delved into it, I realised how much I can learn from others. I learnt the benefit of going into the code and understanding it. I learnt design patterns, I learnt what good software looked like, I began to write software, rather than 'web pages'. I dropped out of college and got my first job as a web developer writing PHP websites and doing sys admin for hundreds of clients, alone (2007, age 18). I started to get good at what I did professionally. I began looking harder at other languages, but only a little. I wouldn't start projects with new languages, just appreciate them from afar. Ruby, Python, Go, C#, Java. I realised that databases, other software, tools, services and api's are all just components or tools, nothing to fear and held new and potentially better ideas than I had at the moment. MongoDB, CouchDB, Redis, zeromq, RabbitMQ, memcache. I carried on focussing on few languages but becoming far more capable and adaptable for the next 4/5 years. In 2011 I started to become interested in JavaScript and doing that properly, because it'd always been taken for granted with jQuery being such a great API. 2013 I'm writing browser-based apps and apis. You can ask me to do anything and I'll probably be pretty good.

Slacker at school, College drop out, in full time employment since the age of 18. Now a multi-skilled contractor at 25. I'm not really a programmer but more of a problem solver. Programming is one of the secondary tools I use, my brain is my primary tool. You don't need formal training to achieve it.

Timeline:

      1988: Born
      2000: Frontpage
      2002: Introduced to VB6
      2003: Wrote AOL hacks
      2004: PHP, modding computer games
      2005: Started building PHP apps, dropped out of (UK) college
      2006: Discovered Frameworks and learnt good practices
      2007: Got a developer job (PHP)
      2008: Got better at my job
      2009-2010: Had a few different jobs, diversifying, becoming adaptable, learning new tech
      2011: Found confidence
      2012: Naturally leading dev teams
      2013: Contracting, multi-talented
      2014: Who knows

</comment><comment><USER110> 1\. I learned in the 4th grade. I built my elementary school's static website and was allowed to use the computer lab instead of attending class, as my parents had already taught me the majority of stuff through ~6th/7th grade level. It was a "gifted" classroom, and most of the students were there with me. After I built the website, I had my parents buy me a book on C, which happened to be K&R. I can't say I understood exactly what I was doing at that age (I doubt anyone ages 8-11 really has that mental connection), but I knew how to make command line programs.

2\. See 1, more or less. I'd say I -really- started to learn when I built my own website in high school that started bringing in money and still does today. It was a full web application to start and I just kept rebuilding it from scratch as I learned new stuff (object-oriented programming, design patterns, etc).

3\. I wouldn't really call myself a professional. I went into bioengineering and medicine, but I still program every day because it runs our current world and will for the foreseeable future. I market myself as a software engineer, but I only accept jobs I find interesting or that pay 6-7 figure salaries.</comment>