First, let’s check if you qualify by answering ONE question:
Do you have PASSION for writing code?
Yes? Great! Read on ;-)
DISCLAIMER In this article I mainly focus on attaining knowledge to become a backend engineer. If you want to become a frontend engineer, your focus should be on HTML, CSS, JavaScript, and frameworks like React, Vue, Svelte, etc.
How I became a Software Engineer
In my 9th grade I applied to a computer science course in my school. The selection of special courses was pretty bare, - either software engineering, or something else I don’t even remember what it was. The choice was obvious, and it defined all the future life.
The course was pretty basic (and we used QBasic, haha!), but it was enough for me to realise having a computer, a couple of hands and a brain is all I need to create something out of nothing.
In grade 10 as my course project I went completely over what would earn me a top grade and created a “Who wants to be a millionaire” game simulator. The game would greet a player with a pretty oval face of the host. The questions would progress from funny and easy ones to more tough. The hints would be available too. If the player is stuck on a simple question, the audience or a call to a friend would most likely give the player the right answer. For more difficult questions, the audience would be less helpful. The list of questions could be edited in a text file, and each time the game engine would pick a random set of questions.
I chanced to get admitted to Far Eastern Federal University to study math and programming as main subjects. My passion multiplied many times with every programming project. I did c
, c++
, perl
, and finally php
. It may seem like a weird transition from c
to php
(and boy I loathed both perl
and php
because how come a language doesn’t have pointers and direct memory access? Like, what if I need to write up a linked list?), but it happened naturally as I got fascinated by the web, and started picking web-based projects as my courseworks.
How YOU will become a Software Engineer
There is no single recipe, but if you just follow your passion, you’ll figure out your own way. What this chapter is about than, you may ask? It’s about giving you a little bit of a roadmap, a map outlinig some continents and oceans, it’s a rough map, so you’ll definitely find some dragons dragons and maybe some treasure chests. This article is something I wish I had when I was starting out. Wait, not like this. This article is something I wish I had when I was starting out NOW, in 2024-2025, because software engineering changed a lot since I started. What didn’t change is the passion. And basics.
Basics
Meta-skills
First of all, you should have some meta-skills. These are the skills that will help you learn other skills. They are:
- Problem-solving. You should be able to break down a problem into smaller parts, analyze them, and come up with a solution. You should be able to think logically and critically.
- Learning. Applied curiosity isn’t enough. You should be able to learn new things quickly and efficiently. This implies learning how to learn, and knowing where to look for information. I strongly recommend enrolling into the Learning how to learn on Coursera.
Linux/UNIX/MacOS
First of all, you should be comfortable with a Unix-like operating system. It doesn’t matter if it’s Linux, MacOS, or FreeBSD. You should be able to navigate the file system, install software, and run commands in the terminal.
Some very basics you should get yourself familiar with are:
- File system hierarchy
- ssh
- bash/zsh
- package managers (apt, yum, brew)
- basic commands (ls, cd, cp, mv, rm, mkdir, touch, cat, less, grep, find, ps, kill, top, etc.)
- permissions (chmod, chown)
- environment variables
If you want to use Windows, I think it’s fine too, but I won’t help you with that, sorry. Last time I used Windows was when XP was still a thing, and Vista was a huge failure 😬
How to measure your knowledge? You should be able to navigate the file system, create and delete files and directories, install software, and run commands in the terminal. Ideally you can write up a simple bash script.
Programming
First of all, programming itself. You don’t need to go deep, just don’t go to shallow. Wade into programming languages and paradigms, understand some OOP and SOLID principles, get a grip on the basics of algorithms and data structures. Dive a little deeper and understand abstractions, design patterns, and software architecture. Here’s a more precise list of what you should be at least familiar with (don’t need to be an expert):
- Programming language of your choice (syntax, semantics, control structures, a bit of standard library). I’d recommend starting with latest version of
Python
. - OOP principles (encapsulation, inheritance, polymorphism) and SOLID principles
- Basic algorithms and data structures (arrays, linked lists, stacks, queues, trees, graphs, hash maps, sorting, searching)
- Design patterns (singleton, factory, builder, strategy, observer, etc.)
- Some frameworks and libraries (Flask would be a good option for Python)
- Caching
- Abstractions
- Unit testing
How to measure your knowledge? You should be able to write a simple program that solves a problem, a trite and simple todo list app would be a good start. Don’t worry about hooking it up to a database or making it a web app, it can be a simple CLI app. Actually, it would be much better if you start with a CLI app, because you’ll learn how to structure your code and separate concerns.
Databases
Secondly, you should know about databases. At least RDBMS (relational database management system) and how to use SQL (structured query language). Let’s lay out a list of bare minimum knowledge:
- RDBMS (MySQL/PostgreSQL)
- Desiging a database schema
- Normalization
- Transactions
- ACID properties
- SQL (SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, ORDER BY, etc.)
- Indexing
Invest a little bit of time learning Valkey too, it’s fork of Redis but it’s FOSS and de-facto an industry standard for caching and session storage.
RDBMS and Valkey are the bare mminimum. There are many more databases and data storage solutions, but you can learn them as you go.
How to measure your knowledge? You should be able to design a database schema for a simple application, write SQL queries to insert and retrieve data.
The more confidence you have, the better. But don’t worry if you don’t know everything. You’ll learn as you go.
Web
- HTML, CSS, JavaScript
- HTTP protocol
- DNS and how it works
- RESTful API
- Web security (XSS, CSRF, SQL injection, etc.)
- Web servers (Nginx, Apache, etc.)
- Session management
How to measure your knowledge? You should be able to set up a web server and make it “talk” to your application which could be the same todo list app, or if you want to spice things up a little, try creating a URL shortener.
Git
Even if you don’t have a team to work with, you should learn Git. It’s a version control system that will help you keep track of your code changes and collaborate with others.
Get yourself familiar with just basics to get you going. Going through a tutorial would be a good start.
The bare minimum is when you are comfortable using following commands:
git clonegit initgit checkoutgit fetchgit pullgit pushgit diffgit rebasegit show
How to measure your knowledge? You can create a repository either by using git init
or cloning an existing one. You should be able to commit changes, create branches, merge them, and push your changes to a remote repository.
Up next
In the next chapter we’ll talk about more advanced topics, like:
- Microservices (REST, gRPC, GraphQL)
- Containers (Docker, Kubernetes, etc.)
- CI/CD (Jenkins, GitLab CI, GitHub Actions, etc.)
- Cloud computing (AWS, GCP, Azure, DigitalOcean, etc.)
- Security (OWASP Top 10)
- Monitoring (Prometheus, Grafana, DataDog, etc.)
- Logging (ELK stack, Graylog, etc.)
- Networking (TCP/IP, DNS, HTTP, etc.)
- Databases and search engines (DynamoDB, MongoDB, Cassandra, ElasticSearch, etc.)
- Web (React, Angular, Vue, etc.)
Also invest more into learning the language of your choice (can be only 1 for now). A programming language isn’t a thing in itself. Knowing only the syntax and semantics of a language is like knowing only the alphabet. You need to know how to write words, sentences, paragraphs, and whole books. You need to know how to structure your code, how to separate concerns, how to write clean and maintainable code. In addition to the language standard library, you should also learn some frameworks and libraries, how to use package managers, how to write tests, how to debug, how to profile, etc.
All of these are outside of the scope of this article, but if you are passionate about software engineering, you’re unstoppable learner, and capable of figuring everything out by yourself ;)
GOOD LUCK!
Finishing writing this article giving me a strong feeling I’m missing something. You know, when you are leaving for a long trip and you’re sure you’ve packed everything, but you still have this nagging feeling you’re missing something. I feel like I actually have more to say about the subject, but I can’t put my finger on it. I’ll probably come back to this article and add more stuff.
Happy learning!