
Ask HN:  How did you get started in hacking/programming? - ashley
A second question is:  What are some things you wished you knew before you started getting into programming?<p>I'm just starting, but I guess as a girl who majored in the social sciences, I don't have as many friends interested in computers.  A very nice person from the Boston Lisp meet-up tipped me off to Felleisen et al. "How to Design Programs", as well as their paper comparing their text to the standard "Structure and Interpretation of Computer Programs."
======
YuriNiyazov
Something should probably be added here: don't get discouraged by seeing that
a lot of people here answer "grade school" or "middle school", whereas you are
(inferring by "majored in social sciences" statement) in your early 20's. For
most people on this site, programming permeates our very core, and you can be
a very good and prolific programmer without having been hooked on it at the
tender age of 8.

~~~
lkrubner
I agree. I didn't get into programming till I was in my late 20s. It was
something that I got better at during my 30s. I didn't start making my full
time living from it till I was about 34 or 35.

~~~
ashley
I'm particularly encouraged by all the stories of people getting into
programming much later in life. I'm a freshly minted graduate, and it's cool
to see the career changes.

------
meunierc
When he bought a computer, I asked my grandpa to show me how it worked. He
said it wouldn't be interesting to me: it was all in English (which I didn't
speak or read), and there was nothing more than letters and numbers to see, on
a green and black screen. I told him that didn't matter. He took a book and we
spent an afternoon typing Rabbit.BAS into the machine, then we played some.

That was 30 years ago this year, today I design aircraft simulators and
automated test systems for aircraft computers. The methodology has never
changed: aim high, with a goal you will enjoy a lot.

edit: to your second question, I have this to offer: there's nothing more I
wish I had known when I started. I'm actually very glad I didn't consider
theoretical questions too early. "Programming" is no different a language than
Spanish, Japanese or Russian (maybe a tad more formal). To program you need to
learn to give directives to a machine. Designing a system is something else,
which uses a completely different skill set, and the entry point to that is
being able to talk to the machine.

So my only advice could be: if you really want to be a hard-core computer
nerd, stay with "programming" for 7-10 years, then learn (at least at overview
level) all the important design principles. You'll then be able to choose
according to your personality.

------
Osmose
1\. I started with a little game by the name of ZZT by Tim Sweeney and Epic
Megagames (who would go on to become Epic and create the Unreal Engine). ZZT
used ASCII characters as graphics and was an engine on which to run games. It
came with the map editor and used a language called ZZT-OOP to control
objects.

2\. It's a lesson I still haven't learned how to follow well, but I've always
been more successful just doing things rather than trying to start a large
long-term project. I would/still keep getting caught up trying to make a full
game or a complete library, and I end up getting caught in planning or setup
and never get to the coding part, which is what I actually want to be doing.

~~~
astine
Used to _love_ ZZT. That's one of the games that got me interested in
programming.

I rembmer when I was a kid (9 or 10 years old) my father got me a copy of
Turbo Pascal and some books about it. I've been trucking ever since.

------
nrr
The demoscene made me do it. I think the thing that got me hooked was seeing
Future Crew's "Second Reality" and having the desire to do that kind of stuff.

As far as the second question goes, I think I'd prefer to be blissfully
oblivious. :) That said, I've blackboxed pretty much everything I know outside
of Lisp, so I think one of those truths that should be shared with others can
be summed up by saying, "Exploration is key. Don't be afraid to take a
sledgehammer to the code you're working on. Your future self may end up
thanking you for it."

------
btilly
My wife and I were both grad students and got dissatisfied. She went to
medical school, I looked for a job suitable to someone in his late 20s
dropping out of a math PhD with a Masters.

The first job I found was a programming job at a churn and burn consultancy. A
couple of months in I was asked to learn Perl. I took that skill to be better
job. There I encountered a good programmer who got me started on reading (and
incorporating) classics like _Code Complete_.

Everything else flowed from that.

------
silentbicycle
When I was 5 or 6, my parents got me a Commodore 64. It had some games,
including some written in BASIC. I was always curious how things worked, and I
wanted to make games, too. The library had a couple books about BASIC, and I
learned enough to write text-adventure-ish games. Understanding the concept of
variables at an early age gave me a big head start on algebra, too.

In my early teens (early 90s), I saved and got a C++ compiler, Borland Turbo
C++. Digging into real memory with a debugger was _so cool_. I wish I'd had a
Forth to play with, at that age! Later, I dug into Linux, and all the stuff
that came with them. For free! (I'd suggest Python as a first language,
nowadays.)

A couple things I wish I'd learned earlier:

1) Learning how to work on codebases with other people takes different skills
than solitary stuff. Since I started by working alone as a little kid, I
didn't really learn consistent variable naming conventions, how to define
interfaces between components, etc. until I was in my late teens and digging
into open-source stuff. You may not _ever_ learn these things doing projects
that are only a couple pages long. (_The Practice of Programming_ by Kernighan
and Pike is a short, lucid book that covers this well, IMHO.)

