top | item 2002602

The Hacker's Path

168 points| blhack | 15 years ago |krainboltgreene.github.com | reply

92 comments

order
[+] gfodor|15 years ago|reply
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.

[+] _b8r0|15 years ago|reply
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.

[+] aaronblohowiak|15 years ago|reply
Starting with Ruby is an interesting way to learn programming.

I started with LOGO. I made that turtle DANCE! ;) Okay, well, maybe not. But it did give me a solid foundation that the computer is a robot that follows the commands.

I fear that languages with too many features (objects? classes? blocks!?!?) confuse the heck out of the new programmer.

My main objection to learning high-level languages first (or low level languages for that matter,) is that effectively debugging the language requires understanding concepts that are beyond your zone of proximal development.

[+] emzo|15 years ago|reply
I know this is a very difficult question, but if you could choose only one book to convey the main ideas in each of those four areas you mention (software architecture, system design, algorithms, data structures), what would they be? I ask because I'm looking to buy some good books on the subjects.
[+] krainboltgreene|15 years ago|reply
This isn't definitive, but it is focused on web development. Please suggest some books :)
[+] p_nathan|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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.
[+] archangel_one|15 years ago|reply
I thought it was supposed to be tongue-in-cheek - I didn't take "Drinking Heavily" entirely to heart either.
[+] miah_|15 years ago|reply
Agreed. I think the author should have just written it as "learn to date". I think learning to date is harder than any programming language and saying it that way leaves it open to the readers sexual preferences.
[+] rmc|15 years ago|reply
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?

Agreed. A better wording would be "Don't forget to develop romantic/sexual relationships with other people, don't spend all your time in front of a computer"

[+] wyclif|15 years ago|reply
You are taking him way, way too seriously. I think anyone with a wife or girlfriend knew what he meant.
[+] krainboltgreene|15 years ago|reply
HA but you're assuming a hacker woman is /straight/. Mybe I only want lesbians in my culture >:(
[+] dnsworks|15 years ago|reply
Our community is filled with sexists, that's just how it is. The reason there are no women in tech is because we're all misogynistic assholes. Devops community, point in case. Every time I see a programmer or a sysadmin refer to women or their employees as "bitches", I put a note, "Never hire this lawsuit waiting to happen" into my addressbook entry for them.
[+] steveklabnik|15 years ago|reply
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|15 years ago|reply
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.

[+] phugoid|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
"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|15 years ago|reply
Suggest some books then! Those aren't fields I'm very familiar with so I went with what seemed most valuable.
[+] onan_barbarian|15 years ago|reply
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|15 years ago|reply
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?

[+] aaronblohowiak|15 years ago|reply
There are different learning styles. For some (lucky) people, reading it in a book is enough. For you, that may not be enough. If it isn't, then you need to learn how to teach yourself. The book is there to provide technical insight. It is up to you to turn the information into a curriculum that you assign yourself -- little projects or scratch coding things (weekend hacks) that you can do to test out the technique, strategy or technology.
[+] mtalantikite|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
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.
[+] RyanMcGreal|15 years ago|reply
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|15 years ago|reply
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|15 years ago|reply
Teh Womenz should be higher up, haha.
[+] blhack|15 years ago|reply
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.

[+] michaelleland|15 years ago|reply
Where do HTML/CSS fall? Are they unimportant or so important that they are considered obvious?
[+] krainboltgreene|15 years ago|reply
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.

[+] stone_wei|15 years ago|reply
This list is only focus on programming languages and they are lacking fundamentals.
[+] dimm|15 years ago|reply
[+] krainboltgreene|15 years ago|reply
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.