What is coding. How and where to learn coding? How to choose a direction and language

And I'll explain why.

Fifteen years ago, I was advised to become a programmer due to the fact that I was an introvert and shy person, and also had an analytical mind and a complete lack of social life, but I just laughed and dismissed such advisers. Then I was a teenager, and in my teenage mind the programmer always lived in the basement of my parents' house, was pimply and wore ugly glasses, he never had a girlfriend, but fantasies about Princess Leia paid off (and quite often). This way of life was not to my liking. In addition, then I already had a girlfriend, and quite beautiful.

Fast forward six years: I'm sitting at the Budapest airport reading a book on HTML ...

Six years later, I was hired by a Northern Irish start-up company as a generalist. Yes, it looks like it took some time. But how much exactly? I can not say exactly. But a lot. The mythical 10 thousand hours? No. If I was asked to give an approximate figure, I would say that by that day I had “encoded” about 8 thousand hours. Technically speaking, if the 10,000-hour rule were to be believed, then in 2,000 I would have become an expert in this area.

But will I?

This is what I managed to achieve in 8 thousand hours. Make yourself comfortable as my story will be long. I have coded in the following languages: C, HTML, CSS, JavaScript, Java (Android), Swift, PHP, Ruby, Python, Chuck, SQL, worked with the following frameworks: Node, Angular, Bootstrap, Foundation, React, Rails, CodeIgniter, Ionic and has created Landing Pages, Wordpress Sites, Ecommerce Solutions, eLearning Content, Moodle and Totara Sites, Mahara Sites, Common Cartridge and SCORM Packages, Android and iOS Apps, Hybrid Apps, Internal Web Apps, e-books, magazines, games, and additional applications for board games. So where am I heading for?

I want to say that there is no field as such, so the task of becoming an expert in it is unattainable. Coding is not an area. Computer science - yes, but it's completely different.

Coding is what presidents, teachers and parents are pushing the younger generation towards, as if leading sheep into golden fields of opportunity.

This promise is a dream, propaganda so well created and expressed (now it is not even expressed in words) that it was absurdly simplified into pictures so that cute crawling toddlers would understand that logical thinking is more important than the desire to feed oneself (please pay attention to sarcasm) ...

15 years later, coding has become a pop culture version of programming, and now the population has high hopes for a future army of coders, thanks to which we will have AI-controlled homes, traffic, retail, entertainment, and a revolution in medicine, industry and sex - just a madhouse, there is no other word. And all because programming is exposed for coding, and, in theory, it is easy to learn... But this is so far from the truth ...

Source: LifeHacker

Let's figure it out. The myth that anyone can learn one of the programming languages ​​in just a few hours, taken as a "fact", is only true up to a certain point, and this moment comes at an early stage of learning. Indeed, a language can be learned in one day. In general, if you set yourself the goal of becoming a polyglot in programming in a month, while having a job, you can master 8-10 languages ​​if you study on weekends. But here's the catch. Every programming language has its own libraries, as well as syntactic features, and all this cannot be learned easily or quickly or over the weekend. Actually, in the real world, the programming language will not be the main problem.

Just because you speak English doesn't mean you can write novels or even short stories. The same can be said about coding.

Just because you’ve learned a language doesn’t mean you know how to write a program. Add to this myriad frameworks, plugins, libraries, preprocessors, postprocessors, coding standards, industry standards, test-driven development (TDD), behavior-driven development (BDD), content management systems, file versioning, continuous integration (CI), release management. and deployment, debugging, ticketing, waterfall models - and scrum methods and combinations of them, and I'm not sure what else to name. The bottom line is that the concept of "coder" covers pretty much everything mentioned above. Programming affects only a small part. Important, but still small.

However, programming continues to be simplified ...

Apple launched Playgrounds, MIT launched Scratch, and Lego is preparing Boost, and everyone is trying to sell coding to the younger and younger generation, as if they want to fill the jobs of new programmers in the 2020s.

I see it this way: "Don't worry about the code, take these virtual puzzle pieces and that's it, you can program." If that were true. Here's what you need to know about programming: it's text-based. It has always been and will be for many years to come. Kids who play Lego Boost, Playgrounds, or Scratch won't become more experienced programmers by age 22 than those who started programming at 16 and worked with a real programming language. Actually, where do such expectations come from? I do not think that my child will learn to earn his own bread until he is 22 years old. But if he studies coding for 6 years, then I guarantee that he will quickly find a job.

