搬家注：这篇文章是 2011 年写的，今天是2015年了，不过我还是觉得里面跟人家分享的观点还是挺有意思的，所以转帖到这里，原来是发表在 http://happypeter.github.io/gitbeijing 。
Today I got a letter from a student of my former class in Shanxi Province, complaining that his new teacher is pushing too much C language knowledge to them, and he said “we hardly can catch up with him”.
He was scared, and thus bought several big books, each on operating system, algorithm, and assembly language. Well, my friend, I should say you are making big mistakes I made years ago as a Linux newbie.
Firstly big books are for systematic learning. You do not need to learn everything in full detail anyway, you can pick up one or two big books at hand, but never try to force yourself understand them. As your experience added up, you will find more and more stuff in those big books start to look interesting to you, and finally when 60 or 80 percent of the contents look really useful to you, that’s the right moment you start your learning of these monsters.
For beginners, it is definitely wrong to start from big books, like the official manual of the tools you use. Like learning Make, gcc , vim, as beginners, you only need some tutorial of really basic stuff. And if you start with their official manual, you are making your way to hell.
And OK, let’s go back and talk about C, C itself is not something big, you can learn the basics of the whole language fair quickly. So C is maybe the only thing I can suggest you learn systematically at the early stage of your Linux study. The book will be the famous C Bible – the C programming language by K&R. Well, the only problem is the English in it is too difficult. Try to google “C tutorial” for a easier book on C as a gateway. Anyway, learning through a whole book has its advantages.
As a experienced C programmer, you naturally have algorithm as your hat, and assembly language as your shoes. But I must say it is not wise to start learning these thing before you know C itself well. Actually even when you know C basics, your first thing is still not to learn algorithm , but to do some real programming, then you maybe smell the real need for learning those things, that’s the right point to start learning. Simple truth is that you learn sth, and you do not use it, then you will soon forget. Learning by doing, my friend.
For beginners, I will say you need to know the backbone of Linux knowledge you want to learn, by reading some introduction level articles. Google “algorithm wikipedia” or “root user wikipedia” for such kind of things. And for Linux specific, I will strongly recommend http://linfo.org. This site is like a kind tutor, it only explain important terms, and only in the way that beginners feel comfortable. In general, do not start everything by big books, start by a kind tutor like Peter:), or start by friendly materials like “xxx tutotial”, “xxx beginner’s guide”…
Up to this point, you may have started complaining, “Peter, you keep saying beginners shall focus on something useful, shall only start big books when you know the backbones, we are new, how can we possiblely know that!!!” So now is the time I introduce my book Linux Guide for Chinese Beginners, if Peter is now not by your side, LGCB is your friend.
Anyway the most absolute failure of a teacher is getting his students frustrated. Programming is not about reading big books, it is all about following your heart, having some fun. Demonstrate your success by doing some clever thing with your computer, then build your knowledge on what you already know about. Be careful to start where you are, say FUCKYOU to anything that is too difficult for you. Keep it simple and let it grow.
Like Linux Torvalds once said: if it is not fun, why do it?