
The Hacker's Path - blhack
http://krainboltgreene.github.com/l/2/
======
gfodor
Meh, I dunno. This list isn't really that great. It's good if your goal is to
learn as many programming languages as you can, but it's sorely lacking
fundamentals. (Even considering the theory books, which are pretty all over
the place.)

My list would definitely include more books around software architecture,
system design, algorithms, data structures, and different _domains_ of
software like computer graphics, machine learning, databases, embedded
systems, simulation/games, audio/video, and so on.

~~~
iuguy
I would agree. Some of the books I'd highly recommend for anyone looking to be
a well-rounded hacker:

* TCP/IP Illiustrated (Volumes 1,2 & 3) - W. Richard Stephens

* The Web Application Hacker's Handbook - Stuttard, Pinto et al

* The Shellcoder's Handbook - Kozoil, Aitel et al

* The Cuckoo's Egg - Clifford Stoll

* Neuromancer - William Gibson

* ARM System-on-chip Architecture - Stephen B. Furber

* Operating Systems Design & Implementation - Tanenbaum

* The Design and Implementation of the FreeBSD Operating System - McKusick, Neville-Neil

These are just a few, and I'm sure there's plenty of others, even better ones.
But to truly round yourself out you need to know more than programming a few
languages - you need to know the low-level end of things and the high-level
view of the world.

~~~
Seth_Kriticos
I'd add (from my bookshelf):

* K&R: The C Programming Language (second edition)

* Unix Power Tools

* Advanced programming in the UNIX Environment (second edition)

* OpenGL (Redbook, Bluebook, Superbible)

~~~
iuguy
Good god yes, how could I forget Advance programming in the Unix environment.
Awesome book.

------
p_nathan
Nah.

Sorry man, but this list is so tilted towards the web-app world it's more than
a bit ridiculous.

For an genuinely deep understanding, start at the gate/transistor level and
move up the stack. Here is a list which will hit major portions of what one
needs to know (yet leave infuriating gaps).

Digital Design and Computer Architecture by Money and Harris is very readable.

Structure and Interpretation of Computer Programs is _the_ classic intro text.

The C Programming Language

The C++ Programming Language

On Lisp by Paul Graham.

Algorithms by Baase

Code Complete by McConnell.

AI by Norvig.

This list isn't about the latest sexy languages or technologies. This is about
timeless principles and how things really work... _Yet_ there is much more to
be said after the fundamentals are understood - garbage collection, virtual
machines, modern cpu design, modern type system design, networks, concurrency
- the list doesn't end for a while.

Web apps are great, and I think they represent "The Computer" to many humans.
But they represent a only a fraction of computer experience and existence. The
Master must understand the principles of it all.

~~~
rcfox
You can't _start_ at the transistor level. You'd have to learn about circuit
theory first. Besides, the math involved with transistors (even in large-
signal analysis) is too disconnected from code to be starting there.

It's like saying, "To learn to be a manager, start at the neural level." It's
the emergent behaviour that you're really interested in.

------
xpaulbettsx
Disappointed to see "Teh Womenz" on there - is it so inconceivable that
someone wanting to be a hacker _is_ a woman? Or not into women?

Obviously the author is tongue-in-cheek, but it's indicative of a wider
culture, where hackers are telling women, 'You don't belong.'

~~~
noname123
Nah, I think what the author meant is learning pick up skills. That's one
thing I'm really disappointed about the HN in general is that people don't
necessarily branch outside of computers and break the nice guy-politically
correct-nerdy stereotype. Awhile back there was that whole "lifehack"
movement, but even that was preaching to the choir about "productivity hacks"
and being generally PC. Once, hacking was about infiltration, social
engineering, alternative culture and breaking conventions in any field; but
now it's being reduced to getting paid and "making a difference" in the world.

~~~
chunkbot
I used to think the same thing about people here on HN, but I realized that a
lot of accounts are tied to peoples' real names (and professional lives). So
there's a filter that keeps people from discussing anything outside of
politically-correct, nice-guy stereotypical talking points. But if you went
"off-the-record", you'd probably find quite a few men open up about things
like PUA techniques.

~~~
bluekite2000
Why say so? You found pua's here? That d be shocking.

~~~
steveklabnik
PUA meant a lot to me at one time. I was much more of a theorist than anything
else, but it really helped me get through some bad times and back into success
with women.

