Seven skills of a professional programmer

    Every year we train for our projects and recruit students in a team. Huntim, of course, not all. “We go to work, but we are getting money” - this is definitely not for us. We do not hunt for “stars” either. First of all, we are looking for those who want to grow, develop, become a "star", and we can help them with this.

    One of the problems of our higher education is that universities teach a lot of things, and algorithms, and programming languages, and OOP, and even design patterns. But I’ve never met before that they taught me how to work in universities. Labs do not count. Shoved - and forgot! Maybe just unlucky.

    At one time, I formulated a set of skills that, in my opinion, should be mastered by every professional programmer. Not only a Master with a capital letter, but also a student who claims to be paid money for his work. And, if we could not teach the student these skills in the three months of his probation, then either we took the wrong one or appointed a useless mentor.

    So, about seven skills ...



    1. Carries out the decomposition of the problem and designs its solution
    Having received the task, the programmer should not immediately run to write code. The right programmer works 80% of the time with his head, and only 20% of his time with his hands. Even the creation of a not very complex program requires analysis and design: decomposing a problem into more simple sub-tasks and the subsequent synthesis of a general solution from particular ones. For example, choosing the length of an integer variable is a design element.

    2. Adequately assesses implementation costs
    The answer "To solve this problem, I need 8 hours," - wrong. Evaluation is always a probabilistic value. The correct answer, for example, is “from 4 (I definitely won’t be able to faster) to 16 hours (most likely I’ll definitely do it)”. A large spread should not confuse the leader, it reflects a high level of uncertainty in solving programmer problems.

    3. Plans his work and draws up a schedule
    When drawing up a schedule for solving a problem, a programmer should prioritize his work in such a way as to reduce the risks as quickly as possible, and not achieve quick progress in solving it. Delayed "muddy" subtasks can reveal a deadlock in the adopted design decision, and everything will have to start all over again.

    4. Complies with accepted standards
    Well, everything is simple. “Write the code as if it would be accompanied by a violent psychopath who knows where you live.” (c) Steve McConnell.

    5. Provides the required quality while minimizing costs and risks.
    This is probably the most difficult skill. We must learn to find a middle ground between the programmed, "how it will turn out", and wrote "the most perfect code."

    6. Performs testing and debugging code
    “Compiled - send to testing!” - the approach is wrong. The programmer must find the maximum errors in his code. He can do it much more effectively, because for him the program is a “transparent box”. Most errors lie on the boundaries of the areas of definition and change of algorithm variables. The tester, on the other hand, will test the code as a “black box”, bombing the areas by enumerating a large number of data sets.

    7. Analyzes found defects and deviations from the schedule
    Well, the last, like any self-managing system, a programmer must provide feedback. It is obliged to analyze the actual deviations from the plans in terms of time and quality and identify their reasons in order to adjust their workflow and minimize such deviations in the future.

    Conclusion

    Somehow two students came up to me with the question: “Why does Vasya get three times more than each of us? Does he write code three times faster? ” “No,” I replied, “he writes the code slower than you.” It’s just that he solves such problems that you, together, cannot yet solve for any time allotted to you. Therefore, study, study and study! ”A master with a capital letter differs from just a professional programmer not in skills, but in the complexity and scale of the tasks to be solved.

    Also popular now: