EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

Initially this post was going to be about education. The educational system that is. Given that there was a lot of attention drawn to the subject in the past few months in Quebec, I thought it would be timely. But then I'd be sucked in that debate. Ugh.

Further reflection convinced me that the crux of my thoughts centered on learning - the process rather than the system. So that's what I will write about.

In particular something from that presentation by Steve Klabnik got stuck in my head. One of the differences between the humanities and the more sciencey disciplines is the process of learning he highlights. Memorization of theorems for math, refinement of understanding for literature and philosophy. He then suggests turning towards the humanities to gain something from them.

Strangely enough - and maybe it's because I am an avid reader - programming or engineering was always a refinement process for me. And when I write 'always' I don't mean that I've consciously approached learning this way all my life. As a matter of fact I only came to this conclusion after watching that fascinating talk. Unconsciously I used and am still using my approach to humanities as the foundation for my approach to engineering.

Repetition

Repetition is the mother of studies (repetitio est mater studiorum). I rarely fully grasp new code I read and I rarely remember the way to code novel things. That is, until I have been exposed to them repeatedly. More than multiple times. Multiple multiple times. It's an incremental process and a pattern matching process for me.

Let's take an example. The first time I wrote a Simple TCP Server:sup:TM, I was basically gluing together black boxes of which I had knowledge only of their names - I barely understood what they did and how they did it. Streams? What are those? Wait, you mean this program goes into an infinite loop? Isn't this a bad thing? How do we stop it or how do make sure it never stops if that's what we want? Threading? But I don't know anything about threading yet (yep, the parallel course is after the networking one)!

To answer those questions I consulted some books, looked at some notes and went on some pilgrimage to the oracle of Google (see what I did there?). Oh, ok the program has to listen continuously. Streams are pipes of bytes. Ok. Ok-ish rather.

Then time passes. And the next time I have to do something similar I go "Wait, what are streams again?". Pipes of bytes? That doesn't sound too realistic. What are they really? Hit the books, investigate the suspects, bring some small evidence on the table and everything is settled. Oh. Ok. They are buffers. Everything is settled. Or is it?

Then time passes. And the next time around the same thing happens. With each repetition my knowledge of the technology deepens.

Doggy bags

I guess some people can just gobble the new influx of information in one sitting. I play with my food. I leave it in the refrigerator and come back to it later. That's my way of coping with the insane amount of data that is thrown at me daily. Sensory overload: ugh... must... put... in... doggy bag...

I did used to try to take it all in, but it just didn't work. After hours of reading I wouldn't know where I started. The terms would be just as muddled in my mind and I wouldn't have written a single line of code. Then I would get depressed. How come can't I write a Simple TCP Server:sup:TMin one go like it seems everybody else is doing? Well, simply because it's probably not how everybody else is doing it.

Here is the heart of this essay: if you feel overwhelmed/depressed because you can't 'achieve' (what a loaded word!) certain things, overcome them by erosion. Reduce these problems that may seem trivial to others to a size you can manage and repeatedly attempt to solve those smaller parts. Those problems will stay the same with time, but you can grow and tackle them again and again and again. Learning is a lifelong process. Nobody gets it one go.

You just gained a level

If you try the same thing again and again expecting different results you might be insane as the saying goes (side-note: there seems to be uncertainty as to whether or not Albert Einstein actually said that). This is why you should try to improve your approach gradually.

Once you solve a little problem, the knowledge you gained might be reapplied to solve another little problem. Like dominoes you will see on the long-run your problems start to fall and new ones, much more complicated and interesting ones appear. And this gradual process continues. It's a long-term game and that is why you have to stick to it and persevere.

I think you can look at this tactic suggested by Steve Klabnik as something to tend towards over time. Min-maxing immediately and all the time is hard especially since we are not rational beings. You need to acquire experience before you can level up - any good video game will tell you that!

Conclusion

So what was my point? An approach that is working for me to learn and still accomplish things without being overwhelmed by the pressure to achieve all the time is, as you've guessed from the title, the kaizen approach. Repetition/re-exposure of/to small manageable tasks with continuous improvement is basically the kaizen approach. It's an approach popularized in Japan but not so much in practice elsewhere though (in the same conditions) that helps me a lot and could help you.

Also Steve Klabnick is an interesting guy. You should maybe read/listen to what he has to say - I don't necessarily agree with everything he says but it always makes me think and his tone is not condescending or overly obsequious. It's good stuff.

Anyway, just keep trying to be better, but at a reasonable pace that fits you.