Playgrounds from Apple.

Coding can be the hardest part of the software development process. If you don't get everything organized from the beginning (especially for large projects), coding and debugging after that will not only take a very long time, but it will also bring a lot of headaches.

Good code is well maintained, reusable, and testable. The following steps will show you and / or your development team how to handle different programming tasks and keep everything as good as possible. I will introduce you to the “best practices” to help you write good code and help you and your team to be happy and efficient.

1. Use coding standards

It is easy to write bad, disorganized code, but hard to maintain. Good code usually maintains some sort of standard for variable naming, formatting, and more. Such standards are useful because they make things conditional for those who read the code afterwards, including you.

You can create your own coding standards, but it is better to use one widely used one. By using the Zend Framework Coding Standard, or PSR-1 Coding Style, it will be easier for others to adapt.

2. Use comments

Comments are critically needed. You don't learn to appreciate them until you write a thousand-line size code and leave it for a couple of days, and then come back trying to figure it out. Useful comments make life easier for those who will work with the code after you.

Write clear, one-line comments for incomprehensible parts of the code; write a complete description of the parameters and functionality of functions and methods; for complex logic blocks, describe the logic before them as needed. Don't forget to update your comments!

3. Refactor

Code refactoring is also a good habit for productive developers. Believe it or not, you have to refactor your code every day, otherwise something is wrong with it! Refactoring keeps your code in good shape, but what should you refactor and how?

You should refactor everything from architecture to methods and functions, variable names, the number of arguments passed to a method, and the like.

Refactoring is more of an art than a science, but there are some good rules that can shed light on this:

  • If your function or method is longer than 20-25 lines, most likely there is too much logic there, and you can split it into two or more smaller functions / methods.
  • If the name of your function or method is more than 20 characters long, it is worth revising the name, or revising the entire function / method using the first rule.
  • If you have many nested loops, you are using too many resources without realizing it. In general, you should rethink your logic if you've nested more than two loops. Three nested loops are just awful!
  • Consider if there are any suitable design patterns you can use. You shouldn't use patterns just for the sake of using patterns, but patterns offer proven solutions that may be appropriate.

4. Avoid global code

Globals and loops can add problems when your code grows to millions of lines. They affect the code in places where it is difficult to see, or cause problems with the names of variables, objects, and other things. Think twice before polluting the global namespace with variables, functions, loops, and more.

Ideally, you shouldn't define any blocks globally. Switch statements, try-catch, foreach loops, while loops, and the like must be described within a method or function. Methods must be described inside classes, and classes and functions inside namespaces.

5. Use meaningful names

Never use names like $ k, $ m and $ test for your variables. How can such code be read in the future? In good code, the names of variables, methods / functions, classes; should carry a semantic load. Some good variable names are $ request, $ dbResult and $ tempFile (Depends on your coding style).

6. Use meaningful structures

Structuring your application is important; don't use complex structures, always keep it simple. When naming directories and files, use a naming convention that you agreed with the team, or that follows coding standards. Always separate the four parts of a PHP application from each other - CSS, HTML Templates, JavaScript, PHP code - and for each, try to separate the libraries from the business logic. It is also a good idea to keep the directory hierarchy as small as possible, so it will be easier for you to search for parts of the code and navigate the structure.

7. Use version control systems

In the past, good development teams trusted CVS. Now, we have a variation of the solutions available. Change and revision management should be simple yet effective, so choose whichever version control system works best with your development team's flow. I prefer to use a distributed version control system like Git or Mercurial; both free / open source and very powerful. If you don't know what version control is, I recommend that you check out Sean Gudgston's Introduction to Git series.

8. Use auto build tools

9. Use code documentators

For large applications spanning multiple classes and namespaces, you should have an auto-generated API documentation. This is very helpful and everyone on the team will know what is what. And if you are working on several projects at the same time, you will find this documentation a blessing, because you will probably forget the peculiarities of the structure and other differences between projects. One such documentary that you might want to consider is DocBlox.

10. Use Testing

There are many tools that I really value, but one that I clearly value are frameworks that help automate the testing process. Testing (namely systematic testing) is essential for every part of your million dollar application. Good testing tools are PHPUnit and SimpleTest for unit testing your PHP Classes. For GUI testing, I recommend SeleniumHQ tools.