2) Complexity kills projects. Most things don't _need_ to be large systems,
and if you structure a system as a group of communicating components, you can
get a prototype (rough draft) of the whole system, see design mistakes early,
and then cleanly replace the parts that need it. (I don't think conventional
OO works that well for this - as Joe Armstrong observed, everything carries
along too much context.) Start simple and don't worry about efficiency until
you have to. Brainstorm on paper, if that helps.

3) Write programs for something you're interested in, not just another blog
engine or what-have-you. The added motivation in making something _to make
music_ , cool 3D animations, etc. will keep you going through the hard parts.
Your social science background will give you an angle for interesting projects
beyond the ken of most CS students.

------
YuriNiyazov
I got started with BASIC on a Bulgarian clone of the Apple IIe called Pravetz
8A which the Soviet Union imported in humongous quantities in the late 80s.
<http://www.pravetz.info/en/pravetz-8a.html>

Needless to say, that's the wrong way to start now.

~~~
jacquesm
Was that the computer with the 'metric' pitch pins on the chips ?

~~~
YuriNiyazov
To be frank, I am not even sure what your question means, so the proper answer
is "I don't know".

~~~
jacquesm
The soviet 'clones' of the 6800 and 6502 were rumoured (in the West) to fit a
metric grid rather than the 1/10th of an inch pitch used in the semiconductor
industry elsewhere.

Other countries used 2.54 mm pitch heart-to-heart for pins on chips whereas
eastblock variations on this were supposedly 2.5 mm.

The difference is small, and for packages up to 16 pins you could probably get
away with it bending a bit but for a 40 pin package like a 6502 that would not
work (or at least, not easily).

If you have access to a machine like that it would be interesting to know for
sure!

~~~
YuriNiyazov
No, I no longer have access to that machine anymore.

Interestingly enough,
[http://en.wikipedia.org/wiki/History_of_computer_hardware_in...](http://en.wikipedia.org/wiki/History_of_computer_hardware_in_Soviet_Bloc_countries)

mentions the same rumor, with a reference to a old unavailable edition of Byte
magazine.

~~~
jacquesm
The difference is small enough that if you wouldn't know about it you probably
wouldn't even notice.

It would probably take placing another cpu piggy-back on top of the one on the
circuit board to clearly see it.

Now I'm really curious :)

------
patio11
I was growing up in a not-too-well-off school in Chicago, and found a book
entitled Make Your Own Videogames in the library. Sadly, neither my family nor
the school had a computer. Happily, I found that you can emulate BASIC code
with graph paper, fourth grade arithmetic, and a lot of patience.

------
keefe
My dad left his old Atari (2600 Junior, I think) in my room and I found basic
on there towards the end of grade school. This was really frustrating to use,
so into middle school I would coerce my dad into getting up an hour early so I
could get to the 8086s in my school's computer lab and work in QBasic. After
that, he got me a copy of VisualBasic which was much too visual for my tastes
but kept me tinkering a while. I also got a copy of Borland C++ Builder at a
relatively early age but made precious little good use of it. Around that
time, WWW was coming out so I started following web technologies sand playing
with JavaScript. My HS chem professor had us do an informational interview
with someone in our field, which I did and was offered a job where I started
doing HTML/JS/CC work from photoshop templates. I also did networking and
picked up on Java there. That's really all she wrote, in the last 12 years I
don't think I've gone more than 2 weeks without writing some Java. I still
prefer dynamic languages and I can't help but want to dump functions into
variables, but it's comfortable and does what I want... plus I can do fun
things in JS or AS3 on the front end.

------
DanielBMarkham
As a gifted student, I asked our school for a computer when I was in 7th
grade.

They gave us a bunch of wires, a soldering iron, and instructions for making a
homemade radio or some such.

As a Freshman, the local Radio Shack had the TRS-80 and I spent all of my time
bugging the salesmen as I played games and tried to tweak it. A friend wrote
an app and made $800. Eight-hundred bucks! Then our High School got one of the
first computers, a Commodore Pet. There was a guy named Roland who always
signed up for it, was an arrogant jerk, and generally ticked everybody off, so
I wrote a game called "Kill Roland" that became quite the local hit.

Then I wrote my first contract program, a bookkeeping app on an Apple IIe.
Then a program for a comic-book store, etc.

After that I went into the Marines, wanting to do "real work". Several times
in my young life I tried to swear off computers for other stuff I loved more.
Each time, no matter what I was doing, I ended up hacking together solutions.
So, for instance, after I got out of the Marines I started into management at
Domino's (while taking a full load at the local college). Within a couple of
months I had created a series of linked spreadsheets that handled all of the
store's paperwork. I clerked at a truck-shop -- ended up writing a dBase III
program that handled inventory, maintenance, driver payments, and taxes. (I
also found them 100K in overpaid taxes from previous years)

I tried freelance writing. I love writing. Ended up writing a bunch of
articles for newspapers and magazines. Wrote some sci-fi even. Got to meet and
interview famous people like Clive Barker. But within a couple of months, yet
again, I was installing Macs at the local weekly newspaper, filling in for the
CIO at a local company, and teaching graphics programs to guys who wrote print
ads.

So I finally just gave up and went into consulting. Didn't seem any point
trying to fight it any more.

I didn't pick hacking. It picked me.

------
Zarathu
When I was 11 I grabbed a small book on Visual Basic so I could write a
keylogger to steal my sister's AIM password. It was fun, learning about how to
use the WinAPI and various other components, even though I didn't really
understand the abstract concepts behind it.

I did VB, ASP, and dabbled with the .NET framework until I was about 14, which
is when I started to get into languages like Java and C.

After studying Java for a couple years, I started learning about buffer
overflows and shellcode, so I did x86 for about two years. At that time (I was
16), I had a job for a VoIP security company in Texas, and I published various
exploits for VoIP phones. I think I was 17 when I gave a talk on overflowing
SIP at Toorcon and Blackhat.

I did PHP and Perl for about a year after that, but I dropped that pretty
quickly when I found out about Ruby and Python. I'm running several web-based
startups now, and I love it.

I'm currently 19.

------
jacquesm
I got started when I was in my early teens, most of it in a local computer
store (where the salespeople would let me play with stuff I couldn't afford as
long as I would explain to the customers what it could do).

As for your second question, I wished I had learned about 'structured
programming' earlier, that would have saved me a couple of years. But then
again, learning it only after a few years of 'spaghetti basic' definitely made
me appreciate it more :)

