February 22, 2021

Want to become a coder? You should probably read this first

~ 1 ~

The first thing young engineers should firmly understand is that they will not be able to create value on their own. These days there are thousands of people who produce and sell goods on Facebook, Youtube, Instagram, Etsy and other platforms, and many young people want to do something similar. Bloggers sell content, singers sell songs and designers sell 3d models, themes or icons. People do what they like, they are independent from employer and have flexible schedule, cool!

This is not what programmers do.

The only thing developers can do is writing code; however, it is impossible to write just a piece software. Software must do something valuable. This means, in order to create software, a developer must be an expert in some "target" area. Moreover, in order to sell software effectively and make money, a developer must also be an expert in sales. Unfortunately, this is almost impossible to be a strong developer, marketer and expert at the same time. This is why most developers need managers that will say them what to do. In addition, they need marketers to sell the results of their work. Strictly speaking, developers need a business around them in order to survive.

Once a developer decides to become "independent" and found a startup, they quickly realize that in order to create a successful company they need business skills much more than coding skills. They realize very quickly that it would be much more effective to hire someone who will write code for them while they are busy with business tasks rather than spend their own time actually developing software while business is waiting for them.

So, remember, if you enjoy writing code and you want to do that for a living, the only way you can make money is selling time while you write code for someone else. It really hurts once you realize that.

~ 2 ~

Second, prepare to never be satisfied with your skills. The more skillful developer you become, the better you see how many things you don't know.

While the circle of your knowledge grows, the length of its edge increases as well. As a result, you face more and more unknown things each day you learn. The smarter your become, the better you realize how many things you don't know yet.

This rule is applicable to knowledge in general, but this is also a good depiction of a software developer learning process. And this is not static, obviously; in fact, the outer rectangle grows much faster that the knowledge circle of any particular person. The software market is still extremely hot, perhaps much hotter that it was 10 years ago, which means everything evolving with a fantastic speed around you. And as an engineer, you enjoy this. You enjoy learning, you love shiny new technologies, you are passionate about new frameworks and languages. You would be able to do so much with these new tools! And there are tons of information available: books, courses, tutorials, videos, talks, conferences, articles, etc. The knowledge is free, come and get it!

You can't.

You just don't have enough time to consume all the information you want. You are forced to skip a huge trend of crypto-currencies because you chose to learn frontend development. You have to ignore machine learning books because you decided to figure out how to write code in functional style. And so on and so forth. There is always gigantic amounts of information that you would like to consume, but you can't because you chose to learn something different. So prepare to never be satisfied with your skills.

~ Z ~

Basically, two paragraphs above includes the most important knowledge I would like to share with young people who think of becoming a software developer. If you still want to be a programmer, congratulations and welcome to the club! Here are some pieces of advice you can use to start your career in an effective way:

  1. Nobody knows what will be the next popular technology so it does not make much sense to focus on a particular framework or language. Learn fundamentals, learn the hard way.
  2. Read fundamental books:
    • "Structure and Interpretation of Computer Programs"
    • "Design Patterns: Elements of Reusable Object-Oriented Software"
    • "Patterns of Enterprise Application Architecture"
    • Read up on the computers architectures, networks and history: there are thousands of great books. Never stop learning.
  3. Learn fundamental languages: C, C++, Java, Haskell. It will be much easier to learn new languages once you know how these works.
  4. Last but not least: read as much code as you can. And a bit more. To become a good writer you must become a great reader first.