How to Become a Programmer: Guidance for Future Professionals

Aleksandr Shitik
Aleksandr Shitik

I write my own posts and books, and review movies and books. Expert in cosmology and astronomy, IT, productivity, and planning.

So, here we go...

image

You are currently finishing your first year (and believe me, nothing will change in a year or two).

But at the same time, you have practically no knowledge in your head. Even when you finish university, you can expect to earn 250, at most 300 USD in your first year. It’s even hard to call you a junior because you know very little theory and have no practical experience.

You will know theory poorly for four reasons:

  1. It is a very vast field, and it is impossible to study everything within the course framework.
  2. Most often, outdated material is studied.
  3. In lectures, you are most likely sitting on social media, chatting with classmates, and just showing up to mark your attendance. You only grasp about 30-40 percent of what’s happening, and even if the topic is easy and you remember 80%, you don’t reinforce it with practice after lectures, spending your free time on the computer after classes. For example, during practical sessions, I often played Counter-Strike online (while barely managing to complete the labs — just the minimum required for passing).
  4. To study and absorb knowledge, you need the perfect mood, ideal interest, and environment. At 8-10 AM, it’s unlikely that any student will have that, and as a result, the material is poorly retained. Sitting in university lectures and watching the same lecture at home on the couch in the evening on YouTube are two different things.
image

So, as a result, by the time you finish university, you will be over 20-22 years old. You know nothing and have no skills. At best, you might find some part-time job in your final year and gain some experience there.

Are you spending all your free time on walks, binge-watching series, and setting up your personal life? If you are heading into the IT field, then this mode of living is definitely not for you.

I am no longer studying at university; I have gone through college and university for IT specialties, and I have a completely different understanding and perception of all this. The first thing I will tell you is that they won’t teach you anything there, and I have provided four substantial reasons above. The second is that if you truly like this field, you need to train yourself to work on yourself and self-learn. Self-learn every day. I can rarely find a day when I’m not watching or learning something new (sometimes I do this at work in the background), but most often in my free time.

image

I also go for walks every day, and I have a personal life, do sports like running and playing football, as well as other interests, hobbies, and travel.

image

You just need to plan your time. Sometimes it’s worth making plans for weeks, but plan in such a way that things can change. And most importantly, train yourself to learn... always and almost every day.

image

Programmers are generally lazy people... It’s best to learn from books, but since I’m also lazy, I listen to podcasts and watch YouTube (and now I have already achieved a fairly good understanding of programming, and it’s hard for me to find something worthwhile and new on YouTube, but I still find and watch, and occasionally read books). So, train yourself to engage in self-learning every day. You can choose programming podcasts that resonate with you and listen to new episodes — this way, you will stay updated on the latest events and technologies in the IT world as a whole.

image

Don’t expect that after defending your diploma, something will change... You will become smarter, and a company will immediately call you and offer you a job for at least 400 dollars. Just imagine that you graduated yesterday, and you need to move forward.

image

Now, in your first (or second, it doesn’t matter) year, it’s very important to understand what you want to do in this field. Since you have chosen programming in IT, rather than SEO, for example, or design, there are several directions to consider:

  • System programming (writing operating systems, drivers, etc.) — this is low-level programming, which I find a bit boring but also complex.
  • Game development— no comments needed here... It would be good to know physics.
  • Web development — it’s not too complicated, quite interesting, but I can say that you need to know an incredible amount of information (though this is probably true in other areas as well).
  • Mobile development — I wouldn’t say it’s difficult either (there is a division into two areas: for Android or for iOS, although there are other smaller areas as well). By the way, web development also has two directions: backend and frontend.
  • Application development— writing programs for laptops and PCs is also of ordinary complexity and interest. This is usually where universities start.
  • Scientific programming — something specific, tailored for a narrow profile and science: whether it’s biology, chemistry, mathematics, etc.
  • AI
image

In my opinion, the most in-demand areas are web, mobile, application development, AI. You can change your direction at any time. But if you are a senior in application programming, it doesn’t mean that if you move to mobile development, you will be a senior there too. Your level will drop for a couple of years (at best, for a year) to mid-level, as it’s a completely different field with its own recipes.