Best of luck, it's going to take you some time but you'll be glad you did it,
the ability to program computers isn't going to make you smarter per-se but it
will give you an amazing new tool to help with all kinds of other things. The
net result is very close to actually being smarter. It's like being able to
use a powertool.

Jacques

------
ashley
Thanks to everyone for sharing their stories! This is really great to read,
and it's even better that there's no cookie-cutter way into programming. I
guess I had too much of an attitude that this is like grad school in a basic
science or a career as a classical violinist, where you pretty much have to
have followed a certain track to get in and where it's better to have started
as a young prodigy. The media reports heavily on the crackshot kids who
develop their start-up at age 16, and I guess it skewed my perception. And
even if you are one of those lucky kids who stumbled on something so fun at
such a young age, it was really interesting to read all the different uses and
sectors to which programming skills can be applied.

------
genderfree
Summary of below: Since I was not aggressive/assertive and since I was coming
up as a female in the 80's, a lot of my life track on the way to becoming a
programmer was spent trying to deal with the stigma associated with my desire
to do so.

1982-83 (grammar to high school age): My parents bought a word processor in
the 80's that you could also program. It had orange letters on a black screen.
I picked up the manual and I tinkered with it, typed in a few BASIC programs.

My parents didn't want me in the house playing with it and I wasn't motivated
because what I got done was so limited and my imagination could only take me
so far at that point.

In spite of that, I went to the neighborhood library to learn more, but there
was nothing really there except for books on electronics. I tried to get
friends and family to help me but no one could or would. For some reason going
to the library I felt the need to hide my interest. I vividly remember hiding
in the library stack with a few books on electronics one summer.

I am pretty sure they thought I was weird for having this interest. I was
supposed to be doing more "female" things. My mother actively prevented me
from doing other geeky things like bike maintenance (too greasy! and not
feminine!).

1985 (17 years old): When I got to college, they didn't teach programming in a
sane way. We had this book, "Oh! Pascal" and it sucked so hard I dropped the
class. But the only work-study job I could get in college was administrative
assistant work. They hired me then fired me (I'm not a secretary type), and
strongly suggested I work for the computer geeks. To this day I have no idea
why they pushed me there. But they had me doing tape back-up and whatnot. I
enjoyed it.

1992-1994: When I was about 22 or 23, I got into programming while I was stuck
in the Navy. I hated the Navy and they treated me like an idiot so I used my
free time to self-study C language programming. Once I got through the course
I realized I would have to pass a real university program and I just couldn't
take the classes where I was stationed (not available).

1995: I got a career in software sales (6 years of that). I was entered sales
info into a Unix box with an Informix database and I got to the command line
by accident and started using gopher and usenet and Pine. I figured out how to
install Slackware Linux.

I eventually became a sales engineer (1 year of that), then started work in
network administration (2 years) which led to web development (Javascript/ASP)
and eventually I taught myself Java (about 2001), then C# and now I do C++.

While I was working in network support/administration (hoping to eventually
work my way into something better) for a public relations firm in Chicago, one
of the PR seniors asked me where I went to school while I was fixing his
computer. I told him and he realized I went to the same school as he did
(prestigious, expensive midwestern university). He then said, sorrowfully, "It
really is a shame then." He meant to imply that I was doing work beneath my
capabilities and shouldn't be happy about it.

My battle may be dissimilar from others here. As a black woman I was supposed
to be aiming at being a lawyer or business owner, not a software geek. My
father worked as a tech in various roles for the phone company and I went home
for a holiday a few years ago and I was so proud I got my first real
programming job and he responded with "why would you want to do THAT for a
living?"

It was at that moment I realized I had been living for approval of others and
I felt released to do exactly what my talents and desires drove me to :)

