A way of thinking that allows you to become capable of things, rather than just programming
I have finally solved something that I have been struggling with and pursuing my whole life. It is the ability to 'become capable' of doing anything.
For a long time, no matter how much time I spent or effort I put into a subject, I couldn't even reach an average level. I do fine when it comes to things others do for me or things I don't have to do myself, but when it comes to me becoming capable of something, I am in my 50th year of life and it has been hopeless. That has been the source of my self-esteem issues and my guilt about living a normal life.The number one problem I wanted to solve in my life is that. So, I have been working hard to solve it for a long time.
A solution through guitar playing
I am incredibly clumsy and can't do anything, so I decided on only two things I wanted to be able to do in my life: guitar playing and programming. I solved the guitar playing part a little while ago. If I were to name one fundamental problem, it is just this: 'Practice from a slow tempo using a metronome.'
I had been playing guitar for decades but never felt like I could actually play, but thanks to this advice, I at least solved the feeling of not being able to play the guitar. However, I had no idea how to solve the programming side of things. As a software engineer, I felt that I couldn't enjoy my life unless I solved that.
Observing a world-class engineer
Just the other day, my skip-level manager said this to me during a one-on-one: 'How is it? It's fun working with a world-class engineer, right?'
I am currently working on a project, and the colleague I am working with is an incredibly amazing engineer, so I had no choice but to nod at the skip-level manager's words. I am truly lucky. Feeling sorry that I am so incompetent, I asked him for a troubleshooting pair-programming session to observe him.
He didn't seem to understand the intent of my request, but I wanted to learn his way of thinking. How he thinks and how he solves problems.
A shocking solution
I worked on solving the problem with him. If it were me, I would be flailing around, querying various logs and looking at code, but he looked at only the first log and started forming a 'hypothesis'. He didn't move his hands at all. While talking, he explained that since the architecture is like this and this log is like that, he guessed that such and such was happening. Therefore, he said the table he should check was this one, and he executed only one SQL query. That query perfectly represented the cause of the problem.
If it were me, I would have been querying and looking at code, going back and forth, but he only moved his hands that one time, and he solved in an instant a problem that would have taken me several hours or more.
Frighteningly, he had almost no experience with that codebase. I had much more context than he did. It was like a god-like feat, but at the same time, it wasn't that he was doing something 'humanly impossible'.
It was the moment I realized that programming productivity is overwhelmingly 'intellectual labor'. I suppose this is what it means for productivity to be vastly different depending on that 'intellect'.
A word from a young colleague
The moment I had been waiting for for years finally arrived. On that same day, I had lunch with another young colleague because my colleague was returning home to Seattle. They are very young and have little career experience. But they are very talented. Even though they had just graduated from university, they handle their work thoroughly and are extremely sharp. They are the exact opposite of me. I started talking to them about onboarding, that is, when you start working on something new. The architecture of my team is incredibly complex, so there are internal videos created by someone for each microservice. They are organized into a series so you can study each item. I was interested in their onboarding process as they keep up with such an incredibly complex architecture. When we were talking about that, he let out a shocking remark.
Understanding takes time
'Well, it's difficult even after watching the videos, so I watch them ten times. I rewatch them over and over, and I pause and take notes on the parts I don't understand.' Then, the other colleague also said, 'Yeah, that happens, doesn't it? I also watched them over and over again.' I felt like I had been struck by lightning at the same comment from these two capable people. I usually take the step of thinking that because it's difficult, I can't understand it after one viewing, and since that's just how it is, I don't really have it in my head after one viewing, so I start executing and debugging, and gradually understand it bit by bit. I used to envy smart people because I thought they could watch something like that and understand it in one go, but that's not the case. No matter how smart a person is, understanding takes time. Smart people appear to understand quickly because they have spent that time accumulating knowledge, so the context is already loaded into their mental memory regarding what they already understand.
Those who try to be fast become slow
In my mind, I had given up in a sense because I thought understanding could never be perfect, was always half-baked, and would only be acquired gradually (and I don't even know if I'm understanding it properly). Moreover, I have always thought, 'If I don't increase my productivity, how can I do things faster?' However, ironically, 'trying hard to be able to do things fast' was overwhelmingly lowering my final productivity. Because my understanding wasn't sufficient, my efforts were spinning their wheels, I wasn't absorbing anything, and I was forgetting things easily, so nothing was sticking in my head.
Take time to understand
I thought about that over and over in my head, and that weekend I reached the conclusion mentioned above. I changed my way of thinking and completely stopped trying to become capable of doing things quickly. I tried to understand what 'understanding' is by reading blogs like the one below.
Until now, I thought that you couldn't understand things unless you actually touched the code, but that wasn't the case. I decided to take the time to understand any parts of the documentation that I didn't grasp before moving on. Even when reading a single email, because it was in English, I had developed a habit of skimming through it, but I tried taking my time to read and understand it slowly.
Practicing "taking time to understand"
As a result, although I felt like I was spending much more time on documentation and emails than usual, when I looked at the clock, not as much time had passed as I thought. Moreover, though it is just my own subjective feeling, I am able to understand the technology and context more clearly than ever before. And what's more, it remains clearly in my memory. Even though I didn't make any particular effort. When attending meetings, I used to give up on understanding and just try to manage my own part, but by having the mindset of "trying to understand," I started looking up English words I didn't know on the spot, and asking for clarification if I didn't understand. Furthermore, following the example of my colleagues, I started taking the time to review and understand recordings or AI-generated scripts if I didn't understand something during a meeting.
Gaining a sense of being able to control complex technology
By doing that, and adopting the habit of thoroughly understanding things without trying to rush, accepting that "understanding takes time," something I had never experienced in my life happened. Code reading, which I used to take endless notes on, I can now understand 100% of the behavior by taking it slowly, and I have confidence in that. When debugging, by slowly observing the few logs and looking at other items in the logs that I used to skip over, I have come to be able to solve problems directly with overwhelmingly less trial and error.
And above all, the best part is that for the first time in my life, even when there is something I don't understand, I have been able to think, "I can do this." I have been struggling for 50 years wanting this feeling, and I have finally obtained it.
Gaining a sense of being able to control my life
That change was not limited to programming and technology. In my private life as well, I had given up on understanding many things. I thought it couldn't be helped because I wasn't smart. But by taking the time to understand, I was able to feel a sense of "being in control" of various small things in life, and I was able to gain a sense of security that "I can do it."
It's a habit, not intelligence
Kent Beck, who developed eXtreme Programming, once said, "I'm not a great programmer; I'm just a great programmer with great habits." I always thought I was less intelligent than everyone else. In fact, no matter how much effort I put in, or how much time and money I poured into it, I could never do it. However, it wasn't my intelligence. It was simply a habit of thinking. Recalling the guitar incident, I feel the root cause was the same. I couldn't do it because I was trying too hard to do it quickly. For everyone, things are difficult at first; there is nothing that is simple, and understanding takes time. I feel very happy right now. I never thought that what I really wanted in life would be something I could find in America.
Fortunately, a book that includes this episode, which is widely read, has been released. This book is being read by many people, not just engineers. I share various secrets of productivity that I discovered in America.
Please also check out the next post I wrote a few years after this one as a continuation.