Outcome

In this article, you've seen an overview of the best practices for writing better code, from using coding standards to formatting as a whole team, the importance of refactoring and how to master it, using professional tools such as a testing framework, a code documentator, and version control to help manage code base. If you haven’t followed these steps so far, you should train yourself and your team to do them.

Most free software developers work on Linux or Mac, but Windows support is usually implemented on a leftover basis. It works - well, it doesn't work - let the one who needs it port. In this article, I'll show you how to create native Windows executables without having this system at hand.

The latest Python 2.7 release was announced this year, after which the Python Software Foundation will no longer support the 2.7 branch. Many popular libraries and frameworks are also dropping out of official support for Python 2, and a number of Linux distributions no longer include it in their default package.

You have probably used the services of virustotal.com more than once to check whether the binaries contain malicious functions, or to test your own developments. This service has a free API, which we will discuss in Python in this article.

Any opportunity to invisibly access the outside world from a host inside a secure network is a precious find for a penetration tester. One of the last available paths is NTP, the clock synchronization protocol. Its traffic is allowed almost everywhere, so it will be an excellent transport for data. I'll show you how to implement a basic client and server in C #.

You've probably heard that neural networks have recently become pretty damn good at recognizing objects in pictures. Our task is to learn how to use these neural networks, because their power can be useful in a variety of cases. In this article, I'll show you how to use it using the most common tools: Python and the Tensorflow and Keras libraries.

You may have already come across voice identification. It is used in banks for phone identification, to verify identity at control points and in household voice assistants that can recognize the owner. Do you know how it works? I decided to go into the details and make my own implementation.

Previously, captcha with numbers was a great way to weed out bots, but now this kind is almost never found. I think you yourself guess what the matter is: neural networks have learned to recognize such captchas better than us. In this article, we'll take a look at how a neural network works and how to use Keras and Tensorflow to implement digit recognition.

Two years ago, the developers of the streaming platform Twitch introduced a new way of interaction between streamers and viewers - Twitch Extensions. This system allows developers to complement and improve the interface of both the site and the mobile application, creating various interactive elements. I'll show you how these extensions work and how you can create your own if desired.

Banking Trojans cause millions of dollars in damage every year. Virmakers try to keep everything related to the internal cuisine of bankers in the deepest secrecy. Therefore, we could not miss a unique event - getting the source code of the Carbanak banking trojan in the public - and began to investigate its structure from the inside.

Julia is a young programming language designed primarily for scientific computing. Its creators wanted it to fill the niche previously occupied by Matlab, its clones and R. The creators tried to solve the so-called problem of two languages: combine the convenience of R and Python and the performance of C. Let's see what they did.

Forth is used in a variety of areas, including PCI chipsets and spacecraft, and Pavel Durov will use a similar language in smart contracts of the TON cryptocurrency. Without undergoing major changes, one of the oldest programming languages ​​allows many modern paradigms to be embodied. So what exactly is this cryptic Forth?

The gamma mode, in contrast to the simple replacement mode, allows encrypting messages of arbitrary length without using the padding operation. Today we will talk about how such a regime is implemented and write all the functions necessary for its implementation.

When the number of lines of code in your programs is in the millions, finding errors becomes a thousandfold more difficult. Fortunately, today it is possible to automate testing using fuzzers. How they work, why they should be used and what they are capable of - you will find out about this in today's article.

Abstraction is the foundation of programming. We use a lot of things without thinking about their internals, and they work great. Everyone knows that user programs interact with the kernel through system calls, but have you ever wondered how this happens on your machine?

Hackers develop cheats, gamers buy them, companies hire engineers to develop new defenses. The hackers find a loophole again, and the circle is complete. In this article, we'll take a look at how different defensive methods work (and if they work!) And try to create our own anti-cheat protection system.

In Linux, as you know, many things are implemented as files in the filesystem. And if not implemented, then you can implement them yourself using FUSE. In Windows, this is less accepted, but if you still really want to mount something as a file system, then it is possible. I'll show you how to achieve this using C # and the Dokan library.

The most attractive target for an attacker is online banking, and botnets play a decisive role in the success of virus attacks against it. But in order to extract valuable information from the data intercepted with their help, the attacker needs to work hard. Today I will tell you how to make life difficult for bots and protect your application from attacks.

