Es war einmal eine hochrangige Plattform für die Entwicklung von
lsFusion- Geschäftsanwendungen. Das einzige, was noch übrig war, war, denjenigen zu finden, der darauf schreiben würde. Es wurde beschlossen, einen Job auf Websites für die Jobsuche zu veröffentlichen. Es stellte sich jedoch die Frage, was als Position oder Beruf anzugeben ist.
In Bezug auf die Komplexität unterschied sich die Plattformsprache nicht wesentlich von SQL, das ursprünglich nicht für Programmierer, sondern für Geschäftsanwender erstellt wurde. Aus diesem Grund haben wir uns auch entschlossen, als Position „Business Analyst“ anzugeben.
Wir haben den Antragstellern vorgeschlagen, eine relativ einfache Testaufgabe zu lösen, bei der ein einfaches Beispiel ein wenig verfeinert werden musste. Einige Leute haben es getan, aber wütende Briefe kamen von vielen mit Empörung wie: "Suchen Sie einen Programmierer oder Business Analyst?"
Als Ergebnis fanden wir die Leute, die wir brauchten, aber als ich diese Erfahrung analysierte, fragte ich mich unwillkürlich: Wo endet die Geschäftsanalyse und wo beginnt die Programmierung?
Als ich gerade mein Studium abgeschlossen hatte, hatte ich einen Freund, der bereits als Programmierer in einem großen Outsourcing-Unternehmen arbeitete. Alles war erwachsen - neben Programmierern gab es auch Geschäftsanalysten und Tester. Dann war ich sehr daran interessiert, wie sie dort alles aufgebaut haben, insbesondere was Business Analysten tun. Auf die Frage, wie er mit ihnen interagierte, ging ungefähr die folgende Antwort ein: „Sie schicken mir dort einige Diagramme, alle Arten von Dokumenten. Ich lese sie sowieso nicht und lösche sie sofort. " Es ist klar, dass er ein wenig unaufrichtig war und etwas ansah.
Wenn ich jetzt eine große Anzahl verschiedener technischer Aufgaben und Spezifikationen lese, verstehe ich das Hauptproblem einer solchen „Geschäftsanalyse“: Papier wird alles aushalten. Dies ist der Hauptunterschied zwischen Analyse und Programmierung. Auf Papier können Sie völlig widersprüchliche Bedingungen schreiben, absolut abstrakte Anforderungen wie „Ich möchte, dass es gut ist“ angeben, sie schön machen und davon ausgehen, dass die Arbeit erledigt ist. In der Programmierung funktioniert ein solcher Trick nicht - alles sollte klar sein. Aus diesem Grund kann der Entwickler die Implementierung von Funktionen des Kunden häufig abwehren, indem er ständig auf Widersprüche hinweist und eine Klärung der Anforderungen verlangt. Und der Kunde kann es nur, wenn er tatsächlich die Arbeit eines Programmierers erledigt.
Programmierer scheinen Programme schreiben zu müssen. Was kann als Programm angesehen werden? Einer der theoretisch verwendeten Formalismen ist die Turingmaschine. Dies ist der einfachste Computer, mit dem Sie die Algorithmen beschreiben können. Dies legt wiederum nahe, dass eine der Eigenschaften eines Programms unerlässlich ist. Das Programm hat einen Zustand und einen Ausführungsprozess. Eines der Hauptmerkmale von SQL war seine deklarative Natur. Es wurde angenommen, dass normale Leute es verwenden würden, da sie kein „Programm“ schreiben müssten, sondern in SQL beschreiben würden, was sie erhalten möchten.
Als Kind hatte ich die Möglichkeit, Schach zu spielen. Jetzt verstehe ich, dass ich die Grundprinzipien des Positionsspiels absolut nicht verstanden habe. Ich konnte jedoch die Position für viele Vorwärtsbewegungen gut berechnen. Ich habe immer versucht, das Spiel zu „öffnen“ und weiter gewonnen, einfach aufgrund verschiedener Kombinationen, bei denen der Gegner mich für schlechter hielt. Tatsächlich hatte ich gerade einen Debugger im Kopf, der Bewegungen ausführen und die aktuelle Position auf dem Board in Uhren darstellen konnte. In Wirklichkeit habe ich wie ein einfacher Computer gespielt. Trotzdem gelang es mir im ersten Unterrichtsjahr, den ersten Erwachsenenrang zu erreichen und in meinem Alter bei der Weißrussischen Meisterschaft unter die ersten drei zu kommen. Es ist lustig, aber Schach verwendet die gleichen Fähigkeiten wie das Programmieren. Ein Positionsspiel ist das Design von Architektur. Taktisches Spiel - Debuggen des Programms.
Als ich Menschen das Programmieren in lsFusion beibrachte, kam ich zu dem Schluss, dass imperative Logik für einen gewöhnlichen Menschen schwieriger wahrzunehmen als deklarativ ist. Die Berechnung der Situation, die viele Schritte voraus sind, ist keine grundlegende Fähigkeit, die ein Mensch im Alltag einsetzt. Er muss einen Zustand im Auge behalten und ihn bei jedem Schritt ändern können. Gleichzeitig muss jeder regelmäßig formulieren, was er will, was eine Art „deklarative Programmierung“ ist.
Deklarativ ist in anderen Tools vorhanden. In Excel können Sie beispielsweise bestimmte Logik mithilfe von Formeln erstellen. Ich hatte Gelegenheit, fast ganze Informationssysteme zu sehen, die in Form von Excel-Formeln geschrieben waren und leicht mit zwingendem Visual Basic-Code gewürzt waren. Sind diese Leute Programmierer oder sind sie fortgeschrittene Business Intelligence?
Wenn wir den Stapel von Sprachen und Technologien betrachten, die derzeit in der Entwicklung verwendet werden, kann er in mehrere Ebenen unterteilt werden (genau wie der Netzwerkprotokollstapel). Zu jedem von ihnen wurde etwas Neues hinzugefügt:
- Assembler. Maschinenorientierte Sprache.
- C. Verfahrenssprache.
- C ++. Objektorientierte Programmierung ..
- Java / C # / Python und andere. Virtuelle Maschinen und verwalteter Speicher.
- 1C / Access / SAP NetWeaver usw. Hier aus dem Ärger des Entwicklers entfernt die Verwaltung von Speicher, Festplatte, Netzwerk und anderen Details. Sie müssen ausschließlich an die Geschäftslogik denken. Irgendwo auf dieser Ebene befindet sich lsFusion als Plattform.
Jede nächste Technologie basiert auf einer Technologie niedrigerer Ebene. Theoretisch folgt daraus, dass diejenigen, die auf einer niedrigeren Ebene schreiben, auf einer höheren Ebene schreiben können. Dies bedeutet natürlich nicht, dass sie es so effizient wie möglich machen werden. Ingenieure, die Autos bauen, werden nicht die besten Rennfahrer der Welt sein, aber sie müssen sie irgendwie fahren können. In der entgegengesetzten Richtung funktioniert dies nicht.
Vor allem aus diesem Grund respektieren Entwickler in der Regel immer diejenigen, die Technologien auf niedrigerer Ebene verwenden, und verachten diejenigen, die auf Technologien auf höherer Ebene schreiben. Ich bin nicht so alt, um die Zeiten zu erfassen, in denen Assembler-Entwickler Opener hassten. Aber ich erinnere mich auch an Sishnikov, der glaubte, dass C ++ vom Bösen stammt. Einige C ++ - Entwickler betrachten Java-Entwickler immer noch als Unterprogrammierer, da sie den Speicher nicht wirklich verwalten können und Java-Programme aus diesem Grund viel zusätzlichen Speicher benötigen. Nun, alle Entwickler der ersten vier Levels verachten natürlich 1C-Programmierer, was sich am besten in der bärtigen Anekdote widerspiegelt:

