Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Mental Preparation

Before we begin with the technical side of things, we need to define something that is, in my opinion, even more important at the very beginning: mental preparation.

Unfortunately, this is something that is discussed very little, if at all.

You need to know what to expect. You need to have at least some understanding of what kind of profession you are entering, or what kind of profession you have just started building yourself into, and what you should be prepared for along the way.

This kind of training, learning, and mentorship is primarily intended for people who aim, at least theoretically, for some of the highest and most ambitious goals in software engineering, and for people who want to pursue this field because they are deeply interested in it and genuinely care about it.

What do I mean by genuinely caring about it? Very simply.

From my perspective, there is a fundamental difference between liking someone or something and loving someone or something. Those two things are not comparable.

I love what I do, and personally, I would not want to choose any other profession.

I think this is important for you to know from the beginning.

You should know who you are speaking with, how that person thinks, and how much this profession actually means to them.

The starting point of our conversation is based on three factors that, in my opinion, should form the foundation of any serious learning and development process:

  • there are no easy and difficult tasks;
  • do not compare yourself to others;
  • exponential learning.

There Are No Easy and Difficult Tasks

There are no easy and difficult tasks.

There are tasks that you can currently do and tasks that you currently cannot do, depending on your goals, ambitions, needs, affinities, natural tendencies, general level of ability, and intellectual capacity. Do not begin by asking yourself questions such as:

  • How difficult is this?
  • How long will it take me to learn this?
  • Will I be functional in three to six months?

When you approach learning this way, you unnecessarily create mental limits for yourself.

At that point, you almost do not need an external enemy anymore, because you have already started limiting yourself before the real work has even begun.

Instead, ask yourself questions such as:

  • How strongly do I want to commit to this?
  • At what level do I want to pursue this?
  • What am I willing to give up in order to reach that level?
  • How much do I need to change my current way of life in order to align it with my goals, and how ready am I to do that?
  • How patient and calm am I?
  • How much endurance do I have?
  • How strong is my focus?
  • What are my working habits like?

These questions force you into a much more objective analysis of your current position.

They help you understand what your next steps in the learning process should actually be.

Of course, this requires a certain level of self-awareness and self-criticism.

But those are also necessary parts of development and progress.

You need to be aware of what you can currently do, what you cannot yet do, and what exactly is missing between those two points.


Do Not Compare Yourself to Others

Do not compare yourself to other people.

Do not compare yourself to colleagues who are approximately at your level, or to people who started at roughly the same time as you in terms of functionality and productivity.

Focus on yourself. Focus on what you are doing, not on what everyone else is doing.

Comparison will usually bring very little value during the learning process and the early stages of development.

In many cases, it can become counterproductive or even self-destructive.

Be especially careful when looking at people who have ten, fifteen, or twenty years of experience.

Do not spend too much time observing or researching things that normally require years, and sometimes decades, of experience to fully understand.

From the perspective of someone who is still at an early stage of development, the level of complexity involved can easily appear completely unreachable.

That impression is often misleading. Instead, focus on what you are doing right now. Focus on your next step.

Focus on gradually expanding the range of things you are capable of understanding and doing.


Linear and Exponential Learning

There are linear and exponential ways of learning.

Linear vs Exponential Learning

Linear learning means that, approximately speaking, every new unit of invested time or effort gives you a similar amount of new knowledge.

You learn one subject after another, but your previous knowledge does not dramatically accelerate your ability to understand the next thing.

In many cases, each new piece of information can also be learned and applied to a particular scenario relatively quickly.

You process the information, understand the basic mechanism, apply it, and very soon you can see a functional result.

Learning how to drive a car is one example. Learning how to prepare a specific meal is another.

You learn a sequence of actions, practice them, and relatively quickly you can produce a visible and functional result.

In practical software engineering, however, learning rarely works this way.

Software engineering is exponential learning.

You will not usually encounter one isolated thing, understand it immediately, and then apply it functionally to a real situation.

