Ask HN: How do I re-educate myself?
I am highly interested in systems and distributed systems but I find my education is lacking. I have identified this to be mostly a problem of ignorance - I do not know of many of the interesting systems projects in the research area, of the problems faced and how they were solved. Consequently, I am unable to contrast and compare different methods of solving problems, etc.
I'm not only missing the more basic advanced knowledge (e.g. the more advanced data structures) but the deeper "domain" knowledge that comes with systems.
However, I have tried plugging this gap by reading books, papers,etc but I don't find myself getting a lot out of them - sure I can understand them, etc but there is no creativity that follows (e.g. new ideas or application of ideas to the problems I have). Soon I forget about the papers, ideas etc. Considering the time and effort it takes to properly understand an academic work (for me at least), the whole effort becomes very heavy, draining and often pointless.
I find I have this problem even with stuff that I'm really familiar with. For example, I know the average time complexity of quicksort but I'll be damned if I can implement it without looking it up. I know an algorithm called "heap sort" exists but that's about it - I can look it up in wikipedia NOW but I'll forget it in 6 months.
I want to educate myself to have a really sound and broad baseknowledge that I can build on and use to become better at what I do. I want to do this in the evenings and weekends, and in what I'm looking for is a way to "classically" educate myself from the ground up so that I don't have little bits and pieces of unrelated "facts" in my head that are of no practical use to me and that I continually refresh but rather a good foundation of ideas, base abstractions, properties etc that I can build on. I have often been struck by the fact that if I properly retained and understood 20% of everything I read, I would be a much better computer scientist.
I know that knowledge acquisition is a personal thing so I'm asking more about the techniques that one can use to acquire this knowledge without getting bogged down.
19 comments
[ 3.4 ms ] story [ 54.0 ms ] threadIn short, go do something, stop reading! Before long, because you are trying to actually get something done you'll find that you are reading again, but this time you are reading with a clear purpose, some problem that you need to solve. And you'll be reading about technologies that are relevant to you, not just about whatever somehow made it on your reading list.
Those are the lessons that stay learned, and then, after doing that for a while you may find that learning by doing is far more rewarding and far faster than learning for its own sake.
Gaining applied knowledge is not a spectator sport. I can say this both from personal experience (at least in math and CS) and from being told it by people far wiser than I am.
In math, I always try to figure out a valid proof before reading it, and it helps me understand it much better than just reading. In programming, I will read the example first, but then I try to implement it and modify it. No matter how well I think I understand it on first reading, I learn a great deal in trying to implement and play with it.
E.g. if you found that a particular type of class in college helped you a lot, say, a laboratory where you had to hand in code weekly, then you could "assign" yourself a task that you'd like to do, just in a laboratory fashion.
Sometimes you might think this is hard for a newbie to do, since you don't know what you don't know, etc. For some things you can look up a relevant course at a "good" university/program and see what its curriculum is, what the reading material is, what kind of tasks get assigned etc.
"In the lulls between customers, Charan studied. Using a system of his own devising, he condensed onto a single unlined page the essence of what he had learned that day in each subject. (Today he provides similar one-page summaries for his CEO clients.) "Am I going to get good grades?" he would ask himself, knowing there was only one right answer. "Am I the master of this subject?" He knew from Sanskrit teachings that "fear, anger, laziness - these are the downfalls of human beings"; that peace of mind alone is worth striving for; that dedication and mastery are their own rewards.
More at: http://money.cnn.com/magazines/fortune/fortune_archive/2007/...
You are likely lacking in enthusiasm or other deep interest in any area. I find even casual reading outside the field tends to spark ideas in areas that I am interested in. Try to find some problem that you find deeply interesting and think about it while reading or, as jaquesm says, choose and actually work on a specific problem.
To learn new information you'll have to do recite it often OR put it into practice often. So make sure it's subjects that you enjoy or can force yourself to use/memorize.
I can still recite the first few lines of Ulysses by Alfred Lord Tennyson since I memorized it for recitation years and years ago. I practiced for hours and hours.
I organized my learning goals as another masters in CS, and have started doing the first course (web technologies). For each course I plan to identify open courseware and other resources and blog as I learn stuff. I am hoping my blog will help me establish a learning trail, which might be an alternate for the credentials of a paper certificate.
Check it out - http://opencs.wikidot.com
http://www.supermemo.com/articles/power.htm
Currently I am trying to analyze a huge public data set using AWS, it is cheap at same time powerful enough to do practical work.
Imagine something like API documentation. What's going to make you an expert in that API? Reading through the API docs end to end or acually building some projects?
More importantly, which is more fun? Solving your problems activates feelings of reward, which is important positive reinforcement when you're learning something new. There's very little learned without fun.