📜 ⬆️ ⬇️

What kind of developers are we looking for to develop the 1C: Enterprise platform?

Our dream is to make the world's best business application development toolkit. We have a lot of great ideas, the realization of which allows us to fulfill this dream, to develop our tools in order to remain the best. Well, to implement these ideas at the proper level, we need great programmers.

Briefly looking for those who:


To show in more detail what kind of developers we are looking for and how, we have taken short interviews with our hiring managers. Questions during the interview were asked such:
')


In which areas can programmers work with us in developing the platform? Well, for example:


image

Internet development group


image

The group writes online services that are probably used by millions of end users of 1C products. Services, for example, allow you to get information about the counterparty, to verify the reliability of the counterparty, etc. The area of ​​activity is very responsible, services work under heavy load, downtime in the work of services is extremely undesirable, so we try to create the most reliable product. We also make a product called the Interaction System . This is a mechanism that transfers information between client applications and 1C: Enterprise servers; with its help, in particular, a messenger integrated into 1C applications is implemented.

From the developer I want him to develop the product as a whole - analyze the needs of users, think over the architecture, write the code. Because people often come to interviews and say - I’m not interested in analyzing the subject area, I want the analyst to write me a statement of work on which I will program the functionality. That is, a person is interested only in technical aspects of programming. We try not to hire such people, because we have a small team, we have to deal with a large number of adjacent areas. Therefore, the basic requirements that are not related to professional skills - is the ability to beautifully and accurately arrange the requirements for the product, think through the implementation, develop the product and be responsible for the final result. The personal interest of a person in the quality of the final product is important, so that a person makes a product that he would like to be proud of.

One of the main ideas in Eric Evans 's book "Domain-Based Design" is that the developer must also be an analyst, understand the subject area that he automates well, understand what is valuable for a business, and if he does not understand it, then will be able to develop a good system that will satisfy all user requirements. If the developer abstracts away from the subject area, then he will not make key decisions on the product architecture, but he will have to implement these decisions, and in this case there is a risk of poor-quality implementation. The same Evans recommends to allocate in the domain area two parts - the part that is fundamentally important for business, the one that makes your product your own product, and the second part, which is not very important, is responsible for the infrastructure binding. And the best developers need to give the implementation of the first, important part.

How is the interview? We have a questionnaire, about 10 questions that we ask applicants. The questions in the questionnaire are not theoretical, but practical, for example - the code caused an exception with such a stack stack, explain what you will do. Or - you have a query to the database that is running slowly (the query text is given), there is a query plan, evaluate what is bad in the query plan, you need to explain how to speed up the query. It makes no sense to ask the person what types of JOINs are - of course, he knows these types if he prepared a little for the interview. The practical experience of using these JOINs is interesting. If a person has experience analyzing query plans, it’s not difficult for him to tell about ways to solve a problem, if there is no such experience, a book will not help here. This is where the line that distinguishes a developer who just read about the functionality from the developer who actually used this functionality passes. We are more interested in dealing with the second type of developer, we want the person to “get involved in the game” right away.

Some of the questionnaire questions have already stopped working, and we have replaced these questions with new ones. For example, some time ago, at interviews they often asked to implement the Singleton pattern, and when the candidate did this, they said - and now make it lazy. Since then, several articles appeared on Habré, which described in detail how to write such things, people just learned this task by heart, and it ceased to be a test of professional suitability.

We also want developers to write tests correctly; for example, the test signature describes a contract that the system must satisfy. This can be done, for example, in Java in the style recommended by Roy Osher , when the name of the contract method is divided into three parts - “given”, “what we expect”, “what result”. And you can do on Groovy , using Spock . It is important whether the candidate understands what exactly to test, whether to test the boundary values, whether he knows about the testing pyramid , etc.

We also ask about the projects in which the person was involved, especially if they used the technologies that are relevant to us. For example, we use Hazelcast , while very few people use it in production (of the recent major implementations, Yandex.Money ), and we are very interested in people with experience using the Hazelcast. Moreover, the candidate can reveal to us the unexpected and useful sides of the new technology, about which we do not yet know.

An important topic for us is how to write code to work in a multi-threaded environment. For example, there are several application nodes in a high-loaded environment, and we ask the candidate to tell how to make the system workable and reliable, while at the same time blocking it.

