Dinge, die euer CTO kennt

Feb 13, 2020
Blog

Bevor ihr mit der Arbeit an einem Projekt beginnt, sei es eine kleine „Home – Anwendung“ oder eine monumentale Enterprise-Lösung, stellt sich für Personen, die den Beginn der Entwicklung einleiten, die Frage: „In welcher Sprache werden wir schreiben?“. Es mag scheinen, dass die Antwort genug einfach ist, aber nicht jeder weiß, dass man mit der Frage „Was werden wir schreiben?“ beginnen muss.

 

Diese Frage ist nicht müßig, da die Antwort viel konkreter sein sollte, als es auf den ersten Blick scheinen mag. Es kommt häufig vor, dass die Menschen, die manchmal keine Ahnung von dieser Entwicklung haben, auf der Ebene bereits mittelständischer Unternehmen an der Entscheidung beteiligt sind, wie sie mit der Entwicklung beginnen sollen. Natürlich gibt es meistens einen technischen Direktor, der die Last trägt, einen bestimmten Entwicklungskurs festzulegen, aber was ist, wenn es keine solche Person gibt? Ein externer Prüfer in der Person eines erfahrenen Entwicklers wird auf dem Kaffeesatz nicht wahrsagen, um zu verstehen, was ihr am Ausgang erreichen möchtet. Er wird sich einfach weigern, euch zu helfen, oder gibt eine unvollständige Antwort, in der Tat wird er absolut recht haben: wie die Frage, so die Antwort.

In diesem Artikel erörtern wir die wichtigsten Momente bei der Auswahl von Entwicklungstechnologien und die Fehler, die Geschäftsführer und Management begehen, einschließlich einer Erörterung, warum ihr nicht einer veränderlichen Mode folgen solltet.

Nehmen wir an, ihr habt bereits eine klare Vorstellung von dem zukünftigen Projekt und technischer Spezifikation dafür. Um bei der Auswahl der Entwicklungstechnologien nicht zu stolpern, muss man zumindest eine grundlegende Vorstellung davon haben, wie sich Programmiersprachen voneinander unterscheiden. Es gibt viele Antworten auf diese Frage, aber jetzt sprechen wir über grundlegende Unterschiede und Anwendungsbereiche. Nur wenn ihr diese Unterschiede versteht, könnt ihr eine aussagekräftige Frage stellen: „Was sind die Vor- und Nachteile der Programmiersprache N?“ Und eine klare Antwort darauf erhalten, die auf die Anforderungen Ihres Projekts „angewendet“ werden kann.

Wir werden nicht mit den Fachbegriffen operieren und die Sprachen in hohe, niedrige, objektorientierte usw. unterteilen. In unserem Fall benötigen wir eine kurze Liste von fünf Positionen, die sich jeweils einfach und transparent auf eine TK beziehen:

1. Die Anwendungsplattform (Anwendungsbereich der Sprache).

2. Die Flexibilität der Sprache.

3. Die Dauer der Entwicklung und des “Lebens” des Projekts.

4. Leistung.

5. Die Gemeinschaft der Sprache.

Die Antworten auf diese fünf Fragen werden von jedem qualifizierten Fachmann gegeben. Darüber hinaus sind sie einfach zu verstehen, transparent und, was am wichtigsten ist, zeigen deutlich, ob wir die eine oder andere Sprache in der Entwicklung verwenden können oder nicht.

Verschiedene Sprachen – verschiedene Bereiche

Der beste Weg, eine Programmiersprache und einen Hauptentwicklungsvektor zu definieren, besteht darin, die Gemeinschaftserfahrung zu nutzen. Um die richtige Entscheidung zu treffen, ist es nicht erforderlich, selbst Entwickler zu sein. Es reicht einfach anzuschauen, welche Programmiersprachen auf dem gewünschten Gebiet beliebt sind, und sich anhand der oben angefügten Liste mit ihren Merkmalen vertraut zu machen.

Jede Programmiersprache hat ihre eigenen Stärken und Schwächen.

Nehmen wir zum Beispiel Python. Diese Programmiersprache ähnelt einem Schweizer Messer, in dem es ein weiteres kleineres Schweizer Messer gibt – mit dieser Sprache kann man theoretisch alles schreiben, wenn ihr natürlich keine Anforderungen an den Speicherverbrauch und die Geschwindigkeit des Endprodukts habt. Darüber hinaus hat Python eine sehr niedrige Zugangsbeschränkungen für die Eingabe der Sprache, und das wird kein Problem sein, die Entwickler zu finden (und sogar eigene Entwickler während der Entwicklung des Projekts heranzubilden), und eine große Anzahl offener Bibliotheken erleichtert den Entwicklern wesentlich das Leben. Sobald Sie jedoch nicht nur eine einfache, sondern auch eine schnelle Anwendung benötigen, die strengen Einschränkungen hinsichtlich des Verbrauchs von Systemressourcen unterliegt, solltet ihr Python vergessen. Oder wenn ihr eine mehrströmig Anwendung benötigt: Die Implementierung der Python-Sprache unterstützt kein Multithreading.

Kehren wir zu unserer Liste der Faktoren zurück und sehen uns Python an:

1. Anwendungsbereich: fast alles mögliches und überall.

2. Flexibilität: beeindruckend.

3. Dauer der Entwicklung: schnell.

4. Leistung: Nur verfügbar, wenn ihr über eine erhebliche oder unbegrenzte Rechenleistung verfügt.

5. Gemeinschaft der Sprache: Eine riesige Armee von Entwicklern aller Ebenen.

Wie ihr sieht, das Hauptproblem des als Beispiel betrachteten Pythons seine Gefräßigkeit ist. Wenn wir eine Webanwendung erstellen, die sich irgendwo auf den Servern von Google “drehen” wird, können wir uns die Entwicklung in dieser Sprache leisten. Wenn es sich jedoch um eine mobile oder sogar Desktop-Anwendung handelt, wenn die Zielhardware sehr leistungsschwach sein kann, solltet ihr Python vergessen.

Und am wichtigsten: solche Nuancen gibt es in jeder Programmiersprache. Einige von ihnen sind für euch möglicherweise nicht wichtig, während andere fatal sein können. Und um klar zu verstehen, was sich auf das Projekt auswirkt und was nicht, muss man wissen, was genau ihr nach der Entwicklung erhaltet und wer es verwenden wird.

Betrachten wir noch eine andere Sprache, sei es C ++. Die Zugangsbeschränkungen sind viel höher als in demselben Python, bietet jedoch eine Reihe von Vorteilen, die Python nicht bietet. C ++ erlaubt beispielsweise den Ressourcenverbrauch unserer Software deutlich steuern, das macht sie zu einer hervorragenden Wahl für das Schreiben produktiver Anwendungen, die in einer eingeschränkten Umgebung funktionieren sollten. Daher ist C ++ in der Spielebranche sehr beliebt, wenn ein Team eine sehr solide nach der Komplexität und Größe Logik in den begrenzten Raum der endgültigen Benutzerkonfiguration einklemmen muss, die in Bezug auf die Leistung vom Server weit entfernt ist. Hier kann man auch mobile Anwendungen und Spiele angeben, die sich mit leistungsschwachen Prozessoren und einer sehr bescheidenen Menge an RAM begnügen müssen, die unter anderem mit anderen “Bewohnern” des Geräts geteilt werden müssen.

Andererseits muss man verstehen, dass C ++ wie ein Schwert ist, das nur aus einer Klinge ohne Griff besteht. Ein erfahrener Entwickler wird es meisterhaft verwalten, aber ein schwaches Team wird eine Anwendung erstellen, die sich durch ihren Ressourcenverbrauch nicht wesentlich von einem Projekt auf einem gefräßigem Python unterscheidet, die aber auch langsamer zu montieren ist. Außerdem gibt es in C ++ keine kontrollierte Entwicklungsumgebung, die in mehr „architektonischen“ jungen Sprachen verfügbar ist, das heißt, der Prozess der Erstellung von Software selbst ist langwierig und schmerzhaft, und das Ergebnis, das bei der Ausgabe erzielt wird, wird möglicherweise nicht zufriedenstellend.

Lasst uns als Ergebnis die Liste der Faktoren nun in der C ++ – Anwendung durchgehen:

1. Anwendungsbereich: Anwendungen, die Geschwindigkeit erfordern und in einer begrenzten Umgebung arbeiten.

2. Flexibilität: gering.

3. Dauer der Entwicklung: länger als der Durchschnitt.

4. Leistung: C ++ ist eine Sprache zur effizienten Nutzung jedes Megabytes Speichers. In dieser Sprache werden die effizientesten Anwendungen in Bezug auf den Leistungsverbrauch der Anwendung erstellt.

5. Gemeinschaft der Sprache: Eine riesige Armee von Entwicklern, aber einige von ihnen sind „Schädlinge“, da die Zugangsbeschränkungen der Sprache sehr hoch sind.

Die obigen Beispiele sind etwas übertrieben, aber sehr repräsentativ, und vor allem weisen die ultimativen Aussagen wie “Sprache N ist die beste” oder “Sprache N ist für alles geeignet” zurück. Wie ihr seht, es gibt keine universelle Sprache. Jede von ihnen weist eine Reihe von bemerkenswerten Unterschieden auf, die euer Projekt entweder äußerst erfolgreich machen oder es in endlosen Zyklen von Korrekturen und Verbesserungen begraben.

