
So far, the demand for programmers in the IT industry and beyond is quite high. But in any industry a “good” specialist is always appreciated, regardless of its popularity. The question arises, how to become such a specialist? What are the criteria for high level professionalism? Answers to these questions largely depend on specific employers.
Each software company has its own requirements for developers. Modern software projects are developed by groups of programmers who often work in different offices, buildings, and even cities and countries. Remote work technologies allow you to use the skills of the best developers, regardless of the location of their employers. Such an approach to development imposes serious requirements on the quality of the code, in particular, on its readability and transparency.
')
For weak developers, working in isolation can become an insurmountable obstacle
, as they fall out from under the tutelage of more experienced colleagues, who usually pull behind them.
There are always some arrangements among professionals. This is expressed, for example, in the fact that at one time various paradigms and programming styles were formed. However, first of all, there are certain basic requirements that apply to professional programmers, regardless of the direction and style of development.
If the programmer does not meet the basic requirements, then sooner or later he will be shown the door.
Signs of a bad programmer
A common and one of the main signs is the inability to "carry out the program in the head." If you have a person with beautiful posts in a resume, but he cannot write a simple algorithm on paper, it is better not to get involved with him.
At one time, Habré had a
post that discussed the signs of a bad programmer:
• the presence of "magic", "voodoo" code or code that has no relation to the objectives of the program, but is still carefully supported;
• error correction by writing redundant code, which replaces the data obtained during the execution of a faulty code;
• “yo-yo code”, which converts values into different representations, and then converts them back to exactly the same representation from which they started
• “dozer code”, which creates the impression of refactoring by breaking pieces of code into procedures that, it is true, cannot then be used elsewhere.
He also highlights two more problems - with pointers and recursion. If someone does not write recursive algorithms himself and does not perform operations with pointers manually, it is necessary to understand how this works.
Pointer Difficulties
If you do not understand pointers, then there remains a very small range of program types that you can write, since this understanding allows you to create complex data structures and feasible APIs. The misunderstanding of the concept of pointers will be reflected in poor data design and errors, the reasons for which lie in the difference between passing by value and by reference.
Managed languages use links instead of pointers that are similar, but provide automatic dereferencing and prohibit pointer arithmetic to eliminate a whole class of errors.
Recursion issues
The idea of recursion is fairly easy to understand, but programmers often have problems in presenting the result of a recursive operation or how complex calculations can be performed with a simple function. Problems with the “where you are” representation, when you start writing the condition for continuing recursion, or with formalizing the parameters of a recursive function can make the development of a recursive function very difficult for you.
Following the arrangements
If the developer writes the code according to the principle “it works, okay,” it can hardly be considered a high-level professional. After all, this is contrary to the principles of all programming paradigms - object-oriented, functional, declarative, and so on. Such an approach makes collective development difficult or impossible. Such an attitude characterizes a person as a rigid, superficial, unwilling to deepen their knowledge and improve their skills.
@victorb , the author of the above-mentioned post indicates the following "symptoms" associated with the inability to follow the development paradigm:
• use of any necessary syntax in order to “break out” of the model proposed by the language, and writing the rest of the program in an imperative / procedural style;
• (OOP) Attempts to call non-static functions or assign variables to non-instantiated classes, problems understanding why such constructs are not compiled;
• (Relational) Treat the database as a repository of objects, execute all JOINs and check integrity on the client side;
• (Functional) Creating many versions of the same algorithm for processing different types or operators instead of transferring higher-order functions to the generalized algorithm;
• (Declarative) Setting individual values in imperative code instead of using data binding.
In addition to unambiguous drawbacks, the developer may have such qualities as perfectionism, excessive pedantry, slowness, and so on. These qualities are not specific to any industry, but for someone they will be crucial, but for someone - not.
We talked with experts from the Russian IT industry and found out their opinions about good and bad programmers, and also asked for a few tips for beginners.
Maxim Nalsky, founder of the Pyrus service:
What qualities should a good programmer have?A good programmer writes quality source code better and faster than others. If a person knows fashionable technologies, worked in cool companies, graduated from a prestigious university, shines recommendations, but does not produce a good source code in a reasonable time, it can hardly be called a strong programmer.
Programming is a way of thinking that does not depend on a particular language or platform. A strong developer is mastering a new technology in a week and can already produce a result. Of course, becoming an expert takes more time.
How can a non-programmer (manager, for example) distinguish a good programmer from a bad one?The ability to write easily readable, compiled, passing autotests, working code is the main criterion.
Please give "bad advice", the rules of bad tone for novice programmers.If you want to become a bad programmer - go to courses, listen to lectures, but in no case do not program yourself. Some people do just that - they study textbooks, then they pass exams, get papers, certificates.
When I read a resume with a long list of certificates, I see how a person spent the time of his life, not improving his skills in creating reliable software, but got marks.
Ruslan Fazliev, CEO Ecwid:
What qualities should a good programmer have?A good programmer should produce good code, quickly, efficiently.
How can a non-programmer (manager, for example) distinguish a good programmer from a bad one?Distinguish a good programmer - by what he created and how quickly solves simple problems. Difficult tasks consist of simple ones, and if the programmer easily owns atomic cubes, he will be productive.
Can a good programmer be a perfectionist? Why?A good programmer can be anyone - lazy, perfectionist, boring. To use these strengths and mitigate the weak is the task of a good engineering manager.
Should companies be wary of perfectionist programmers? Why?They do not need to fear, they need to be managed. Frequent intermediate deadlines are mandatory for perfectionists, if they don’t have a code, they need to do a Caesarean.
How do you feel about the fact that the developer takes most of the code for solving problems from the Internet?Well, if it speeds up the result.
Should a good programmer use return true or return false expressions in loops? Is it true that a good programmer usually tries to use fewer conditional statements? Is it true that a good programmer hardly uses the “else” operator and others like it?A good programmer needs to ensure that the code works for the client today. The player must score goals, as he does it - it does not matter. Be wary of the word "architecture" from programmers. Speaking of the beauty of the code, it’s great when it is natural and along the way, and yes, the sea of “ifs” is not beautiful and glucosafe. But I don’t want to discuss it with a programmer: all I want to know is when a tested, quality release is ready.
Please give "bad advice", the rules of bad tone for novice programmers.All happy families are equally happy, there are a million ways to be unhappy. The first way to be a bad programmer is to be lazy, proud, and look for complex solutions where there are simple ones.
Evgeny Potapov, General Director of Summa IT:
What qualities should a good programmer have?In the excellent book Coders at work (a series of interviews with well-known developers), one of the main questions is “how do you study someone else's code?”.
A good programmer is someone who can support someone else's project, someone who, after launching, can continue to write his code, someone whose code can be supported by other people.
How can a non-programmer (manager, for example) distinguish a good programmer from a bad one?I believe that the only normal way for a non-programmer to evaluate a programmer is to evaluate how the leaders of these projects respond to the projects where he worked. He did not quit halfway, completed on time, continued to improve and nothing fell - it means everything is good; they are asked to say where it can be found to kill — it’s better not to take a job.
Can a good programmer be a perfectionist? Why?Maybe if it will not be to the detriment of performance. Unfortunately, almost certainly it goes, and in modern business, the time to deployment is much more important than the ideality of the code in most cases (as long as you do not write medical software and do not launch people into space).
Should companies be wary of perfectionist programmers? Why?Should, but companies should ask for feedback from previous jobs, and if everything is good there - not to be afraid much.
How do you feel about the fact that the developer takes most of the code for solving problems from the Internet?And how to relate to the fact that the builders themselves now do not collect clay and do not bake bricks? Knowledge of algorithms is an important basis, but the main skill now is the ability to glue the necessary solutions securely, sustainably and on time.
Is it permissible for a good programmer to chronically not remember some of the algorithms and syntactic constructs of the languages he uses in his work? Why?Very dependent on the level of ignorance. Basic things need, of course, know
Should a good programmer use return true or return false expressions in loops? Is it true that a good programmer usually tries to use fewer conditional statements? Is it true that a good programmer hardly uses the “else” operator and others like it?A good programmer is not one who does not write goto, makes a return where it is supposed to, and knows all the OOP patterns from the Gang of Four per tooth.
A good programmer is someone who writes code not only because he is interested, but because he needs the project to work; he wants users to be happy, and he understands that those who come for him should not be in pain.
Victor Shaburov, Technical Director, Snapchat:
What qualities should a good programmer have?Smart and get things done.
How can a non-programmer (manager, for example) distinguish a good programmer from a bad one?Writing a coding problem. For example, a mini project for the evening - and see how quickly it does, the quality of the code and how it handles extreme cases.
Can a good programmer be a perfectionist?Yes it is very good.
Should companies be wary of perfectionist programmers? Why?I am not afraid, on the contrary I love. The manager must of course set goals and control their execution on time. But in general, this is a great quality, if it is combined with programming speed and dedication.
Should a good programmer use return true or return false expressions in loops?About 10 years ago, when I was still coding, the answer was no.
Is it true that a good programmer usually tries to use fewer conditional statements?You need to write beautiful code and use as many if as needed. In Java, for example, use && and || to shorten if.
Is it true that a good programmer hardly uses the “else” operator and others like it?I used else when it was necessary, but there are subtleties.
Please give "bad advice", the rules of bad tone for novice programmers.Better, I will give good advice - constantly work on yourself, improve your programming skills and, as you grow, move to more cool companies. The stronger the programmers on the project, the more interesting it is to work and learn more.
Just look not so much at the salary, but at the perspective of the project and the allocated shares of the company. In a successful project with a strong team like Looksery or Machine Learning Works, you can earn ten times more money on promotions than get paid for this period.
Becoming a "good" programmer is not only about fixing purely technical flaws. Like any specialist, he should be able to communicate with colleagues, and when necessary, with clients. The ability to adequately perceive feedback, criticism is considered to be no less important qualities than the ability to assimilate algorithms and software development technologies.