~~~
YuriNiyazov
I am really glad to have read this.

~~~
genderfree
Thank you for saying so.

I have a tendency to keep up with all the men in my career who helped me with
my career, directly or indirectly:

Mark Ruzicka: Navy petty officer who turned me on to DOS 6 and hacking in
general

John Grosshandler: my first software sales job

Leo Linder: helped me with MCSE certs and got me into network admin and
support via his consulting firm

Larry Spear: CEO of a voice over ip company who supporting me being hired and
doing Java dev

Brett Slaski: Network and DBA manager who let me talk the company into
revamping their software and use C#

My current boss: unbelievable support and encouragement from him allows me to
make mistakes and recover.

I could not be programmer, my life love, without these guys.

:)

edit: To answer the OP's question, I would start with a specific goal/project
in mind and find out what steps are required to get it done. The best way to
learn programming is to do it. If one book doesn't click, try another on the
same subject. And another. Until you get it.

~~~
ashley
Thank you for sharing your story! I wasn't actively discouraged like you, but
my family also enforced rigid notions of what "proper girls" did. I'm so glad
you're now doing what you love.

------
runjake
1.) BRIEFLY study a language. Then start hacking on and tweaking other
people's code. The best and quickest way to learn is by doing, not reading
this and that.

2.) I don't really remember the "before programming" phase of my life as I
started very young. But I guess I wish I knew #1.

------
jim_lawless
In the late 70's while in my teens, I was interested in making video games. I
had a TRS-80 and learned BASIC and then Z-80 assembly-language. I then bought
a Commodore 64 and learned more languages while at a tech school. I became a
programmer for banking software and never really got a game off the ground.

To answer your second question, I wish that I had some insight into software
design as I was learning to program. Too often, I would kludge through
something in BASIC ... that was the mental model of the software that I
retained. It was hard to translate something like that into assembly-language
or anything other than BASIC.

I took a course in Pascal which helped to organize my approach to problem
decomposition and program design.

------
vog
Well, in fact I wish I've known earlier about the books you were recommended:
"How to Design Programs" and "Structure and Interpretation of Computer
Programs." I found them just a year ago.

However, I was very young when I started programming, so I probably wouldn't
have understood those books - partly for intellectual reasons, and mostly
because I'm not a native english speaker.

There was another thing that helped me a lot when I was a beginner: I attended
a few "advanced computer courses" in some kind of "youth center", where I had
the luck to be taught by really engaged computer freaks. They not only taught
me knowledge, they also showed to me how much fun that is - even when digging
on assembler level.

------
colbyolson
I hope there's someone out there who remembers this, but I started out on
mIRC, first on a few IRC servers, but then got into the MSNChat rave.

Writing scripts, prots, take-overes, and connections were just so fun. I loved
the competitive nature, having races to see who had the better protection
scripts. It was interesting to see how the community really grew, as it turned
really sour in the next few years and then MSN finally shut it down.

But thats what got me going. The feeling of writing code for something you
understand, being able to think it out in your head and then just write it
without having to check the docs. What a rush. I miss it, so now I learn
python. :-)

~~~
sammcd
I was about to post a similar comment.

In 7th grade the first programming I did was mIRC scripting. I then did a
little tcl/tk to try and get a bot running on a unix box.

I quickly moved to web dev from there though.

------
matt1
I had a good friend in middle school who introduced me to an AOL Prog called
Icy Hot. I was so intrigued that I did some research and learned about Visual
Basic. I found code for some other progs, printed it out, and went line by
line through it until I understood roughly what was going on. I made my own,
then made a second better one and haven't stopped. Biggest piece of advice:
code then read, not the other way around.

FYI the AOL work culminated in AOL-Files.com, which was the premier AOL
hacking site circa 2000/2001. Check it out:

<http://www.mattmazur.com/archive/aol-files.html>

~~~
kirse
To be honest, my Dad gets the nod for buying me a VB book that included VB5
back in 5th grade (1997). But, I'll have to say that you (with that AOL-
Files.com site) and this guy named "Oogle" inspired me with the "hacker"
curiosity by about 6th grade. In this case it was all black-hat though =)

