It is essential to every professional to grow her insights on the technology she is working with. In general I am talking about reading books, blogs, listening to pod-casts, solving small challenges, going to meetups or generally just talk to people from the same domain. Yet reading alone is not going to hep. You can spend hours watching tutorial videos on the newest and hottest technology trend, and learn nothing. The funny thing about this approach, is that it does not help you in any way, as long as you do not internally integrate the new knowledge. I am talking about resonance. Do you know the feeling, when the text you are reading is making you excited? You instantly know many situations, when if you already had this knowledge, everything would have been easier. Why is that?
From the field of cognitive robotics we know the term grounding. When applied to this topic, we could be roughly speaking about ‘concept grounding‘. A concept or a word has no meaning on its own. It is just a socially accepted combination of sound/light waves. Robots can learn to describe things and seem smart. They learn to describe things as ‘red‘, ‘apple‘ or ‘square‘ and distinguish them from ‘roundish blueish plumbs‘. Does the robot really understand the concept of a apple, or does it just use some output to some highly specific input. The grounding of symbols is the hard part of cognitive robotics. The creation of connections to the whole world the agent (robot) lives in, not just the creation of some smart fruits detection routine. What would therefore be concept grounding? It would be the number of things the new theory or concept is connected to. The number of things it effects. The number of different situations, other from those the author intended, the new knowledge can be applied to. You can read anything you want, however smart the author is, but without integrating it with your world, it is just ungrounded words.
Sometimes when people ask me for advice, I answer with some vague theory on how to change their inner state of self, in order to integrate any given advice. People often ask: what should I do in this or that situation. My boss is a sadistic bastard, what should I do? Should I use a set or a list in this concrete routine? Should I learn to program? Well, guess what, no single answer to a situation is correct unless you know the motivation behind it. Understanding of the motivation, the background, the grounding to all possible other situations I could apply the theory is what matters.
Should I use a set or a list? – If you need a cost-effective is-in vs is-not-in distinction a set is preferred, if you need to access it even quicker, after you’ve found your element, a list is preferable. Is this a correct advice? No! Because by understanding the implementation of those two, their provided method signatures and after seeing those two in different situations, you start to understand why to use one or the other. Not just applying some foreign rules.
As for the sadism example, the article by Michael O’ Church is stuck in my mind. If your boss is torturing you for his personal ego gain, no situational smart nuance will help you. The realization that someone is a sadistic bastard and preparing a reaction on a higher meta level could be the cure. What drives the bastard? Why is he doing it? What will make him stop? Can you make him stop? Should you defend yourself of try to divert his attention? Eventually you will categorize your boss as a person that has risen to power in order to have minions he can command. Work output does not matter to him, neither does his personal gain/loss as long as there is someone who’s life he can make bitter.
This post is not supposed to teach the community anything new, it is supposed to make use of the read.
I am not going to write about the well known rule of learn, apply, teach and try to teach you how retain as much as possible. There have been enough blog posts you can read on the web. I believe that I would bore anyone to death by repeating the idea. Even worse, I could drive you to stop reading this post. So if you are interested, please use your preferred search engine:). What I intend to do, is to help you with teaching others. Imagine that a new developer asks you some question. The past week a very junior intern questioned my code and asked “why did you make this object const?“. I applied by saying “because you do not want to change it“, and by “so I get a compile-time error when trying to change it.” I’ve seen the blank stare of total nothingness. The concepts I presented weren’t grounded. He just did not have enough experience to apply the knowledge. I liked his reaction as he pulled his notepad and wrote the ideas down. I salute you, intern! He is probably smarter than I was a few years ago.
I started again, but this time by explaining the concept with a story. Stories are always good. They can be followed, make room for questions and adaptations and most importantly, are remembered for longer periods of time.
Imagine that you prepare your data; you use this data to call a mystery1 method; propagate the same data to mystery2; and voila mystery2 gives you some wrong output. After a few hours of searching and blaming mystery2 for incorrect data processing, you realize that mystery2 did everything correct, the data you passed in were incorrect. Even worse, the input data were not the data you’ve set up previously. Mystery1 changed your data, and in the context of the function call, it was logical. Yet it was not logical from the point of view of the whole application.
Does this short horror story sound familiar? That is why you use const. You learn to not trust foreign code. And if you are smart enough, you do not trust your own code. As a small remark: I yell uncontrollably at everyone who uses const-casts. I literally act as a 5 years old who’s sand castle just got destroyed.
There are many more examples that would suit your world, yet coaching young Devs is what I do most of the time. Therefore I most easily come up with code related horror stories. I hope that you can come up with your own examples. So next time, when someone asks for help, do not help him with his problem, change the way he sees the problem.
If you enjoyed this post, then make sure you subscribe to my Newsletter and/or Feed.