May 20, 2015

What Kind of Geek am I? (1)

I've been pondering about why sometimes progress seems hard to make when I am learning a new piece of technology, which other people apparently just pick up and start using with no trouble at all. I now wonder whether it's a combination of personality and knowledge.

In common with many developers I like to understand things thoroughly. For me this means being able to construct satisfactorily self-consistent mental models that I can, effectively, "unit test" by applying what-if techniques. Unfortunately my history as a developer means that I have a detailed knowledge of system architecture. Without claiming to be fully up-to-date (for example the last time I built logic was in 1987, from Schottky TTL clocked at 12 MHz), when I use the term "full-stack" I include a reasonably detailed knowledge of all aspects of system architecture, including the hardware, operating system, language support libraries and application.

In other words, I am (often subconsciously, thanks to many more than 10,000 hours of practice at this computer game) aware of lots of things that can go wrong at many different levels.

I suspect this causes me, without specific motivation, to choose test cases that go “near the edge of the envelope”. It's frustrating when I'm learning because it often reveals deficiencies (most often in the documentation) of the “system under test” that can block progress; but I also believe it helps to integrate my newly-learned knowledge, and leaves me with valuable knowledge that you just can't pick up in the middle of the road.

1 comment:

anatoly techtonik said...

If I thoroughly understood something (sooner or later, after some sleep or not), I devise a mental model that allows me to compress the big data and facts about the subject into some generic vision (like formulas in maths). And much of the data and emotional experience then becomes forgotten. I believe this is somehow related to the mechanics of The Curse of Knowledge.

The more models you have, the more effective is the storage, so that's why it is important to see how Go works, how Unreal Engine 4 is scripted. But this comes with a price that you are no longer able to express some complex concepts using just the power of words. Especially in times where people get tired of texts and prefer pictures.

For me it is also hard to pick the technology. I enjoy testing every aspect of it (like LXD from recent) and discover new things. This creates problems with employers, who just want things to be done quickly. But if the problem I need to tackle is a good fit for a technology, the process get tremendous boost. So, before starting to learn, try to get wet into a problem you're trying to solve. As Google found out - practice first works better, and for all other cases there should an emotional engagement from the awesomeness and importance of what are you trying to achieve. =)