Oogle released the VB source to his "proggie" and I did the exact same
thing... I went through the code learning how everything worked and started VB
programming on my own... faders, punters, etc, oh the good times. =) What was
the name of your prog?

I am so happy to know that the peson who ran AOL-files is an HN member! That
site was a goldmine.

~~~
matt1
I've mentioned AOL-Files a few times on here but no one responded that they
knew it, which surprised me, because a large portion of the community was
around 15 at he time, which would make them the prime age right now for
founding a startup.

Thanks for the note; shoot me an email sometime.

P.S. For a bit of fader/punter nostalgia, check out these screenshots from my
first prog circa 1998:

<http://www.mattmazur.com/2009/05/revolution/>

------
ericlavigne
I think you are very lucky to have heard about Lisp while you are just
starting to get into programming. If I could send my younger self some advice,
it would be the books you just mentioned. Also Felleisen's other books such as
Little Schemer (shorter and more introductory than How to Design Programs) and
How to Design Worlds. I think I would have been ready for them around 8th or
9th grade, but I didn't discover Lisp until grad school.

How difficult is it to find Lisp programming jobs in Boston (interested in
other cities as well)? Here in Florida, I've been stuck with a choice of Java,
C#, or Fortran.

~~~
ashley
<http://common-lisp.net/project/boston-lisp/>

I think these guys would be better suited to answer your question. Neil Van
Dyke runs the listserv. I read that a company, ITA, sponsors the monthly
Boston Lisp meet-up, and browsing their website, they have projects for Lisp.
ITA does travel applications, such as the algorithm for Orbitz's (or was it
Travelocity?) low-fare search. As Lisp was developed at MIT, I bet there are
more companies familiar with it.

------
ivenkys
You are lucky - you stumbled on the right thing by accident , HTDP and/or
Little Schemer are the right places to start followed by the more advanced
SICP.

If you can really grok SICP you probably won't need anyone to tell you what to
read next - depending on your interest you will pick up the right book.

What i wish i knew before i got into programming is essentially the above. It
took me a solid 10 years of C,C++,Python,Java and reading the right
blogs/journals to realise that my knowledge/understanding was ass-backwards.

------
apsurd
When I was 19 I decided to start a t-shirt printing business and print
tees/hoodies for high school clubs. I got this big idea that I needed a cool
website. With more time than money, I sought out google to teach me "how to
make a website". HTML and CSS days later, I got introduced to PHP. I then
spent the next 4 years learning to spaghettify "scripts" into Frankeinstein
web concoctions.

The problem, at least as I see it, was that I always just trying to "get my
next idea implemented". Granted that's how I learned quite a bit, I think the
thing that finally helped me the most was when I decided I wanted to fully
commit to programming - and so I sought to learn for the sake of learning. TO
consume myself. It was then when I met kohana, and jquery, and frameworks, and
ruby, and Hacker News, and MVC, and OOP, and yeah the rest is history - true
love.

So my advice. Take it seriously. That doesn't mean it has to be work; consume
yourself! You'll be good!

edit: I wish I knew about frameworks and the power of just shutting up and
learning from and trusting in people better than me. I love jquery. If people
1000000000 times better than me are working on jquery, it's more than I'll
ever be able to do. Have to appreciate that.

------
geekles
I got started in grade school. We had a bunch of Apple IIc's and IIe's. We
learned basic. I believe my first "real" program was a graphic of Spuds
McKenzie, the Budweiser dog.

I didn't do much serious programming until I was about 24, the place I worked,
a convenience store, just got cash registers with scanners. So we had all this
scanning data but no easy way to collate it over time. I wrote a perl script
that would parse our scanning data and tell me how much of x we sold for a
period of time y. That was when I truly got bit by the programming bug.

My advice would be to have a problem you really need to solve, a goal. The
rest is just trying to figure out how to make your language of choice reach
that goal for you. It is so much easier to learn how to program when you have
a real, tangible, and personal goal, and not some arbitrary exercise put forth
by a language tutorial.

Something I wish I knew before getting into programming? Language choice is
personal. Find a language whose syntax you enjoy and you can wrap your head
around. Don't get caught up in language wars/debates. It's basically
meaningless (although fun to argue about). Whatever language you enjoy the
most is the one you should be using.

