The bar for being a Senior Software Engineer is too damn low. We have Seniors that do not know the basics. We have Seniors that do not know how the tools they use every day work under the hood. Furthermore, we have Seniors that do not know why they are coding using a given pattern/standard. They do not know about tradeoffs. They can't argue in an objective manner. Not only that, but they are just mumbling about what they read in some articles. They know how to use a framework, but do not know the concepts.
This article is more of a rant about what software engineers are doing wrong, and I hope reading this, they can fix it.
Mappers vs Packers
The Programmers' Stone divides people into 2 different types: Mappers and Packers.
Packers are people that acquire knowledge using “knowledge packets” - little bits of truth (or errors). Their knowledge is a stack of these knowledge packets. Examples of knowledge packets: we use React to build frontend applications; we store data in a SQL database; we use Heroku to deploy to production.
Mappers use these knowledge packets to build a mental model of the world. The mental model gives an understanding of cause and effect within a situation. This understanding allows us to derive a solution to any problem within a situation, instead of attempting to select a rote-learned response.
The main difference between Packers and Mappers is that mappers understand what they are doing, and they can generalize/reapply their knowledge to solve new situations.
You can't become a wonderful Senior being a Packer.
The rest of the article shows how a Packer and a Mapper handle different situations and learnings.
Knowing the basics
If you ask a Packer what is a variable, he would say that you can declare a variable in JavaScript like this `const myVar = “ok”`. But he will have trouble explaining why we need variables at all, and how they are really stored by the computer.
Why do we need variables?
How variables are really stored?
The type of variables matter?
Knowing your tools
If you ask a Packer how to use vite to run his frontend, he will be able to show step by step, because he read it in a tutorial. However, if you ask him what is vite, he probably just parrot something he read somewhere else. He won't be able to tell you that vite has a dev server and also a bundling mechanism for your code. He won't even know what bundling really is, and why bundling is needed after all.
What is a dev server?
What is bundling for? Why do we need bundling in the front end? Do we need bundling on the backend?
Using patterns
You can find a Packer when you see a code using a lot of patterns that do not make sense for that situation. You are going to see all Gang of Four patterns, you are going to see clean code/clean architecture patterns all over the codebase. Each of these patterns is a knowledge packet, they didn't understand what problems they solve, in which situation you should use them, and that you don't need to use all of them.
Tradeoffs
Everything has tradeoffs, you can't have only pros or only cons. If you can't argue in favor and against something, you don't really understand it. If you can't argue in an objective manner, you don't understand it. Indeed, if you just read about something without really trying it, you probably have the wrong mental model about it.
Solving a Problem
A Packer when faced with a problem/bug will try to find the exact article/content/StackOverflow answer that fits the situation and solves the problem. He won't understand why the problem is happening and the root cause of it, but he will be able to fix it. If a variant of this problem happens again, he will another content that fixes the “new problem”
Unlike, the Mapper will first try to understand the root cause of the error, and which assumptions are wrong in their mental model. They will fix the mental model, and use the new and more correct mental model to fix the problem. When faced with a variant of this problem, the pattern matching of his mental model will easily solve it.
Fixing it
Here is my take on how to fix it. Start reading The Programmers' Stone to understand more about Packers and Mappers.
The problem starts at school, where we value more rote-learned memory than understanding. To extract understanding from knowledge packets, we need reflection.
We need to start asking ourselves “Why” to really understand. You can use The Feynman Technique to refine and simplify your knowledge.
You avoid the fear of being wrong and focus on fixing your mental model when it is wrong given a new situation.
List of things that you should know about how it works
How the computer works, from electrons to transistors, to CPU, assembly, and high-level programming languages.
How the internet/network works, how you send some information from one computer to another, all OSI 7 Layers.
How browsers work, how DOM works, how CSS renders, how JavaScript is loaded
Understand distributed systems before start using "microservices architecture" everywhere
What else?
If you want to become a Mapper and a Senior, you should come work with me at Woovi
This is happening all across th tech sector. I'm in the sysadmin field and it's happening in my industry too. Senior admins coming in without basic knowledge is very frustrating and I hesitate to teach them because they should already know these things.
I don't really agree with the mapper/packer analogy though it did reming me of the map/reduce (Hadoop) data processing algorithm. 😁
My son is in college learning to code (computer engineering) and he'll "stand in the shoulders of giants" without knowing how the bottom layers work but that's how it'll be done down the road and that's ok. He'll complete his assignments and he'll make websites and services and build stuff by looking it up on stack overflow. It's the same as us in college except we had to begrudgingly look things up in books or figure it out ourselves (which didn't always work well or wasn't very efficient when we had to re-invent stuff). 😁
The world will be fine. The younger generation doesn't need to be experts in everything unless there is an apocalypse and if that happens, we'll have bigger problems to worry about.
I also think that too many people have the "senior" title simply because of scarcity. There is no one to hire, so companies are willing to pay more. In order to avoid creating inconsistencies between salaries, they hire lower level people with the senior title.