The great thing about computer games is that the reward for success is real pleasure, and the cost of failure is low. But sometimes, in order to unlock new abilities or just speed up the gameplay, you resort to not the most honest methods. And if you cannot change the rules of the world, you can try to bend them. Yes, that's right, we'll talk about cheats.

Combat keyloggers with tons of features and protection against detection can cost tens, if not hundreds of dollars. But a keylogger is not such a complicated thing, and if you wish, you can make your own and even avoid being detected by antiviruses. In this article I will show you how to do this, and at the same time we will practice developing programs in C #.

In C ++, there is such a thing as dynamic data type identification (RTTI). It is a mechanism that allows you to determine the type of a variable or object at runtime. To make the executable file smaller, RTTI is disabled in many projects, which makes dynamic_cast and typeid stop working. But there is still a way to check if an instance of an object is derived from some base class.

Statically typed languages ​​usually force you to write variable types for any reason. But this is not always the case: the theory and practice of programming languages ​​have advanced significantly, it's just that these achievements are not immediately accepted by the industry. Today we'll take a look at the OCaml language and see that static typing is not necessarily inconvenient.

There are many security solutions that define work inside sandboxed environments, work with anti-debugging techniques, monitor the integrity of their code, and dynamically encrypt their data in memory against a dump. Another powerful security technique is code virtualization. In this article, I'll show you how it works.

It is best to learn the language on a real project, so when I decided to experiment with hell, I set myself a real and interesting task: to write a utility for detecting work in a hypervisor. This in itself is amusing, and the new programming language will bring entertainment to the next level.

You have come across different protocols in your life more than once - you used some, others, perhaps, reversed. Some were easy to read, others couldn't be figured out without a hex editor. In this article, I will show you how to create your own protocol that will run on top of TCP / IP. We will develop our own data structure and implement the server in C #.

If you write in Python, then you probably saw the definitions of methods wrapped in double underscores in the standard libraries. These "magic" methods form many of the useful interfaces that you use all the time — for example, when you get a value by element number, or print something out. Now I will show you how to use these methods in your programs as well.

When writing software that interacts with other applications, sometimes it becomes necessary to terminate the execution of third-party processes. There are several methods that can help in this matter: some are well documented, others try to complete the necessary processes in more rigid ways, provoking the operating system to slam them by force. I will show you several ways to kill and destroy processes in Windows.

The language, developed by order of the US Department of Defense and named after the world's first programmer Ada Lovelace, is actively used to control airplanes, trains, spacecraft and other interesting things. Let's look at language without the prism of myths and see how we can benefit from it, even if we are not going into space yet.

You've probably come across emulators of game consoles and, perhaps, even sat at them for more than one hour. But have you ever wondered how it works? Using the example of NES, known in Russia as Dendy, I will show you how to create your own emulator. And at the same time we will deal with the cunning architecture of this console, which produced an amazingly good picture for its time and its modest price.

You've probably heard of such a class of malicious applications as stealers. Their task is to extract valuable data from the victim's system, first of all, passwords. In this article, I will explain exactly how they do it, using the example of extracting passwords from the Chrome and Firefox browsers and show examples of C ++ code.

Interview questions like "why is the manhole cover round?" - this is strange. Sheets of C code that you have to compile in your head are boring. The most interesting tasks are for general technical and logical thinking. And today comrades from the Abbyy company threw us just such!

The ability to program is one of the most valuable skills in demand in the modern world. And it practically does not matter what exactly makes a person create the code: sincere interest, financial or career considerations - those who know how to program will not be left idle. Coding is very similar to communicating in a foreign language, so in the early stages of learning programming, beginners often find it difficult. At the same time, many experience severe discomfort, but over time everything gets better and a person begins to code easily, without strong mental costs. Today you can find many books and online resources with which you can learn to code, but any self-study is associated with stress and negative emotions - this should always be remembered when starting to master a programming language. The most important thing for a beginner coder is not to give up learning a language halfway, losing all interest in this occupation. So what does a future programmer need to know? What difficulties await him on the way to mastering useful skills?

Programming languages