------
deadsy
I wanted to program computers before I had access to one. I would take books
out of the library and write programs in the pseudo language they presented.
In 1982 my Dad brought home a Sirius microcomputer for his work. That had
BASIC, so I started writing programs in that. Also in 1982 I took my life
savings ($300 @ age 13) and purchased a VIC20. That was a fun machine to learn
with and also provided an introduction to the possibilities of assembly
language. A few years later I built the TEC1
(<http://holden.customer.netspace.net.au/tec1.html>) computer. That was Z80
based and had to be programmed in hexadecimal. That was very educational
because it was learning at the hardware/software boundary. Since then there
has been a steady progression through HLLs (Pascal, C, C++, Forth, Perl,
Python, etc.) and assembly language for whatever CPU I have needed it for.
Probably 90% of what I know about computers has been as a result of self-study
based on personal interest. Even though I work in SW I've had very little
formal training in CS (I'm an EE).

------
Mz
I'm female and have a social sciences background. I ended up with a
Certificate in GIS due to an interest in Urban Planning. Somewhere along the
way, I learned to write a little (X)HTML and CSS as a means to more
effectively share information by running my own websites. This grew out of
participating in email lists where my ideas on certain topics were popular for
a time. I would get tired of repeating myself and then make a webpage so I
could link to it and make a few custom remarks via email instead of feeling
like I was reinventing the wheel all the time.

More recently, I have decided I would like to learn a programming language to
write a simulation, again for the purpose of more effectively sharing
information. For a variety of reasons, I have yet to get started on learning a
programming language. But I keep getting interested in more technical stuff to
serve my other interests that are still more social sciences based. I joined
Hacker News in part because having people to talk to about a topic of interest
works well for me as an intro to a topic. Taking classes on it would not
currently fit into my life.

Good luck with this.

------
bmj
I came from a liberal arts background (philosophy and writing), and got into
programming when a friend was describing his work. He pointed me in the
direction of Perl, and I went from there. I was fortunate to find a job at a
startup doing a mix of front-end stuff and some Perl hacking, working under
one of the founders who was also a self-taught hacker. It was very useful to
work under a mentor.

------
lg
I don't know about HTDP, it was keen to impose 'good practices' on me and I
got bored. Your first book on science didn't talk about lab safety, it talked
about fun stuff to get you excited. A first book on programming should be the
same, every chapter should present some tiny fun program and explain it. Is
there such a book? If not I might write it.

~~~
ericlavigne
SICP presents programming as something mystical and exciting, starting with
using a wizard for the front cover.

<http://mitpress.mit.edu/sicp/>

SICP was still written to be a college textbook, though, and is now more than
15 years old. I think there's room for another programming intro book. Let us
know how it goes :-)

------
tomh
Freshman year in high school, I was programming in BASIC on my very own IBM
PCjr. After a few programs, I set it aside (or so it seems now) until my
senior year, when I started programming in Pascal for an honors course which
they called Computer Math at the time.

What did I wish I knew at the time? That there were more fun languages to play
with other that BASIC and Pascal. Perl came about in 1987, for example, and I
wonder what might be if I started in on that language way back in the day.
Since you're already tuned into HN, I think you have that base covered.

Side note: the thing that made me think I was any good at programming was a
computer programming contest held by Dell Computers during my senior year. I
entered, and, while I didn't make #1, I did get in the top 10, which meant I
got to have lunch with Michael Dell in 1989.

------
charlesdm
I started off messing around in HTML when I was 10. A few months later I
decided that I wanted to have a dynamic websites so I moved to PHP & did a
whole lot of DB-related stuff - 'because it was cool'. Kept working on my PHP
skills and general tech skills until I was comfortable enough to do Desktop
coding and made some cool applications with VB6. Then later I moved into Java
and C/C++, LUA, Python, etc..

Low level programming being my main interest, but I love reading and working
in pretty much every language. Except for ActionScript!)

If you're interested in doing programming, I think the key element to having
the learning drive is to work on stuff that you like.

As for, what are some things that I wish I knew before I started. Well -
primarily being the fact that you can't learn everything there is to
programming.

~~~
transburgh
Why don't you like working in ActionScript?

------
a-priori
Age 6. My dad brought home a 386 IBM-PC so he could learn AutoCAD. My brother
and I somehow discovered QBASIC, played gorilla for a while, poked through
it's source code not understanding a thing but feeling like "this can't be too
hard".

My first attempt at writing a program?

    
    
      DRAW A DOOR

------
nathanmarz
1\. Started hacking the TI-82 in 7th grade while bored in math class. Moved on
to TI-89 in 9th grade, and then "graduated" to assembly language so I could
make better games. I then moved on to "real" computers with C++, which seemed
like an incredibly easy language after doing assembly!

2\. I personally found those years hacking around with the TI calcs not
knowing what the hell I was doing to be incredibly valuable. I think a lot of
people try to learn the "right way" of doing things by reading about "design
patterns", etc., but they never deeply understand the value of those ideas of
structuring programs. By just hacking a lot and making tons of mistakes, I
really learned the power of abstraction and how abstraction can be used or
mis-used.

