
Every year we train for our projects and recruit students into the team. Huntim, of course, not all. “We go to work, and money is made for us” - this is definitely not for us. For the "stars" also do not hunt. We are looking primarily for those who want to grow, develop, become a “star”, and we can help them in 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 have never met a higher education institution to be taught how to work. Labs do not count. Shove - and forget! Perhaps just not lucky.
At one time, I formulated a set of skills that, in my opinion, should be owned by every professional programmer. Not only the Master with a capital letter, but also a student who claims to be paid for his work. And, if we could not teach a student these skills in three months of his probation, then either we took the wrong one or appointed a useless tutor.
')
So, about seven skills ...
1. Conducts 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 the time with his hands. Even the creation of a not very complex program requires analysis and design: decomposition of a problem into Bole simple subtasks and the subsequent synthesis of a general solution from particular ones. For example, the choice of the length of an integer variable is a design element.
2. Adequately estimates the cost of implementation
The answer "To solve this problem, I need 8 hours," - wrong. The estimate is always a probabilistic value. The correct answer, for example, is “from 4 (I won't be able to do it faster) until 16 o'clock (most likely, I’ll do it for sure)”. The wide variation should not embarrass the manager; he reflects a high level of uncertainty in solving programmer tasks.
3. Plans his work and makes a schedule
When drawing up a schedule for solving a problem, the programmer must prioritize his work in such a way as to reduce the risks as quickly as possible, rather than to achieve rapid progress in solving. Deferred "muddy" subtasks can reveal a dead end in the adopted design decision, and everything will have to start over.
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, minimizing costs and risks
This is probably the most difficult skill. We must learn to find a middle ground between the programmed, "as it will", and wrote "the most perfect code."
6. Performs testing and debugging code
“Compiled - send to testing!” - wrong approach. The programmer must find the maximum of errors in his code. He can do this much more efficiently, since for him the program is a “transparent box”. Most of the errors lie on the boundaries of the areas of definition and change variables of the algorithm. The tester will test the code as a “black box”, bombarding the areas by enumerating a large number of data sets.
7. Analyzes detected defects and deviations from the schedule.
And finally, like any self-managed system, the programmer must provide feedback. It is obliged to analyze actual deviations from plans for terms and quality and to identify their reasons in order to correct 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 as much each of us? Is he writing code three times faster? ” “No,” I replied, “he writes code slower than you. Simply, he solves such problems that you are together, while you can not 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 by skills, but by the complexity and scale of the tasks to be solved.