First you need to decide on the programming language that a beginner wants to learn. It's not so easy - there are many languages ​​and each of them is good in its own way. It is very important to choose a language consciously - after all, a lot of time and effort will be invested in its development. But be that as it may, a novice coder needs to know that there are no good or bad programming languages, but there are languages ​​that are friendly to neophytes. Therefore, the easier and more understandable the programming language is, the better - at the beginning of the path it is better to go from success to success, from simple tasks to more complex ones. Further it will be easier, after the beginner learns to code in his first programming language, other languages ​​will be given to him much easier.

It is also very important to immediately determine what you need to know the language for. Because the coding is very different. If someone wants to become a software developer, then you can look towards Java, and in the case of creating applications for iOS, the Swift language is better.

Suitable teaching method

There are many ways to learn, so in the case of programming languages, you need to find a suitable methodology. At the same time, it will be wise to choose the main method and supplement it with secondary teaching methods. Everything here is very individual: if a beginner is visual or understands information well by ear, then he can learn coding by watching videos on YouTube, and get other knowledge from books. Here are some simple yet effective tutorials:

Online coding courses. Some people work more efficiently when they are told what to do and have their performance checked regularly. And there are a lot of such people. Therefore, if a beginner feels that he has problems with self-discipline, then he should choose a course where he will be constantly motivated by checks. It's a good idea - so many people quit learning programming, relying on their willpower and enthusiasm. Learning coding on your own is not for everyone, this should always be remembered.

YouTube video. Today, you can find out everything about everything just by watching videos on YouTube. More experienced coders will show you exactly what to do, so these materials are very helpful. It's a simple, effective, and most importantly free way to learn how to code. If you have Internet access, you can sit, watch, repeat at least all day until it becomes clear.

Books... This is a bit of an old-fashioned way of learning programming languages ​​these days, but the fact remains that over the years, coding hasn't changed much and what is told on YouTube is not much different from what is said in a paper book. But books have an undeniable merit - they make it easier to understand the logic of the language, and this is incredibly important. First of all, because when it comes to practical training, no one wants to do what is incomprehensible or impossible. In order not to give up everything halfway, it is imperative to read programming books.

Practice. Many of the best programmers are self-taught. Very often they began to code unnoticed for themselves, as their training was haphazard. They faced a problem, solved it, faced another - and solved it too. Gradually, such self-taught people move from one problem to another, more complex and at the same time master coding. It is not worth imitating such people, but practice should not be abandoned - it is the key to success in learning.

Fixing success

A beginner, just starting to learn a programming language, needs to know and be prepared for the fact that this is for a long time. Learning to code is a lengthy process where failure is felt far more than success. In order not to abandon school, it is imperative to record all your actions. People very often lose motivation just because they cannot feel progress. And he will definitely be if the beginner is diligently engaged. It's just that the skills grow imperceptibly, a novice coder may not even notice it, with such small steps he moves towards the intended goal.

This is why you need to remind yourself from time to time how far you have come and look back more often. It helps a lot - after all, looking at their first lines of code, anyone can understand that they are progressing. All these personal bests may seem like fun. No, in fact, the recording of success is very important - it is highly motivating throughout the entire learning process. Therefore, in order to start and not quit, it is imperative to mark each stage passed.

Clear terms of training

When it comes to coding, many beginners make a common mistake - they try to do a bunch of tasks at once and usually give up all of them before finishing. They become interested in something else, most often in other tasks, so they jump from one project to another. Don't do that. It is best to move in a systematic way - to solve one problem or to understand the example until everything becomes clear. It's a very simple principle: one thing at a time.

But at the same time, you need to understand that moving forward is necessary, so you need to set yourself strict deadlines for studying one or another aspect of the language. You can try to imagine that the exam is coming soon and you will have to show everything that you could achieve. This is motivating. Yes, all these personal affairs may not be very comfortable, but coding itself is not fun. Strict discipline will allow you to acquire the necessary skills, and adherence to the deadline is almost the most important skill for a freelance programmer.

While ordinary users are afraid to make a mistake and hate it when something goes wrong, the programmer is in a completely different position. Mistakes are part of his job, and a very large part. Therefore, a novice coder should teach himself how to read error messages, no matter how frustrating it may be. These messages contain a lot of valuable information, as they tell you what exactly was missed in the process of creating the code. You need to be prepared that such messages will appear very often and will not go anywhere even after the study of the programming language is finished. You can’t spare the time to work on mistakes - this is the most important part of learning. In addition, this is a good practice - once you understand the problem, it will later be easier to avoid many mistakes. Bug reporting is not a punishment; in fact, they are the coder's best friends who want to teach him how to do everything right.

