January 9, 2011

Complexity and Learning

Learning and education are two of the most important, yet more difficult things we do. However, no matter how difficult, I propose that, relatively, the cost of learning is always low.

How can I say this? The best analogy I have (and yes analogies suck but I have not formulated a better explanation yet) is that of algorithm complexity. Learning has a cost of O(1), and application has a cost of O(n). You learn something once, it will make it easier to learn related things in the future, and can be recalled with low cost. Application of knowledge, has a linear cost, once proficiency has been reached then each time something is applied it will cost some amortised constant. I refine the hypothesis:

The cost of applying sub-optimal knowledge is infinitely higher than any effort to learn a better technique.

At this point you may argue that for many tasks, n is small, and everything is fast for small n. I counter this with the fact that n is never small, knowledge transcends the task at hand, n includes all code we write, and is amplified by the other developers that we help learn as well. If you think that what you do is throw-away and does not matter, than fine, but I am a professional programmer and I have been doing this for a long time and intend to be doing it for a lot longer.

So why do I raise this point? Because I am continually bombarded with excuses for not learning, and I am well and truly over them. I really don’t care if you think something is hard to learn, as someone else I know might say: harden the fuck up. The cost of application is more important then how long it will take you to come up to speed.

I am all for discussion, and arguments, but I refuse to have the wrong argument. So next time someone wants to discuss the merits of some technology or process, skip the whole “that’s academic” or “that’s too difficult to learn” or “that’s not for real programmers” rubbish and maybe we can have a real discussion.