I have discovered that I used to over estimate the value that books bring to the table, whenever I have tried to learn a new skill or a new tool.
I think that could be beacause in reality I would learn something new to not just learn it, but to apply it somewhere. Such (valid) applications of any skill or tool are potentially infinite. As no book can cover all potential applications or usage of a skill or a tool, I would come unstuck when applying the knowledge gained. With experience, I have now changed my method of using books.
The first part I use a book for is to gain a conceptual understanding of the skill or the tool and for such an understanding, I have found it is unnecessary to deep dive  into the book working my way systematically through it. 
The second and most important part is I then choose to work upon an application of the skill or tool I have selected to learn, while using a book as one of the tools in the process. By doing that I am more focused on producing things which is what matters finally as opposed to the false expectations and satisfaction gained by working through a book.
I now treat a book as an aid, a tool, a mentor, a navigator that I refer to when I am stuck instead of the earlier feeling of being stuck despite having worked through a book.
The only care I have to take in this process is to pick a good useful application to work upon, which is possible if I am willing to think through it enough and then there is this.
The other minor advantage I have gained by following this process is that I do not suffer from the pressure of having to complete a book cover to cover. In fact, I now do not even have to care if I will ever complete the book, as long as it provides me value as a tool.
To cite just one example, recently I wanted to learn about algorithms and data structures. So instead of working my way through books; I picked up this book, and understood the concepts. Just the first 2 chapters sufficed. Next I chose to actually find applications where algorithms are important part of the solution. I chose to work on those applications, while using the books as a tool. Not only did this process work, but it also taught me how to actually use algorithms in the real world instead of working on some descoped abstract problems in a textbook.
Overall, I have repeated this process more than once and I have found it to be more productive in learning a skill or a tool than just working through a book. And I plan to stick to it as of now.
 A purely systemtatic theoretical perusal could be useful, but I fail to realize what is the point of theory if it does not lead to something useful? May be I am missing something here!
 Anyways, just reading through books is useless.