~~~
bluekite2000
how did pua help you through bad times when u were just a theorist? please
clarify

~~~
steveklabnik
I'm not 100% sure why you've been downvoted, I'm guessing it's the grammar.
I've voted you up for asking a good question.

Like almost everyone, I had a fairly bad breakup once. I was basically
engaged, we would have been except she wanted me to wait 'till after college
to ask. Then one day, she left me. For one of my close friends. It was bad. I
was real fucked up about it. I had sort of built everything up around our
relationship, so it pretty much wrecked most of my plans.

As I tried (and failed) at getting another girlfriend, failure leads to lack
of confidence, which makes it harder to attract women, which leads to failure,
and the cycle continues. What PUA did for me was make me realize that I had
the rules of the game wrong. I was really angry that I was 'doing everything
right' and it still wasn't working out, until I realized that it wasn't that I
was an unworthy dude, I was just playing by the wrong rules. Of course using
the wrong ruleset leads to failure. It wasn't my fault, really, it was that I
was being a bit naive. So while I wasn't hardcore following the PUA ruleset,
it helped increase my self esteem a great deal, which naturally meant I was
better. Eventually, success. Though PUA almost screwed that up, but that's
another story...

------
steveklabnik
For emphasis:

> There are guys out there who will argue about different tools/methods in a
> religious fervor. Pay attention to the people who get things done, break new
> ground, or get you pumped.

It's so easy to get sucked into endless debates. Do stuff instead.

~~~
blhack
I bring it up a lot, I promise I'm not trying to spam the site or something
like that, but I think _every single geek_ needs to read
<http://lesswrong.com/lw/154/why_real_men_wear_pink/>

(Why Real Men Wear Pink).

I can't tell you how many stupid pointless debates I've gotten into with
people about this language vs that language vs this editor vs that editor vs
linux vs openBSD vs gpl vs BSD vs MIT vs vs vs vs vs

SHUT UP! I'm telling this to myself too because as I said, _I've_ participated
in the discussions, but this type of stuff is almost completely pointless. A
hacker friend of mine _hates_ the arduino board. Isn't real computing. Isn't
real programming. It's a toy. It's STUPID!

Stupid? People are building stuff. Who cares if the board has a bunch of stuff
that they don't need. They're going to take the toaster apart in a week and
repurpose it as a kegerator controller, or a droneduino, or a christmas light
controller, or a...whatever.

Sorry, I'm getting ranty, but I really, really hate this type of stuff and I
find myself having to defend the position of "who f!cking CARES?!" pretty
often.

One argument I got into recently was with somebody who insisted that people
who can't or don't do manual memory management aren't _real_ programmers.
Python isn't a _real_ language and nobody really uses it in production.
/facepalm

Just shut up and code/build. If it doesn't work, take it apart and build it
again.

~~~
pronoiac
_A hacker friend of mine hates the arduino board._

There are some benefits of working with hardware, even if it's just toys: it's
far more accessible to non-geeks, & if it stops working, you can give it a
_smack_ & feel better.

~~~
blasdel
But Arduino isn't hardware in that sense — it's a shitty microcontroller
rebranded as a standard building block. _It's software!_

The thing that chaps our asses is that it's almost exclusively used where a
simple circuit would have done fine, often boiling down to being just a 555
timer or a parallel port breakout box.

~~~
follower
> The thing that chaps our asses is that it's almost exclusively used where a
> simple circuit would have done fine, often boiling down to being just a 555
> timer or a parallel port breakout box.

So what's been lacking in the nearly 40 years since the 555 was created that
it's taken until now to get some of the people who are now working with
electronics to get started? (Aside from needing to be born. :) )

Your definition of "simple circuit" is probably different from the majority of
the world.

And you're correct that the majority of what makes the Arduino what it is, is
software. I describe it as being popular with software people because it took
what used to be a 100% hardware problem (your 555 timer "simple circuit") and
turned it into a 90% software/10% hardware problem.

The Arduino has got more people into creating tangible electronic devices that
operate in the real world--I think that's a good thing--who cares if they
don't know what Kirchhoff's circuit laws are before they get something that
works.

------
phugoid
This is distasteful. Every tech geek on the planet is trying to sound
authoritative; I get that. Everyone wants to present themselves as a master of
some sort. But self-praise is no praise.