Should a programmer write tests? Must, but not all. Unit tests programmer must write unconditionally. By the way, we in the team do not insist on the mandatory use of any methods, for example, TDD ; some developers use TDD on their own, they like it so much. We also write integration tests. Developers also do load testing, write test plans for JMeter.

Web Client Development Team


image

Although we are developing a web client in JavaScript, we prefer that the candidate has experience in developing “classic” OOP languages, such as C ++ or Java or C #, in addition to the experience of web development in JavaScript. This is due to the specifics of the project; 1C web client, written in JavaScript, but more ideologically resembles an application written in OOP language. We cover the JavaScript code with JSDoc annotations, thanks to which static type checking occurs during assembly. This approach was chosen because we use the Google Closure Compiler , which helps us, in particular, to increase the speed of our code and reduce the amount of memory it consumes. Thus, OOP experience will be of great help to the candidate.

At the interview, we ask what tasks the candidate and his team had to solve at previous places of work, discuss the architecture of the solutions implemented by him. We assign tasks to the candidate, some of them are for ingenuity and algorithmic thinking. For example, there are tasks that are solved "in the forehead" with a rather large amount of code, and if you think about it, then in one line.

There is a pool of tasks for specific knowledge of layout, for JavaScript. For example, we draw on a piece of paper the structure of an HTML page (the structure can be dynamic, vary in time according to a certain algorithm) and ask to write code that creates such a structure and implements it in dynamics.

We also try to evaluate the candidate’s propensity for analytical work; We would not like to have a “clean” coder in the team, even if it is writing high-quality code, but working strictly according to a fixed TZ. I want the developer to be involved in the tasks, deeply understand what is being done in the product and, ideally, also being the driver of the new functionality.

If the candidate is a student or yesterday's student, we can ask purely theoretical questions, for example, ask the basic principles of the PLO or something else. If a person with experience, such questions may be meaningless, the candidate probably knows these principles and uses them in his work, please formulate them can put him in a dead end, because he trivially forgot the wording from the textbook.

Each interview turns out to be unique. It is interesting to talk with one person on some topics, with another - on others. At the end of the interview, we tell about our product, about the extent of its use (and they are impressive - our system has millions of end users), we look at how interested a person is.

Application Scalability Group


image

Who are we


Our team is experts in the field of building high-load systems on the 1C: Enterprise platform. These engineers are responsible for ensuring reliability and scalability. Such tasks are often at the junction of issues of administration and development. The result of solving such problems is a really cool system. Examples of such tasks:


And this is not a complete list of tasks. It is especially pleasant that many of the tasks come to us with the wording: “Is it possible to do this at all?” Ie people do not believe at first. We do not argue and always try to convince to try to test in practice, to do. To this we must add the readiness to connect in the middle of the night to the system of a large client, because the local engineers have something broken, and no one knows what to do. More than once, it was necessary to restore the destroyed base in the absence of backups or find out why the load on the system increased by 5%. If you wish, you can even read reviews about our work.

Who are we looking for


We are looking for engineers who passionately want to do the impossible. One of the most important requirements for a candidate is his burning eyes, the desire and ability to quickly understand what he has never encountered before, using the existing knowledge. These are reliability engineers and developers in one person. Imagine that a client addresses you with several thousand users and tells you what the complex mechanism that its engineers have been developing for a year is trying to put into operation. And by the way:


Yes, and also: not everyone is ready to help identify errors and anti-patterns in their decisions, so you need to be able to communicate very diplomatically with the engineers who have been working under continuous stress in recent months.

How are we looking


Interviewing can be a stress for the candidate. But this stress can not even compare with the stress that you get in a real situation, if you do not think and use all your existing experience.

The problem of many candidates is that they do not know how to apply their knowledge and cannot explain them to a six-year-old child. That is why, at the interview, we periodically ask us to teach us something that the candidate knows best about. Naturally, I really want to recruit people from whom you can learn a lot. In such discussions, the depth of knowledge and a very good understanding are very important. There was an experience when a candidate was interviewed at 7 am, they came to a discussion of the memory management components in MS SQL Server and finally settled on the understanding of pages and extents. Here HR intervened, saying: “What are we torturing him with ?! Who knows this at all !? “and we left the room to talk. A sleepy and yawning colleague walked casually along the corridor towards coffee. A colleague was asked the same questions, he answered clearly, correctly, in essence, without opening one eye and continuing to yawn.

