Developer. Education. Experience.

Five People Talking.

This post is dedicated to all, who want to learn how to program. Who does not know where to gain experience at the start, what to study, and where to go.

At first, I want to make a couple of conclusions about education. Disclaimer: It’s true for Kyrgyzstan mostly and maybe for some countries in CIS and I’m not sure that your country has same problems.

What will the university give me?

What will the university give you:

  1. Wiped jeans
  2. Skill for completing the quest: “Find a teacher”
  3. Ability to use the Word, MS access.
  4. Perhaps programming in C/Java

Although, if you do not know what is self-education, maybe there you will learn it.

All of the basic programming skills can be obtained on the Internet, having mastered independently. There are lots of courses, which will give the basic concepts of the stack, the deck, the search, the trees. But in the beginning, you do not even need knowledge of algorithms if you write something simple and not intricate.

Do I need a diploma?

A diploma is needed only in two cases.

  1. Migration to another country. Although in Germany, a diploma can be replaced by an experience of 5 years, and in the USA, as far as I know, of 7 years. And with Trump’s new law, migrating to the USA became so much easier without a diploma, if you have a salary from 100k per year.
  2. Work in a public institution.

In other cases, it has more weight:

  1. Profile on LinkedIn
  2. Experience
  3. Projects at Github
  4. Profile on Stackoverflow

Dude! And what about mathematics! Mathematics is needed!

Maybe, but it also depends on it.

Mathematics is not needed when you make simple projects, for example, web-sites on WordPress, REST API(simple CRUDs), you are not reading graphs or maintaining of your applications.

The need for mathematics appears when you want to:

  1. Read the monitoring graphs
  2. Make your monitoring graphs
  3. Work in the game development. (Although, right now you can do it without mathematics)
  4. You like math and algorithms and you want to develop in this direction

So, mathematics is not needed for any other cases. Usually, mathematicians have already sat in such companies with serious mathematical stuff. They solve the problem mathematically and give formulas to the developer.

Ok, and where can I read about algorithms?

The reading is a minor thing. The main thing is to apply it. You can read all Knuth and Cormen, and not be able to write a simple, trivial sort. The main thing is understanding where and how to apply. Plus practice. I read about the algorithm -> I wrote the code -> I understood where I can use it -> I put it in memory.

And what else is worth studying?

You should study a fundamentals ONLY: computer networks, operating systems, computer device, algorithms, databases and search engines. References to the study:

Tanenbaum — Computer networks. This book will give an insight into the design of computer networks, and if you still understand what’s going on in tcpdump or in the Wireshark dump, that’s fine.

Thomas H. Cormen — Introduction to Algorithms. The book about algorithms, probably, is the best, what we have after Knuth.

Tanenbaum — Computer Architecture. This book will give an understanding of the difference between the desktop and the server, and also about all the levels that you can meet during the study.

Jon Bentley — Programming Pearls. It is another good book on algorithms.

ICND (the first and second volume) it was a good literature to prepare for CCNA certification in the 2010 year. I do not know how to prepare right now. And I never passed CCNA.

But I want to program on % LANGUAGE_NAME%, why should I do this?

Because you don’t what to be shithead, but will turn in time a bearded dude, who knows why and how his code works or doesn’t work, that’s why. So you can diagnose where you have a problem: in the code or in the settings of some service on the server under a certain OS.

Got it, but how should I start and where can I get the experience?

It’s easy to start. The main thing is to do it all the time. In general, there are three options:

  1. Do freelance, do not develop your brain, learn frameworks and treat the symptoms. At the same time, do engage in some untechnical activities. Arrange as a salesman somewhere. Or as a PM. Or as a marketer. Open your business… And then you will end after 1–4 years.
  2. Give time at the university to mathematics and algorithms. Contribute to the Opensource. Try to find a job after the graduation. Build a foundation: OS, algorithms, databases, caching, scaling, networks. Try to hang out and communicate with people who are smarter than you. Then you will be constantly on the development wave.
  3. Drop everything and go as an intern to a good team lead. Become a Padawan for your master Jedi for six months and a year and work for 2–3 more years with him. You will get real current skills and knowledge.

In the second and third paragraph internship may be required.

Ok, but I want to study and be an intern

Good. Suppose you found a good team lead, who is ready to take you as an intern. But what can you offer him, considering that you are still the larva of the programmer’s larva? Now you’re not cool and you do not know how to do anything, and training you is a waste of time and brain resources of the team lead. It’s an investment. And any investment should pay off. Therefore, there is no sense in summer internships, internships for “a little bit” and other non-full-time things. By my experience, I will say that from a random guy can be grown a weak junior, somewhere in six months. When you will reach the level of junior, you can count on 200–400 bucks for your attempts.

Uh, a lot of text. Maybe you can explain somehow in short?

  1. Yes.
  2. Write the code
  3. Learn the base
  4. Sleep
  5. Repeat

In occasion of the literature above, it is useful to read at all levels.

  1. You read when you’re junior
  2. You read when you’re middle
  3. You read when you’re a senior

If you do this, you will increasingly receive an understanding of the material with each reading and structure it as well.

In this article, Dmitrii Kononenko explains how to memorize information better while learning.

That’s all. If you have any questions, you are welcome to the comments.

Custom Software and Mobile App Development.
How to Handover a Software Project to Another Team.
Waterfall Model in Software Development.
Agile Team Structure.