Sequential or Random, about memory we?talk.
This is blog post is co-authored with Mouneer Rabie
The famous story of a study done on London cab drivers and how their brains wired to optimize their daily job; how their spatial memory and processing are advanced. It is like the map of London streets is imprinted in their heads with all information of places, shortcuts, traffic patterns, and whatnot.
We think professionals in cognitively loaded jobs are wired to function either sequentially or randomly from the perspective of retaining memory and sequence of events. Similar to London cabbies, what we do affects how we think and vice-versa.
For example, writers have a story plot; some are good at having a twist then injecting more in random access manner (jumping from point to point in the plot); others need to go sequentially given they know enough information about the beginning and the end (This will help define the vector of work, the vector needs a direction and magnitude).
Our problem memory is either:
1- High level (pattern identification), The high level is god-given, and that what helps us navigate the world, the ability to abstract and zoom out so we can comprehend the scene or the problem from a distance.
2- Low level (detailed), This is what we must use to get a specific task done; this is the craftsman’s memory, even with simple home chores, attention to details is necessary.
Maybe this is why we produce bugs, when we design code, it is designed with a sequence and flow in mind; when we fix bugs, we fix the state, we go around “randomly” trying to figure out what the problem is while forming hypotheses for the solutions all at once.
The problem also happens when we use two different models like random access for adding features and fixing bugs while dealing with code that was designed with a specific flow.
In the book “Elements of Style”, the author stressed, “Omit needless words”, we think we can add attribution (outcome, goal, impact) to the software design; this should force us to think about why we are adding what we are adding and incase we are adding something for future use or extensibility then It shouldn’t be addressed at this point of time, As Donald Knute said, “Premature optimizations is the root of all evil”.
Conclusion:
1- Our intellectual abilities are very limited because of the limitation of memory.
2- Considering point 1, We should make use of “Omit needless words” and “Premature optimization is the source of all evil”, working with a team who knows why each piece of code exists is one of the things that can triple the speed of team’s productivity.
3- Considering and understanding “Random and Sequential” will help to adjust to the situation at hand; It is a chance to use the right tool for the situation that can happen in code or conflict, don’t fix the problem, fix the flow.
4- Make use of your subconscious by feeding it clean, structured data like “London taxi drivers” for multi-level software documentation; think of it as a 100 GB photo. You are zooming in based on your need; your brain and eyes can’t comprehend all the details, but you can zoom in and investigate what you need for the situation; your subconscious can help you index the photo and tell you where is what.