Instead, the process often looks more like this:

  • You encounter ten different things.
  • After some time, three of them begin to make sense.
  • Eventually, those three things connect in a way that produces one functional result.
  • As your knowledge grows, the number of possible connections between concepts grows as well.
  • The learning process begins to branch.
  • And as the branches expand, the overall level of complexity increases with them.

This applies to almost every field and subfield within software engineering.

That is something you need to understand from the beginning, because it directly affects the amount of patience, calmness, and mental stability you will need.

You may work on something for two months before you see a meaningful result. For some things, it may take a year.

There will be situations where you spend days or weeks preparing, drawing diagrams, analyzing systems, designing structures, or thinking through different approaches before you write any meaningful implementation at all.

And that is completely normal.

The important thing is to understand that lack of immediate visible output does not necessarily mean that nothing is happening.

A large part of software engineering learning happens before the result becomes visible.

You are building connections. You are building mental models.

You are gradually creating the internal structure that will later allow many different pieces of knowledge to work together.

That is why patience is not an optional quality in this profession. It is one of the foundations.


Time and Energy Management

The next step in our discussion is how you distribute your time and energy.

Of course, enthusiasm, ambition, motivation, and excitement about something new are important.

But it is equally important to understand how you spend and distribute your energy, time, and effort.

When you are absorbing a new type of information and learning how to analyze that information in a new way, maintaining a high level of focus over a relatively short period of time is one of the keys to adapting effectively and absorbing new knowledge.

People often say:

I currently have seven or eight free hours every day. I am going to spend all of that time learning.

Theoretically, you can do that.

The much more important question is how effective those seven or eight hours are actually going to be.

And this applies regardless of whether you have previously worked in a technical field or are entering one for the first time.

Instead, my suggestion is to begin with shorter and more focused sessions.

During the first week, experiment with schedules such as:

  • 3 × 30 minutes
  • 2 × 45 minutes
  • 4 × 30 minutes
  • 3 × 45 minutes
  • 5 × 30 minutes
  • 3 × 60 minutes
  • 4 × 45 minutes

These are not rigid rules.

They are examples of different ways to distribute focused work while your mind is adapting to a new type of workload.

Focus Level Importance

Alongside intensity, another extremely important factor is continuity.

During the adaptation period, you should work every day.

That does not mean that every day must be equally productive.

If there is a day when you can only manage two focused sessions of thirty minutes, that is completely acceptable.

What I would strongly avoid is a pattern such as:

  • working for three days;
  • stopping for two;
  • working for five days;
  • stopping for another three.

That kind of inconsistency can make adaptation significantly more difficult and can negatively affect both efficiency and productivity. During the first several days, observe yourself. Analyze which pace works best for you at the beginning. Once you understand that, gradually increase the intensity over time. Think about it in the same way you would think about starting physical training.

If you begin going to the gym, there is a period of adjustment, adaptation, and progressive loading. The principle here is similar. The difference is that sustained intellectual work can eventually become extremely demanding in its own way. Do not compare your initial working intervals with those of someone who works nine or ten hours a day and has ten or fifteen years of experience in the field. That comparison gives you almost nothing useful.


Continuity has to exist. Intensity increases over time.


A good approach is to create several different schedules and use them depending on the type of day you are having. Some days you will have more energy. Some days you will have less. The important thing is to preserve continuity while gradually increasing your capacity for concentrated work.


Health, Lifestyle, and Quality of Work

At the highest levels of development, software engineering can become more of a way of life than simply a choice of profession.

But health is far more important than software engineering.

From my personal perspective, I think about health and long-term functioning through five major areas:

  • what is eating away at you mentally — stress, nervousness, and internal pressure;
  • what you eat and consume;
  • your general lifestyle and habits;
  • your level of physical activity;
  • how you sleep and how well you recover.

The quality of your work depends on many things:

  • continuity;
  • focus;
  • persistence;
  • determination;
  • calmness;
  • composure;
  • attention to detail;
  • patience;
  • quality of adaptation;
  • quality of analysis.

Your health and overall quality of life can influence every one of these factors.

