The hardest part about programming is ...



    I really liked the discussion thread in Quora.com: for What is the the hardest part about learning to program? I never read all 87 answers, but I liked them, and singled out a separate article of 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 beginners” describes the general problem of people engaged in creative or intellectual work. Programming is a complex subject, and usually capable, ambitious and prone to perfectionism people take it. At the initial stage, they will not do well. Accustomed to a high bar, they will be upset. An inner voice will constantly whisper: “You will never succeed, better leave this business.” At such moments, think that your self-criticism is a sign of your extraordinaryness, and believe that you will overcome this “inept period”.

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

    1. Problems in the code are fundamentally different from problems in the physical world. A faulty code can be repaired only by the power of the mind, unlike, for example, a broken car, which requires the purchase of expensive spare parts.
    2. You can grow professionally only at the edge of your comfort zone. By doing unfamiliar things you will make a lot of mistakes, but then you will get real knowledge.
    3. Mistakes in programming are not closing doors in front of you, but keys to learning.

    2. Accept the fact that the computer is always right, but you are not


    If something went wrong, don’t blame the computer or the program. Do not sort things out with them. Just set the goal: “how to fix it.” If you want to find out the relationship with programming languages, why they are so buggy and your program crashes, then you have chosen the wrong specialty.

    3. Get ready for worse scenarios


    Expect the most unexpected things from program users. 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 a person's age in thousands of years. Be prepared for everything, do not trust users, predict the worst-case scenarios and build protection against them.

    4. Emotion control


    Programming is often a long, difficult and frustrating experience. It happens that you study a topic for months, then for many days you write a complicated complicated code that finally does what you need. And then an experienced programmer takes and rewrites it in 3 minutes in 5 lines. And you feel crushed. No matter what happens, don’t be upset.

    5. Independence


    Many beginners easily take different programming courses, but if they take on an independent task, they fall into a trance. Either there are no ideas for writing, or there are ideas, but there is no understanding of 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 cannot write your own program. And it begins to seem to you that the training course was a wiring for suckers, where you were taught superficial nonsense, and the essence itself was kept secret. And this essence is the ability to think programmatically.

    The logic of programming is to break up a large task into small subtasks and implement them sequentially, and then tie them together. The programmer is not the one who, on distillation, prints the text of the code with 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 recall your grandiose idea, which recently seemed impossible and think: “Oh, now I can realize it!” Although, of course, you still have to grow and grow before its implementation, but the moment is still pleasant.

    6. Ignorance of where to start


    • You don’t know which language to start learning: C, Python, Java, PHP, C ++, Ruby and a million other languages.
    • You do not know where to study: from a book, online materials, or sign up for courses.
    • You do not know what to learn: mobile applications, Android, iOS, web, frontend, backend, operating systems, artificial intelligence, machine learning, DevOps?
    • You don’t know how to study: read books, someone else’s code, take someone for joint training, program competitively, work together, get an intern?

    A lot of these questions: “what, where, what, how, .... ? ” You consult with friends, listen to professionals, ask in 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 how to get through the wilds of this noise. Choosing only what is necessary is very difficult, but your future depends on this skill.

    To handle this, follow these tips:

    • Find a mentor, an experienced and knowledgeable modern technology programmer who will help you make 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’s not perfect. Therefore, from time to time, show your code to the mentor to confirm that you are on the right track.
    • Practice realizing your ideas. Following tutorials quickly gets bored, so as soon as you feel that you have become sufficiently familiar with the technology, begin to implement something interesting for you with it. It enhances motivation and self-esteem. Remember that you can do this, the only question is time and perseverance.

    Tips for engineers:

    • Learn the whole stack. Over time, master the entire technology stack. For example, if you are a web programmer, do not limit yourself to just the frontend. Have an idea of ​​the backend, database, server, network. Having a solid understanding 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 worldwide. If fundamental principles rarely change, then tools are almost every day. It is important to follow all the new products 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 leadership.

    7. A lot of things around programming itself


    Often, a programmer alone tries to create and market his product. This is where the most difficult part begins.

    Selection and support of different templates, creating icons, logos, banners.

    Registration in the play-market, app-store, setting up payment systems, filling out tedious forms. Then they write that you did something wrong and you have to redo everything all over again.

    Ordering ads on google-ads and searching for the best options, establishing sales channels, and also this budget constraint, which binds you hand and foot ...

    Programming in its pure form already seems easy when you do not have to get into exhausting design tasks and marketing.

    8. It is impossible to know everything


    Each time, ideally, you have mastered some skills, you will find out that something new has appeared, much better. And Socrates paradox arises: "I know that I know nothing." You constantly 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 paramount for you at the moment, what technology, what approach.



    Yes, you can choose one thing and become an expert in it, but then you risk very much that at the same time something new has appeared that is many times superior to your technology and that something will conquer the market while you hold on junk with both hands.

    Therefore, if you like to learn and constantly learn something new, then choosing programming, you will not be disappointed even for a second.

    9. In real life, not everything is as perfect as in school.


    During your studies, you play with light programs of several hundred, a maximum of thousands of lines of code. Even at the university, at the faculty of computer science.

    When you come to the enterprise, you may encounter a code base of hundreds of thousands of lines and even millions. There are many errors, ridiculous variable names, sophisticated subprograms without documentation, different design patterns, multi-level caching, etc. are used.

    When you need to understand and study all this in a short time, you get the most vertical learning curve that many software engineers encounter.

    10. Balancing between theory and practice


    On the one hand, you can study the theory a lot, read something for years and think that you know little and do nothing. It bothers and ceases to be useful at some point.

    On the other hand, you can start to do something without knowing the theory, and quickly get stuck or get lost in your code and its errors. Many begin to do something, relying only on steep answers from forums, not understanding the whole picture of their application and where they will ultimately lead them to work (for example, to unsupported, non-updated code).

    So, it is very important to feel this balance of a minimal theory and subsequent practice. Then what you write will be literate, and the theory will be assimilated several times faster and more interesting, and you will learn harmoniously during work.

    UPD


    11. Fighting bugs


    Bugs (bugs), these are errors in the program. If we continue the metaphor with bugs and humans, then for beginners it is more likely something subcutaneous, itchy, terrifying, because it is invisible and difficult to eliminate.

    The most annoying thing is that they appear when you seem to have done everything correctly, and you can proceed to further achievements. But suddenly the program stops working for no apparent reason, or does not work as intended. And you have to give up everything and spend several hours, or even days, to find this error. It seems like this time is wasted (because you are not creating the “new”, but picking the “old”). 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 memorization than in calm conditions of studying the theory. The correction of each bug is, first of all, the elimination of one’s ignorance in many issues, the existence of which you had not thought of 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 hang of working with tools to fix them.

    12. Going fast and breaking things


    You need to develop a special character warehouse in yourself when you are not afraid to go forward without being prepared in advance for this. The old Facebook motto: “Go fast, break things. If you don’t break anything, then you are moving slowly. ”

    Also popular now: