Where does programming begin?

image








Once upon a time, we developed a high-level platform for developing lsFusion business applications. The only thing left was to find the one who would write on it. It was decided to post a job on job search sites. But the question arose: what to indicate as a position or profession.



In terms of complexity, the platform language did not differ much from SQL, which was originally created not for programmers, but for business users. Therefore, we also decided to indicate “Business Analyst” as the position.



We proposed to applicants to solve a relatively simple test task, in which it was necessary to refine a simple example a little. Some people did it, but angry letters came from many with indignation like: “Are you looking for a programmer or business analyst?”



As a result, we found the people we needed, but analyzing this experience, I involuntarily wondered: where does the business analysis end and the programming begin?



When I just graduated from university, I had a friend who already worked as a programmer in a large outsourcing company. It was everything in an adult way - in addition to programmers, there were business analysts and testers. Then I was very interested in how they built everything there, in particular, what business analysts do. To the question of how he interacted with them, the following answer was received: “They send me some diagrams there, all kinds of documents. I don’t read them anyway and immediately delete them. ” It is clear that he was a little disingenuous, and he was looking at something.



Now, reading a large number of various technical tasks and specifications, I understand the main problem of such a “business analysis”: paper can stand it. This is the key difference between analysis and programming. On paper, you can write completely contradictory conditions, indicate absolutely abstract requirements like “I want it to be good,” make them beautiful, and assume that the work is done. In programming, such a trick does not work - everything should be clear. For this reason, the developer can often fend off the implementation of any functionality from the customer, simply constantly pointing out contradictions and requiring clarification of the requirements. And the customer can only do it if he, in fact, does the work of a programmer.



Programmers seem to have to write programs. What can be considered a program? One of the formalisms used in theory is the Turing Machine. This is the simplest computer with which you can describe the algorithms. This, in turn, suggests that one of the properties of a program is imperative. The program has a state and a process of execution. One of the main features of SQL was its declarative nature. It was assumed that ordinary people would use it, since they would not have to write a “program”, but describe in SQL what they want to get.



As a child, I had a chance to play chess. Now I understand that I absolutely did not understand the basic principles of positional play. However, I was able to calculate well the position for many moves forward. I always tried to “open” the game and further won simply due to various combinations, where the opponent considered me worse. In fact, I just had a debugger working in my head that could make moves and represent in watches the current position on the board. In reality, I played like a simple computer. Nevertheless, in the first year of classes, I managed to complete the first adult rank and get into the top three at the Belarusian Championship at my age. It's funny, but chess uses similar skills as in programming. A positional game is the design of architecture. Tactical game - debugging the program.



Teaching people programming in lsFusion, I came to the conclusion that imperative logic is more difficult for an ordinary person to perceive than declarative. Calculating the situation many moves ahead is not a basic skill used by a person in everyday life. He has to keep in mind a state and be able to change it at every step. At the same time, each person has to regularly formulate what he wants, which is a kind of “declarative programming”.



Declarative is present in other tools. For example, in Excel, you can build certain logic using formulas. I had occasion to see almost whole information systems written in the form of Excel formulas, slightly flavored with imperative Visual Basic code. Are these people programmers, or are they advanced business intelligence?



If we consider the stack of languages ​​and technologies that are currently used in development, then it can be divided into several levels (just like the network protocol stack). On each of them something new was added:



  1. Assembler. Machine-oriented language.
  2. C. Procedural language.
  3. C ++. Object Oriented Programming ..
  4. Java / C # / Python and others. Virtual machines and managed memory.
  5. 1C / Access / SAP NetWeaver, etc. Here from the hassle of the developer removed the management of memory, disk, network and other details. You need to think exclusively about business logic. It is somewhere at this level that lsFusion is located as a platform.