I will give you an example from my own life:

  • I try to reduce unnecessary distractions and disruptions to my focus as much as possible.
  • I do not watch television.
  • I do not spend time on social media.
  • I try not to involve myself in conversations that I already know are likely to be unproductive, pointless, or mentally draining.
  • I do not drink alcohol. I do not smoke. I do not use psychoactive substances.
  • I do not drink carbonated soft drinks. I do not eat sweets.
  • The sugars I consume come almost entirely from fruit, together with some honey that I occasionally put into tea.
  • In general, I don’t eat highly processed foods.
  • I try as much as possible to prepare my own food.
  • I train 4-5 times a week, physical activity is very important for health.

That is essentially it. When written as a list, it may sound as though I have given up many things, but once those choices become normal habits and you live with them for a long enough period of time, you begin to notice how they affect you and how they influence different parts of your life.

I am not trying to act as a doctor here, and none of this should be interpreted as medical advice.

I am simply pointing out how important lifestyle can be for many different factors, including the quality of your work.


My own way of working, and the quality of work I am capable of producing, would not be anywhere near what it is today without the habits I have developed.


Some of those habits have always been part of my life. Others were developed gradually over time.


Mentorship or Courses?

One of the important questions in any technical field is:


Is it better to learn through mentorship or through courses?

My personal experience is strongly on the side of mentorship.


I have always been willing to invest my time in people who are stable, composed, calm, patient, and understanding. People in whose eyes I could see a genuine desire to transfer knowledge. People who were visibly satisfied when something they had taught me was later understood, applied, or successfully used somewhere else.

I have always been drawn to people who genuinely enjoy what they do and who have a certain amount of passion and enthusiasm for it. That does not mean that every mentor will have the same level of knowledge or experience. They will not. If a mentor gives you the maximum value they can provide from the knowledge and experience they currently possess, that relationship can be far more functional and effective than almost any course.

Unfortunately, I have met many people with extremely broad technical knowledge who simply did not know how to transfer that knowledge to someone else. They knew the subject. But they could not bring it closer to another person. They could not explain the same concept in several different ways. They could not adapt the explanation depending on who was sitting in front of them.

Part of this may depend on how developed someone’s social and interpersonal abilities are.

But ultimately, it is entirely up to you to decide who deserves your time and energy.

I have never particularly preferred courses. The courses I completed rarely gave me any significant long-term benefit, especially compared with what I gained by learning directly from experienced people. I always tried to spend time around people who had been working directly in the industry for ten years or more and who were dealing with problems significantly more complex than the ones I was working on at the time. I did not spend much time worrying about the complexity of what they were doing.

My focus was always much simpler:

What can I learn from this person that I can understand and apply at my current level?

That was what mattered to me. I also never placed much weight or credibility on people who primarily copied existing solutions, rarely created anything of their own and whose industry experience existed more on paper than in the depth of the work they had actually done.


Experience is not defined by the amount of time that has passed.

It is defined by the quality of the time that was spent.


Someone can say that they have twenty years of experience. They can call themselves a senior engineer or an architect. But if they have spent those twenty years repeating essentially the same type of work, often relying heavily on existing solutions without significantly expanding the scope or complexity of what they do, then the number itself tells you very little. On the other hand, someone may have ten years of experience and spend those ten years constantly entering unfamiliar territory, solving new problems, working with increasingly complex systems, and continuously pushing themselves toward a higher technical level.

Decide for yourself which of those two people would likely be the more suitable mentor.

Keep in mind that real mentorship has to be earned through effort, persistence, and attitude.

You also need to become someone worth investing time in.

A mentor needs to feel that their effort matters and that you are serious enough for them to want to continue training you.


I never watched the clock.

I never waited for five minutes before the end of the workday so I could shut down my machine and leave.

I never found it difficult to work through a weekend or skip going out so that I could sit down and study, especially when someone had already invested their own time in helping me learn.

Those things are noticed. They are valued. And the right people will appreciate them.

When someone gives you their time, experience, patience, and attention, the best way to respect that is to show through your own actions that their effort is not being wasted.


Train Creativity and Intuition

There is another thing that I consider extremely important.

Do not train only memory. Do not train only repetition.

