Since my last newsletter, to my surprise, way too many people have written to me with questions along the lines of, “So what did you study for programming fundamentals? What kind of math? Where do I even start?”
I spent a long time thinking about what I could say publicly about it. Then I decided to just write it as it is: what had the biggest impact on my path towards software engineering mastery.
TL;DR – learning from a mentor who truly lives and breathes all of this stuff and is perpetually “on fire” about it. That’s it. There is no other secret. You can all close this letter now. But you’re interested, the longer version of the story and my thoughts are below.
At the time, I was already working at an IT company, but I still had little idea what I should focus on.
Before that, I had bought a few courses, tried frontend development, and written a bit of JavaScript and Python. I also had a technical degree, but I had studied remotely, and it had not given me much depth.
There was always too much interesting stuff around. More courses appeared every day, every technology promised another “easy way” into the profession, and I bounced between all of it like a squirrel, with no proper foundation or direction.
Math was a separate story. For most of my life, for some reason, I thought it simply was “not my thing.” A terrible misconception :)
Then one day I came across an announcement from a programmer who was accepting students. He later became my main mentor.
Something just clicked: “Oh, this isn’t another throwaway course!” I think it was because, for the first time, his materials showed me something other than the same applied technologies being recycled from one course to another. I saw genuine depth and his interest in formal methods, mathematics, and the universal foundations of programming – things that most courses and blogs I had encountered never even mentioned.
It turned out that mathematics is beautiful. Programming is beautiful. Beneath all the languages, frameworks, and libraries lies a vast, bottomless world. And you can spend your entire life growing stronger inside it.
I wrote to him and honestly described my situation: I wanted to learn how to program really well, while the “courses” around me were not producing much progress in that direction. I liked the clarity, simplicity, and depth of his reply. It was obvious that this person knew where to lead his students.
When he agreed to take me on, I was genuinely happy.
I no longer had to decide again every day where to go and how to spend my limited free time. I trusted my direction to someone who could see much further down the road than I could and had already been walking it for many, many years. Yes, I believe trust is extremely important here.
It did not bother me that the training format was harsh: strict deadlines, reporting requirements, tests, comparing my solutions with reference solutions, and mandatory written reflection on exactly where I had gone wrong and why. And there was more: I was not allowed to keep bouncing between unapproved courses on the side.
That trust paid off quickly in practice. Over the next six months or so, I progressed through the company’s internal assessment criteria to nearly senior level. Some of my colleagues took two, three, or four years to cover the same ground, believe it or not.
Of course, some of my personal qualities also mattered – hyper-responsibility and the ability to switch into hyperfocus almost consciously. From my first days at work, I had enough instinct to understand how important client data and the reliability of interfaces and services were, and how expensive my mistakes could be. And then there was persistence.
Yes, after trust, persistence is the second requirement on any path of self-education or training under Teachers.
But my mentor gave me something else.
I want to say that I learned to think faster, but that would not be quite right. What happened was that I started thinking in the right direction and in the right way – my teacher passed this way of thinking to me through guidance and training.
Because of that, I simply solved work problems faster. I had time left to prepare for assessments, while applied technologies started falling into place faster and more easily, almost by themselves.
That is how, by looking through someone else’s eyes – through the lens of someone else’s experience – I saw the beautiful, deep world of engineering behind writing software: different programming paradigms, data flows, FP, systems engineering. Years later (closer to the spacetime point from which I am typing these words :) I finally understood that modern engineering does not end with creating software at all, and that I could keep improving my ways of thinking – rewiring my own brain – for the rest of my life.
For example, modern management can (should!) also be seen as engineering an organization. DevOps is directly connected to how collective work is designed (“engineered”).
Could I have achieved something on my own, without guidance and without this “lens of someone else’s experience”? Most likely, yes. But I think I would have achieved much less.
Over those same years, I might have stumbled across a couple of good courses and read a dozen of the “right books.” More likely, though, I would have repeated “one year of the same experience” several times, cycling through tools without strong ways of thinking and picking out of the material only whatever felt “intuitive” and simple. No shortcuts.
The ways of thinking I received from my mentors accelerated my progress many times over.
I will say it again – learning from a good mentor is the dirtiest hack. Literally an unfair advantage: someone passes on experience that another person has already paid for with years (decades!) of their life.
I use this way of absorbing someone else’s experience far beyond programming and engineering. For example, I have been practising kendo for about six months. My dojo has two sensei, but I still never miss a chance to attend a seminar or buy a good online kendo lesson from a teacher with a high dan rank.
So far, every time, I have received more than I paid for.
Of course, the internet is full of scammers. How do you avoid them? Well, remember trust? You would not trust the first person who walks up to you on the street. It is the same here, especially when “great teachers” crawl out of every hole. Everyone now has their own course, a great offer, huge discounts – “only I can give you the secret knowledge of X.”
How do I handle it? I never rush, and I look for evidence of experience: what does this person write and say, and how do they do it? Can you tell from that how clearly they think? What are they offering? How many of their students have they led to success?
And one more thing – how committed are they to the work they teach? If some programmer called Pete suddenly starts teaching marketing, that is simply strange.
Finally, there is a completely counterintuitive but rock-solid rule: a genuine mentor is unlikely to aggressively push you to train with them. It is a total red flag when sales start to dominate the “work itself”: constant mega-discounts on courses, endless advertising that exploits your fears, and so on. Those people are committed to sales, not their craft. We should be interested first in people who are immersed in their craft, still on fire about it, and who, in one way or another, select their students (many literally do).
One last thing: AI. Can modern neural networks replace a mentor? In my opinion, not completely. Even with access to an enormous amount of knowledge, a neural network does not automatically know exactly what you need to study, in what order, or why.
Until you have mastered self-directed learning – until you literally know “what to learn, in what order, and why” – neural networks can mostly help with the feedback loop: “give me a task, check my solution.”
You can, of course, ask a neural network to create an “in-depth study plan for software and systems engineering.”
In my experience, without a well-developed ability to teach yourself, you are very unlikely to get a learning path from AI that actually fits you. Agents still do not replace a human being who watches your development for months or years, stops you from bouncing around at the right moment, and honestly gives you the kicks in the ass you need.