Communication with other programmers

Such communication will also help to understand that other people just as often encounter coding problems and this is not unusual. And if, in addition, a beginner can help his friend, a programmer, then he will have a second wind and he will continue learning with a vengeance. And you should not be afraid of communication - programmers are actually friendly people, they are just often on their own wavelength and a beginner only needs to get into resonance.

Right and wrong approach

Novice coders often try to copy pieces of code from other projects, solving any of their problems. They think this is reasonable, because the main thing is to make everything work. This is a wrong, moreover, a very harmful approach. And not because copying is bad, but because copying, a beginner will not understand what exactly this code is doing. Of course, copying is much easier than writing everything yourself.

But in the learning process, such an approach will lead to the fact that large gaps in knowledge are formed and a novice coder will one day give up, unable to solve the problem facing him. And it will abandon everything. Learning a programming language, you need to spend time without regrets on analyzing any, even at first glance, problem. And if you can't come up with a solution right away, you can't give up. You need to read, watch a video, ask others - a beginner needs to thoroughly deal with the difficulties that have arisen. Although he is learning a language, it is not exactly the same as learning an ordinary, human language. A coder deals with a machine, so it is important for him to understand what he is doing. Such knowledge of the language is simply invaluable when the educational process comes to practice.

Learning programming languages ​​is not the most exciting thing to do. But everything can be fixed if you approach the matter with fiction. There is no better way to learn anything than by playing games. This also applies to coding, as you can quickly learn a language just by playing and improving your skills at the same time. Here are a few games a budding coder should take a look at.

  • CheckiO is a game that you can play in your browser and requires JavaScript or Python problem solving in order to progress through the game.
  • CodeMonkey - mainly for kids, but if you are a beginner you can learn some code by playing this game.
  • Codewars is not a real game, but rather a collaborative problem solving solution for programmers. This is a great way to master coding as the game supports many languages.
  • Code Combat is an online platform where you can learn how to code by playing a real game.

There are many other games you can use, depending on which one works best for you and the language you are learning. The game will help a beginner to start thinking like a programmer, which is very important at the very beginning of learning.

Conclusion

Some people learn to code quickly, others more slowly, but anyone can learn to code. And do not fall into the faster if something does not work out. You can reach your goal by moving slowly, and indeed any study is a slow process. If a beginner does not want to abandon the study of coding, having mastered only the basics, he needs to develop his own strategy of behavior. You need to understand that time, effort, and sometimes money is invested in training, so you just need to move from one stage to another. And do not give in to difficulties. Yes, programming isn't for everyone. But anyone can learn a language, learn to code. So you just need to decide and go on your own path.

1. Independently

If you have iron willpower and are eager to become a programmer, then you can achieve your goal through self-education. This is not the easiest and shortest path: you yourself have to understand the information chaos and fight procrastination. But you can study at a convenient time for relatively little money or completely free.

The easiest place to start is with interactive online courses. There are many materials on the web that explain the basics of programming and set the direction for further development. Pay special attention to those courses that teach on examples of real projects, that is, they tell you step-by-step how to create a specific program or website.

FreeCodeCamp Web Development Platform

Remember that you can't do anything without practice. Study project-oriented courses and try to write the programs and sites that are disassembled in them. Search YouTube lectures on projects that you would like to develop. First, copy other people's work and analyze it. Then try to move away from the original, experiment, change individual elements until you can create something unique.

In addition to courses and video lectures, you will find official documentation available on language websites, and. When you get the basics, look for the latest Best Practices titles for your programming language. These books contain the best design techniques.

Be sure to set a goal for yourself to create your project and constantly work on it.

This will help consolidate the knowledge gained and understand what information you still lack. Your skills will develop along with the project. When you finish it, work on a new, more complex one.

If you have any difficulties in the learning or development process, you can always turn to programming communities like Toaster and Stack Overflow for any question. For example, they will help you solve a problem, choose a good course, or point out errors in the code.


Service of questions and answers on technological topics "Toaster"

It is convenient to hone skills on special sites where you can compete with other programmers by solving various practical problems with the help of code. These services include Codewars, TopCoder, and HackerRank.

If you feel that your development is at a standstill, or you want to speed up your learning, try the following options.

2.With the help of a mentor