Each next technology is written on the basis of technology of a lower level. Theoretically, it follows that those who write at a lower level will be able to write at a higher level. This, of course, does not mean that they will do it as efficiently as possible. Engineers who create cars will not be the best racers in the world, but they must be able to ride them somehow. In the opposite direction, this does not work.



Largely for this reason, as a rule, developers always respect those who use lower-level technologies, and despise those who write to higher-level ones. I'm not so old as to catch those times when assembler developers hated openers. But I also remember sishnikov who believed that C ++ is from the evil one. Some C ++ developers still consider Java developers to be under-programmers, since they don’t really manage memory, and Java programs require a lot of extra memory because of this. Well, all the developers of the first four levels certainly despise 1C-programmers, which is best reflected in the bearded joke:



image








However, this may be due to the fact that fifth-level technologies, unlike the first four and lsFusion, are closed and paid. They are used in a bloody enterprise, where it is in the order of things. Accordingly, they do not like the whole ecosystem, but at the same time the developers in it.



It is worth noting that it is at the fifth level that there are such high-level and declarative languages ​​as SQL and HTML + CSS. By the way, SQL developers are much more loyal to SQL developers. Most likely, due to the fact that they work with them in conjunction, solving a separate block of tasks, in contrast to the same 1C-programmers who deal with the database, backend, and frontend at the same time.



In fairness, a similar situation exists not only in programming. For example, there are a number of people who drive exclusively on a mechanical gearbox, extremely negatively regarding an automatic transmission. They believe that the machine doesn’t shift gears efficiently, and manually they can do better (which is generally true). Another thing is that most are still willing to sacrifice efficiency, reliability and increased fuel consumption for the sake of commonplace convenience. And just like in programming, there are people who can’t drive mechanics at all, because they don’t have enough coordination to quickly switch gears and press the necessary pedals.



It is true to note that the driver with an automatic transmission has the ability to switch to manual mode. Similarly, you can embed assembly code in C, or you can go down a level in lsFusion and write Java code.



The higher the level of technology, the more declarative and less imperative it is. You can consider these levels as a scale, where “machine” will be at the bottom, and “user” or “business” at the top. As you move from bottom to top, it is believed that programming is becoming less and less. And perhaps somewhere on this line there is a point when programming becomes a business analysis.



Why didn’t we look for already held programmers? There are at least a few reasons for this.



Firstly, they already have some kind of technology stack with which they work. Despite the relatively innovative industry, most programmers are conservatives (although certainly not all). They will not learn unknown technology without hype, for which there is no demand (even if temporarily). When any person changes the sphere in which he works, he automatically “loses value”. Therefore, it is psychologically difficult to give up what you know and begin to learn something new.



Secondly, development on the lsFusion platform, as well as development on 1C, is really closer to business analysis than development on lower-level platforms like Java, .Net and Python. There are other tasks, problems and approaches.



But one of the main reasons is economic. In Belarus, people do not seek to become officials and security officials. Here you can’t, working as a minister, carry dogs on your personal plane to any exhibitions, or go drunk in the opposite direction. Window dressing is far from welcome, and many officials are sometimes imprisoned, and then released to lead collective farms. We also do not have companies that live off of natural resources, so our dreams of becoming an oilman are also not destined to come true. Almost any market is small enough and already, as a rule, divided. Therefore, there is also little room for new businessmen.



Against this background, the IT sphere stands apart. This is best seen in the following picture:



image



If we exclude the very small areas of pilots and some financial advisers, it turns out that on average, programmers earn three and a half times more than employees in other highest-paid areas. If we compare with state employees, the difference will be seven times.



Another plus in the work of a programmer in Belarus is stability. Since the local market is very small, most companies operate on the western market. Therefore, as a rule, all the salaries of programmers are denominated in foreign currency. That is why in June there is a decline compared to the first half of the year - the ruble appreciated. In a country where the local currency is constantly devalued against the world currency, salaries in dollars and euros are considered the key to stability and tranquility. People in the country are considered by many to be "masters of life." They are the main consumers of the expensive segment in most markets. Many parents send their children to programming circles, and the highest competition for the relevant departments.