The Hacker's Path? To write such an article, you have to basically call
yourself a hacker, and good enough to know _the_ path and to inspire others to
follow you. Hubris.

Most of us have mastered a few things, and are trying new things regularly.
We're all beginners, we're all masters.

~~~
khafra
Caminante, no hay camino / Se hace camino al andar

The indefinite article would've been a more appropriate choice for the title,
but that's true of any generalization.

------
jpwagner
Son: hey dad, can I borrow some money?

Dad: son you're going to have to learn how to be "Gettin' Paid, Makin' Money."
here's the best C programming book i know.

Son: thanks dad. how much can i get for it?

Dad: uhhhh...

------
keyle
"Gettin' Paid, Makin' Money" ... Where is C# and .NET?

I mean if you're after money, that's where it is. I definitely earn a lot more
as a WPF/Silveright developer than any PHP gig I've found.

Sorry if I upset some people, I'm not techno-racist. I just go with the flow,
and MSFT gave me the lifestyle.

~~~
krainboltgreene
Suggest some books then! Those aren't fields I'm very familiar with so I went
with what seemed most valuable.

~~~
jasonkester
Can't.

The crux of working inside the .NET ecosystem is that you need to ignore
roughly 90% of it if you want to build anything complicated. Specifically, you
have to ignore the 90% of .NET that you'll learn in "Teach Yourself To Build
Terrible Intranet Websites with ASP.NET in 21 days".

Those books will tell you about how to drag and drop controls onto a page.
Don't do that. They'll tell you about all these cool <ASP:whetever> rich
usercontrols. Don't use those (except Repeater and Literal). They'll tell you
about Ajax.NET. Definitely don't use that. They'll tell you about the terrible
built in ORM garbage that's lurking in VS.NET that you absolutely need to stay
away from if you want your thing to stand up in the face of traffic.

Nobody has yet written the book that teaches you the parts of ASP.NET to use.
It's a shame, since most of us have stumbled across the same set of amazingly
powerful libraries on our own, and are building really cool stuff with them.
But nobody has published that list.

Maybe when I get some time I'll do so. Until then, you're going to need to
learn .NET by using it. Stay away from anything you can accomplish with
wizards or by drag/drop, and you'll do OK.

~~~
sofuture
I'm constantly trying to determine what it is that's wrong with .Net (aside
from the politics) -- and I think you might have nailed it -- it might be as
simple as 'design view' and all the 'built-in stuff you should never use that
looks really tempting/easy'.

That's today's guess anyway.