Naturally, we try to check the knowledge of mathematics, algorithms. Rather, they are related to basic knowledge. But knowledge of distributed algorithms and the ability to apply such an algorithm in a problem will be a sure plus for a candidate.

Another way is to ask the candidate to present himself on the site of the 1C developer and to ask him to implement some kind of applied task. In terms of the interview and stress of the candidate, such a task allows you to see how the candidate thinks. We look at the candidate’s decision, we help the candidate to see a significant technological problem in his decision, then we look at how the candidate will change the decision, not allowing another technological problem. Sometimes we do this 6-7 iterations, looking for and assess the weaknesses of the solution. At the same time, there is an opportunity not only to discuss and understand what a person knows, for example, about deadlocks, but whether he understands how to reduce the probability of their occurrence to zero in his code.

Knowledge of a specific programming language is not a super important factor. It is more important when a person thinks in terms of programming using a language, and is not limited to language constructs.

What is used in the work


The first and most frequently used tool is the 1C: Enterprise technology platform. Knowledge of the platform is required at the level of the administrator and developer. Those. you need to understand how to implement a specific solution and run it on the system for thousands of users.

It is often necessary to analyze the work of MS SQL Server and PostgreSQL, therefore the use of profiling tools, dynamic views, journals are included in the baggage of active skills. And here the ability to work with large volumes is important. The standard Windows notebook is not very convenient when working with 1 TB of text logs with machine-generated queries and their plans. Immediately there is a need for knowledge of regular expressions, as well as a whole set of tools and languages ​​that support them. To analyze query plans, you need to understand what indexes are, and how does a merge join differ from a hash join.

Systems in the corporate market often work in Linux OS. There are no graphical environments on the servers. Skills in the console are quite important.

Imagine that you need to find out why the CPU load on PostgreSQL servers on CentOS Postgre processes increased by 5%. Try to write on paper the algorithm of your investigation. And immediately there is an understanding that you need


What is important to us


It is very important that a person think big and try to always see the big picture. For example, the majority of candidates, solving the problem of sorting a text file, offer an algorithm suitable for sorting a file of 10 MB. But how significantly their understanding and point of view change when they are faced with sorting a file of 10 TB in conditions of limited memory and disk space. And it must be remembered that the cost of accessing the disk is higher than the cost of accessing the memory. I really want the candidate to think “to scale” in all tasks.

1C: Enterprise Platform Development Group


image

The main thing that our team requires from candidates is the ability to think analytically, carefully analyze the problem and the ability to weigh the solutions. The 1C: Enterprise platform has a rather long development cycle (months), so it is impossible, as in web development, to implement the functionality in parts, step by step. This requires the ability to think deeply when thinking about the details of implementation, you need to try to do "all at once." Those. not to use the first available method for solving the problem, which I read about yesterday at Habré, but carefully weigh all the pros and cons of various solutions.

To understand at the interview whether the candidate has such qualities is not so simple. The most relevant way is to talk about the candidate’s previous experience. When a person tells what a cool decision he came up with, ask - and what problem was actually solved? Why was this solution chosen, and not another? And if the conditions of the problem changed a little, how would the solution change? By asking a few similar questions, you can understand how deeply a person is immersed in the topic.

There is another aspect, illustrated by the phrase: “We hire those who know how to work, and then for some reason want them to want to work.” Therefore, at the interview you want to understand what a person is a job. If for him it is a pleasant pastime that allows you to earn money, then with a high degree of probability, nothing good will happen to the candidate and me. For most professional developers, their work is the most interesting thing they ever had to do, research, the desire and ability to create something new. A person who comes to us must be ready to learn, learn and learn. We do not need just performers, we need people who never get tired of learning, we have to learn a lot and constantly from our work.

What else do you want to see from the candidate - engineering skills, that is, figuratively speaking, the ability to assemble an elegant solution from cubes?

The required knowledge of programming languages ​​depends on the area of ​​development of the platform for which the candidate is sought. The core of the platform is C ++ and Java, the web client is JavaScript and it is desirable to know the basics of C ++, some projects require knowledge of 1C, but knowledge of other languages ​​and technologies is also highly desirable. We have to create many new things for the world of 1C, I want the developers ’horizon and erudition to allow them to operate with ideas and concepts invented in other languages ​​and technologies, and to understand how to apply them well and correctly in the right places when developing solutions on 1C. For example, to develop our 1cFresh cloud product , we write various tools, mainly for administration, on 1C (1C is faster to develop than in traditional languages). If a developer understands the patterns of technologies and languages ​​used by system administrators (bash, Python, Perl), this will help him create an easy-to-use tool.

