The hacker attitude is vital, but skills are even more vital. Attitude is no substitute for competence, and there's a certain
basic toolkit of skills which you have to have before any hacker will dream of calling you one.
This toolkit changes slowly over time as technology creates new skills and makes old ones obsolete. For example, it used to
include programming in machine language, and didn't until recently involve HTML. But right now it pretty clearly includes
>>1. Learn how to program.
This, of course, is the fundamental hacking skill. If you don't know any computer languages, I recommend starting with Python.
It is cleanly designed, well documented, and relatively kind to beginners. Despite being a good first language, it is not
just a toy; it is very powerful and flexible and well suited for large projects. I have written a more detailed evaluation
of Python. Good tutorials are available at the Python web site.
Java is also a good language for learning to program in. It is more difficult than Python, but produces faster code than Python.
I think it makes an excellent second language. Unfortunately, Sun's reference implementation is still proprietary. This is
not so much an issue with the Java language itself, as high-quality open-source Java interpreters are readily available; the
real problem is the class libraries that travel with the language. The open-source class libraries lag behind Sun's. So, if
you do choose to learn Java, do it with one of the open-source implementations rather than becoming dependent on Sun's proprietary
But be aware that you won't reach the skill level of a hacker or even merely a programmer if you only know one or two languages;
you need to learn how to think about programming problems in a general way, independent of any one language. To be a real
hacker, you need to get to the point where you can learn a new language in days by relating what's in the manual to what you
already know. This means you should learn several very different languages.
If you get into serious programming, you will have to learn C, the core language of Unix. C++ is very closely related to C;
if you know one, learning the other will not be difficult. Neither language is a good one to try learning as your first, however.
And, actually, the more you can avoid programming in C the more productive you will be.
C is very efficient, and very sparing of your machine's resources. Unfortunately, C gets that efficiency by requiring you
to do a lot of low-level management of resources (like memory) by hand. All that low-level code is complex and bug-prone,
and will soak up huge amounts of your time on debugging. With today's machines as powerful as they are, this is usually a
bad tradeoff — it's smarter to use a language that uses the machine's time less efficiently, but your time much more
efficiently. Thus, Python.
Other languages of particular importance to hackers include Perl and LISP. Perl is worth learning for practical reasons; it's
very widely used for active web pages and system administration, so that even if you never write Perl you should learn to
read it. Many people use Perl in the way I suggest you should use Python, to avoid C programming on jobs that don't require
C's machine efficiency. You will need to be able to understand their code.
LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally
get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself
a lot. (You can get some beginning experience with LISP fairly easily by writing and modifying editing modes for the Emacs
text editor, or Script-Fu plugins for the GIMP.)
It's best, actually, to learn all five of Python, C/C++, Java, Perl, and LISP. Besides being the most important hacking languages,
they represent very different approaches to programming, and each will educate you in valuable ways.
I can't give complete instructions on how to learn to program here — it's a complex skill. But I can tell you that books
and courses won't do it (many, maybe most of the best hackers are self-taught). You can learn language features — bits
of knowledge — from books, but the mind-set that makes that knowledge into living skill can be learned only by practice
and apprenticeship. What will do it is (a) reading code and (b) writing code.
Peter Norvig, who is one of Google's top hackers and the co-author of the most widely used textbook on AI, has written an
excellent essay called Teach Yourself Programming in Ten Years. His "recipe for programming success" is worth careful attention.
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.
Finding good code to read used to be hard, because there were few large programs available in source for fledgeling hackers
to read and tinker with. This has changed dramatically; open-source software, programming tools, and operating systems (all
built by hackers) are now widely available. Which brings me neatly to our next topic...
2. Get one of the open-source Unixes and learn to use and run it.
I'll assume you have a personal computer or can get access to one. (Take a moment to appreciate how much that means. The hacker
culture originally evolved back when computers were so expensive that individuals could not own them.) The single most important
step any newbie can take toward acquiring hacker skills is to get a copy of Linux or one of the BSD-Unixes or OpenSolaris,
install it on a personal machine, and run it.
Yes, there are other operating systems in the world besides Unix. But they're distributed in binary — you can't read
the code, and you can't modify it. Trying to learn to hack on a Microsoft Windows machine or under any other closed-source
system is like trying to learn to dance while wearing a body cast.
Under Mac OS X it's possible, but only part of the system is open source; you're likely to hit a lot of walls, and you have
to be careful not to develop the bad habit of depending on Apple's proprietary code. If you concentrate on the Unix under
the hood you can learn some useful things.
Unix is the operating system of the Internet. While you can learn to use the Internet without knowing Unix, you can't be an
Internet hacker without understanding Unix. For this reason, the hacker culture today is pretty strongly Unix-centered. (This
wasn't always true, and some old-time hackers still aren't happy about it, but the symbiosis between Unix and the Internet
has become strong enough that even Microsoft's muscle doesn't seem able to seriously dent it.)
So, bring up a Unix; I like Linux myself but there are other ways (and yes, you can run both Linux and Microsoft Windows on
the same machine). Learn it. Run it. Tinker with it. Talk to the Internet with it. Read the code. Modify the code. You'll
get better programming tools (including C, LISP, Python, and Perl) than any Microsoft operating system can dream of hosting,
you'll have fun, and you'll soak up more knowledge than you realize you're learning until you look back on it as a master
For more about learning Unix, see The Loginataka. You might also want to have a look at The Art Of Unix Programming.
To get your hands on a Linux, see the Linux Online! site; you can download from there or (better idea) find a local Linux
user group to help you with installation. From a new user's point of view, all Linux distributions are pretty much equivalent.
You can find BSD Unix help and resources at www.bsd.org.
I have written a primer on the basics of Unix and the Internet.
(Note: I don't really recommend installing either Linux or BSD as a solo project if you're a newbie. For Linux, find a local
Linux user's group and ask for help.)
3. Learn how to use the World Wide Web and write HTML.
Most of the things the hacker culture has built do their work out of sight, helping run factories and offices and universities
without any obvious impact on how non-hackers live. The Web is the one big exception, the huge shiny hacker toy that even
politicians admit has changed the world. For this reason alone (and a lot of other good ones as well) you need to learn how
to work the Web.
This doesn't just mean learning how to drive a browser (anyone can do that), but learning how to write HTML, the Web's markup
language. If you don't know how to program, writing HTML will teach you some mental habits that will help you learn. So build
a home page. Try to stick to XHTML, which is a cleaner language than classic HTML. (There are good beginner tutorials on the
Web; here's one.)
But just having a home page isn't anywhere near good enough to make you a hacker. The Web is full of home pages. Most of them
are pointless, zero-content sludge — very snazzy-looking sludge, mind you, but sludge all the same (for more on this
see The HTML Hell Page).
To be worthwhile, your page must have content — it must be interesting and/or useful to other hackers. And that brings
us to the next topic...
4. If you don't have functional English, learn it.
As an American and native English-speaker myself, I have previously been reluctant to suggest this, lest it be taken as a
sort of cultural imperialism. But several native speakers of other languages have urged me to point out that English is the
working language of the hacker culture and the Internet, and that you will need to know it to function in the hacker community.
Back around 1991 I learned that many hackers who have English as a second language use it in technical discussions even when
they share a birth tongue; it was reported to me at the time that English has a richer technical vocabulary than any other
language and is therefore simply a better tool for the job. For similar reasons, translations of technical books written in
English are often unsatisfactory (when they get done at all).
Linus Torvalds, a Finn, comments his code in English (it apparently never occurred to him to do otherwise). His fluency in
English has been an important factor in his ability to recruit a worldwide community of developers for Linux. It's an example
Being a native English-speaker does not guarantee that you have language skills good enough to function as a hacker. If your
writing is semi-literate, ungrammatical, and riddled with misspellings, many hackers (including myself) will tend to ignore
you. While sloppy writing does not invariably mean sloppy thinking, we've generally found the correlation to be strong; and
we have no use for sloppy thinkers. If you can't yet write competently, learn to.