Programmers also have their own classification based on levels of knowledge:

  • Junior — knows almost nothing, makes a lot of mistakes. All tasks completed by them need to be reviewed and possibly corrected. They have no work experience or very little experience.
  • Middle — a fairly good programmer capable of solving average and sometimes complex tasks (algorithms). They have 1-2 years of experience. They know something and can be trusted.
  • Senior — a very skilled specialist who knows everything or almost everything. They have at least 4-5 years of work experience. Sometimes, reaching this level may require more years (it depends on the individual's personal qualities and possibly the field).

Again, regarding experience and all these classifications — it’s all conditional. A senior in our Minsk company might only be a junior at Google.

Additionally, there is a team lead (let's call them the foreman in the squad :) ). They distribute tasks among their team, check everything, and also handle some complex tasks. All responsibility for their team's tasks lies with them. Typically, they are seniors, but there can also be very good mid-levels.

There are also software architects — these are extremely intelligent people, often seniors, or even higher (I haven’t reached that zen state myself yet, so I can’t say for sure :)). It all depends on the degree of expertise. For example, to design architecture properly in web development, it’s not enough to be a backend senior; you need to have a good understanding of frontend as well — which essentially makes you a full-stack developer.

image

Don’t pay too much attention to people who dictate their technologies and programming languages, claiming that one is better than the other... It all depends on the situations and tasks. Moreover, there are the top 5-10 programming languages in the market that haven’t changed in about 20-25 years and continue to hold their ground (sometimes they just trade places among themselves when something new comes out in terms of features, updates, or, for example, frameworks for these languages, but all these languages are still evolving). I would highlight the following languages: C, C++, C#, Python, Java, JavaScript, and PHP. Among the newer ones, Go can be noted, and perhaps Rust as well. Then there are mobile development languages, like Kotlin or Swift — the latter two are indeed relatively new (probably only about 4-5 years of active use) — and there’s a logical explanation for this, as mobile development is one of the newest fields compared to web or application development, so some specific languages for this area were formed later than elsewhere.

In general, it’s important to understand that languages can be functional or object-oriented (there are other paradigms as well), and it’s crucial to recognize that they differ from each other internally... Plus, you need to remember how they work: sometimes there’s a compiler, sometimes there’s an interpreter (but that’s already a nuance). It’s really impressive when a programmer understands asynchronous operations, processes, and threads, but that level of understanding doesn’t come immediately.

Also, don’t listen to those who say that, for example, PHP is a bad language — that’s the opinion of people who show their ignorance and lack of understanding of programming (this joke stems from poor coders and the low entry threshold of the language, which is more of a plus than a minus, and also because PHP was genuinely bad in the past... but that was back in 2000, at most 2007-2010. Now it’s very good, and over 70% of web projects in the world (backend) run on it. The same can be said about JavaScript (there’s even a joke about a prostitute and JS). I don’t like it either, but I use it often. I’ve also heard criticisms of Java and Python... although I think you can find jokes about any language. So it’s all purely a matter of taste.

image

So, once you’ve decided on a direction, I’ll try to explain using web technologies why it’s so important to start learning programming as early as possible and why you shouldn’t rely on educational institutions. To be a cool specialist, you need to have a good understanding of just a couple of programming languages. Besides languages, you need to know a bunch of technologies, protocols, and some general stuff that’s necessary not just for web development but for all programmers. I’ll even skip the fact that you need to know algorithms and it’s highly desirable to have a grasp of mathematical disciplines (from higher mathematics and probability theory to discrete mathematics and mathematical modeling). However, honestly answering the question of whether mathematics is needed for modern programmers (unless it’s a specific job), my answer is “no, it’s not needed.” In 80% of cases, the work boils down to taking data from a database and displaying it on a view (on the screen, to put it simply). It doesn’t matter if it’s mobile, application, or web development. Or writing data to a database. What’s more important is to do it correctly, according to some architecture. I’ll write a list that would be suitable even for a good full-stack developer for web (and frontend or backend developers)... it’s just an enormous list. But it’s necessary to know it. So, here we go:

image

Frontend:

  1. HTML5 (plus you should keep an eye on what’s planned for version 6).
  2. CSS (ideally, you should look at the drafts). Properly use selectors (remember that CSS works from right to left, among other things).
    • You need to know at least one CSS framework and understand how it works (Bootstrap is quite suitable).
    • You should be familiar with CSS preprocessors (Sass, Less, etc.) — know how they work and be able to use them.
    • You need to know the basics of SEO — this is essential (understand how to use HTML5 tags, that you cannot place block elements inside inline elements, where and in what quantity to use tags h1-h6, etc.).
  3. JavaScript (starting from ECMAScript 6) — you can spend a long time studying just this language in its pure form... and there are many other aspects to pay attention to:
    • jQuery (a very cool library... but frameworks are better).
    • Frameworks (React, Vue, Angular).
    • npm — package manager.
    • Build tools (Gulp, Grunt, Webpack) — they are also necessary for SEO, to ensure that only the styles and scripts needed for that specific page are delivered, and nothing extra.
  4. Master Emmet.
  5. If you don’t like regular scripts, learn CoffeeScript or TypeScript, or something similar. Then don’t forget to learn Babel or another compiler to JS.
  6. Search engine APIs and ranking algorithms (this is more for SEO). (+ AMP, Turbo, Yandex Zen).
  7. Layout (valid, cross-browser, modern, responsive).
image

Backend (I will use PHP as an example):

  1. 1) Native PHP.
  2. 2) Content Management Systems (I've worked with many, but I recommend WordPress).
  3. 3) Frameworks (Laravel, Symfony, Yii, or any other). The first two are the most popular.
  4. 4) PSR — standards for writing code correctly, where to place quotes, where to put spaces (tabs), how to name variables, and much more.
  5. 5) REST — this, like point 4, is a method for proper programming and correctly naming methods.
  6. 6) Security. I’m not sure how much attention is paid to security in mobile applications, but in web development, it’s often a significant issue. This makes sense because the best debugger for a web developer is the browser. It can provide a lot of information about a page, and if you install certain extensions, you can perform some pretty useful manipulations. Therefore, in web development, you need to know how to protect against at least SQL injections, XSS vulnerabilities, and Cross-Site Request Forgery (CSRF) — although these are not the only threats (you can also add DoS and DDoS attacks here — but that’s more related to server configuration).
  7. 7) ORM systems (Doctrine is suitable) and PDO.
  8. 8) Console (I use it almost every day).
  9. 9) Server settings (at least basic knowledge, understanding how the server works and what happens on the backend during requests).
  10. 10) Docker (it would be good to look into cloud storage and already configured "containers" for projects. Also, know what Kubernetes and OpenShift are. It might be easier to rely on the cloud than to set up a large stack of technologies on your own).
  11. 11) Composer.
  12. 12) cURL.
  13. 13) Protocols — this point should have been placed higher, around points 4-6. But I won’t rewrite anything now. You need to know the differences and how to work with HTTP, HTTPS, FTP, SSH, and some others.
  14. 14) Learn an IDE, such as PhpStorm or good text editors (with installed extensions) — this applies to frontend as well.
  15. 15) Linux — most servers run on this operating system, so it’s highly desirable to know it.

