Hacker News new | ask | show | jobs
by golwengaud 5831 days ago
So, in essence, you want to learn everything there is to know about computers and computing :-) . I have a similar impulse -- whenever I see some program, protocol, or even hardware device, I want to learn enough about how it operates to form a good, thorough mental model.

Some immediate, relatively practical steps: - If you're not running one of the free Unixes, start now. I learned an enormous amount from first trying to get coLinux to work on my windows box and then actually installing various distros. That was four years ago, and things have gotten much easier (hardware support, guided installation, etc.), so you won't learn as much as I did, just as I didn't learn as much as the people who did it in, say, the mid-90's, but it's still worthwhile.

Distro: I currently run Debian, but I think for the purpose of learning, it (like a whole class of similar distros, like Ubuntu, RedHat derivatives, and even OpenSolaris) is too easy: it doesn't force you to keep learning past the basics in order to get it running and keep it running. Slackware (http://slackware.com/) and the BSD's (http://www.freebsd.org/ , http://netbsd.org/ , http://openbsd.org/ ) are probably good; I don't have any personal experience with (Gentoo http://www.gentoo.org/ ), but my impression is that it would work.

- Learn the Unix ecosystem: the command line and associated tools, the init system, daemons, etc. The "do one thing, and do it well" philosophy makes for programs that are easy to understand; once you understand that kind of program, it becomes much easier to look at, say, a browser and think about the components required to make it work.

Books/articles: - ESR's "How to Become a Hacker" (http://catb.org/esr/faqs/hacker-howto.html) tries to answer a question not unlike yours. - ESR's /The Art of Unix Programming/ (http://catb.org/esr/writings/taoup/html/ ) explains the philosophy of Unix: why things are the way they are. - /Structure and Interpretation of Computer Programming/ (http://mitpress.mit.edu/sicp/ ) is a fantastic book on how to think about programming. One of my favorites.

On my to-read list: - John Lions' commentary on Unix (see http://en.wikipedia.org/wiki/Lions_Commentary_on_UNIX_6th_Ed...) for a deep understanding of Unix circa 1976 - Donald Knuth's /The Art of Computer Programming/ for a similarly deep, low-level understanding of a whole bunch of really important algorithms and data structures.

2 comments

Thanks for replying! :)

>>>If you're not running one of the free Unixes, start now. I learned an enormous amount from first trying to get coLinux to work on my windows box and then actually installing various distros. That was four years ago, and things have gotten much easier (hardware support, guided installation, etc.), so you won't learn as much as I did, just as I didn't learn as much as the people who did it in, say, the mid-90's, but it's still worthwhile.<<<

That's on my to-do list too. As soon as I get my own computer I plan to install a BSD or some UNIX variant suitable for my hardware. (No. I don't own a PC. I borrow people's laptops to work on just like this one)

>>>I currently run Debian, but I think for the purpose of learning, it (like a whole class of similar distros, like Ubuntu, RedHat derivatives, and even OpenSolaris) is too easy: it doesn't force you to keep learning past the basics in order to get it running and keep it running. Slackware (http://slackware.com/) and the BSD's (http://www.freebsd.org/ , http://netbsd.org/ , http://openbsd.org/ ) are probably good; I don't have any personal experience with (Gentoo http://www.gentoo.org/ ), but my impression is that it would work.<<<

I've been thinking about choosing a distro and I've ended up quite confused at times. For me there are two sides to this. For the purpose of learning things Ubuntu is too easy (I've forced Ubuntu installs on some poor human beings), but at the same time if I keep something to permanently work on then I would prefer a system which isn't taxing to work on. Although, I will teach myself the command line for fun (just like you said), but I don't want to spend my time doing things through it.

Sometimes, I just need a different environment to work in. An environment which doesn't get in the way of my creative flow. For example, if I am writing an essay/code and I have to switch to command line to type in a long command to access some book somewhere in my system then in the heat of the moment command line would just drive me crazy. During those times I just have to get that stuff out of my head and anything else is an agonizing diversion.

Hence, maybe I'll just end up multi-booting my system.

>>>books/articles: - ESR's "How to Become a Hacker" (http://catb.org/esr/faqs/hacker-howto.html) tries to answer a question not unlike yours. - ESR's /The Art of Unix Programming/ (http://catb.org/esr/writings/taoup/html/ ) explains the philosophy of Unix: why things are the way they are. - /Structure and Interpretation of Computer Programming/ (http://mitpress.mit.edu/sicp/ ) is a fantastic book on how to think about programming. One of my favorites.<<<

Thanks a lot for those resources!

I actually watch MIT's 6.00 lectures, and they simply rock.

Do you know any other good resources online?

Anyway, thanks a lot for commenting!

Distros: that's exactly why I've ended up with Debian, over and over again. I'll install something else, spend a weekend getting it working, learn all sorts of interesting stuff, and then get frustrated at all the little things I have to do to make it a satisfactory experience. I then go back to Debian, where everything just works. (I tried Ubuntu once; it was just different enough from Debian to really irritate me, but not enough that I was really learning anything.)

>>>For example, if I am writing an essay/code and I have to switch to command line to type in a long command to access some book somewhere in my system then in the heat of the moment command line would just drive me crazy. <<< See, for me it's the opposite: the command line is perfectly natural, almost more like an extension of myself, but GUIs drive me nuts. I think that's just a personality thing.

Other resources online: you seem to have already discovered MIT's OCW. I know other universities (e.g. Yale) have similar programs, but they're nowhere near as extensive as MIT's, and they tend not to have what I want. I've also found course websites from all sorts of universities useful.

If you can get access to a good research library, that's enormously helpful, as a lot of things (e.g. TAoCP) just aren't online.

And of course Wikipedia is awesome; I often use its "references" and such for textbook recommendations.

Academic Earth has a lot of lectures on computer science.

http://www.academicearth.org/subjects/computer-science

Great advice.

I'd add to those book recommendations 'The Pragmatic Programmer: From Journeyman to Master' as well, great and fun read from beginning to end and good to open at any spot and read just a section.

Also a fantastic read, Peter Norvig's "Teach Yourself Programming in Ten Years" (http://norvig.com/21-days.html), read that one ASAP, good to calibrate your expectations, when I first read it was both at once a cold shower of reality while simultaneously infusing in me a drive to become a competent and skilled programmer.