
I really liked the discussion thread on Quora.com:
What is the hardest part? I did not read all 87 answers, but those I liked, singled out in a separate article from 10 points. This is a free retelling of the opinions of many different people. If readers are interested, I will continue.
1. The difference between high standards and their low skills
The article
“Nobody talks about this to newcomers” tells about the common problem of people engaged in creative or intellectual work. Programming is a complex subject, and usually people who are capable, ambitious and prone to perfectionism are taken for it. At the initial stage they will not get well. Accustomed to high bar, they will be upset. The inner voice will constantly whisper: "You will never succeed, better leave this business." At such times, think that your self-criticism is a sign of your extraordinary, and believe that you will overcome this “inept period”.
')
As for the extraordinary benefits of programming, here they are:
- Problems in the code are fundamentally different from problems in the physical world. To fix a faulty code is possible only with the power of the mind, unlike, for example, a broken car, which requires the purchase of expensive parts.
- You can grow professionally only at the border of the comfort zone. Being engaged in unfamiliar things you will make a lot of mistakes, but you will get real knowledge.
- Errors in programming are not the closing doors in front of you, but the keys to learning.
2. Accept the fact that the computer is always right, but you are not.
If something went wrong, do not blame the computer or program. Do not find out the relationship with them. Just set a goal: “how to fix it”. If you want to sort out relationships with programming languages, why they are so buggy and your program fails, then you have chosen the wrong specialty.
3. Prepare for the worst scenarios.
Wait from users of the program of the most unexpected things. They will enter the numbers where they are not the place, insert paragraphs of text in the name field and do a bunch of other silly things. Do not create forms where you can specify the age of a person in thousands of years. Be prepared for everything, do not trust users, guess the worst scenarios and build protection against them.
4. Control of emotions
Programming is often a long, difficult and frustrating experience. It happens that you have been studying a topic for months, then for many days you write complicated and complicated code, which finally does what you need. And then an experienced programmer takes and rewrites it in 3 minutes in 5 lines. And you feel crushed. Whatever happens, don't get upset.
5. Independence
Many beginners easily take different programming courses, but if they take on an independent task, they fall into a trance. Or there are no ideas for writing, or there are ideas, but there is no understanding how to implement them, where to start. The thing is that courses give you syntactic literacy, you seem to remember different commands like len (), but you can't write your own program. And it starts to seem to you that the training course was a layout for suckers, where you were taught superficial nonsense, and the very essence was kept secret. And this essence is a skill to think programmatically.
The logic of programming is to break the big task into small subtasks and consistently implement them, and then tie them together. The programmer is not the one who distills the text of the code with the knowledge of all the commands, but the one who thinks in the logic of the program. And when you finally manage to do something yourself, on your own, this moment is incredibly inspiring and you remember your grandiose idea, which recently seemed impracticable and you think: “Oh, ho, now I can realize it!” Although, of course, you still grow and grow to its implementation, but the moment is still pleasant.
6. Ignorance of where to start
- You do not know which language to start learning: C, Python, Java, PHP, C ++, Ruby and a million other languages.
- You do not know where to study: by book, online materials, or enroll in courses.
- You do not know what to study: mobile applications, Android, iOS, web, frontend, backend, operating systems, artificial intelligence, machine learning, DevOps?
- You do not know how to study: read books, someone else's code, take someone for joint training, program competitively, napara, get a job as an intern?
There are a lot of these questions: “what, where, what, how,…. ? You consult with friends, listen to professionals, ask on the forums. But their answers confuse you even more.
The problem with learning programming is that there is too much information on the topic. And you need to learn to wade through the wilds of this noise. Choosing only what is needed is very difficult, but your future depends on this skill.
To deal with this, follow these tips:
- Find a mentor (mentor), an experienced programmer with advanced technologies who will help you create a training plan.
- Get feedback on your code. There are many ways to do something, and even more ways to do it wrong. Although there are many great resources on the Internet, it is not perfect. Therefore, from time to time, show your code to the mentor to confirm that you are on the right path.
- Practice implementing your ideas. Following the tutorials quickly bothers, so as soon as you feel that you have become familiar enough with the technology, start with it to realize something interesting for you. This increases motivation and self-esteem. Remember that you can do this, the only question is in time and perseverance.
Tips for engineers:
- Learn the whole stack. Over time, master the whole stack of technologies. For example, if you are a web programmer, do not limit yourself to only the front end. Have an idea about backend, database, server, network. With a complete understanding of the product being developed, you can become an advanced engineer who makes the right decisions.
- Be self-taught. Software development is one of the fastest growing industries in the world. If fundamental principles rarely change, then the tools - almost every day. It is important to keep track of all the innovations and be able to independently master the necessary for you.
- Learn to communicate and collaborate. If you know how to do something well, then for your company you are a useful unit = 1. But if at the same time you support and inspire 10 more people, then you turn into = 11 in the eyes of the management.
7. A lot of things around programming
Often, a programmer alone tries to create and launch a product on the market. Here the most difficult begins.
The choice and support of different templates, the creation of icons, logos, banners.
Registration in the play-market, app-store, setting up payment systems, filling out boring forms. Then they write that you did something wrong and have to redo everything anew.
Order ads in google-ads and search for the best options, build sales channels, and also this budget constraint that binds you hand and foot ...
By itself, pure programming already seems easy, when you don’t have to get into the exhausting tasks of design and marketing.
8. It is impossible to know everything
Every time you ideally have mastered some skills, you will find out that something new has appeared, much better. And the paradox of Socrates arises: "I know that I know nothing." Constantly you need to spend a lot of time learning new things, and since it is impossible to know everything and be an expert in everything, you always need to choose priorities - what is most important for you at the moment, what technology, what approach.

