
Ask HN: How do I re-educate myself? - gboy
I have a PG degree in CS (systems), and a fairly good knowledge of most of the basic concepts in systems and distributed systems.<p>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.<p>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.<p>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.<p>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.<p>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.<p>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.
======
jacquesm
From what you write it would seem to me that you are trying to approach the
problem from a purely theoretical point of view. That's fine, but you can read
papers and books until the cows come home, at the end of the day the only way
to really educate yourself is to apply your knowledge.

In 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.

~~~
timwiseman
Agreed and beautifully put, but perhaps I can expand a little.

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.

------
raheemm
This is how the great management guru Dr. Ram Charan used to develop mastery:

 _"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/...](http://money.cnn.com/magazines/fortune/fortune_archive/2007/04/30/8405482/index3.htm)

~~~
FraaJad
That was a wonderful article. Thank you for sharing.

------
drx
Have you ever learned something truly? That you didn't forget? If the answer
is yes, try to think about the environment that helped you do it and emulate
it. Unless it requires socializing with people or something that is uneasy to
do on your own, it should be doable.

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.

------
jim_h
To remember something you have to constantly use that information. The basic
information from your youth stays with you because you were tested on it daily
and practiced it for years. Also the young brain soaked up information better
before than it does now.

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.

------
domchi
If you want to remember details of things you don't use in everyday life, I'd
recommend that you try Supermemo. There is also a lot of resources about
learning on the Supermemo site.

<http://www.supermemo.com/articles/power.htm>

~~~
adaptives
That's a very good idea. I recently downloaded the free and open source cousin
of supermemo, pnemosyne. <http://www.mnemosyne-proj.org/>

------
adaptives
Sometime back I found myself in a slightly similar situation. I felt like I
had forgotten many things I had learned in my masters (CS), and I also felt
that many new technologies have come about and I do not know enough about
them.

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>

------
danilocampos
Echo what everyone else is saying here -- you won't truly grasp anything until
you apply it as a solution to a problem you care about. That's how self-
teaching always works best for me. It's the difference between driving around
aimlessly and driving to a specific point on the map.

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.

------
billswift
>there is no creativity that follows

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.

------
akshayubhat
If you are interested in practical application of your knowledge, I would
suggest you to build a mid scale real life distributed system on AWS. You
would need to spend around 100$ per month though.

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.

------
amorphid
Find person(s) who need help w/ distributed systems. Figure out the problems
they need to solve. Discover what interests you. Work towards learning how to
solve those intersting problems. Stay in touch with the people you meet and
get known as the guy who they need.

------
MakeUsersWant
Getting my masters in mathematics was a task as practical as a carpenter's
job. I would actually use everything I learned in some way, for example trying
to generalize it. Perhaps that approach could help you remember, too.

------
swah
Unfortunately <http://www.khanacademy.org/> doesn't touch computer science,
but I love to watch to review math and physics.

------
mtkd
Take a long holiday.