If we are interviewing a student, we can ask him to calculate his integral and explain why the integral is so considered. The average senior student already understands the meaning of the integral, but a conscientious, enthusiastic student remembers the meaning very well and can explain.

If we are a system administrator, we can ask, for example, about the peculiarities of RAM manipulation in Linux. If a person works with a DBMS, we ask, for example, what levels of transaction isolation are, which candidate prefers to use, and why. If, for example, a person worked on synchronizing several databases, we will discuss with him how to be if one of the synchronized databases was suddenly restored from the backup. A typical architectural problem that can be solved in different ways.

Even in the candidate I would like to see a desire to change the world for the better and a healthy share of perfectionism. Without a reasonable amount of perfectionism, it is difficult to write code that will work for years on very different implementations.

Should a programmer write tests? The programmer must issue a product that works. If this is an adult programmer, no one should care how he does it. If this is a novice programmer, he is recommended to write tests. Over time, a serious developer begins to understand which tests should be written for the code he creates, where there are weak areas of code that are better covered by tests. We are against mindless global test coverage. The program works correctly, not because it is completely covered with tests, but because the developer turned on his head. Tests are an auxiliary tool in order to protect against errors in the most difficult places of the program. And we must remember that tests are not a panacea for architectural problems. Most importantly, a person must include a head.

Of non-IT questions, sometimes we ask this question - and who does a person see himself in 3-5 years from now? We believe that we will work together with a person if his development aspirations coincide with the way the company sees his development.

It is critical to evaluate two things. The first is where a person is now, what experience and knowledge he has now, what level of a task he can solve right now. The second is who a person in a favorable environment is ready to become in a few years. And so that, of course, these few years he worked in our company, solved problems, grew professionally. We are even more interested in what a person is now, and what he will be in a year or two or three. Our perspective is always more important than the current state of affairs. A promising newcomer is more interesting for us than a person with great achievements, but with dimmed eyes.

Development of the 1C: Enterprise platform - another look


Usually we start the interview with questions - what was your most interesting project, your favorite project? I'd like to immediately understand that a person is forced to ignite at work, and whether he lights up at work at all.

Further, I wonder if the person had to optimize the performance of programs, as he did.

We ask what test methods the candidate used on his projects, how he builds up the project's testing strategy, we can ask - do we have a system with such declared functionality, how will we test it?

If the interview is for a Java developer, ask about the work of the garbage collector; A person who develops more or less complex programs should be aware of the nuances of his work, and how to write code behind which the garbage collector effectively cleans up garbage.

From non-programmer topics it is interesting to ask about the business - what problem from the business point of view was solved by the candidate’s favorite project, what benefits did it bring. Seeing the big picture is a very valuable property for the developer. Once there was a candidate who made the blockchain, his story was very informative.

We set the design tasks, ask the candidate to design a simple system. Then we look at the project together, look for shortcomings, discuss how to eliminate them. It is very important how the candidate responds to the comments.

Be sure to talk about what we do, namely - we are making the 1C: Enterprise platform. We talk about the fact that we can work on high-tech things, for example, on a cluster of servers or on a mobile platform .

We do not force candidates to write code on paper. But we draw on paper during the interview a lot, draw a system architecture, module diagrams, a picture of their interaction.

Knowledge of specific languages ​​is not critical. It happens that a person comes to a company as a C ++ developer, being a C # developer, and learns C ++ quite quickly. And around are many examples of colleagues who have learned new languages ​​in the course of their work. If there is a desire and knowledge of one of the languages, then learning a new language is not a problem.

We also ask what a person reads, if only Habr and stackoverflow, or also specialty books, and which ones. Sometimes we find useful books for ourselves in this way.

Reporting Mechanisms Development Team


image

We need hardcore C ++ developers. Our team is engaged in reporting mechanisms, which means that our code works a lot with large amounts of data, and we need a good knowledge of containers and algorithms.

At the interview we ask - what libraries the candidate used in the work, what algorithms. We use STL a lot, so we actively ask about this library, which containers from it the developer used, for which tasks. For example, we ask you to write code that places a specific class in a map, and a couple of similar tasks. For such tasks, it is immediately clear what level the programmer is in front of us.

