Learning by Doing

Most peo­ple be­lieve very strongly that the best way to learn is to learn by do­ing. Par­tic­u­larly in the field of pro­gram­ming.

I have a differ­ent per­spec­tive. I see learn­ing as very de­pen­dency based. Ie. there are a bunch of con­cepts you have to know. Think of them as nodes. Th­ese nodes have de­pen­den­cies. As in you have to know A, B and C be­fore you can learn D.

And so I’m always think­ing about how to most effi­ciently tra­verse this graph of nodes. The effi­cient way to do it is to learn things in the proper or­der. For ex­am­ple, if you try to learn D with­out first un­der­stand­ing, say A and C, you’ll strug­gle. I think that it’d be more effi­cient to iden­tify your what your holes are (A and C) and ad­dress them first be­fore try­ing to learn D.

I don’t think that the “dive into a pro­ject” ap­proach leads to an effi­cient traver­sal of this con­cept graph. That’s not to say that it doesn’t have its ad­van­tages. Here are some:

  1. Peo­ple tend to find the act of build­ing some­thing fun, and thus mo­ti­vat­ing (even if it has no* use other than as a means to the end of learn­ing).

  2. It’s of­ten hard to con­struct a cur­ricu­lum that is com­pre­hen­sive enough. Do­ing real world pro­jects of­ten forces you to do things that are hard to oth­er­wise ad­dress.

  3. It’s of­ten hard to con­struct a cur­ricu­lum that is or­dered prop­erly. Do­ing real world pro­jects of­ten is a rea­son­ably effi­cient way of travers­ing the graph of nodes.

Per­son­ally I think that as far as 2) and 3) go, pro­jects some­times have their place, but they should be com­bined heav­ily with some sort of more for­mal cur­ricu­lum, and that the pro­jects should be fo­cused pro­jects. My real point is that the trade­offs should always be taken into ac­count, and that an effi­cient traver­sal of the con­cept graph is largely what you’re af­ter.
I should note that I feel most strongly about pro­jects be­ing over­rated in the field of pro­gram­ming. I also feel rather strongly about it for quan­ti­ta­tive fields in gen­eral. But in my limited ex­pe­rience with non-quan­ti­ta­tive fields, I sense that 2) and 3) are too difficult to do for­mally and that pro­jects are prob­a­bly the best ap­prox­i­ma­tions (in 2015; in the fu­ture I an­ti­ci­pate smart tu­tors be­ing way more effec­tive than any pro­ject ever was or can be). For ex­am­ple, I’ve spent some time try­ing to learn de­sign by read­ing books and stuff on the in­ter­net, but I sense that I’m re­ally miss­ing some­thing that is hard to get with­out do­ing pro­jects un­der the guidance of a good in­struc­tor.
What do you guys think about all of this?

Side Notes:

*Some peo­ple think, “pro­jects are also good be­cause when you’re done, you’ve pro­duced some­thing cool!”. I don’t buy this ar­gu­ment.
  • In­for­mal re­sponse: “C’mon, how many of the pro­jects that you do as you’re learn­ing ever end up be­ing used, let alone pro­duce real util­ity for peo­ple?”.

  • More for­mal re­sponse: I re­ally be­lieve in the idea that pro­duc­tivity of pro­gram­mers differs by or­ders of mag­ni­tude. Ie. some­one who’s 30% more knowl­edge­able might be 100x more pro­duc­tive (as in faster and able to solve more difficult prob­lems). And so… if you want to be pro­duc­tive, you’d be bet­ter off in­vest­ing in learn­ing un­til you’re re­ally good, and then start to “cash in” by pro­duc­ing.

1. Another thing I hate: when peo­ple say, “you just have to prac­tice”. I’ve asked peo­ple, “how can I get good at X?” and they’ve re­sponded, “you just have to prac­tice”. And they say it with that con­de­scend­ing so­phis­ti­cated cyn­i­cism. And even af­ter I prod, they re­main firm in their af­fir­ma­tion that you “just have to prac­tice”. It feels to me like they’re say­ing, “I’m sorry, there’s no way to effi­ciently tra­verse the graph. It’s all the same. You just have to keep prac­tic­ing.” Sorry for the rant-y tone :/​. I think that my Sys­tem I is suffer­ing from the illu­sion of trans­parency. I know that they don’t see learn­ing as travers­ing a graph like I do, and that they’re prob­a­bly just try­ing to give me good ad­vice based on what they know.
2. My thoughts on learn­ing to learn.