------
araneae
No real advice, but I can tell you exactly what I did with very little
background (not that I'm any good at it.)

1\. Took a biology class that involved using matlab. Found the matlab part
more fun than the biology.

2\. Went through this course on my own one week:
<http://www.cs.cornell.edu/courses/cs1130/2009fa/index.html> At the time,
almost of the materials I needed to do the homework was online. I'm not sure
if that's still the case.

3\. Took a class in data structures and programming in java. I've never worked
so hard in my life.

4\. Profit! (Yeah... no :P) My current step 4 is downloading open source
projects I want to do something to (mostly in python) and futzing with them.

------
NathanKP
I got started with BASICA on a Tandy 1000. My dad had a newer computer at the
time but he certainly wouldn't let me use it. He was afraid that I would get
stuck in an endless loop while writing to the hard drive and wipe it (which he
had apparently done before in his own early programming experiments).

After a few years of playing around with BASIC as a ten year old I got my own
computer and from there it was BASIC -> Euphoria -> C++ -> HTML and JavaScript
-> PHP and MySQL -> and now my latest undertaking, nearly ten years later:
JSP.

Now I am more interested in web development, though I still have strong skills
in application development. It is a learning process, and a fun one at that.

------
RevRal
I'm not sure if this counts; the birth of my hacking started on my dad's lap,
doing amateur radio. We made our own radios with kits and parts from other
things, and setup our own antennae outside.

We even setup some crazy starmap printer, and I _think_ it worked through our
antennae. We didn't get a dish until much later.

At the very least I learned to master the fear of big manuals.

My programming, and my general interest in computers, was the natural
progression from that. I don't even remember the first programming language I
learned, but everything after that was easy. Learn one language and you learn
them all, I guess.

Taking things apart, reassembling, and creating is in my blood. Thanks dad.

------
Tichy
I suppose get excited about something you can do with computers. As a kid, it
excited me that I could influence what appears on the TV screen with my ZX
Spectrum. I programmed lots of stupid drawings and animations (animation as in
a character moving across the screen).

While it might seem as if my generation was privileged to grow up at the same
time that computers grew up, actually there have been several similar
situations since then.

A couple of years ago, there was a chance to influence what happens on your
mobile phone (with J2ME programming, or earlier more hardcore methods).
Recently, there is the mobile internet, or Twitter apps and social networking.

------
maxklein
I learnt the basics in high school, deepened my knowledge in college, did a
bunch of Microsoft Certification Courses to give myself professional
experience, and I attend 3-5 seminars a years to improve my knowledge and keep
me up to date.

Just kidding.

------
chasingsparks
I asked my father to teach me basic in 5th grade after seeing the movie
WarGames. My efforts were soon doubled after Angelina Jolie stared in Hackers.
Since then, everything I have done has been out of sheer curiosity, but I'd be
lying if I said these two pop culture movies had nothing to do with my initial
motivations.

(P.S. Jurassic Park I was on yesterday. "It's a Unix system." I couldn't help
but smile. I was 9 or so when that movie came out, and I remember thinking I
should get a Unix system.)

------
ashishk
I started coding during my Senior year in college. Roughly 1.5 years ago.

The reason? I outsourced dev for my first startup (which I started my Junior
year) and it failed miserably. Small fixes took days. Terrible freaking way to
start a startup.

Anyways I started with HTML/CSS then moved up to LAMP (yes I know rails is
awesome, but hey, I just started coding =)). Since my Senior year, I've
personall started and coded two startups, one of which raised angel money and
the other which may not need to.

------
pgbovine
unlike lots of people on HN, who are far more experienced hackers than i am, i
didn't start programming for fun until my senior year of college (i did a fair
amount of programming for classes and internships before then, but never on my
own personal projects). i was always into digital photography, so i took a
crack at making some online photo galleries using python and javascript.

they look pretty lame now that everything is ajax-ified and web 2.0 shiny, but
5 years ago they actually looked decent for the time period ;)

my advice for newbies is to not worry so much about what book or language you
want to learn, but rather to figure out one project you're truly interested in
creating, and then learn the technologies that are needed to create it. i had
some false starts back in middle/high school when i bought some programming
books with the intention of teaching myself programming ... sure, i learned
what a 'for' loop and 'if' statements were, but i never got any real traction
since there was no project that i was deeply interested in hacking on. if you
have a hobby project to drive you, then you'd be amazed at how fast you can
learn what's needed to hack on it. best of luck!

------
primodemus
1 - At school i tried to write a symbolic differentiation/integration program
in C. I failed miserably. A year later chapter 2 of SICP blown my head to a
thousand pieces... Nowadays I program in F#, Haskell and C# (mostly C#) for a
living, but Lisp is still my favorite language.

2 - Programming is mostly about understanding stuff, so don't be afraid to
tear thing aparts since it's ok to reinvent the wheel just to see how it's
done.