We rarely ask questions on the theory of programming. We believe that practical knowledge is more important. If a person solves a problem well, successfully applies the theory in practice, it is no longer so important that he does not remember the exact formulation of the basic principles of the PLO.

By the way, if a student has come to an interview for which, due to his lack of experience, it is still difficult to cope with the proposed tasks, we are doing a discount. Here it already makes sense to drive him around the theory, ask around about his professional interests. If a person looks promising as a specialist, it makes sense to give him the opportunity to develop into a good professional.

Quite an important criterion for us - the willingness to understand someone else's code. The 1C: Enterprise platform is a large product, more than 10 million lines of code, a collision with this code in everyday work is inevitable, at least at the level of embedding your own code in it.

We ask how the candidate prefers to be given tasks - in the form of a detailed specification, or the statement “make such a mechanism” is sufficient. We understand and accept both approaches, we will not deny a good programmer just because he needs to chew the formulation of the problem; it's just important for us to immediately understand how to work with a person. But I want the employee to develop in the direction of greater independence, to take responsibility for a separate direction. As examples of directions I can give a dynamic list or diagrams . And I want the employee to develop this area - find out the needs of users of this mechanism, communicating with users in forums and conferences, compile lists of new features, set priorities for them, understand the problems of the mechanism, suggest solutions.If a person is interested, he can develop as a timlid, starting with the supervision of student interns from our Center for Young Specialists , and later leading his team. Well, if a person is a “pure” developer by nature, who prefers working on TK and is not very interested in understanding the needs of users - well, we need such people.

Should a programmer test? Of course!A programmer who does not do tests is like a cook who does not try what he has prepared. It is not possible, of course, to demand full tests from a programmer on all supported environments (Windows, Linux, macOS, web and mobile clients), but he is obliged to check the basic functionality on the current OS. Well, even better if you write an automatic test. This will be a ready-made regression test, which will go to the test library and will be regularly run when there is a change in the corresponding area of ​​the code.

1C Development Group : Enterprise Development Tools


image

1C: Enterprise Development Tools is written in Java, and we are looking for developers and testers with knowledge of Java. We are looking for people with burning eyes, both professional and novice professionals with potential. Knowledge of Java is mandatory for us, as well as knowledge of algorithms and data structures, multi-threaded programming; in our team, we unfortunately cannot afford to wait until the new developer learns these things. But knowledge of the specific frameworks that we use ( EMF , Xtext , GEF , Lucene , Handly , ...) is a gain. If you can see that a person has a good understanding and is comfortable communicating with him, it means that he will fit into the team and quickly get the necessary knowledge.

In general, the entry into the team is probably the main criterion for us, along with professionalism. Our team is a team of enthusiasts, I don’t want to dilute it with people of a different temper. And a person with a different character in our team will probably work uncomfortable. Unambiguous red flag for us - disrespectful style of communication. A person can be a very good professional, but if he cannot respectfully communicate with colleagues, he will not suit us. Our game is a purely team game.

The peculiarity of the institute education is that the institutes do not teach industrial programming in the mass. They teach syntax, language constructs, algorithms. But the ability to write documented, accompanied code, in which the possibilities of development are laid, extensibility is taught in very few places. Therefore, at the interview a very important type of tasks - design tasks. For example, we ask how the candidate would write Tetris, what components would he divide the project, what interfaces would he design for the interaction of the components between themselves. Further, we complicate the introduction - for example, we say that Tetris will be three-dimensional (or new types of shapes will be added, or the figures will fall from different sides) and see how well the chosen design fits under the changed conditions. In general, one of the main tasks of the interview is to understandhow flexible and broad the candidate can be. And of course, the programmer must write tests, at least - unit tests, and integration tests would be good. The standard question for the design problem is how will you test the designed system?

Well, for a tester, the ability to think broadly is even more valuable! There is a well-known joke, as a tester tested a bar: ordered one mug of beer, 2 mugs of beer, 0 mugs of beer, 999999999 mugs of beer, –8 mugs of beer, qwertyuip mugs of beer, and after putting the project into production, a client came into the bar and asked where restroom? The main skill of the tester is to invent non-standard (and at the same time realistic) scenarios; Standard scripts are usually tested by the developer.

Conclusion


How not to give a link to open vacancies here :)

And you can also just send a resume to job@1c.ru .

Source: https://habr.com/ru/post/432672/


All Articles