The movie 3 Idiots is one of those rare movies which is both entertaining and socially relevant at the same time. The message it delivers can be summarized as ”Education is more about gaining knowledge than earning degrees. And most importantly one must do what one loves to do”. However the movie’s central character Rancho (played by Aamir Khan) who delivers this message is shown to be disliked by the educational institue’s principal. The principal Viru Sahastrabuddhe (fondly called ViruS played by Boman Irani) here serves as a symbolism for the general attitude that prevails in the society which favors the exact opposite of the message. That is, degrees define you!
The movie has delivered this message very strongly and naturally it lead to a debate. People like Virus, the principal, were up in arms after the movie was released. Their argument was that the movies like 3 Idiots (and hence people, books or anything for that matter) which asks and encourages anyone to ”do what you love to do” are encouraging students to disrespect the educational system. On the other hand, all the Ranchos claimed that they are not against the education system per se, but the method of instruction and that finally what matters is that one must enjoy what one does!
Thus we have Ranchos at one end and Viruses at the other end divided by a deep chasm, but the hiddent fact is that both are aiming for the same destination: a happy living post education.
Having watched the movie carefully, I think the argument of the viruses was very myopic and no wonder the education system sucks, which is the point that the movie makes. It nowhere asks you to disrespect the system or the teachers. They also forget that respect is to be earned and is not a commodity that is a natural result of one being in position X. However if the viruses make a weak argument, it does not imply that the Ranchos are completely correct.
I think it is more useful to find out the questions that such thoughts (movies, people, books) raise than to argue for or against it.
Let us go back to the central idea of the movie ”You must do what you love doing”. However I would ask
Let us now go back and ask what is the purpose of education system or schools? The answer is the purpose of schools is to keep the students gainfully occupied. However the fact is that they do not keep them gainfully occupied because they suck. The best way to verify this is by asking the students themselves as also the adults. Most adults will vouch (I assume the adults to be not under a false perception or that they are not brain washed) that they were meant to do something else; however they realized it too late simply because of the liabilities that they have built up.
Now common sense says that if something does not make sense, it makes sense to stay away from it. But in this case can we just let students be at home and do nothing? So what could be the way out? Is there even a way out?
If you have read carefully, the first line of the above paragraph points to a solution. The word gainfully. What would it mean to keep students gainfully occupied? It would mean to help them explore. Yes without giving anyone an opporunity to explore, how do you expect them to ’discover’ what the enjoy doing.
Exploration we know is hard. Now helping a bunch of students to explore makes it n times harder. Here we are talking about an education system without a solid structure. We have to transform education systems into a fluid structure. It is easy to conclude here that building such a system will be very hard, but it might turn out to be self sustaining!
So what I propose is that we need both ”education systems and to find out what we enjoy doing”. This should also be true since the overall aim of both ranchos and viruses is the same; though right now they may not agree (more so the viruses). Education systems purpose then should be to help one discover what they enjoy doing, point them in the right direction, groom them with the requisite skills. Thus the chasm between the ranchos and viruses is now filled; you start with the system at the left (run by viruses) and arrive with a toolkit that helps you do what you enjoy at the right (happy ranchos).
I will describe here my visualization of such an education system. Note that I want to describe it not because I want to come up with a blueprint (it is more time consuming) but to find out how difficult it would be to implement such a system. So to start with; the main idea that would form the foundation of such a system would be the emphasis is not on teaching but on learning through exploration which is inherently fun.
I would prefer certain things to be imparted for a certain age group. For the age groups of 6-10, the system must help them learn the basic skills of reading, writing and counting.
Reading and writing are fun but schools make them so boring! In addition, kids be exposed to different activities (painting, sports,dramatics, history etc) and they should be given the freedom to choose the activities. If someone does not enjoy sports but loves painting, let him be. Thus reading, writing and counting with exposure to multiple activities is what forms the core. Kids are very curious and the system must enhance this curiosity as opposed to killing it that it does now.
I think from the ages of 11, we can expose the kids to more activities and more subjects and most importantly life skills (such as facing difficult situations, the arts of argument and negotiation, teamwork, how to ask for and give help etc) but the emphasis still should be not on imparting knowledge but on helping them gain it because only then it is fun. I think this level 2 of exploration should go on for 5-6 years. Remember these will be the teenage years which is the time when kids need maximum support as they start identifying themselves as ’unique individuals’ and most will begin to get a feel of what they might like and at the same time through life skills realize that life can be fun even when it may not be easy.
When I analyze my idea of an education system, the difficulty of implementing such a system is pronounced. There is no limit to exploration. How many subjects can a school provide to explore? The idea is to have maximum possible. But in terms of resources, this will be very difficult (but not impossible). Further at levels 1 and 2, a close involvement of teachers with the students will be required. I would prefer my teacher introduce me to different ideas to explore instead of parents as they might carry bias. Here the ratio of student:teacher has to be such that the teacher can actually take up the role of an explorer guide for the student. I doubt if a ratio of more than 5:1 would make sense. That in turn implies we need a lot more capable teachers. Capability here would imply one with the requiste knowledge, the ability to help others explore that area of knowledge, and most importantly the teacher should love help kids explore knowledge and ideas. So it is evident that the difficults of implementing such a system are : More faciliites that allow a breadth and depth of exploration, and lot more capable teachers. The system will not work at optimum efficiency if it is lacking in either.
My visualization has yet not addressed ”about kids with learning disabilities, and what if a kid has no answer at the end of 10 years?”. Also kids that we describe as gifted who seem to be way more capable than their peers?
I think if such a system exists and it helps kids explore, teach them to gain knowledge, equip them with the life skills;for 10 continous years(6 - 16) most of the kids will turn up with the answer ”I think I enjoy x, y, z and would want to explore these further”. If these students are then given opportunities to explore and hone their skills for the next 10-12 years, be rest assured that all of these will be happy with themselves because they will be doing what they want to do. These next 10-12 years are what we should we call ’real world higher education’.
Thus I want an education system that helps students discover what they love to do and make a life out of it, not a life that makes work out of them. I earnestly yearn for the day when kids will cry not because they have to go to school, because they have to come back home from school; not because the vacation will end, because the vacation will start!
 I do have a grouse against movies like 3 Idiots is that they inadvertently could make you hate your parents and others who emphasise academics to you. Please remember that theysimply wish well for you as they believe that academics is a safe way to a happy future. But all credit to 3 Idiots here as well as it shows Rancho asking Farhan to have a heart to heart chat with this father about his career choice. But it may not be possible in every situation (remember Joy from the movie)