It is not surprising that the “Enter IT” trend is flourishing in Belarus. We decided to take advantage of this and try to hire people of other professions by teaching them how to develop on lsFusion. By the way, now we have lsFusion developers working for former sales managers, system administrators, economists, consultants for ERP systems and so on.



We placed a paid advertisement on the main page of the largest information resource in Belarus. It took into account the error from the job site and indicated that we are not looking for business intelligence, but a developer with no work experience. For the best motivation, they explicitly indicated a potential pay plug corresponding to the IT industry.



Since we needed a very small number of people, and there would be many who wanted, we understood that the candidates would need to be screened out somehow. We chose the simplest scheme: you need to take an example of the Standings and refine it so that for a match the score is not determined manually, but on the basis of goals scored that the user must enter. In order not to bother with each candidate individually and not to waste their time, we indicated directly in the announcement that a solution to this problem was required.



To solve the problem, it was required to download and install the platform (the installer was on the site), connect the code from the example there and fix it in the IDE. It will take about 15 minutes for any of our lsFusion developers. It would take a typical programmer to understand the example, download, run and solve for a maximum of 3 hours, since the solution does not require additional knowledge of the platform. Everything was done there by analogy with the existing logic.



According to statistics, the announcement was opened and read by several tens of thousands of people. The test task itself (it was on a separate link) was read by several thousand. The platform downloaded about 400 people (and then it was one 1.5GB file, which included IDEA, Java and PostgreSQL). Forty people sent something. Of these, about ten people had an adequate solution. Of these people, we have chosen those whom we will hire.



What I could not understand in this story was what people lacked: motivation or ability. After all, if someone works on a low-paying job, which does not bring him pleasure, then what prevents him from spending even a few hours to understand the problem and solve it. We have already offered from the start a high salary, which is far from being paid to all junior developers in other languages. Perhaps many people act on the principle “I would go to programmers, let me teach.” Actually in our country we already have a lot of all kinds of paid courses that many people take, not understanding how important self-education is in programming.



But perhaps the problem is in abilities. In order to start programming, one basic skill is needed: analytical thinking. By it I mean the ability to distinguish from the private the general (induction) and vice versa (deduction). This ability is developed in a relatively small number of people, but without it, alas, not a good programmer. Moreover, if you somehow measure analytical thinking and build a graph of dependence on the number of people with this skill, you get a hyperbole. That is, the lower the threshold for entering technology, the significantly more people can overcome it.



The problem with analytical thinking is that it cannot be learned. It is formed somewhere at an early age, and an adult is no longer able to change something. We have passed a probationary period candidate of technical sciences. However, he could not implement a simple domain logic. The man tried, worked at home in the evenings, but every time he was given a task that simply needed to be done by analogy, he could not cope with it. How he was able to defend the candidate at the same time is not clear. However, this more likely shows that analytical thinking is not mandatory in everyday life. And there are a number of professions in which this skill is not particularly required.



When they ask me what technology to start the path to programming with, I answer: start with SQL. In any case, his knowledge will not hurt, and it takes no more than one day to learn the basic functionality (SELECT / JOIN / UNION). Next you need to try to solve problems from the Internet. It doesn’t work out - so you should not start with programming at all. If something can be solved, then at least 1C or lsFusion can become a programmer. And then, how it goes.



Conclusion



Of course, the question from the title of the article is rhetorical. The concept of programming is subjective, and depends on the views of a particular person. All people to one degree or another are engaged in programming. For example, when they simply set the settings in the thermostat for underfloor heating, or create tables with formulas in Google Docs. However, technology at different levels has a different entry threshold. The higher the level of technology, the more people I can program on it. True programming in this process is really getting smaller. I just wanted this to not become a subject of contempt for some developers by others.



All Articles