
Ask HN: How many "self-taught" programmers and how did you do it? - BWStearns
I was wondering to what degree the HN community of programmers is self-taught.<p>1) How did you learn to code? Totally self taught from books and RTFM &#x2F;&#x2F; Self taught plus MOOCs or comparable resources &#x2F;&#x2F; Some classes in college but no CS degree, remainder self-taught &#x2F;&#x2F; Self taught plus a developer bootcamp or some non-degree related formal education &#x2F;&#x2F; CS degree and personal efforts<p>2) When did you start learning (perhaps informative because of the recent rise of MOOCs)?<p>3) At what point (if yet) did you start working as a programmer professionally relative to your initial efforts?<p>I had been wondering about this for a bit and the discussion here (https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6467914) motivated me to finally post it.<p>Administrative note: I&#x27;m below 200karma so I can&#x27;t make this a poll, if an admin wants to throw some polling categories in here that&#x27;d be cool too.<p>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&#x27;s digital knee at some point or benefitted from the currently robust community that exists online now.
======
nekopa
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.

------
gringofyx
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.

------
buro9
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.

~~~
tansy
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.

------
mbrock
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!

~~~
BWStearns
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.

------
TeMPOraL
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).

------
paulbjensen
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.

------
TelmoMenezes
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.

~~~
angularly
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.

~~~
stevekemp
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.

------
ggambetta
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)

------
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.

~~~
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

------
wrl
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.

------
6d0debc071
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.

------
lucaspiller
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.

------
danparsonson
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.

------
sarreph
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.

------
eksith
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.

------
hdra
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.

------
crntaylor
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/)

~~~
S4M
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.

------
gmac
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.

------
razzaj
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.

------
richardjdare
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.

------
eatmyshorts
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.

------
ivan_gammel
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).

------
Achshar
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.

------
fredsanford
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. :)

------
pushkargaikwad
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.

------
zachlatta
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.

------
jim_lawless
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 ).

------
forktheif
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.

------
icoder
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.

------
junto
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)

------
bayesianhorse
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.

~~~
seabee
> 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.

~~~
mbrock
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.

------
tomasztomczyk
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 - 2010

------
db48x
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.

------
dzink
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.

------
reidrac
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.

------
FennNaten
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.

------
vinceguidry
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.

------
teleological
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.

------
hipsters_unite
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.

------
aegiso
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.

------
sankaetp
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!

------
wut42
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.

------
stiff
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.

~~~
vicaya
"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.

~~~
ekm2
_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)

------
tobyai
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 ;)

------
eonil
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.

------
varunkho
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.

------
mpeg
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.

------
narag
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.

------
scotty79
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.

------
MattBearman
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.

------
dwarman
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.

------
stickydink
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).

------
simias
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.

------
acrooks
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.

------
eoy
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.

------
mamcx
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.

------
RBerenguel
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.

------
Morendil
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.

------
n3rdy
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.

------
blainsmith
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.

------
llomlup
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).

------
devonbleak
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.

------
rythie
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.

------
SomeoneWeird
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!

------
ZeroGravitas
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)

------
kalyan02
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.

------
lunarweather
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.

------
Romoku
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.

------
memracom
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.

------
rayj
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)

------
sambeau
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.

~~~
ikura
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!

~~~
sambeau
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.

~~~
ikura
Yeah those shareware disks were such a scam... So much promised and so little
worked... And so many copies of PKUNZIP!

------
franze
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)

------
doctorfoo
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.

------
jimeh
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

~~~
BWStearns
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.

------
brianmcconnell
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?

------
phaer
* 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).

------
catenate
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.

------
Rulero
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.

------
ludoo
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

------
alien3d
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.

------
semjada
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.

------
pan69
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.

------
philomelus
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.

------
mknappen
"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.

------
duiker101
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.

------
chris_wot
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.

------
tomblomfield
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!

------
geldedus
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

------
agibsonccc
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.

------
nerdklers
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

------
wesleyac
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
:(

------
yashg
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.

------
ColinWright
Clickable:
[https://news.ycombinator.com/item?id=6467914](https://news.ycombinator.com/item?id=6467914)

------
chris_wot
Oh my goodness!

 _Every single_ reply is "self-taught"!

Why have courses?!!

------
benjamincburns
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!

------
marai1
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.

------
andyhmltn
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

------
AugustusLongeye
Books and practice really. That and Google. Lots of Google.

------
golergka
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.

------
keerthiko
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.

------
beaker52
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

------
nudetayne
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.