The primary purpose of learning is to acquire a new skill. Learning itself is a skill that is hard to master. So when you try to acquire a skill that is hard in itself, your task has just become harder.
I am not talking about things that you do not want to learn. Even easy to acquire skills are hard to do so if you are not inclined. I am talking about learning in the context of acquiring a skill so that you become proficient at it or even better: master it.
But why is learning hard and why is it that it is even harder to learn something that is hard? When do we exactly realize that learning anything hard is hard?
I think we realize that learning is hard when we become adults and take up work. At that point of time we are all supposed to acquire new skills all by ourselves. But most of us till we begin work, are learning even without realizing that it is difficult. Why? Because we are learning at school, college where our primary responsibility is to learn, though most education systems can even hardly claim that to be their primary motive. So there we are, the education system provides us with the learning support system.
What does this system provide you?Everything basically. From books to teachers to lectures to peers to evaluations. Everything is set in stone for you. You just have to follow the route. So what this system does is makes it easy for you to learn new skills. But what does it take away from you? The process of learning itself! And I think that is a big take away. Years and years of habit of using ready made systems to learn new skills would I think subconciously condition you to assume such systems would be in place for you always. And the absence of such systems when you being your career or take up work makes learning hard without us even realizing it. The only such system then that you have at your disposal is you, hardly a comforting idea. (I hardly consider training departments at any workplace to be comparable to schools, colleges; so you cannot rely on them as support systems!)
So by the time we have grown up to work we learn to read, write, do math and much more, but we hardly ever learn to learn unless and until you were fortunate enough to have met some enlightened soul who has imparted the gospel of learning.
Let us try to verify with examples if all this is true. Take any hard subject that you learnt at school. For example, Calculus is something that most find hard. Even with the learning system in place, we find it hard. So how harder would it be if you were left all alone to learn Calculus? How would you even figure out what books to learn from, who are the good teachers of the subject that you could turn to and how to even verify that you have become good at it? This is an example from within the system. Replace the subject Calculus with your favorite(?) hard subject and the results should be the same.
An example from outside the system that you would identify with is making presentations. Most of us at work have come across situations where we have to make presentations. What if it is an integral part of your work? So you would have to acquire that skill. Sounds hard doesnt it? It is. No wonder you may find most of your presentations suck (if you are honest to yourself).
Thus now we have come halfway. We know that till we take up work, we are conditioned to assume that readymade systems are in place to help us learn a new skill, which is hardly if at all the truth. Thus when we encounter situations after taking up work, we come unstuck due to two reasons: earlier, we had only one job and that was to learn; and now with work, we have two jobs - one is to work and the other is to learn. Unfortunately we are found wanting in both and ironically the reason is the same ”lack of experience”.
I could easily sense this when I began work and I had to learn quite a few things on my own (if I wanted to be good at what I did). And that when you learn on your own, you have to build that support system which was there for you. You have to decide how much to learn, what material to learn from (books, tutorials and they hardly come good); getting hold of experts to have a word with them (again experts are rare and to have a word with them is even more rare!). So the point is it is an extremely difficult process. And when faced with difficulties, only focus can help you stay afloat and sail through.
But focus does one other thing that is very hard otherwise: it tends to provide you with the energy and motivation to do the thing that you are trying to learn. And we all know that learning by doing is one of the best ways to learn, but hardly ever get to it. When you are focused, doing will happen automatically. Doing is the most important supplement that learning needs and focus provides it. Focus also forces you to review your learning and that is the way you improve. Thus focus works like a nourishment, an energy provider without which you cannot ’really’ learn.
So if you are focused enough you will end up becoming proficient at both calculus and making presenations. You will not be deterred when you stumble, you will persist, you will solve a lot of calculus problems, you will make a lot of presentations. You will continually review how you fare (or self evaluate, again a part of the learning system at school) and finally become proficient.
The best part about self learning is that the more skills you acquire via this route, the better you become at the skill of learning itself. Eventually, I realized that learning new things on my own was not that difficult as long as I was Focussed, kept doing it and had a regular feedback loop. You might find the same. Along the way you might start enjoying the process of learning itself and would look forward to acquire new skills alinged with both your personal taste and professional demands.’Stay Focused, Keep Learning’ now seems to make sense.
For anyone who is interested in learning Common Lisp, this could be a possible approach. This is an approach that I figured out in hindsight. Let us get down to business. The first important choice you need to make is of the OS.
Which OS to use?
Through my experience, I would say that for learning Common Lisp (as for any other language), Windows is a bad choice (which it is anyways!).
So choose any *nix. If you are already a *nix user, you are in safe zone. For Windows users, I would recommend using VirtualBox (a virtualization software) to install a Linux. Ubuntu is what I would recommend.
Why a *nix?
The simplest reason is that the entire CL ecosystem (at least open source) is geared towards *nix than Windows.
You may opt for LispWorks, which provides a Windows environment. There is also LispBox setup that you can use. But in the long run, I expect that you may experience pain though I cannot verify that since I have not gone down that path! Even Windows setup just simulates the *nix setup. Hence it is better to go the virtualization way I think.
So choose something like Ubuntu running inside VirtualBox if you are Windows user.
Which implementation do you choose?
I would recommend using SBCL. Clisp, CMUCL are also other good choices.
Thus, choose SBCL as your CL implemenation for your learning process. Do not worry too much initially about various implementations and differences between them. As you work your way through learning CL and get proficient you will also learn to work with different implementations.
It is very simple to install a CL of your choice on a *nix.Just use the package management system of your *nix to install the lisp implemenation of your choice.
Having chosen an OS and a Lisp implementation, the next obvious question is which IDE to use? Honestly, Lisp does not need an IDE.
Which editor to use?
From my experience, I have arrived at this conclusion: ”Lisp REPL itself is the IDE”. So what you need is just a simple, powerful text editor.
Lisp has virtually no syntax, except that you need the editor to help you with the parentheses. I prefer nvi. However here I should point out that I am in a minority.
Most of the Lisp community prefers Emacs and Slimecombination. To be honest, I started out with the same; but later switched to vi.
So if you already an emacs user, you might choose Emacs + Slime. If a vi user, you might go ahead with vi. I find using vi and the lisp REPL a sufficiently powerful and a simple setup at the same time.
With this our setup is ready. It is *nix + SBCL + (EMacs + Slime / Vi).
Where to begin?
I would recommend that you give sufficient time to work through Lisp. So if you come from a weaker language background, it may take some time finding your feet.
To start with, you can begin with either of these 2 books. Practical Common Lisp (PCL) by Peter Siebel or Ansi Common Lisp (ACL) by Paul Graham.
I chose the latter simply because I prefer chapters with exercises to solve which PCL lacks. But that in no way takes away from PCL. I would recommend starting off with any book, using the other as the companion.
The important point here is to work through which ever book you like. By work through it, I mean it is not only importantly to thoroughly understand what is being explained and to solve the exercises, but to also have a few questions. In addition, type out every piece of code and ensure that it works. You will learn a lot through this simple but hard process.
At the end of whichever book you chose to begin with, you must have the big picture in place. Do not expect to attain mastery over advanced topics such as macros or closures. It is important to have a simple mental mode of Lisp here. The simplest model I found is a sketch of the Lisp eval function.
By now you must be comfortable working with Lisp type of code, downloading and installing libraries, using ASDF. You must have a simple clear Lisp model in your head.
Since I came from a Java (OO) background, I completely skipped the CLOS part. Simply because I did not want to give myself a chance to go back to writing Java type OO code in Lisp! Of course, CLOS is way more powerful than the standard OO that you get in other langauges, but I skipped CLOS initially for a valid reason. And that was to grasp the Lisp style of coding.
Now you are ready to tackle the advanced topics in Lisp such as closures and macros. The best book to master these is obviously On Lisp.
This is what I did and it worked well for me. On Lisp is more about utilizing the power of Lisp via macros and closures. But if you read closely it is a book full of problems and solutions. As such read through the problem PG tries to describe and solve it using whatever Lisp knowlege you have. Then compare your solution to that in the book. It will teach you a lot more than simply even working through the book.
Doug Hoyte has rightly pointed out that On Lisp is a zero or one book, that is, either you understand it or you do not. If you cross the On Lisp road, you are well on your way to become a very productive programmer.
About example projects in the PCL, ACL and On Lisp
Initially I just glanced through the example projects in ACL. After working through On Lisp upto chapter 18, I worked through the examples in both ACL (chapters 15,16,17) as well that in On Lisp (chapters 19 through 24). The inference and objects chapters 15 and 17 respectively in ACL merge with chapters 19 and 25 of On Lisp.
After working through the above, you can as well treat say PCL example projects as problems to solve. Or you can pick up a problem to solve of your own and rake up a Lisp solution. The first such thing I did was to write a Lisp program to generate the website that you are now browsing! I was inspired by the chapter 16 in ACL to generate html to write a solution to generate my website.
How much time would it take?
This really depends upon the individual. But as with any learning, consistency is more important. Do not learn anything hard with long breaks in between. Since I also have a day job and other things to take care of, it took me around 10 months to work through these 2 books. But today I can say that it was worth the effort.
Common Lisp Libraries and QuickLisp
When you sit down to write your own real Lisp code, it will extend to more than 1 lisp file. In that case you have to ensure the order in which the files are loaded is correct to manage the dependencies. In addition, you will also try to use existing libraries as much as possible. So you also have to ensure the dependencies of your code on these libraries All of this is taken care of you via Lisp packages, see Erran Gat’s guide for packages and ASDF (a make like tool for Lisp).Common-lisp.net and Cliki are good sources of common lisp libraries.
There is now an excellent way of managing your Lisp Libraries. QuickLisp. Its a GOD send.
I use Ansi Common Lisp Appendix D Language Reference as my reference guide. For detailed reference, Common Lisp The Lanuage, Second Edition is the choice. You can also access the Lisp documentation online.
If you reach this far, you will surely be motivated to use Lisp as much as possible. You can join some open source Lisp project to make contributions.
In addition, you can also spend some time (again regularly) to work through these following Lisp books.
I am a polyglot software engineer specializing in shipping iOS and 3d scientific visualization applications.