
What is your recommended beginner's hacker training course? - CYCY

======
SwellJoe
As others have said, start writing code, immediately. I mean right now. Like,
this second. Stop reading right here. Open a programming tutorial website and
start coding.

I mentioned ADUni above. It's a great way to spend part of your first six
months of learning. I've been a hacker since I was eight (I went the Commodore
64 route someone else mentioned starting in 1981, but I don't recommend that
path for anyone...Open Source and modern languages provide a far better
learning experience...hell, I didn't see C until I got an Amiga in '88 and
didn't see Scheme until I started using Linux in '95...there's never been a
better time to learn software development), and I still found several things
to learn from the coursework.

Find and download an Open Source project that does something you find
interesting, and figure it out. Add a feature. A small one. Get it accepted by
the developers. This will teach you a lot of skills you absolutely must have
that aren't "programming": Revision control (because you'll need to work on
the SVN or CVS or bzr or monotone version of the software in question), making
patches (use "diff -u" for single-file changes or "diff -uNr" for whole
directory changes), and communicating with other developers (you need a co-
founder who is a stronger hacker than you, and you need for him or her to not
be infuriated by the way you communicate with them...Open Source folks are
generally happy to help if you're doing something useful for their project).

Notice I haven't mentioned any languages here. They're not irrelevant, but
close to it. Some languages are better learning languages than others (Python,
Ruby, PLT Scheme, which are all interactive and very clean), but if you can't
see how to get started making something useful (almost) right away due to
language choice, pick something else. All of the stuff you learn in the next
few weeks is going to apply equally to pretty much all languages. If you do
SICP, plus start working on some open source project (maybe in Ruby, Python,
Perl, or PHP), you'll get to the meaty stuff right away.

Avoid hard problems (for now). Don't learn Java (you might make an exception
for the ADUni Java courses--they teach programming and it just happens to use
Java as the language, but it's way too easy to get mired in the minutiae of
Java). Don't learn C. Don't learn Common Lisp. Don't learn edge cases in Perl
or PHP (just the ones used in the Open Source projects you've picked to work
on). Don't get bogged down reading standards documentation.

Do learn good tools. vim, emacs, or Eclipse. If you use a Mac, maybe TextMate.
There is no other editor you should waste your time on, if you're in a hurry.
Later on, you can flit between some of the others, if you feel dissatisfied
with what you've landed on. Learn to use the UNIX command line tools, as you
need them when you need them, to make yourself more productive. If ever you
find yourself wishing there were an automated way to do something to several
files (and you will), just remember that there is a UNIX tool that can do that
for you (maybe sed, maybe awk, maybe perl, maybe grep, maybe diff, maybe
patch), and set out to find what it is and how to use it. (Not using UNIX?
mingw or Cygwin can help.)

Let me re-iterate something...if you're in a hurry, you must write a few lines
of code today. Writing code is the single most useful thing you can do in
learning to code.

Oh, yeah, for JavaScript, you cannot beat Douglas Crockford's awe-inspiring
JavaScript videos at the Yahoo Developer Network.

~~~
pc
s/DLT Scheme/PLT Scheme

~~~
SwellJoe
Quite right. Thanks for noticing. Fixed.

------
coolnewtoy
<http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-
Science/6-171Fall2003/CourseHome/index.htm>

Philip Greenspun described this course as "how to build Amazon.com all by
yourself"

the textbook is available on amazon here:

<http://www.amazon.com/exec/obidos/ASIN/0262511916/pgreenspun-20>

The curriculum is not language specific so you'll also need a book on Lisp,
Ruby-on-Rails, IIS/ASP.NET, Apache/Tomcat/Java, or whatever is your choice of
technology.

------
prafulmathur
Just start programming in anything really (except PHP, since you may learn
some bad habits). Make something you want (i.e. it could be as simple as a
greasemonkey script for FF/UserJS for Opera/GreaseMonkIE [or equivalent] for
IE). Then try to see if you can program it in a better way and continue to
refine it as much as you can.

Ultimately, you're going to learn that writing solid tests are equally, if not
moreso, important as writing solid code. They help you determine the root
problem, so I suggest just writing some code and learning how to properly test
it. Also, test everything! I was coding a project and I think without a proper
test suite (I made) and a debugger I would have never finished.

Professor Felleisen taught us a design recipe:
<http://www.ccs.neu.edu/home/matthias/211-f06/Assignments/recipe.html> and it
works really well, it ensures a structured and organized code that is easy to
maintain down the road.

------
eli
I can't believe nobody suggested _why's awesome new beginner Ruby environment:

<http://hacketyhack.net/>

~~~
Sam_Odio
And there's also the poignant guide: <http://poignantguide.net/ruby/>

------
reitzensteinm
As much as I think SwellJoe has nailed the answer to this question, I can't
help but think I disagree with the premise. If you've never coded before, I
would suggest that you ask yourself a very difficult question - how do you
know that you want to become a great hacker?

Now, I don't consider myself a great hacker (I honestly don't know how good I
am, and I question anyone that would tell you otherwise), but I do believe I
know a bit about how I learned and can offer some advice.

Follow your natural curiosity, step by step. That's it. If you have questions,
answer them. If you wonder how is done, try to build it or create it yourself
and find out - if you can't do it yet, pick off a smaller piece of the problem
you're interested in. If there's some assertion in a field that you disagree
with, try to prove it wrong, because either you'll learn that you're wrong
(likely) or you'll contribute something to the field (unlikely, but possible).
Either way you win.

But the key here is, just follow your curiosity _wherever_ it goes. It won't
necessarily be towards becoming a hacker. If you find yourself delaying code
that you know needs to be written in your plan to become a hacker by slacking
off and reading up on organic chemistry all day, then that's not actually
slacking off - that's telling you something.

I don't think there are many people on this planet that can truly be great at
more than one thing. Feynman was, for instance, but I don't think I've ever
met anyone in person. If you find yourself trying to become a hacker as a 'day
job' but you do rocket science for fun, well, I'm sorry, but chances are you'd
make a great rocket scientist but a lousy hacker and you're going against your
own nature to try to become what you aren't.

But the key thing about simply following your curiosity is that you'll end up
finding something that you are good at, you enjoy, and if you're at all smart
you'll eventually become world class at it. If you are right about wanting to
be a hacker, you will get there! You may have to have a day job while you
figure out what you really want to become, but there are worse things.

Sorry, I'm ranting a bit... but I hope this helps.

------
CYCY
What is the fastest way to learn "hacking" to a reasonable level such that you
can apply for YC?

Of course, you need a product/idea to apply, but what will be the fastest way
to acquire the necessary skill such that you can build a reasonably good
product / to actualize your idea? Finding a hacker co-founder is a shortcut
but it is not considered an answer here.

I want to have a full schedule, e.g. firstly read this book, finish all the
exercise in it, then secondly you read a certain website, and so on, etc. Of
course there will be no limit to learn, but I am asking for a minimum
requirement. Something like a curriculum.

~~~
abstractbill
I'd start with the video lectures of SICP:

<http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/>

After that you'd probably want to learn some web stuff like html, css and
javascript. You can pick these up by looking at the sources of other peoples'
pages, and by using w3schools:

<http://www.w3schools.com/>

Good luck!

~~~
busy_beaver
As a second source (it's sometimes helpful to hear material from more than one
perspective), UC Berkeley has some podcasts from a Scheme course which uses
SICP:

<http://webcast.berkeley.edu/course_details.php?seriesid=1906978270>

I listened to a few of them a while back, just to check them out. Not bad, if
you can ignore the lecturer's occasional side-trip into politics (well, it IS
Berkeley).

------
cwilbur
If you mean hacker in the traditional sense, I'm not so sure you can learn to
be a hacker. It's an attitude of mind that makes you want to take things apart
to see how they work, and then try to see if you can put them back together
again better. If you have that mindset, play with a computer, and you'll learn
enough on your own just by following what interests you. If you don't have
that curious mindset, try to develop it; it's the hardest part of the hacker
nature, but also one of the essential ones.

If you mean "competent programmer," then the best route that way is a _good_
computer science degree (which will teach you mainly theory) followed by a job
programming (which will teach you how to apply the theory). Both the theory
and the application of the theory are important; vocational-training computer
courses that teach the application often omit the theory altogether.

Hackers can benefit from formal education, too. The important thing is
understanding how things work, not that you discovered them on your own.
Learning by reading and by observing is as valuable as learning by doing; and
the computer world has an endless stream of good examples of what NOT to do.

------
jdavid
i think hacking is a state of mind, and not a learned skill.

hackers, entrepreneurs and artists have a certain "what if" personality that
leads to a never ending quest to answer these questions, they are usually very
personal questions of curiosity. The quest to see the result is often more fun
than the result itself for these people, it's about the process of discovery
and exploration, and not about the answer. A runner runs a marathon because it
is ultimately fun to train for one, not because the need to go 26 miles. A
hacker is the same way, we just find it fun to hack, to explore.

If you want to know what quests other hackers are on, you can always go to
defcon in las vegas during the 1st weekend in august. Defcon is more like an
art gallery of hacks, than it is a place to learn how to hack, that comes in
from an inner desire.

------
litepost
Academy X is San Francisco is good: <http://www.academyx.com/>

(This concept should be franchised.)

------
tim
the top ten courses first:

<http://www.lecturefox.com/computerscience/>

------
iamelgringo
Eric Raymond answered this question a while back:

<http://www.catb.org/~esr/faqs/hacker-howto.html>

It's not a quick process. It takes time to learn enough to do anything
interesting with programming. A lot of time and dedication.

------
rokhayakebe
TAKE CLASSES AT A COMMUNITY COLLEGE.

You might be able to teach yourself from a book, but that only works for a
very few people (ususally those who are trying to learn a new language rather
than someone with no experience). I tried to teach myself some SQL (with no
database or programming experience), it didn't work. After 6hours/week for 4
weeks at school, I was doing ok. Heck that was 3 months ago, and it has
tremendously helped me. Now, I am looking into a taking some java classes at a
technical school. The classes are cheap and you will get more than the
fundamentals in 2 months. The rest will come as you practice and work along
side a developer on your project.

~~~
timg
I personally volunteer to mentor anyone who is desperate enough to take this
path.