Trendige Programmiersprachen und ihre Gefahr

Neben den beliebten Programmiersprachen, die in aller Munde sind, gibt es auch modische im eigentlichen Sinne des Wortes. In den meisten Fällen handelt es sich dabei um einige neue Produkte, die erweiterte Funktionen bieten, die in anderen Sprachen nicht verfügbar sind, oder über eine spezielle Syntax verfügen. In Wirklichkeit ist das nicht so wichtig. Aber richtig wichtig ist, dass die Wahl einer modischen Programmiersprache anstelle einer populären höchstwahrscheinlich ein direkter Weg in den Abgrund ist.

Alle trendigen Programmiersprachen haben eine gemeinsame Eigenschaft: In ihrer Gemeinschaft gibt es nur sehr wenige wirklich erfahrene Entwickler und noch weniger Handbücher, Dokumentationen und Expertise.

Tatsächlich bedeutet dies, dass die Entwickler noch keine optimalen Methoden gefunden oder entwickelt haben, um bestimmte Probleme mit dieser Sprache zu lösen, und dementsprechend experimentieren. Die Experimente mit Home – Projekten sind jedoch akzeptabel, und wenn es um die kommerzielle Entwicklung geht, sind solche Überraschungen nutzlos, da das Unternehmen Vorhersehbarkeit und Konkretheit mag.

Es kommt auch vor, dass ihr bereits über einen erfahrenen Entwickler in einer modischen Sprache verfügt. Laut der Liste der Faktoren passt die Sprache perfekt zu euch, warum also nicht mit der Entwicklung beginnen?

Das Problem ist, dass man neben der Entwicklung der Anwendung häufig eine ausreichend lange Wartungszeit benötigt und dafür die Humanressourcen erforderlich sind. Glücklicherweise oder unglücklicherweise sind exotische / trendige Programmiersprachen selten so weit verbreitet, dass ihre Gemeinschaft auf wahrnehmbare Größen anwächst. Das heißt, wenn ihr einen zweiten, dritten oder zehnten Entwickler in ein Team benötigt, werdet ihr die Stelle monatelang besetzen, wenn ihr überhaupt jemanden findet. Meistens werden Projekte in modischen Sprachen in Zukunft entweder von Personen unterstützt, die diese Sprache direkt am Arbeitsplatz beherrschen, oder sie werden komplett neu geschrieben, um etwas allgemeineres und verständlicheres zu finden. Beide Varianten kosten zusätzliche Zeit, Geld und Nervenzellen der Geschäftsführung.

Hier ist ein Beispiel. Bereits vor drei bis vier Jahren suchten Hunderte von Unternehmen und Projekten nach Ruby-Entwicklern, die mit dem Ruby on Rails-Framework vertraut waren, anstelle von PHP- oder JavaScript-Entwicklern. Die “Rails” waren so populär und ihre Entwickler wurden so gut bezahlt, dass die Vertreter dieser Gemeinschaft sich erlaubten zu sagen:

«Ruby on Rails und PHP — sind wie Apple Macintosh und PC. Wir sind wenige, aber wir sind die Elite. Ruby on Rails und PHP sind eine Kultur gegen das Chaos».

Es schien, als ob RoR eine Zukunft hätte, aber die Mode, involvierte in die technische Notwendigkeit, war vorbei: Für stabil entwickelndes JavaScript wurden mehrere neue Bibliotheken veröffentlicht, die die Entwicklungsanforderungen der Ruby on Rails-Funktionalität abdeckten, und die Popularität der Ruby-Sprache und ihres Frameworks begann zu schwinden. Ja, Ruby on Rails wird immer noch in vielen Projekten eingesetzt, erfahrene RoR-Entwickler sind auf dem Markt gefragt, aber es gibt ein Vielfaches weniger offene Stellen als vor einigen Jahren. Dies geschah in erster Linie aufgrund der Tatsache, dass Programmiersprachen, die mit Ruby on Rails im Wettbewerb stehen, ebenfalls keinen Stillstand kennen, und dank Aktualisierungen, der Schaffung neuer Frameworks und Bibliotheken verschwand mit der Zeit ein so dringender Bedarf an RoR.

Alle paar Jahre wird eine Sprache oder ein Framework “lanciert”, und sehr schnell wird eine kleine Gemeinschaft um ihr herum aufgebaut. Zum Beispiel sind Rust oder Golang mittlerweile sehr populär. Und niemand weiß, ob diese Sprachen Fuß fassen oder sie durch stabilere und reifere „Alteingesessene“ ersetzt werden. Im Allgemeinen ist es sehr gefährlich, mit einer modischen Sprache oder Technologie in die Entwicklung einzusteigen, da es in Zukunft zu ernsthaften Problemen mit der Unterstützung kommen kann, über die wir später noch näher sprechen.