A mentor is a personal mentor who points out mistakes, warns of pitfalls, helps guide the course. A useful recommendation, received at the right time, can save you a lot of problems and save you a lot of time. Therefore, a mentor will not bother anyone.

Find out if there are any developers you know. Perhaps one of them will want to help you. If you don't know such people, you can look for them in the programming communities. For example, on the same "Toaster". Only mentoring services are not cheap, and no one wants to spend a lot of time with strangers just like that.

3. At teachers of "live" courses

Distance and face-to-face courses with instructors who train programmers from scratch have become incredibly popular in recent years. Within this format, you also have to work a lot on your own. But you will study according to a professionally prepared program, and a real person will check the solution of problems. The disadvantages of the courses include the high cost of training.

Popular Russian-language online platforms that are engaged in the systemic training of programmers: Netology, GeekBrains and Loftschool.

If you prefer to study internally, you can look for educational centers that teach programming in your locality. Unfortunately, such establishments are most often present only in big cities. An example is the computer academy "STEP", which has branches in several countries.

4. At the university

If you have a lot of time left and you are sure that you want to connect your life with programming, you can study computer science at the university. But keep in mind that traditional educational institutions are lagging behind progress, so you will have to master modern programming languages ​​and other technologies on your own.

On the other hand, the university will provide fundamental knowledge of mathematics, algorithms and other areas that will help you become a high-quality programmer. Over the years of diligent study, you will develop the right mindset, thanks to which you will grasp everything on the fly in the professional field.

How to choose a direction and language

There are several directions in the IT industry, each of which uses its own set of languages. Let's list the main directions in order of increasing complexity:

  1. Web development... Popular languages: JavaScript, PHP, Python, Ruby.
  2. Mobile development... Popular languages: Java, Swift.
  3. Development of games and programs for desktop computers... Popular languages: C ++, C #, C.
  4. Big Data, machine learning... Popular languages: Python, R, Scala.

What to look for when choosing

To make the right choice of the direction and, in particular, the language, take into account the following factors: the complexity of mastering and the amount of training materials on the Web, your personal preferences (what exactly you want to develop) and the demand for the language in the labor market.


The graph of the demand for languages ​​in the international labor market / research.hackerrank.com

The demand for the language in your region is easy to check on job search sites. Just open the section for software developers and see the number of vacancies available.

If you can't decide

If you're confused, take a closer look at JavaScript - the language in which almost the entire web is written. Many organizations and programmers advise beginners to choose this language as their first language.

For example, Quincy Larson, founder of the freeCodeCamp educational resource, is JavaScript for all beginners. Larson makes very simple arguments:

  1. JavaScript is relatively easy to learn. And to write something and run it in this language, you just need to have a code editor and a browser.
  2. JavaScript is the most demanded language in the international labor market and has great prospects. Large companies like Google, Microsoft and Facebook are investing in the JavaScript ecosystem.
  3. JavaScript has a very wide range of applications: from websites and browser games to mobile applications.

In addition, a large community of developers has formed around this language. The high interest in JavaScript provides a huge number of courses, books, and other educational content.

What else should a programmer know: mathematics and English?

Any programmer will benefit from a deep understanding. For things like game graphics or big data, a mathematical mind is a must. But as for web development and creating simple programs, in most cases you can do without math. Although there is no consensus among professionals on this matter.

But understanding English, at least at the level of fluent reading of the documentation, is a must for all programmers. Official documents and most educational materials appear primarily in English. are often outdated even before the translation is released. In addition, knowledge of English opens up prospects for working with the whole world.

How to get your first experience and your first job

To find your first job as a programmer, you must have a portfolio. This is a project you created, or rather several, which demonstrate all your developer skills. Most of the courses include the development of projects that can fit into your portfolio.

Work experience, especially team development, will be a very valuable item on a resume. But where can you get it if you are looking for your first job?

  1. Complete multiple orders for. It can be Freelance or Upwork. Offer your services for free, then the first customers will come to you.
  2. Find like-minded people and create a common project with them. People unite for such purposes at almost every educational site where there are programming courses.
  3. Select courses that the organizer helps with employment. For example, in GeekBrains, after training, access to internships from various companies, including paid ones, opens up. GeekUniversity and STEP guarantee employment for their graduates.

Before, do not forget to search the Web for lists of tasks and questions that are often asked to job seekers.