Yes, you can choose one thing and become an expert in it, but then you are very much at risk that something new will emerge at the same time, many times superior to your technology and it will win the market while you hold on to old with both hands.
Therefore, if you like to learn and constantly learn something new, then choosing programming will not be disappointed for a second.
9. In real life, not everything is as perfect as learning.
During your studies you play with light programs from several hundred, maximum - thousands of lines of code. Even at the university, at the Faculty of Computer Science.
When you come to an enterprise you may encounter a code base of hundreds of thousands of lines and even millions. There are many errors, ridiculous variable names, intricate subroutines without documentation, different design patterns, multilevel caching, etc. are used.
When all this needs to be understood and studied in a short time - you get the most vertical learning curve that many software engineers encounter.
10. Balancing theory and practice
On the one hand, one can study a lot of theory, read something for years and think that you know little and do nothing. It bothers and ceases to be beneficial at some point.
On the other hand, you can start doing something without knowing the theory, and quickly get stuck or get lost in your code and its errors. Many people start to do something, relying only on abrupt answers from the forums, not understanding the whole picture of their application and where the work ultimately leads them (for example, to unsupported, non-updated code).
So, it is very important to feel this balance of the minimal theory and the practice that follows it. Then what you write will be literate, and the theory will be absorbed many times faster and more interesting, and you will learn harmoniously while working.
UPD
11. Fighting bugs

Bugs (bugs) are errors in the program. If we continue the metaphor with beetles and man, then for beginners it is rather something subcutaneous, itchy, terrifying, because it is invisible and difficult to remove.
The most annoying thing is that they appear when you seem to have done everything correctly, and you can proceed to further accomplishments. But suddenly the program stops working for no apparent reason, or it does not work as intended. And you have to drop everything and spend a few hours, or even days, to search for this error. It seems that this time is being wasted (after all, you are not engaged in creating the “new”, but picking on the “old”). To survive this period you need titanic patience.
You must understand that, in fact, during this time you will learn a lot of new things, and do it with greater motivation and degree of memorization than in the quiet conditions of studying the theory. The correction of each bug is first of all the elimination of one’s ignorance in many questions, the existence of which you have never thought about before. There is a transition from unconscious ignorance - to conscious and its transformation into knowledge. Over time, you will allow fewer bugs and get the job done with tools to fix them.
12. Go fast and break things.

You need to develop a special
character when you are
not afraid to go forward , not being prepared for this in advance. Facebook's old motto: “Go quickly, break things. If you do not break anything, then move slowly. "