Anwendungsbereich, Bedingungen und Unterstützung

Es ist äußerst wichtig zu verstehen, in welchem ​​Bereich das Projekt entwickelt wird, da es keine universellen Programmiersprachen gibt – sie alle leben und entwickeln in ihren eigenen spezialisierten Nischen. Darüber hinaus werden Sprachen und Technologien nicht nur im Bereich der (Web-, Mobil-, Desktop- usw.) Entwicklung, sondern auch im Anwendungsbereich segmentiert. Beispielsweise kann dieselbe Webentwicklung provisorisch in ein Client-Frontend und ein Server-Backend unterteilt werden. Und für beide Teile desselben Webprojekts sind die Sprachen und Technologien unterschiedlich. Das heißt, um ein Webprojekt zu erstellen, reicht es nicht aus, ein Team von JavaScript- oder PHP-Entwicklern einzustellen, die euch den Front-End-Teil machen, sondern ihr benötigt auch Back-End-Spezialisten. Oft entgeht diese offensichtliche Nuance den Menschen, die von der Programmierung keine Ahnung haben, was sich bestenfalls in eine Erweiterung des Kostenanschlags und im schlimmsten Fall in tatsächliche Zeit- und Budgetverlusten mündet.

Ein weiterer Aspekt, der sehr oft ignoriert wird: der Lebenszyklus des Projektes. Häufig bezieht sich der Kunde ausschließlich auf die Entwicklungszeit ab dem Zeitpunkt des Eingangs der Technischen Spezifikation bis Lieferung eines funktionsfähigen Projektes. Ein Merkmal der dev-Sphäre ist, dass nach einer Phase der aktiven Entwicklung eine weniger intensive, aber äußerst wichtige Phase der Unterstützung einsetzt. Eben über weitere Unterstützung stolpert eine Vielzahl von Unternehmen.

Das klassische Szenario lautet wie folgt: indem der Kunde den Bedarf an zukünftiger Unterstützung und kompetenter Beratung ignoriert und die schnellste und billigste Variante mit der Technologie, die nicht am besten geeigneten ist, wählt. Falsche Entscheidungen und knappe Fristen führen zu einer schlechten Codequalität und funktionieren nach dem Prinzip “Hier setzen wir eine Krücke ein, weil wir keine Zeit haben.” In Zukunft wird die Unterstützung eines solchen Codes, die Einführung neuer Funktionen und einfach Verbesserungen ein Vielfaches, wenn nicht sogar um eine Größenordnung, mehr kosten. Darüber hinaus ist ein Projekt ohne zumindest minimale Unterstützung in ein oder zwei Jahren zum Niedergang und zur Stagnation verurteilt: Die IT-Branche entwickelt sich ständig weiter und bietet immer neue Lösungen für alte Probleme, die sofort zum „Standard“ werden. Sie müssen nicht weit gehen, um ein Beispiel zu finden – es reicht einfach eine Website mit einem zehnjährigen Alter zu öffnen, die seit einem Jahrzehnt nicht mehr unterstützt und aktualisiert wurde, und ihr sieht, welche Lösungen im Bereich der Webentwicklung zu diesem Zeitpunkt verwendet wurden. Zumindest verursachen sie ein ironisches Lächeln und häufiger – Empörung und Unzufriedenheit.

Die von uns beschriebene einfache und absolut transparente Überprüfungsmethode wird dafür benötigt, um die Situationen zu vermeiden, in denen ihr davon überzeugt werden, etwas in einer Sprache zu erstellen, die für den ausführenden Entwickler oder Berater „bequem“ ist. Wenn ihr beispielsweise überredet werden, ein Handyspiel für Android in Python zu schreiben oder davon überzeugt werden, dass man anstelle von transparentem und klarem JavaScript oder PHP das bereits veraltete und teure in Hinsicht der Löhner Ruby on Rails implementieren oder die aktuell angesagte Sprache ausprobieren müsst.

Der Meinung von Experten und erfahrenen Entwicklern muss man in jedem Fall zuhören, weil dies ihr Territorium ist, aber eine einfache Auflistung der Faktoren „Bereich, Flexibilität, Zeit, Produktivität, Gemeinschaft“ hilft dabei, entweder einen Versuch eines groben Betrugs zu identifizieren oder einen groben Fehler zu verhindern, indem die Meinung von Fachleuten ignoriert wird.

Seid aufmerksam.

Previous article