In addition, you need to know OOP (Object-Oriented Programming). There are functional languages where you can write an entire startup without a single class. However, PHP (like most modern languages) is object-oriented, so you need to understand OOP. The deeper your understanding, the better (classes, interfaces, traits). It would also be good to know different programming paradigms. You should understand that the same code in the same language can be written differently using different paradigms. Your project should adhere to a specific paradigm. This also applies to variable naming conventions; you should consistently use either camelCase or snake_case.

You need to know design patterns — I admit that when I studied this in university, I considered it the most useless topic. And I must admit, it's the most challenging topic (for me). Any pattern can be interpreted in various ways (you can find several implementations of a specific pattern in web development alone. If you take an application or mobile app, the implementation might be slightly different). In short, this is a topic that is often described ambiguously. But it is extremely important.

SOLID principles dictate how to write code. And SOLID is not the only set of principles. By the way, REST and PSR (which I mentioned earlier) can also be considered principles of good coding practices.

Testing is essential, including unit tests in PHP. Ideally, you should write tests... although I rarely do, even though they are necessary. You need to understand that testing can vary: functional tests, acceptance tests, unit testing, etc.

You should master Git, Mercurial, or any other version control system.

Don’t forget to work with data formats: JSON, XML, YAML.

image

Get into the habit of keeping up with updates for the languages and technologies you work with. Languages typically don't update very often, but there can be fundamental changes from time to time.

image

When I was studying in educational institutions, I thought that the problem of big data and code optimization wouldn't affect me or would do so only much later. In reality, that's not the case. I have been working with data for quite some time now, handling several tens of thousands of records. While a solid understanding of databases and table normalization helps me on the backend (where issues rarely arise), I encounter problems more often on the frontend. Search engines are extremely demanding regarding code, both in terms of optimization and performance (especially performance). Here, you need to understand how to make everything load asynchronously or defer loading. You might have a perfectly crafted semantic core, but what’s the point if there’s no optimization for page load speed — so this is something you should also pay attention to.