Dies kann jedoch auf die Tatsache zurückzuführen sein, dass Technologien der fünften Ebene im Gegensatz zu den ersten vier und lsFusion geschlossen und bezahlt werden. Sie werden in einem blutigen Unternehmen eingesetzt, wo es in der Reihenfolge der Dinge liegt. Dementsprechend mögen sie nicht das gesamte Ökosystem, sondern gleichzeitig die Entwickler darin.
Es ist erwähnenswert, dass es auf der fünften Ebene so hohe und deklarative Sprachen wie SQL und HTML + CSS gibt. Übrigens sind SQL-Entwickler SQL-Entwicklern gegenüber viel loyaler. Höchstwahrscheinlich aufgrund der Tatsache, dass sie mit ihnen zusammenarbeiten und einen separaten Aufgabenblock lösen, im Gegensatz zu denselben 1C-Programmierern, die sich gleichzeitig mit der Datenbank, dem Backend und dem Frontend befassen.
Fairerweise besteht eine ähnliche Situation nicht nur bei der Programmierung. Zum Beispiel gibt es eine Reihe von Menschen, die ausschließlich mit einem mechanischen Getriebe fahren, was in Bezug auf ein Automatikgetriebe äußerst negativ ist. Sie glauben, dass die Maschine nicht effizient schaltet, und manuell können sie es besser machen (was im Allgemeinen zutrifft). Eine andere Sache ist, dass die meisten immer noch bereit sind, Effizienz, Zuverlässigkeit und erhöhten Kraftstoffverbrauch zu opfern, um den alltäglichen Komfort zu gewährleisten. Und genau wie beim Programmieren gibt es Leute, die überhaupt keine Mechanik fahren können, weil sie nicht genug Koordination haben, um schnell zu schalten und die notwendigen Pedale zu betätigen.
Es ist richtig zu beachten, dass der Fahrer mit einem Automatikgetriebe die Möglichkeit hat, in den manuellen Modus zu wechseln. Ebenso können Sie Assembly-Code in C einbetten oder eine Ebene in lsFusion herunterfahren und Java-Code schreiben.
Je höher der Stand der Technik, desto aussagekräftiger und weniger zwingend ist er. Sie können diese Ebenen als Skala betrachten, in der sich "Maschine" unten und "Benutzer" oder "Geschäft" oben befinden. Wenn Sie sich von unten nach oben bewegen, wird angenommen, dass die Programmierung immer weniger wird. Und vielleicht gibt es irgendwo auf dieser Linie einen Punkt, an dem die Programmierung zu einer Geschäftsanalyse wird.
Warum haben wir nicht nach bereits abgeschlossenen Programmierern gesucht? Dafür gibt es zumindest einige Gründe.
Erstens haben sie bereits eine Art Technologie-Stack, mit dem sie arbeiten. Trotz der relativ innovativen Industrie sind die meisten Programmierer konservativ (wenn auch sicherlich nicht alle). Sie werden keine unbekannte Technologie ohne Hype lernen, für die es keine Nachfrage gibt (auch wenn nur vorübergehend). Wenn jemand die Sphäre ändert, in der er arbeitet, verliert er automatisch an Wert. Daher ist es psychologisch schwierig, das, was Sie wissen, aufzugeben und etwas Neues zu lernen.
Zweitens ist die Entwicklung auf der lsFusion-Plattform sowie die Entwicklung auf 1C der Geschäftsanalyse sehr viel näher als die Entwicklung auf untergeordneten Plattformen wie Java, .Net und Python. Es gibt andere Aufgaben, Probleme und Ansätze.
Einer der Hauptgründe ist jedoch die Wirtschaftlichkeit. In Belarus versuchen die Menschen nicht, Beamte und Sicherheitsbeamte zu werden. Hier können Sie als Minister keine Hunde in Ihrem persönlichen Flugzeug zu Ausstellungen mitnehmen oder sich in die entgegengesetzte Richtung betrinken. Schaufensterdekoration ist alles andere als willkommen, und viele Beamte werden gelegentlich inhaftiert und dann freigelassen, um Kollektivfarmen zu leiten. Wir haben auch keine Unternehmen, die von natürlichen Ressourcen leben, daher sind unsere Träume, Ölmann zu werden, auch nicht dazu bestimmt, wahr zu werden. Fast jeder Markt ist klein genug und in der Regel bereits geteilt. Daher gibt es auch wenig Platz für neue Geschäftsleute.
Vor diesem Hintergrund zeichnet sich die IT-Sphäre aus. Dies ist am besten auf dem folgenden Bild zu sehen:

Wenn wir die sehr kleinen Bereiche der Piloten und einiger Finanzberater ausschließen, stellt sich heraus, dass Programmierer im Durchschnitt dreieinhalb Mal mehr verdienen als Mitarbeiter in anderen Bereichen mit den höchsten Löhnen. Wenn wir mit Staatsangestellten vergleichen, wird der Unterschied siebenmal sein.
Ein weiteres Plus bei der Arbeit eines Programmierers in Belarus ist die Stabilität. Da der lokale Markt sehr klein ist, sind die meisten Unternehmen auf dem westlichen Markt tätig. Daher lauten alle Gehälter der Programmierer in der Regel auf Fremdwährung. Deshalb ist im Juni ein Rückgang gegenüber dem ersten Halbjahr zu verzeichnen - der Rubel wertete auf. In einem Land, in dem die lokale Währung ständig gegenüber der Weltwährung abgewertet wird, gelten Gehälter in Dollar und Euro als Schlüssel zu Stabilität und Ruhe. Die Menschen auf dem Land werden von vielen als "Meister des Lebens" angesehen. Sie sind in den meisten Märkten die Hauptverbraucher des teuren Segments. Viele Eltern schicken ihre Kinder in Programmierkreise und den höchsten Wettbewerb um die jeweiligen Abteilungen.
Es ist nicht verwunderlich, dass der Trend „Enter IT“ in Belarus floriert. Wir haben uns entschlossen, dies zu nutzen und zu versuchen, Mitarbeiter anderer Berufe einzustellen, um ihnen beizubringen, wie sie sich auf lsFusion entwickeln können. Übrigens haben wir jetzt lsFusion-Entwickler, die für ehemalige Vertriebsleiter, Systemadministratoren, Ökonomen, Berater für ERP-Systeme usw. arbeiten.
Wir haben eine bezahlte Anzeige auf der Hauptseite der größten Informationsquelle in Belarus platziert. Es berücksichtigte den Fehler auf der Baustelle und zeigte an, dass wir nicht nach Business Intelligence suchen, sondern nach einem Entwickler ohne Berufserfahrung. Für die beste Motivation haben sie ausdrücklich einen potenziellen Pay Plug angegeben, der der IT-Branche entspricht.
Da wir eine sehr kleine Anzahl von Menschen brauchten und es viele geben würde, die es wollten, haben wir verstanden, dass die Kandidaten irgendwie herausgefiltert werden müssen. Wir haben das einfachste Schema gewählt: Sie müssen ein Beispiel für die
Rangliste nehmen und es verfeinern, damit für ein Spiel die Punktzahl nicht manuell ermittelt wird, sondern auf der Grundlage der erzielten Tore, die der Benutzer eingeben muss. Um nicht jeden Kandidaten einzeln zu belästigen und seine Zeit nicht zu verschwenden, haben wir direkt in der Ankündigung angegeben, dass eine Lösung für dieses Problem erforderlich ist.
Um das Problem zu lösen, musste die Plattform heruntergeladen und installiert werden (das Installationsprogramm befand sich auf der Site), der Code aus dem dortigen Beispiel verbunden und in der IDE behoben werden. Für jeden unserer lsFusion-Entwickler dauert es ungefähr 15 Minuten. Ein typischer Programmierer würde das Beispiel verstehen, herunterladen, ausführen und maximal 3 Stunden lang lösen, da für die Lösung keine zusätzlichen Kenntnisse der Plattform erforderlich sind. Alles wurde dort in Analogie zur bestehenden Logik gemacht.
Laut Statistik wurde die Ankündigung von mehreren Zehntausenden von Menschen geöffnet und gelesen. Die Testaufgabe selbst (sie befand sich auf einem separaten Link) wurde von mehreren Tausend gelesen. Ungefähr 400 Leute haben die Plattform heruntergeladen (und dann war es eine 1,5-GB-Datei, die IDEA, Java und PostgreSQL enthielt). Vierzig Leute haben etwas geschickt. Davon hatten etwa zehn Personen eine adäquate Lösung. Von diesen Leuten haben wir diejenigen ausgewählt, die wir einstellen werden.
Was ich in dieser Geschichte nicht verstehen konnte, war das, was den Menschen fehlte: Motivation oder Fähigkeit. Wenn jemand an einem schlecht bezahlten Job arbeitet, der ihm kein Vergnügen bereitet, was hindert ihn dann daran, auch nur ein paar Stunden damit zu verbringen, das Problem zu verstehen und es zu lösen? Von Anfang an haben wir ein hohes Gehalt angeboten, das bei weitem nicht an alle Nachwuchsentwickler in anderen Sprachen gezahlt wird. Vielleicht handeln viele Leute nach dem Prinzip "Ich würde zu Programmierern gehen, lass mich dich unterrichten." Tatsächlich haben wir in unserem Land bereits viele bezahlte Kurse aller Art, die viele Menschen belegen, ohne zu verstehen, wie wichtig Selbstbildung für die Programmierung ist.
Aber vielleicht liegt das Problem in den Fähigkeiten. Um mit dem Programmieren zu beginnen, ist eine grundlegende Fähigkeit erforderlich: analytisches Denken. Damit meine ich die Fähigkeit, das Allgemeine (Induktion) und umgekehrt (Abzug) vom Privaten zu unterscheiden. Diese Fähigkeit wird bei einer relativ kleinen Anzahl von Menschen entwickelt, aber ohne sie leider kein guter Programmierer. Wenn Sie außerdem das analytische Denken messen und ein Diagramm der Abhängigkeit von der Anzahl der Personen mit dieser Fähigkeit erstellen, erhalten Sie eine Übertreibung. Das heißt, je niedriger die Schwelle für den Einstieg in die Technologie ist, desto mehr Menschen können sie überwinden.
Das Problem beim analytischen Denken ist, dass es nicht gelernt werden kann. Es entsteht irgendwo in einem frühen Alter und ein Erwachsener kann nichts mehr ändern. Wir haben einen Probezeitkandidaten der technischen Wissenschaften bestanden. Eine einfache Domänenlogik konnte er jedoch nicht implementieren. Der Mann versuchte es, arbeitete abends zu Hause, aber jedes Mal, wenn er eine Aufgabe bekam, bei der er einfach analog erledigt werden musste, konnte er damit nicht fertig werden. Wie er den Kandidaten verteidigen konnte, ist nicht klar. Es zeigt jedoch eher, dass analytisches Denken im Alltag nicht notwendig ist. Und es gibt eine Reihe von Berufen, in denen diese Fähigkeit nicht besonders erforderlich ist.
Wenn sie mich fragen, mit welcher Technologie der Weg zur Programmierung beginnen soll, antworte ich: Beginnen Sie mit SQL. In jedem Fall wird sein Wissen nicht schaden und es dauert nicht länger als einen Tag, um die grundlegenden Funktionen (SELECT / JOIN / UNION) zu erlernen. Als nächstes müssen Sie versuchen, Probleme aus dem Internet zu lösen. Es funktioniert nicht - Sie sollten also überhaupt nicht mit der Programmierung beginnen. Wenn etwas gelöst werden kann, kann mindestens 1C oder lsFusion ein Programmierer werden. Und dann, wie es geht.
Fazit
Natürlich ist die Frage aus dem Titel des Artikels rhetorisch. Das Konzept der Programmierung ist subjektiv und hängt von den Ansichten einer bestimmten Person ab. Alle Menschen sind bis zu dem einen oder anderen Grad mit dem Programmieren beschäftigt. Zum Beispiel, wenn sie einfach die Einstellungen im Thermostat eines warmen Fußbodens festlegen oder Tabellen mit Formeln in Google Text & Tabellen erstellen. Technologie auf verschiedenen Ebenen hat jedoch eine unterschiedliche Eintrittsschwelle. Je höher der Stand der Technik, desto mehr Leute kann ich darauf programmieren. Die wahre Programmierung in diesem Prozess wird immer kleiner. Ich wollte nur, dass dies für einige Entwickler nicht zum Thema der Verachtung durch andere wird.