Becoming a software engineer

Yurii Palaida
14 min readOct 5, 2022
Using more than one monitor is a first step, no doubt

I have been working professionally as a developer for almost two years now. A great term for me, but too humble compared to the experience of my colleagues. And still think I have one advantage I want to use here.

It’s a mostly wide-known fact (link #1, link #2) that experts, after gaining expertise, often cannot explain some pretty basic stuff to beginners because of their mental models. They just know and just do. Sure, there are people with talent or gained abilities to be perfect teachers, but not all good teachers are experts in their domain, and, more importantly, not all experts are good teachers. And sometimes, as an aspiring developer, you don’t need a full-blown course built on some methodology but rather a piece of straightforward advice you can generalise by yourself and follow later.

Sometimes, I stumble upon beginners’ questions (mainly regarding software engineering, not computer science which I try to clearly separate). Usually, before answering them, I wonder for a couple of minutes because the answer itself is probably straightforward. So instead, I’m trying to remember how I felt at the start of my career and what advice would have helped me then.

And in this article, I would like to share some things that are still with me (and that I’ll probably lose in a couple of years unless I continue to communicate with newbies a lot intentionally and make notes both on their questions, my answers and the effect that the latter had).

I also want to point out that I’m describing struggles that I encountered myself and the ones I believe most the self-learners will also run into. Lucky you if not.

Yes, you definitely have to learn by doing

We have books, courses and YouTube videos for just $9,95

One of my biggest struggles during the self-learning time was going out of the so-called tutorial hell phase. I was not scared about making something and was not lazy, but I just didn’t do anything real/practical.

On the other hand, currently, besides working on the main project, I already have a couple of pet projects, and dozens more are coming. Ideas for some of them were with me even then, but only now I’m actually working on them, though objectively, now I have much less time, and they are definitely not that complicated. So, what has changed?

In my mind, the main thing that changed is my self-confidence. I just know that I can do it, though while working on the stuff, I’m stumbling upon dozens of issues. I’m just not afraid anymore that I’ll be stuck at some point, and my struggles will be in vain. I know that I’m able to accomplish it. However, you probably understand that two years of professional experience are definitely not enough to provide that much confidence. But I really think so.

On the other hand, before getting that knowledge that allowed me to start my career, I was always afraid of knowing too little and being able to do nothing.

For example, one of my first pet projects was a simple script that handles all my email newsletters and some Telegram channels’ feeds, creates a single message, and sends it to me weekly instead of annoying me with constant notifications. Back then, I didn’t know:

  • How to get the email programmatically
  • If there is a way to get Telegram messages besides just scraping the page with a channel’s preview
  • What format to use to get the final result, etc.

When I tried to google the stuff, it was either too confusing or complex. Probably, that is because most of the answers were given by the experts and intended for people with at least some experience. So, if there were some elegant solutions, I didn’t know how to work with them. Thus, I watched different courses and tutorials, trying to get that first pack of knowledge to be able to do something.

Sometimes you may feel like this

But it’s not a secret that you will achieve nothing just by watching videos (or even by doing some exercises from videos). There are a couple of reasons. First, to be able to build something, you need to actually build it, even making errors. Tutorials are usually pretty easy for you to be able to understand them. But we, as people, don’t learn with light stuff. We need complexity to remember and understand (desirable difficulties).

So, what is the solution? I see multiple potential options:

  • You may try to find a course that doesn’t just teach you features of the languages but actually involves you in creating some project. It’s the way I learned programming. After one month of pretty hardcore lectures on different topics, for around five weeks, I participated in a team project where we created a simple CI/CD system. Still, it was very tough, and I did most of the things I’d been working on for the first time.
  • You may try to build something using some guides, but be ready to improvise on each step and dive into the material. And improvising here is an essential step. It shouldn’t be just changing the font’s colour or size. It should make you think about how the initial code works. Even if the result is much worse. You’re not creating to show it; you’re creating to learn.
  • You may find a project of your colleagues (if any) that is not too complex and try to do the same by copying but also trying to dive into the material. In this case, you can also ask them questions about their decisions. If they are also just starting to learn, it’ll help them understand their choices better.

In all of these cases, you must try to finish the project and do all the hard stuff (especially the hard stuff).

Playing board games is fun and so should be programming, all the way

I usually compare this approach to playing a board game (a pretty difficult one with a dozen pages in the instructions book). I never met a person in my life who started playing after they grasped the whole material. Usually, around the middle of me explaining instructions, they become overwhelmed and say they will catch up later while playing. And they ask a lot of questions while playing. Usually, it puts them in a weak position, and they clearly understand they won’t win this game. And usually, they don’t care about that. They just use the knowledge they have at the moment to the maximum extent. Finally, after finishing the first play, they are ready to start the next one, feeling prepared. And even after that, they may make mistakes and learn something.

I assume you’ve heard this advice hundreds of times, and you’re sure it doesn’t help much. You think you need something practical. At least, those were my feelings at the time. And being here now and still remembering some of my thoughts of two years ago, I could say there is a reason you hear this specific advice again and again. It can be compared to a classical mantra: “eat healthy food, do sports and sleep well” that absolutely everyone knows about, but not everyone follows. And it’s the kind of mantra that has its effects after it’s done in full.

If I were asked to help with introducing someone into the industry, I wouldn’t bother explaining some basic things (like variables, loops, conditional flows, etc., that you probably already know if you stumbled upon this issue) but instead, just force on to start with a project. It shouldn’t be very complex (because the complexity may overwhelm you to the extent you come back to the belief that you know not enough actually to do something tangible). It may be some project with the process that follows the snowflake principle.

  • Create a simple application that asks for a user’s input (for example, their date of birth)
  • Improve it to make calculations and return the user’s age at the moment
  • Create an HTML page with an input field and a text field that’ll do the same: ask for the user’s birthdate and then display their age
  • Update this page for the user to enter a word (instead of his birthdate) and show him if it’s equal to the word you riddled
  • Update the answer text field to indicate which letters did user guess right
  • Add a couple more input fields and throw the user to the next one after they make another guess
  • Add a list of words instead of a single one so that each attempt will have a new word

Did you guess it already? By following these steps, you almost created your version of Wordle, a viral web-based game that was sold to the New York Times for reportedly $1 million.

Simple, but still very fun

If you have been learning to program for a couple of months and don’t have anything to share with the world, put aside all tutorials and books and just follow the previous steps. They may differ based on your aspirations (web development, mobile, desktop), or you may come up with a different idea; just keep it as simple as possible so that each successive step in your path won’t be overwhelming.

I want to be explicit here that my main intention is to help people get their first job or just overcome their fear of creating something complex so they can do it. It’s definitely neither a guide on gaining a computer science degree nor an appeal to ignore it. I may just assume that having fundamental knowledge will make you a better software engineer. But I’m pretty sure that it is possible to derive what pieces of the basic knowledge you actually need when you’re already in the industry than spend four years just gaining it “in case”. Of course, fundamental knowledge will probably give you a more advantageous starting position, but it’s hard to predict in the long term.

No, you don’t need to understand what is happening under the hood

When I first started learning Angular, it was too much for me. Even the project initialisation command created so many files that I felt exhausted trying to understand why I needed so many of them (at the moment, I had a vague understanding of what the library of framework really was). I wondered why the information about it was missing from the tutorials, so I googled all those package.json, ts-config, etc. files. I vaguely understood their purpose, but this knowledge weathered out of my head in a day. And then I did it again and again. And the reason for that is that I wasn’t using those files a lot while working on the application itself. I was creating modules and components, figuring out pipes and all the other tools in Angular, so I didn’t need to know all that extra stuff. And still, I spent quite some time trying to get into this.

Not that simple anymore, right?

Don’t do this. Modern tools are pretty complex, and there is a reason for that. They are complicated to allow you to not think about their complexity and just create what you want, like using a car or a plane to arrive at a specific destination. It won’t hurt you knowing all the intricacies of the vehicle, but if it were a requirement to become a driver or a pilot, we wouldn’t get that far. Believe me, you’ll get to most of the details at some point, but always move step by step, touching the things you are supposed to touch.

Probably, this advice won’t be met too warm by experienced developers, but I want to remind you that I’m talking about self-learning. I believe it’d be pretty impossible to motivate such a self-learner to go through some college program’s curriculum just to gain the fundamentals. Sometimes, I want to fill in some gaps, but that can be done after you start creating something and even understand whether you like it. Moreover, you won’t be tasked with something very fragile at the beginning of your career with a chance of breaking something too expensive.

Going metaphorically, I often feel myself following a trail in the dark forest. The best point is that at least I have this trail. I could possibly walk on the wild side, but will it be wise? Will it really help me? Highly doubt that.

I see some components lying ahead…

On the other side, while moving like this, I find some lights throughout the path that make the forest less dark. Of course, it’s still a forest I must cut through, but at least I know where I am going and what lies ahead. Some lights illuminate just the tiny parts, and others make the whole area visible. This way, I’m still in the same forest (technical stack), moving the same path (working on the project), but I know what surrounds me and can use this knowledge to my advantage. Moreover, if I decide to explore another forest one day, I’ll know how to do it properly.

So, don’t try to do everything at once

I had a bunch of misleading steps during my self-learning step. First, I was trying to do this fundamentals learning. I thought that it would put me on the same page as other college students. Although they also quite often struggle with finding a real job even after finishing their studies, I believed that for them, it’s still much more manageable than for me, a person without a specialised education. Unfortunately, as I mentioned in the previous section, it doesn’t work this way. This curriculum is pretty tense to learn in a fun way, so you’ll feel unmotivated soon. I assume some developed courses may integrate actual practice and a feeling of “building stuff” into this learning routine, but I never met such examples.

If Caesar could do it, how am I any worse?

On the other hand, I was trying to do many things simultaneously: learning to use Git, playing with Python, and creating my blog using JavaScript. It may work when you have at least some experience, but not when you are unsure about basically everything.

Still, even with the experience, don’t try to do everything at once. The feeling of starting from scratch is inexpressible, but try to finish your projects because that’s what you gonna do in real life, and usually, there is a lot to learn in the later stages.

You shouldn’t reach for the first course/guide/book that you find, because usually the shiniest ones are just produced by those who spare no expense on marketing: they sell you emotions of how you’re gonna feel when working with this course or when you finish it, but you’re looking for actual knowledge instead.

But, after you spend some time choosing what suits you, be firm about that choice and don’t jump to another resource in the middle of the path, no matter how tempting it would be. It may use a completely different approach, and you’ll spend a lot of time learning the same things in another way. Sometimes it helps, but this process also should be conscious. That is why it’s crucial to spend some time looking for a perfect guide (I know that the overwhelming information can be exhaustive, but you can do it). If you spent enough time making the right choice, you’d have more trust in it if you stumbled upon something else throughout your journey.

There is this dichotomy between the process and the result, but I believe that the process itself should be pretty deliberate, and it can be so.

1-hour, 10-hour, 7-days and even 1-month tutorials won’t work [unless …]

As you may know, learning is pretty tough. And it’s not just about the material. There are multiple reasons:

  • This stuff is somewhat abstract (I’m talking about programming, but usually, most of the learning is tough)
  • Our brains constantly try to save energy
  • It’s much harder to do this stuff alone (for most people. Some, for example, me, thrive when learning independently)
  • You may lack guidance and probably even something more.

It’s very tempting to jump on something like a 10-hour crash course on Python, 7-days of real React and so on. And the main reason for that is that in these tutorials, you are presented with pretty straightforward stuff. If you take dozens of courses or books on the same topic, most of them would be the same, and what is even more important, they would stop on the same page, leaving you with: “And now try to do something real with this knowledge”. And that’s the moment when you almost probably will fail. And since you spent those 10 hours/7 days just absorbing information, doing nothing for forming neural connections, it won’t last, and you’ll have to begin from scratch. On the 3rd repeat, it may become exhaustive.

You can do it, we believe in you!

That’s where all the pieces of advice I’ve described in previous sections emerge. You need not just to watch but also do something because that is how we start doing something. Think about a baby learning to walk or to speak. Think about a (successful) student learning a new topic. Think about an adult learning to be a parent. They all learn by doing. And they also fail. And you need to fail. You don’t need to succeed to move on. Moreover, failures shouldn’t stop you from moving on.

If you were creating a landing page and thought it’d be a fantastic idea to add some interactivity. You use basic JS you know, and apply it there. You have doubts about the implementation, but it works, and you leave it this way. Then, you move further, and at some point, you stumble upon some neat solution for your problem that can help to get rid of dozens of lines of codes and achieve the same in 3 elegant ones. And you do it. You learned the bad way and the good way. And now you know. And imagine you didn’t implement that feature in the first place. In this case, you won’t stumble upon this one. Or even if so, you would have thought there might be something better. So, don’t be afraid to fail, but always strive to learn more.

Next, you don’t need to know what is happening under the hood. If you are a good specialist and don’t know some fundamentals, you’ll get to this point. If you are a terrible specialist and were forced to learn some fundamentals, you either will forget it soon or won’t need it in your everyday work. So, don’t learn the mechanics of a plane while learning how to handle it. Just do what you’re supposed to do and get things done.

And decide finally what you are up to. Don’t try to learn everything at once, pass all the courses and fill all the gaps. There is no one best tutorial on any topic. If it were, there wouldn’t be a need for all the others. So, just spend a decent amount of time looking at what you like the most: course, book, interactive tutorial and just stick to it until you finish.

Summary

I’ve been working as a professional software developer for two years, and some things are fading. When I’m asked for advice, I try to be deliberate about thinking through the answer, and I almost feel the struggles, but I can’t fully grasp them because they are connected to some existing mental models which make perfect sense in my head.

Sometimes, I read messages from people who want to enter this speciality, and I’m overwhelmed and exhausted at the same time by the fact that I can’t help them right now because what they want to achieve is a long process.

But I’m sure that with deliberation and actually avoiding described mistakes (not just being aware of them) you canreach your goals and become a software engineer.

--

--