Write code correctly so that over the years (or months), when modules are removed (or disabled), there’s no leftover code in the project. This can happen, for example, on the frontend with CSS and JS if the code is not organized properly. I refer to such code as "dead." It’s unnecessary, but search engines find it and complain about it.

At the same time, I have hardly touched databases... this implies that you already know how to work with them. Which specific databases is not crucial.

You need to know architectural approaches and application architecture... again, it varies completely: web, mobile, and desktop applications. For example, consider a large web project: the backend consists of three parts. One is built on Symfony, the second on Laravel, and the third on pure PHP. The frontend, for instance, consists of two parts built with React and Vue. If you delve into any of these parts, there’s its own architecture and its own patterns — both large and small. You need to break large sections of code into layers (for example, wrapping models in repositories and accessing repositories instead of models, using observers, etc.) — this makes the code elegant and the application modular and easily extensible. But at the same time, you should remember that the thinner the layer, the faster the application runs (for example, don’t use ORM systems between the database and language where plain PDO would suffice). Understanding all of this will come with experience.

image

Another very important point: you should use frameworks (at least in large projects). It’s often more complex to write with frameworks than with plain code. However, frameworks offer several significant advantages:

  • They accelerate the overall development of applications.
  • They dictate a certain style and philosophy that you adhere to, which helps reduce the amount of poor-quality code you write.
  • There are many ready-made modules (for example, for authentication), and you don’t have to worry about how they work under the hood (whether it’s basic authentication, token-based, JWT, or something else).
  • Security. As I mentioned earlier, security is a problem in web development that requires a lot of time and effort. Frameworks often address these issues for you.
image

There is an opinion that a full-stack developer is always stuck at the middle level. I partially agree with this, and I dedicate a lot of my free time to learning and self-development so that this statement doesn’t apply to me and so that I can create good turnkey projects on both the frontend and backend — without mistakes and using something new and fresh.

I may have forgotten something, as it’s hard to keep everything in mind. And yes, I won’t talk about English... the better, the better!

You don’t have to learn both areas right away; you can focus on one.

And remember: if you consider your code from last year to be poor quality and you think you could rewrite it better, it means you are thinking in the right direction and developing.

So, I’ve described web development... I may have forgotten something... but believe me, this covers about 90% of what you need to know to be a good specialist. The other point is that all of this can take years to study.

As you can see, I primarily use only two programming languages, but besides them, as I mentioned earlier, there are many other tools that are really necessary.

In other areas of programming, I don’t think anything will change drastically... each has its own technologies and languages... but the principles and scope are roughly the same.

Not everything I learn (especially if it’s something completely new or complex) is understandable to me the first time... often I need to read and review it several times to fully grasp how it works. So don’t be discouraged if something isn’t clear the first time around. Much also depends on the source presenting the material (some authors and speakers explain it better than others).

Now you know what lies ahead, and you have only two options: either take the document right now or start learning programming today.

image

There is a lot of terminology here that is extremely difficult to understand, even for a second or third-year student, but it’s all available on the internet. Now you know where to start and what to study. This list can be considered a mosaic, where each item is just one puzzle piece, and by mastering something from this list, the overall picture of web programming in your mind will become a bit clearer and more accurate. Perhaps this confusing list will help guide you in the right direction, but it already exists. When I first started learning all of this, I had to search for the smallest puzzle pieces myself on the internet and in books through trial and error, filtering out a lot of unnecessary and repetitive information.

image

And as a conclusion, let's summarize the profession of a programmer.

Advantages:

  • A promising profession. A good specialist will not be without work.
  • High salary. But not right away.
  • Working in IT keeps you in touch with the latest IT events.
  • Often a more flexible schedule than in other fields. The possibility to work not only at convenient times but also remotely from other countries.

Disadvantages:

  • You need to know a lot. Constantly improve your knowledge and use relevant methodologies and approaches.
  • It is highly desirable to know the English language.
  • Negative impact on health. It is said that vision deteriorates because of it. Programming is a sedentary lifestyle that needs to be balanced with sports or other active hobbies.
  • High responsibility (for example, when working with banking and financial data).
  • Sometimes it's difficult to find common ground with clients and managers.
image
Вверх