------
lallysingh
(1) For me, a Trash-80 and lots of spare time. But for you, find something
programmable that can help with your normal day-to-day life. Scheme, python,
or lisp are pretty good places to start.

(2) You don't really know a technology unless you have a project you want (
_want_ ) to finish. Before then, there's no motivation to go deeper.

------
_bryan_
I started programming in high school, with simple programs on the TI 81/82
calculator. I majored in computer science in college, where the focus was C
and C++.

I didn't really develop a passion for programming until I was out of college
and learned Python (and later Ruby). I really wish I had started with one of
those languages.

------
zaidf
5th grade. I'd just landed in the U.S. No friends. No life. Just a Mac and an
HTML book. I did what I could:)

------
pasbesoin
There are a few texts that are an order of magnitude more enlightening than
the remainder. Not (just) in terms of content, but in terms of explanation as
well as engagement.

It is well worth your time identifying and working with these. Not to be
snobbish; they are just so much more efficient, and enjoyable.

~~~
zikzikzik
Some examples?

------
tpyo
My father taught me when I was young. Learned a few languages by myself. Tried
making websites. Too easy. Tried making games. Too hard.

I stopped programming. Because I tried making games, programming is not for
me. Maybe if I was not so ambitious, it would've been.

I'll never know: I'm trying things other than programming.

------
d0m
The real thing that opened my mind was "Effective C++". Before that, I didn't
know how to code. This book showed me what a good code is and why it is
important. Then, from that time, I read alot of books and my personnal
favorite is SICP.

------
caryme
First my Geometry teacher taught how to write simple programs for our TI-83s.

Then in IB HL Math in 12th grade, my teacher decided to have "C++ Fridays".
After that, I entered college as a CS major (and vocal performance, but that
is another story).

------
mantas
I was gaming a LOT since I was ~5. Then I started playing with HTML when I was
~11 and naturally got into PHP and Javascript in a few years.

During that time, I ruun few warez sites and a free hosting company (which was
profitable!)

------
mszubart
I got started when I was 8 (in 1998). My friend bought polish magazine called
something like "Programming tutorial with Borland Delphi 2" and he pulled me
in this fun. And so began my bloody thirst for knowledge.

------
gigl
TI graphing calculator in 7th grade, followed by seeing one of my teacher's
web pages he made for the course. I decided I could do a better job so I
learned the basics of the web and bloomed out from there.

------
impeachgod
Yes! I read How to Design Programs when I was 13, and it turned my world
around. I then read Structure and Interpretation of Computer Programs, John
McCarthy's paper on Lisp, and the rest is history.

------
dejv
I was 8 at the time and find some C64 Basic manual writen in German (I don't
understand this language then and now) and I found some code so I retype it
into the computer and just instantly like it.

------
kajecounterhack
Open source development of a turn-based strategy game. I wish I knew how
addicting computers could be, and how much they demanded my entire devotion to
ever-changing technologies.

------
tlrobinson
TI graphing calculators got a bunch of people in my "generation" interested
(I'm 25). My first non-trivial program was snake in TI BASIC.

I think this generation's equivalent is probably iPhone.

~~~
Miky
What's sad about that is that the iPhone is a lot harder to develop for, so it
will get a lot less people interested. Rather than just opening up the
"iPhone-Basic" app and fiddling around for a bit with an exceedingly simple
and easy-to-learn language, you have you get a Mac, get registered, get XCode,
and spend quite a while learning Objective-C and Cocoa, and to actually draw
anything on the screen, probably OpenGL ES as well.

~~~
Jgrubb
iPhone is what got me interested. I bought a Mac, one of the best moves I've
ever made, and dove in. The learning curve was almost insurmountably steep,
and in the two years since I've found web programming to be a much better use
of my time. You can build an iPhone app, but what are you going to connect it
to? For me a website, but how do you build a website? The meandering process
has been a lot of fun, but I don't know how one could start with iPhone
programming. By the way, I'm 31.

------
onassar
Frontpage > JavaScript scriptlets > PHP > MySQL > Apache > OO Coding > MVC
Based Coding > Digg FE Developer :)

------
gtani
i was working at a smallish financial institution, they asked anybody who
doesn't want to do databases and unix shell scripting, step back!

So my first languages were APL, C, awk and a few 4GL databases, oracle, nomad.

Now, i would start with ruby and python, then look at erlang, clojure, scala,
haskell, ocaml, F#. i.e. lots of FP

------
protez
What made you think that you need to learn something about them? No method is
goal-independent.

------
dougp
I got started when I learned you could program a TI 83

------
Apreche
LOGO on an Apple 2 in Kindergarten

------
macco
What I learned: If you self teaching, start with Python. Period. Then later
read htdp.

------
shareme
Google search for CircuitGirl..

You should email her ask for a retelling of her story..