Do not spend your entire development process trying to become better at remembering patterns that can already be repeated mechanically. Train what is, in my opinion, far more valuable:

  • creativity;
  • intuition;
  • the ability to connect things that initially appear unrelated;
  • the ability to look at the same problem from several different directions;
  • the ability to recognize that something is wrong even before you can fully explain why.

These are some of the areas where human thinking is fundamentally different from mechanical repetition.

A machine can:

  • process enormous amounts of information.
  • reproduce patterns.
  • generate variations of things that already exist.

But your job should not be to compete with a machine in memorization. That is the wrong competition.

The goal should be to develop the parts of your thinking that become stronger through diversity of experience.

That means:

  • Doing different things.
  • Learning different things.
  • Solving different kinds of problems.
  • Reading outside of your immediate technical area.
  • Building things.
  • Breaking things.
  • Fixing things.
  • Talking to people from completely different professions.
  • Learning music.
  • Drawing.
  • Training.
  • Traveling.
  • Studying science.
  • Working with hardware.
  • Writing.
  • Designing.
  • Observing.
  • Thinking.

Not everything you do has to produce an immediate and measurable software-engineering result. That is an extremely important point. We have become too accustomed to asking:

What is the direct benefit of this?

Sometimes there is no immediate visible benefit. That does not mean there was no benefit.

A large amount of personal and intellectual development happens indirectly. Some experiences influence:

  • how you think;
  • how you organize information;
  • how you recognize patterns;
  • how patient you are;
  • how creative you become;
  • how quickly you notice relationships between things;
  • how well you remain mentally balanced.

You may not be able to measure those effects immediately. They may become visible years later.


Not Everything Valuable Produces an Instant Result

We should be very careful with the idea that something has value only if it immediately produces an efficient and visible result.

That way of thinking can become extremely limiting.

Imagine that you spend three hours learning something and at the end of those three hours you cannot point to:

  • a completed feature
  • a new service
  • a finished application
  • a measurable performance improvement

Does that automatically mean those three hours were wasted? No.

Maybe you in that case:

  • developed a new way of thinking about a problem.
  • encountered a concept that will become useful six months later.
  • improved your patience.
  • improved your ability to concentrate.
  • created a connection between two completely different areas that will later lead to a solution you would otherwise never see.

Not every useful process has an immediate output. This becomes especially important when developing creativity and intuition.

Those qualities are not built through one isolated exercise. They are built through accumulated experience.


Diversity of Experience Matters

If you do the same thing every day, you may become extremely efficient at that one thing. But efficiency and creativity are not the same thing.

Creativity often comes from connecting things that were previously separate. You see something in one field and realize that the same principle can be applied somewhere completely different:

  • You recognize a structure.
  • A rhythm.
  • A relationship.
  • A pattern.

That is why I believe people should expose themselves to more than one narrow area of activity.

You do not need to become an expert in everything. That is not the point.

The point is to give your mind enough different material to work with.

The more different forms of experience you have, the more possible connections your mind can create between them. That is where a large part of creativity comes from.


My Personal Example: Piano

I have played the piano throughout my life. Someone could reasonably ask me:

What benefit does playing the piano give you as a software engineer?

My answer would be: Directly related to programming? Almost none.

Playing the piano has practically almost nothing to do with programming.

I do not become directly better at Go or Rust because I can play the piano. I do not understand distributed systems because I know how to play a piece of music. There is no direct technical relationship, but that does not mean there is no benefit.

Playing the piano can completely change my mental state.

It can clear my head. It can reduce mental pressure after hours of concentrated technical work. It helps me maintain balance. From my own experience, it strongly affects my creativity and intuition.

When you spend a large part of your day solving technical problems, your brain does not always need another technical problem.

Sometimes it needs something completely different. Something that uses attention differently. Something that changes rhythm. Something that allows the mind to move away from the problem without becoming completely inactive. Music does that for me.

And very often, after stepping away from a technical problem for some time, I return to it and see something that I did not see before. The problem did not change. My perspective did.


Intuition Is Built Through Experience

People sometimes talk about intuition as though it were something mystical. I do not see it that way. In engineering, intuition is often accumulated experience that has become so deeply internalized that you recognize patterns before you consciously reconstruct every step of the reasoning. An experienced engineer may look at a system and say:

Something about this design does not feel right.

At that moment, they may not immediately be able to explain exactly why, but after deeper analysis, the reason often becomes visible:

  • Maybe they have seen a similar dependency pattern before.
  • Maybe they have experienced a similar failure.
  • Maybe the system reminds them of an architecture that became impossible to maintain.
  • Maybe the interaction between components creates a pattern they have encountered in another context.

That intuition did not appear from nowhere. It was built through:

  • different systems;
  • different failures;
  • different technologies;
  • different people;
  • different problems;
  • different experiences.

The broader the experience, the more material intuition has to work with.


Do Not Reduce Yourself to Repetition

There is little value in spending your entire development process becoming better at repeating something that can already be automated:

  • Memorizing every command is not the goal.
  • Memorizing every API is not the goal.
  • Memorizing every syntax detail is not the goal.

Those things can be looked up. What matters much more is whether you understand:

  • what problem you are solving;
  • why the problem exists;
  • which information matters;
  • which information does not matter;
  • what is missing;
  • what could fail;
  • what could be done differently;
  • what connection others may not have noticed.

That is where engineering becomes creative work. And that is where human development should be focused.


Give Your Mind More Than One Direction

Do not be afraid to spend time on things that appear unrelated to your primary profession. Not everything needs to:

  • become a business.
  • become a portfolio project.
  • improve your CV.
  • produce money.
  • produce an immediate result.

Some things exist simply because they make you a more complete person. And a more complete person can become a better engineer.

That relationship is not always direct. But direct relationships are not the only relationships that matter.

A person who has experienced more things has more perspectives from which to observe a problem. A person who has created in several different forms has more ways to approach creation. A person who knows how to move away from work and return mentally refreshed can often work better than someone who spends every available hour forcing the same type of concentration.


Creativity Cannot Be Scheduled Like a Build

You can schedule:

  • build
  • test
  • deploy
  • backup
  • benchmark

You cannot schedule:

        14:00 — have a genuinely original idea

Creativity does not work like that. Sometimes an idea appears while you are:

  • walking;
  • playing music;
  • exercising;
  • reading something unrelated;
  • talking to someone;
  • doing absolutely nothing technical.

That does not mean the technical work stopped. Very often, part of the problem is still being processed in the background.

This is another reason why I do not believe every useful activity needs to have an immediate measurable output. Some of the most valuable results appear indirectly.


Do Not Compete With Machines at Being Machines

This is particularly important in the age of AI. If machines become increasingly good at:

  • memorization;
  • pattern reproduction;
  • repetitive implementation;
  • rapid information retrieval;
  • mechanical transformation;

then your response should not be:

I need to become even better at behaving like a machine.

That makes no sense. Develop the things that make your thinking more valuable. Develop:

  • judgment;
  • creativity;
  • intuition;
  • adaptability;
  • curiosity;
  • originality;
  • the ability to connect unrelated concepts;
  • the ability to work with incomplete information;
  • the ability to recognize a problem before it has been formally described.

Use machines for what machines are good at. Do not reduce yourself to the same category of work.


Final Perspective

Do not judge every activity by whether it gives you an immediate technical result:

  • Some things improve you indirectly
  • Some experiences will make sense only years later
  • Some things will never have a measurable professional return and will still be worth doing

Your mind is not only a storage system. Do not train it only to remember.

Train it to:

  • create
  • connect
  • recognize
  • imagine
  • observe
  • analyze
  • refactor

Train your intuition. Give yourself enough different experiences for that intuition and creativity to have something to grow from.


Do not spend your life training yourself to become better at the things machines already do well.

Train the parts of your mind that allow you to see what the machine does not.


Scalionix Docs

Keyboard Shortcuts

Navigate the documentation without leaving the keyboard.
Navigation
Previous subject
←
Next subject
→
Previous subsection
Alt + ↑
Next subsection
Alt + ↓
Interface
Documentation Home
Ctrl + Enter
Search
Alt + Q
Open shortcuts
?
Close dialog
Esc
Scalionix Docs

Search Documentation