

Ask HN: How did you learn programming? How long did getting good take? - BalmerPeak

Go.
======
patio11
I learned programming from a book Make Your Own Video Games which was in the
library of my (not so well off) Chicago public school. We didn't have a
computer, but I found out you can simulate a BASIC program with graph paper.
That was twenty-something years ago.

My trajectory as a programmer has gone from sucking lots to sucking less. I
might get good someday.

------
Kliment
I first played around with DOS on an 8088 back at school. I'd edit batch files
and make it print out amusing things. Made a text adventure, self-replicating
files etc. I then tried editing an exe file to change it, and realized it
wasn't quite that simple. Later on, I found QBASIC and used it to write "real"
programs, such as little animations and an alarm clock using the PC speaker. I
learned some Pascal at school, which is where I found out about flow control
structures and functions. Later on, as a teen, I played around a lot with
Delphi, finally getting over the disappointment of not being able to edit .exe
files that I had as a child. I made a lot of one-off programs I'd put on CDs
with autorun as greeting cards and personal messages to friends. I later did a
couple of months of VB at school, but didn't learn anything new compared to
what I could already di with Delphi. I sneaked into the high school Java
classes when I was in 8th grade, and thanks to a particularly tolerant teacher
got to unofficially participate. I learned Java and C basics at university
classes I took as part of a cooperation agreement between my high school and
the local university. Later, officially in university, I took more Java
classes and learned what I could of C++ on my own. I was fairly comfortable
with C, but C++ was frustrating, because a lot of the complexity felt
unnecessary. I stuck with Java for the most part. I wrote C++ and Java at a
number of research assistant jobs, and learned bash script and awk on the side
for one-off tasks. my first exposure to Python was when a student at a course
I was TAing asked if they could submit work in Python. I accepted that, and
learned a fair bit from dissecting that program. I didn't touch Python for a
while after that. Later, at another job, I did C# one-off programs for
psychological experiments. On the side, I was playing around with virtual
reality and used Vizard, which is a 3d visualization package built on Python.
I started playing around with Python seriously at that point. I now write
mostly in Python, except for C and C++ bits for performance-dependent stuff
and hardware interfacing (which I use from Python with ctypes.)

How long did getting good take? It's hard to say. I feel I've learned
something from each of those experiences, and gotten better in the process.
I'd say I've gotten to the level where I'm confident in my skills as a
programmer within the last couple years, as I've seen meaningful things done
with my code.

------
hga
'77-78 school year: Punched card FORTRAN IV (really more like a II) on the IBM
1130. Prompted me to start and never stop studying software engineering
("structured programming" et. al. was the rage back then).

Summer '78: most everything but C and the like on a rich UNIX V6 system. Focus
then besides exploration was still writing the best quality systems, started
learning how to work on other people's code bases helping others with their
final class projects.

After some time off for first year of college, starting in the summer of '80
heavy duty C (Lions' notes best reference then) on UNIX V7 and BSD 2.x. Plus
playing around with Lisp Machines.

'82-83 Lisp at LMI, although wasn't able to get a whole lot of time in (Lisp
Machines were scarce back then). First serious work with SICP and Scheme.

'84: C on a variety of 68000 BSD UNIX workstations. Learned how to grok and
port code between these subtlety different systems. Also some Common Lisp on
PCs, followed by the T Lisp dialect.

'85 on, moved from working on ersatz versions of EMACS to the real thing
(mostly Gosling, which was what Gnu EMACS started from), some heavy duty
debugging required to find wild pointers (e.g. ATRON on 8088). More work on
other people's code and first client-server project.

Long break for more school and aftermath in a period when Route 128 was dying.

'90 or so, MS-DOS and Sun OS C (WORM filesystem and system interfaces),
followed by C on Windows 3/3.1 and Sun OS 4.x. Starting transition from
journeyman to master.

After various C and Oracle consulting work, transition complete in mid-90s
with a serious greenfield C++ client server system using OOSE methodology (The
Unified Process nowadays). That's when I considered myself to have become
"good".

With all the interruptions and distractions (was trying to become a scientist
in this period, but finances got in the way), took perhaps 10 years of
concentrated effort in 20 calendar years.

------
albahk
I was a MAD Magazine fan and in a Super Special issue in the early 90's they
included BASIC program source code printed in the magazine. I sat down and
typed the whole thing in line by line and printed a full-screen pic of Alfred.
E. Neuman. That was why I started going through the BASIC manual at the age of
9 or 10. It took getting a job writing JSP/Servlets to get 'better', but still
not 'good' 20 years on.

------
c1sc0
I learned programming in BASIC at age 10 when a computer-science-teacher uncle
of mine explained how Super Mario worked. It was all a bit over my head but
after about a week I was drawing some Mario-inspired shapes on the screen. The
next big push came when I taught myself to do early CGI-based stuff: it was
just so exciting to be able to share something with dozens (!) of people. If
you define being good as "being able to pick up a new language in a few days"
then yeah, I guess I'm good & I think that's a goal well worth pursuing.
Picking up a new language will expose yourself to new constructs & practises,
it trains your programming muscle. If you define good as "expert at
programming task X" then, sadly, I am not very good. The best part about
programming is that you never stop learning. That uncle of mine is now well
into retirement and he's still programming microcontrollers for fun.

------
regularfry
Learned Sinclair BASIC when I was 10ish. Graduated to the C64 and a BBC Micro
through school, ended up doing C and a load of ARM assembler by 16. Picked up
PHP, Delphi and Java at college, got PHP and Java work after then. Got into
Python 5 years ago, then Ruby 4 years ago, and dabbled in C# in the interim.
In the last year I've picked up Common Lisp and Clojure after trying (and
generally failing) to make headway in Haskell.

I've only started to think of myself as a "good" programmer in the last couple
of years, but I'm not so sure it's a healthy perspective - it's mainly in
response to increasingly interacting with other peoples' code and realising
how shoddy a lot of it actually is.

And I'm still learning :-)

------
jazzychad
I started programming BASIC when I was 9 after finding some code in my school
math text book. I had a VTech PreComputer1000 [1] which had a button labeled
"BASIC" - so I put two and two together a figured out that I could type in the
code from my math book into the computer and make it run.

From there I was hooked.

How long did getting good take? Well, that was 16 years ago, and I think I'm
still working on improving everyday. But, how long before I felt proficient at
it? Probably a few years or so...

[1] <http://rasterweb.net/raster/computers/images/vtech.jpg>

------
rdj
I learned just before leaving the military. A contractor said, "Learn Perl and
you'll have no problem finding a job". So, I grabbed the "Learning Perl" book
and forced my way through it. I was horrible (a Linux 'man' page wrapper; or
basically system()). I do remember the day, while working on a project, that
it all "clicked". All the concepts suddenly made sense. I'm good now, but not
great. I can solve problems in just about any programming language. This is
10+ years later.

------
sailormoon
Why did you need to create a new account to ask a question?

Anyway, it depends on how much you practise (in both senses of the word)
and/or challenge yourself. If you're learning to build web sites, say, maybe
by the 5th or so project you're beginning to feel like you know what you're
doing. Maybe by the 10th you are confident enough of your skills that you feel
like you can apply for a job, if that's what you want.

The key is to just start work on something ASAP.