Such a great language (C#) and platform... while there are certainly healthy
parts of the ecosystem/community, a huge chunk of it (majority even?) is crap,
which is a shame.

------
onan_barbarian
Random and inane, and by its very nature, involves a bunch of name-checking of
works that the person obviously hasn't read: "Oooh, the Dragon Book, everyone
says that's awesome, so I better put it on there". If you were enough of a
middleweight to have read the Dragon Book the rest of the list wouldn't be so
bizarre and randomly chosen.

It's not even good quality name-checking where people at least pretend to have
read Knuth or SICP or HAKMEM or whatever.

------
Osmose
These types of articles always give lists of books to read. I understand how
important reading books are, but I've almost never been able to read a book
about programming and get anything useful out of it; my brain just doesn't
retain knowledge (only book that has come close is Head First Design patterns,
but that book was _trying_ to help me retain).

Most of what I've learned come from articles on HN, reading source code,
classes in school, and my own experience in both personal and work projects.

How do I overcome this? Or do I even have to?

~~~
dm3
Try to work with books which have exercises - such as "Structure and
Interpretation of Computer Programs" (<http://mitpress.mit.edu/sicp/full-
text/book/book.html>), "Introduction to Theory of Computation"
([http://www.amazon.com/Introduction-Theory-Computation-
Michae...](http://www.amazon.com/Introduction-Theory-Computation-Michael-
Sipser/dp/0534950973/ref=dp_ob_title_bk)) or "How To Design Programs"
(<http://www.htdp.org/>).

Keyword here is _work_.

------
mtalantikite
I'd suggest to newcomers to get into the habit of reading source code. Pick
some of the prominent projects written in the language you're studying, and
spend some time figuring out how things work. You'll learn a lot.

~~~
jpitz
It is hard to overstate how important this is.

Read. A lot. A lot a lot a lot.

Learn how good projects approach things like testing and error handling. Look
at how well documented and easy to read the code is. Any clever idiot can
write clever code; the kind of coder people want to hire are fastidious about
making sure other people can read and grok their work.

------
spacemanaki
Why Ruby AND Python? I understand why either one would be a good first
language, but both? Wouldn't that just confuse someone who is genuinely just
starting out?

~~~
mechanical_fish
And I love _why's book to death, but trying to _learn programming_ from _Why's
Poignant Guide to Ruby (with Cartoon Foxes)_ is like trying to learn to play
guitar by listening to Jimi Hendrix records while stoned.

If you're capable of learning to program from the _Poignant Guide_ you
certainly don't need an exhaustive guide on how to be a hacker. You're going
to be able to figure it out on your own.

------
catechu
While anything that brings more talent into the programming world is a good
thing, I find it disappointing when I see such lists encourage cursory
understanding like this. While it does have a section on "Becoming the
Master", I think that prefacing the section with "[i]f you're still yearning
for more" doesn't have the normative force I find in similar but more
inspiring works such as Raymond's "How to Become a Hacker."

Personally, reading the following in Raymond's essay many years ago impressed
me with the importance of mastery and motivated much of my attitude toward
programming:

"Learning to program is like learning to write good natural language. The best
way to do it is to read some stuff written by masters of the form, write some
things yourself, read a lot more, write a little more, read a lot more, write
some more ... and repeat until your writing begins to develop the kind of
strength and economy you see in your models."

The focus on mastery is critical to any hacker's path, in my opinion -- it is
not an option.

That said, kudos on encouraging more hackery. :)

------
kmfrk
A great guide. I'd mention some minor things, but I love the brevity of it,
and I think squabbling over details would ruin it.

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

------
RyanMcGreal
One quibble:

> You need to be doing 5 things every day:

The essay goes on to list eight things. Even if you collapse the three
instances of "Hacking" into one, that's still six.

------
krainboltgreene
I didn't expect for this to make it this high in HN. I certainly didn't see it
as worthy of much discussion.

I'm going to take a weekend (Or a few nights) to go over these comments and
make improvements where I can. Especially the books! I've got to read these to
make sure I'm not adding any old boring thing :)

------
harlowja
Teh Womenz should be higher up, haha.

~~~
blhack
I think you're half joking, but you're 100% right. I think it's really
important to maintain a balance between hacking and a healthy social life, but
not just because going out for drinks and laughs is fun.

It's important to spend time with people who _aren't_ hackers because, a lot
of times, you're building stuff for people who aren't hackers.

Gabriel Weinberg (Duck Duck Go founder, cool freaking guy IMHO) posted a list
here a while ago of projects that he had started that he considered failures.
One of these things was a photo-sharing service wherein users simply emailed
pictures to an address if they wanted to share them.

This is brilliant, I don't know why it never caught on. This is also the type
of thing that my hacker friends and I would _never_ have come up with. If I
want to share a photo, I'll just scp it to a webserver and send you a link.
Email it? That seems awfully cumbersome!

Not to my mom it wouldn't.

Obviously the big reason to keep a social life is because it's fun, friends
are friends. I guess what I mean is that it's important to not think like a
hacker sometimes.

~~~
jpwagner
I get your point but " _...it's important to not think like a hacker
sometimes_ " made me chuckle because it implies that a hacker misses obvious
things.

~~~
chipsy
Well, they do. That's the consequence of knowing something. Because you are
"literate" in solutions based on reusing prior working knowledge(as in the
"host photos on own web server" solution) you will fail to see a problem for
the tech-illiterate layperson.

This has some crossover with the "tech-elitist" trap as well. The intense
focus of writing software tends to make people forget about a well-rounded
life - and the more you are involved with computers instead of people, the
more likely you are to look down upon people who cannot live in the computer
world.

------
michaelleland
Where do HTML/CSS fall? Are they unimportant or so important that they are
considered obvious?

~~~
krainboltgreene
I've yet to find any good, modern, sources of learning HTML and CSS. No one
should follow this to the word, so that learning would happen in phase 2.

Also, if you're learning Ruby, Python, and eventually JS you're going to have
to pick up HTML and CSS on the side.

