Complete code

The hardest thing in programming is ...


I really liked the discussion thread on What is the hardest part about learning to program? All 87 responses I did not read, but liked, I singled out a separate article of 10 items. It's 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
In the article "No one talks about it to newcomers" tells about the common problem of people engaged in creative or intellectual work. Programming is a complex subject, and usually for it are capable, ambitious and prone to perfectionism people. At the initial stage, they will not work well. Accustomed to a high bar, they will be upset. The inner voice will constantly whisper: "You never will, it's better to leave this matter." At such moments, think that your self-criticism is a sign of your extraordinary nature, and believe that you will overcome this "incompetent period".

As for the extraordinary advantages of programming, here they are:

The problems in the code are fundamentally different from the problems in the physical world. To repair the faulty code is possible only by the power of the mind, in contrast to, for example, a broken machine that requires the purchase of expensive parts.
Professionally grow only at the border of the comfort zone. Doing unfamiliar things you make a lot of mistakes, but you will get real knowledge.
Errors in programming are not closing doors in front of you, but keys to learning.
2. Accept the fact that the computer is always right, and you are not
If something went wrong, do not blame the computer or the program. Do not figure out the relationship with them. Just set the goal: "how to fix it." If you want to find out the relationship with the programming languages, why they are so buggy and your program fails - then you have chosen the wrong specialty.
3. Prepare for the worst scenarios
Expect users of the most unexpected things. They will enter numbers where they do not belong, insert paragraphs of text in the name field and do a bunch of other awkward 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 the users, anticipate the worst scenarios and build protection against them.
4. Controlling emotions
Programming, often, is a long, difficult and frustrating experience. Sometimes, for months you study a topic, then for many days you write a complicated and complicated code that, at last, 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, do not get upset.
5. Independence
Many newcomers easily pass different programming courses, but they need to 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 the courses give you syntactic literacy, you seem to remember different commands like len (), but you can not write your program. And it starts to seem to you that the training course was a wiring for suckers, where you were taught superficial nonsense, and the very essence was left in secret. And this essence is a skill to think in software.

The logic of programming is to break a big problem into small subtasks and consistently implement them, and then link 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 get to do something on your own, this moment is incredibly inspiring and you remember your grandiose idea, which recently seemed impossible and you think: "Oh, now I can realize it!" Although, of course, you still have grow and grow up to its realization, but the moment is still pleasant.
6. Ignorance, 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: according to the 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, naparu, get a trainee?

A lot of these questions: "what, where, what, how, .... ? ". You consult with friends, listen to professionals, ask on forums. But their answers make you even more confused.

The problem with learning programming is that there is too much information on the topic. And you need to learn to wade through the jungle of this noise. Choose only what is needed is very difficult, but your future depends on this skill.

To cope with this, follow these tips:

Find a mentor (mentor), an experienced and knowledgeable modern technology programmer who will help you draw up a training plan.
Get feedback on your code. There are many ways to do something, and even more ways how to do it wrong. Although the Internet has many wonderful resources, it is still not perfect. Therefore, from time to time, show your code to the mentor so that he confirms that you are on the right track.
Practice realizing your ideas. Following the training manuals quickly gets bored, so once you feel that you have become acquainted 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 question is only in time and perseverance.

Tips for engineers:

Study the whole stack. Over time, master the whole stack of technologies. For example, if you are a web programmer, do not just limit yourself to the frontend. Have an idea of ​​the backend, database, server, network. Having a solid idea of ​​the product being developed, you can become an advanced engineer making the right decisions.
Be self-taught. Software development is one of the fastest growing industries in the world. If fundamental principles change seldom, then tools - almost every day. It is important to keep an eye on all novelties and be able to independently master the necessary for you.
Learn to communicate and cooperate. If you know how to do something well, then for your company you are a useful unit = 1. But if you support and inspire another 10 people, then you turn in the eyes of the leadership at = 11.
7. A lot of things, around programming
Often, a programmer alone tries to create and market his product. That's where the most difficult begins.

Selection and support of different templates, the creation of icons, logos, banners.

Registration in the play-market, app-store, adjustment of payment systems, filling in tedious forms. Then they write that you did something wrong and have to re-do everything.

Order advertising in google-ads and search for the best options, setting up sales channels, and even this limited budget, which binds you on the hands and feet ...

By itself, programming in its pure form already seems easy, when you do not have to get involved in the exhausting tasks of design and marketing.
8. It's impossible to know everything
Every time you have ideally mastered some skills, you will find out that something new has appeared, much better. And the paradox of Socrates arises: "I know that I do not know anything." Constantly you need to spend a lot of time learning new things, and since it's impossible to know everything and be an expert in everything, you always have 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 at the same time, something new has appeared, many times surpassing your technology and that something will conquer the market while you hold on to the market 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 in learning
While studying, you play with light programs of several hundred, maximum - thousands of lines of code. Even at the university, at the Faculty of Computer Science.

When you come to the enterprise you can run into a database of hundreds of thousands of lines and even millions. There are a lot of mistakes, ridiculous variable names, intricate subroutines without documentation, different design templates, multi-level 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 face.
10. Balancing between 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. This 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 mistakes. Many start to do something, relying only on steep answers from the forums, not understanding the whole picture of their application and where their work will ultimately lead (for example, to an unsupported, non-renewable code).

So, it is very important to feel this balance of the minimal theory and the subsequent practice behind it. Then, what you write will be literate, and the theory will be assimilated many times faster and more interesting, and you will be harmoniously trained during work.
11. Fighting bugs
image Bugs (beetles) are errors in the program. If we continue the metaphor with beetles and humans, then for beginners it is rather something subcutaneous, itchy, terrifying, because it is invisible and difficult to eliminate.

The most offensive is that they appear when you seem to have done everything right, 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 give up and spend a few hours, or even days, searching for this error. It seems that this time is wasted (after all, you are not engaged in creating a "new" one, but you are picking at the "old" one). To survive this period you need titanic patience.

You should understand that, in fact, during this time you will learn a lot of new things, and do it with more motivation and a degree of memorability than in quiet conditions of studying the theory. Correction of each bug is first and foremost the elimination of one's ignorance on many issues, about which you have not thought of before. There is a transition from unconscious ignorance - to the conscious and his transformation into knowledge. Over time, you will be able to tolerate fewer bugs and get to work with tools to fix them.
12. Go fast and break things
image We need to develop a special character store when you Do not be afraid to go forward , not being ready in advance for this. Old Faithbook motto: "Go fast, break things. If you do not break anything, then you move slowly. "
xially 6 november 2017, 13:32
Vote for this post
Bring it to the Main Page


Leave a Reply

Avaible tags
  • <b>...</b>highlighting important text on the page in bold
  • <i>..</i>highlighting important text on the page in italic
  • <u>...</u>allocated with tag <u> text shownas underlined
  • <s>...</s>allocated with tag <s> text shown as strikethrough
  • <sup>...</sup>, <sub>...</sub>text in the tag <sup> appears as a superscript, <sub> - subscript
  • <blockquote>...</blockquote>For  highlight citation, use the tag <blockquote>
  • <code lang="lang">...</code>highlighting the program code (supported by bash, cpp, cs, css, xml, html, java, javascript, lisp, lua, php, perl, python, ruby, sql, scala, text)
  • <a href="http://...">...</a>link, specify the desired Internet address in the href attribute
  • <img src="http://..." alt="text" />specify the full path of image in the src attribute