~~~
knieveltech
<http://w3schools.com/> does a good job of providing tools and tutorials for
picking up HTML, CSS and a host of other technologies.

~~~
blasdel
w3schools is the single worst 'developer' site on the entire web. The very
worst. If there was a single site I would have delisted from google, purged
from caches, and it's maintainer burned at the stake, this is it. I'd settle
for him just having his PageRank taken out back and shot.

It's composed entirely of mangled versions of ancient official documentation,
corrupted with hearsay, riddled with content-styled ads, and scummily trading
on the name of the bureaucrats that attempt to be authoritative on the whole
mess. Every single example he provides manages to be a horrifying
implementation of 'worst practice'.

<http://www.quirksmode.org/compatibility.html> is the browser reference you
want.

For backend stuff, go to the upstream developers, not some bullshit artist
that's manage to paraphrase and SEO his way to being king of the shitpile.

~~~
knieveltech
I suppose I'll risk further downvoting and respond here. I don't disagree with
any particular point you've made except one: it isn't a developer site.

A developer (read anyone with sufficient technical background and experience
to actually write code) doesn't need or want the kind of shit that site is
peddling. But for someone with zero technical background the site actually
does a pretty good job of providing enough of an introduction for someone to
get a toehold on the material.

------
stone_wei
This list is only focus on programming languages and they are lacking
fundamentals.

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

~~~
krainboltgreene
While I appreciate his effort, I always felt like that page was a bit
too...ideologically stamped. Later on he writes things like:

    
    
        Q: I've been cracked. Will you help me fend off 
        further attacks?
    
        A: No. Every time I've been asked this question 
        so far, it's been from some poor sap running Microsoft
        Windows. It is not possible to effectively secure 
        Windows systems against crack attacks; the code and
        architecture simply have too many flaws, which makes
        securing Windows like trying to bail out a boat with
        a sieve. The only reliable prevention starts with 
        switching to Linux or some other operating system that 
        is designed to at least be capable of security.
    

I don't think that's appropriate, or really needed. I mean sure, even my post
is opinionated, but you don't see me telling someone they're an idiot because
they don't understand something.

~~~
elemeno
While I don't disagree with you that ESR has a strong ideological tilt, it's
also useful to remember that he wrote that quite a long time ago now, when
that effectively =was= true.

Going back to the subject at hand, I think that the post misses the point that
being a 'hacker' isn't really about how many languages you know, it's about
certain ways of thinking. The most important, IMO, things to know are all
(fairly) language agnostic - algorithms and data structures. If you don't
understand those and how they work and how to choose between them, then you're
never going to be really good at what you do.

Also, you need to learn a functional language well enough that you can solve
hard problems using it. Understanding functional programming and all the
concepts it introduces (partial evaluation, currying, monads, first class
functions, map/reduce to name a few) will do wonders for how you write code in
other languages and will make the code you write far cleaner and more readable
and easier to extend afterwards.

------
dheerosaur
"Becoming The Master" section seems to be missing some good texts like SICP,
HTDP. They are freely available as well.

------
whalesalad
Oh man I can't believe that the author wrote "iTouch" -- makes me cringe.

------
mambodog
So... is this supposed to be a parody?

------
ygd
Why do we need a Linux server?

~~~
krainboltgreene
So you can (later in the game) better understand the foundation of your
programming. This "list" has a heavy lean on web applications because they're
popular, having a web app means (eventually) having a server.

------
dytrivedi
Where's Gödel, Escher, Bach?

------
eddieparker
Idiot. Won't let me view it with the browser installed on this system!
Disables the back button!

~~~
krainboltgreene
Yeah, I'm really sorry about that, I meant to transfer that to the routes
logic but this as a surprise. Very very few people read my log, never thought
it'd be that big a deal to shunt explorer users to a browser page. :(

~~~
memoryfault
You are not an idiot...but it is annoying. Are all the IE's displaying it
incorrectly, including IE9? I'm using IE9 beta and pretty happy with it. Makes
me sad that I can't view your page :)

~~~
krainboltgreene
Yeah, I just threw out the general agent string. This was before IE9 was
something that looked rather nice.

Consider me shamed and learned!

------
coolgeek
"avoid anything that requires a server like MySQL"

 _plonk_

