Der Kampf um Qualität in Webanwendungen, Depressionen, Drachen und Westeros

Ursprünglich plante niemand die Webentwicklung. Sogar in einem Albtraum. Im Allgemeinen empfanden die Menschen mit Unterstützung großer Unternehmen und der Wissenschaft die Schaffung teurer IT-Systeme als einen eng wissenschaftlichen Prozess, der der Elite zur Verfügung steht. Dabei ist es sehr wichtig, dass die meisten Algorithmen nicht nur schnell vergessen (ich habe das Prinzip gelernt, rotes und schwarzes Holz fünfmal mit einer Broschüre zu umgehen). Ein Blick auf die schwankenden Hüften im zeitigen Frühjahr löscht die erhaltenen Informationen, aber auch die Innenseiten des Eisens vollständig. Diese heilige Handlung musste natürlich richtig kontrolliert werden (Ehre sei dem großen Deming ), gemessen und geprüft werden und für immer geprüft werden. Amen. Aber sofort ging etwas schief und falsch ...

Der Kampf um freie Meinungsäußerung


Ziemlich schnell verwandelte sich die Softwareentwicklung in algorithmische Graphomanie und Nymphomanie und für viel Geld für Kunden. Die Situation mit der Schaffung umfangreicher Softwareprodukte und Entwicklergemeinschaften um sie herum ähnelte der Beteiligung an religiösen Sekten aufgrund der Liebe zur technischen Selbstquälerei.

Die Bewegung freier Software reagierte schnell auf diese Verzerrungen des gesunden Menschenverstandes, dank derer wir jetzt in unserer Freizeit und im Geschäft kostenlose, qualitativ hochwertige und sehr nützliche Tools haben, an die wir sehr gewöhnt sind: Linux , MySQL , PHP und viele, viele andere.

Sehr gut, der Wert von freier Software ist im Zusammenhang mit dem Verbot der Verwendung von Android in Huawei-Geräten sichtbar. Und die aktive Entwicklung moderner Kryptowährungen bringt Treibstoff ins Feuer - Kryptobanken haben sich ernsthaft an die Arbeit gemacht und ziehen den Boden unter den Füßen traditioneller Institutionen und Technologien hervor.

Punks in der Entwicklung - Scripting


Dies bedeutet nicht, dass sich die Software als schlecht herausgestellt hat. Es wurde nur für eine lange Zeit erstellt, dann wurde es für eine lange Zeit getestet, und dann erhielten sie, was bereits veraltet war. Der Prozess funktioniert jedoch. Evolution: In Millionen von Arbeitsstunden werden Insekten verschwinden und Eidechsen und Kakerlaken bleiben anstelle von Dinosauriern, aber ... hartnäckig. Die Leute verbrachten viel Zeit damit, Systemaufgaben auf niedriger Ebene zu lösen und dabei die Geschäftsziele zu vergessen. Die Situation wurde durch die Überzeugung verschärft, dass je mehr Programmierer, desto schneller Sie ein System schreiben können. Der Wunsch, den Code für den Ruhm seiner Verwendung für Unternehmen loszuwerden, erzeugte zunächst wilden Durst und dann die Implementierung einer ganzen Klasse von Programmiersprachen, deren Ziele Sicherheit, Entwicklungsgeschwindigkeit, Einfachheit und Prägnanz waren: Python, PHP, Ruby, Lua, JavaScript. Trotz der theoretischen Einschränkungen: Das Fehlen statischer Typisierung, das Vorhandensein eines Laufzeit- und Garbage Collectors, völlige Faulheit und semantisches Aushöhlen entwickeln sich Technologien aktiv und bringen viel mehr Nutzen als Schaden.

Undichte Konzepte


Es wurde schnell klar, dass es möglich war, mit einem Stock zu unterrichten, aber Code zu schreiben, der ein Geschäftsproblem löst, das für andere Vertreter von Homo Sapiens einfach und verständlich war, war viel schwieriger und Sie möchten es wirklich selbst tun. Um diese einfache Idee zu äußern, hätten sie den Heiligen Dijkstra fast lebendig verbrannt. Es geht darum, wie man Bücher schreibt (man braucht einen großen Wunsch zu lernen und zum Ziel zu gelangen = Talent) und Beiträge auf Facebook schreibt (man braucht einen Account). Aber weit davon entfernt hat jeder dieses Verständnis erhalten, denn es ist einfacher, die Grammatik einer Sprache zu lernen, als spannende Dinge darüber zu schreiben, und daher wird immer noch heftig diskutiert:

  1. Welche Programmiersprache ist besser?
  2. Welches Betriebssystem ist korrekter?
  3. Schreiben Sie Tests vor, während oder nach der Heirat
  4. welche Füße morgens aufstehen usw.

Die traditionelle Konfrontation zwischen Schriftstellern und Bibliothekaren, Musikkritikern und Bühnenstars, Firmengründern und mittlerem Management :-)

In den Händen eines echten Ingenieurs ist der Code gut, unterstützt und fehlerfrei - in jeder Programmiersprache. Und es ist kurzsichtig, nach einer Entwicklungsumgebung zu suchen, in der Sie Studenten in den Urlaub fahren können, Mädchen, Bier und PS4 und etwas dafür erwarten können.

Es stellte sich heraus, dass das Leben so vielfältig ist und die Aufgaben, die mit Hilfe der Programmierung gelöst werden, manchmal so originell sind, dass eine traditionelle Konzeption einfach nicht direkt funktioniert oder zu bewusstseinsbrechenden „löchrigen Konzepten“ führt:

  1. Objektorientierte Programmierung funktioniert gut in Spielen und Grafiksystemen, aber in Python wird sie als Konzept, das die Freiheit einschränkt, stark abgelehnt. Ich erinnere mich, dass ich in PHP die Tools-Klasse gesehen habe, die die Utils-Klasse erweitert
  2. Die funktionale Programmierung leistet hervorragende Arbeit bei der Verarbeitung von Datenströmen und Bordsteinen (Apache Spark), aber Haskell ist nie gestartet, da das Leben keine mathematische Abstraktion ist, sondern häufig eine Reihe von Streu- und Lachkrücken
  3. Skripte in PHP, Python und Ruby verbinden verschiedene Technologien und Anwendungskomponenten perfekt miteinander. In Lua beschreiben sie Skripte in Spielen, aber es ist besser, hoch geladene Netzwerkdienste darauf zu schreiben, um sich direkt in den Kopf zu schießen. Python denkt nicht einmal daran, Multithreading hinzuzufügen.

Im Allgemeinen stellte sich heraus, dass die Lösung aller Probleme mit einem Werkzeug (Java Spring), gelinde gesagt, ineffizient ist und es besser ist, das richtige Werkzeug für die Aufgabe auszuwählen, als die Nägel mit einem Mikroskop zu hämmern. Aber leider lernen sie nicht gern ...

Schwierigkeit ist der Hauptfeind


Mit dem Wachstum der Systeme wurde immer deutlicher, dass einige Mitarbeiter leicht lernen, fortgeschrittene Konzepte, Sprachen und Technologien implementieren, viel lesen und einige, leider leider die Mehrheit, offen gesagt keine Zeit haben und anfangen, fortgeschrittene Kollegen zu verstehen. Effektiv geschriebene Module, die zunächst für die Mehrheit und dann für die Autoren selbst unverständlich sind, beginnen, ihr eigenes Leben zu führen und zu sterben, normalerweise in herrlicher Isolation. Es wurde klar, dass das gesamte Team Technologie besitzen sollte, sonst kann Technologie mehr schaden als nützen.

Eine ausgezeichnete, kühne, anständige Programmiersprache mit einer steilen Einstiegskurve, beispielsweise gutaussehendem Rust , kann ein Minus und ein Risiko für das Projekt sein.

Die Leute sind schön


Wie viele Jahrzehnte haben Programmiersprachen und -technologien in die gleiche Richtung entwickelt:

  1. Effizienter und schneller Code in der Nähe der Hardware. Ein undichter, schlecht durchdachter Compiler, der einen Entwickler ersetzt. C / C ++.
  2. Müllsammler, sichere Sprache. Leistungsstarke Konzepte. Ziemlich strenge Eingabe. Aber wir verlieren an Geschwindigkeit und verbrauchen RAM. Manchmal schreiben wir unter den Müllsammler. Java, C #, Swift (ja, ich kenne mich mit RC aus).
  3. Sehr einfache Sprache, schneller Einstieg, schnelle Entwicklung. Aber das Fehlen der Eingabe (Risiken) und der Müllsammler. PHP, Python, Ruby.

Und dann taucht eine großartige Idee auf: „Leute, wir gehen vom Wort nicht den richtigen Weg; und machen wir den Compiler schlauer? “ Rust ist geboren, der fast alle Wünsche erfüllt hat:

  • Effizienter und schneller Code, keine Abstraktionen
  • Intelligenter Compiler, der den Entwickler vor schrecklichen Fehlern beim Arbeiten mit Speicher schützt
  • Kein Müllsammler, Carl. ER IST NICHT DA!

Ehre sei dem Geist und der Schönheit!



Webentwicklung - wie könnte das überhaupt passieren?


Nachdem die Menschheit die nötige Erfahrung gesammelt und Unebenheiten aufgefüllt hatte, wurde ihr plötzlich klar, dass, wenn Sie das einfachste Textlayout-Tool, eine Sprache , die in einer Nacht erfunden wurde, um Webseiten-Schaltflächen zu automatisieren , die Regeln für die Zuweisung von Farben und sorgfältig, ohne plötzliche Bewegungen, alle Anweisungen befolgen und alles über das Internet abrufen. C. Mit PHP, mit dessen Wissen Kinder bereits geboren sind, können Sie die stärksten technologischen Synergien erzielen und hier und jetzt schnell geschäftliche Probleme lösen:

  1. Rendern Sie effiziente Schnittstellen mit HTML / CSS. Ja, sie waren nicht immer perfekt, aber sie sind effektiv und besonders jetzt extrem mächtig.
  2. Speichern Sie Anwendungsdaten sicher in MySQL
  3. Surfen Sie im Internet über Linux
  4. Übertragen Sie Nachrichten zwischen Komponenten mithilfe ausgereifter Architekturmuster wie Warteschlangen

Tatsächlich versteht niemand, warum diese Revolution stattgefunden hat, aber die Tatsache bleibt bestehen - die Synergie einfacher Technologien hat eine Atombombe erzeugt. Lassen Sie PHP weiterhin überraschen, lange ausgefeilte Konzepte aus anderen Sprachen auszuleihen, und lassen Sie Python niemals Multithreading implementieren - es sind Skripte, nämlich Einfachheit, Prägnanz und ein hohes Maß an Abstraktionen, die es ermöglicht haben, die Programmierung zu revolutionieren und Geschäftsprobleme schnell, einfach und effizient in 3 zu lösen -5 Codezeilen.

Synergie geht weiter - BigData und maschinelles Lernen


Aus den oben genannten Gründen startete Python für die Verarbeitung und Analyse von Daten. Sie saßen Mathematiker, schrieben über ihr "schreckliches", schwach getipptes Enten-Schreibwerkzeug , das beängstigend in die Hände zu nehmen ist - es gibt keinen Compiler, wow, was für ein Problem! Sie schrieben, schrieben und ... schrieben eine Reihe von Bibliotheken der höchsten Klasse:

  1. Numpy - Hochgeschwindigkeitsverarbeitung von mehrdimensionalen Arrays, dies ist und wird in PHP nicht erwartet
  2. Pandas - Leistungsstarke relationale Datenverarbeitung im Speicher
  3. Matplotlib , Seaborn - Großartige Tools zur Datenvisualisierung

Ich habe die Freeware-Distribution Anaconda heruntergeladen, die Pakete installiert und fertig, ein BigDat erstellt, Neuronen gestartet und die Zukunft vorhergesagt! Kostenlos.

Dies sind jedoch immer noch Blumen. Berries ist eine sehr beliebte standardisierte interaktive Entwicklungs- und Kommunikationsumgebung - Jupiter Notebook . Der erste Eindruck ist Regression. Gibt es eine leistungsstarke IDE? Aber dann kommt das Verständnis - das ist ein großer Schritt nach vorne. Die Rolle von Jupiter entspricht in etwa der der Webentwicklung zum Zeitpunkt ihres Erscheinens: schnelle Ergebnisse, schnelle Kommunikation, geschäftskritische Fähigkeiten und offene Standards.

Web Studio und Web Programmer - Atmosphäre


Sie fragen, warum schreibe ich das alles? Tatsache ist, dass Sie, ohne in die Atmosphäre der Webentwicklung einzutauchen, nicht sehen können, wie Sie die Qualität beim Erstellen von Webanwendungen am besten kontrollieren können. Ohne sich in diesen Geist zu verlieben, können Sie im Web keinen Erfolg haben. Standard- und klassische Ansätze funktionieren hier nicht und hier ist der Grund:

  1. Im Gegensatz zur Welt von C, C ++, in der es üblich ist, 1-2 Releases pro Jahr herauszugeben, werden sie hier einmal pro Woche veröffentlicht, d. H. Die Entwicklung erfolgt bei superleichten Geschwindigkeiten
  2. Anders als in der Welt von C # und Java, in der es üblich ist, sich auf objektorientierte Programmierung einzulassen und alles mit Unit- und Integrationstests abzudecken, gibt es häufig so komplexe und nicht standardmäßige Konzepte und Aufgaben, dass ein 10-Zeilen-Skript eine Aufgabe schneller und schöner lösen kann als ein 10-Klassen-Framework. Das Testen von Layouts und Skripten ist leider automatisch sehr schwierig und teuer, daher werden sie oft mit den Augen und an Benutzern getestet :-)
  3. Anders als in der Welt der funktionalen Programmierung und der Schönheit des funktionalen Ausdrucks einer Aufgabe werden Lösungsansätze hier im wahrsten Sinne des Wortes durch einen Esel ausgedrückt, und dies ist gerechtfertigt - die wirtschaftliche Machbarkeit eines schrecklichen prozeduralen Skripts, das Sie wegwerfen und ein neues schreiben können (und so zehnmal).
  4. Im Gegensatz zu herkömmlicher Software werden hier Ideen schnell in Code implementiert, überprüft, verworfen und besser ausgewählt. 90% des Codes - stirbt, 10% - leben und begeistern Kunden. Es ist besser, hier und jetzt zuverlässig funktionierende und verständliche 10 Zeilen zu haben, als 1000 akademische Zeilen irgendwo in Funktionen und Klassen mit undefinierter Heiligkeit und Abdeckung durch Autotests.

Aber die Hauptsache sind die Menschen. Unter Webentwicklern sind sie etwas Besonderes. Sie sind nicht der Meinung, dass sie keinen Code schreiben möchten, sondern sie hassen ihn. Das Ziel der Bewunderung für den Webentwickler ist die Geschwindigkeit, mit der das Problem gelöst wird. Wenn zwischen zwei Zeilen PHP-Code und einem Rahmen von 20 Klassen gewählt werden kann, wird die Wahl auf eine sexuellere Lösung mit ihrem Lakonismus gerichtet sein. Wenn Sie wählen können, ob Sie Code schreiben oder nicht, wählt ein professioneller Webprogrammierer den ersten und verbringt mehr Zeit mit dem Mädchen, zum Beispiel im Lesesaal der Bibliothek, um das alte indische Epos zu studieren, und der Neuling lernt den zweiten, bis er merkt, dass je mehr Code, Je mehr Fehler darin enthalten sein können, und in Autotests zum Fehlercode gibt es noch mehr. Daher ist es besser, 5 Zeilen zu schreiben und diese schnell mit den Augen zu überprüfen, als das Erscheinungsbild der Qualität zu erzeugen und Fehler wochenlang zu beheben :-)

So verwalten Sie die Qualität von Webprojekten


Zu diesem Zeitpunkt haben Sie höchstwahrscheinlich bereits gelernt, dass die Webentwicklung ein spezieller, neuer und sehr stürmischer Programmierbereich ist, der mit Ingenieuren gefüllt ist, die Code hassen und den brennenden Wunsch haben, Probleme so schnell wie möglich und mithilfe von vorgefertigten und einfachen Tools zu lösen . Aus diesem Grund entwickeln sich Webentwickler häufig zu Systemadministratoren, die mehr verdienen als arbeiten möchten. Und ja, eine andere Vereinigung, ein Webentwickler ist eher wie ein Nerd mit einer Waffe als ein Samurai 8 Dan mit einem Schwert, Luftschlangen und voller Knöchel. Wetten abschließen, wer wird den Straßenkampf OHNE die Regeln gewinnen?

Aber das ist nur die halbe Miete. Geschäftskunden, die erkannt haben, dass die Verwendung der Webentwicklung komplexe Probleme schnell lösen kann: Erstellen Sie in 1 Woche einen dynamischen Online-Shop mit CRM-Verbindung und integrierter Suche nach einem Produktkatalog. Wenn Sie die Hälfte der Box-Funktionalität neu erstellen, können Sie selbst hochwertige Bücher schreiben Webentwicklung, von der Deming wahrscheinlich ständig auf einen Spieß in der Hölle rollt. Hier sind ihre wichtigsten Punkte, die die Grundlagen der klassischen Qualitätssicherung erschüttern:

  1. Die Bypass-Geschwindigkeit der Wettbewerber ist wichtiger als die Qualität. Wenn das Webprojekt startet und herumrollt (1 von 10 oder weniger), können Sie es „richtig“ umschreiben, aber seltsamerweise schreibt niemand sie neu und sie leben jahrelang oft erfolgreich und bequem.
  2. Das Projekt ist für die Aktion gemacht, einmalige und interne Qualität kann mit gutem Gewissen vergessen werden. Die Wahrscheinlichkeit, dass jemand später in den Code eintritt, beträgt 0,00001% (ich bin in solche Projekte eingestiegen; am Silvesterabend können sie wieder populär werden).
  3. Kunden möchten keine Autotests schreiben, die die Entwicklungskosten um das Zweifache erhöhen und die Architektur von Klassen in abstrakte und herausragende Konzepte aufblähen. Aber manchmal stimmen sie für Bibliotheken und mit hoher Wahrscheinlichkeit für die Wiederverwendung überein.
  4. Kunden sind bereit, beim Testen des Websystems zu helfen, und stellen häufig fest (leider gibt es Ausnahmen), dass es mit solchen Entwicklungsperioden (4 Monate für das gesamte schlüsselfertige Projekt) und dem Kampf gegen Selbsttests und Code-Inflation auf Vertragsebene unmöglich ist, die gleiche Qualität aller Systemkomponenten zu erreichen .
  5. TK ist nicht erforderlich, da es sich ständig ändert und veraltet ist und Sie eine Dokumentationsabteilung benötigen, um es zu aktualisieren. Einfacher im laufenden Betrieb zu erstellen, die Ergebnisse anzuzeigen und das Agile-Rad zu drehen.
  6. Narrenarbeit liebt

Um dies zu verstehen, fliegen Qualitätsspezialisten entweder mit dem Drachen davon und kehren nicht mehr zurück, entsetzt über das Geschehen, oder akzeptieren die Werte der Webentwicklung, dringen in sie ein und bauen so etwas auf:

  1. Die Ansätze, die beim Entwerfen, Entwickeln und Testen verwendet werden, sollten nicht religiös auf Glauben beruhen. Es ist wichtig, Thomas zu werden. Sie müssen also Autotests schreiben, dann müssen Sie. Wer braucht das schon? Nachweis der Wirtschaftlichkeit. Warum Autotests zu einer Visitenkarten-Site, wenn Sie alles schnell mit Ihren Augen überprüfen können? Warum sollten Sie Scheinobjekte in das von Ihnen verwendete Framework schreiben, wenn es Tonnen von Code generiert, der Fehler enthalten kann und der begleitet werden muss? Ist es nicht einfacher, 10 Zeilen klaren Codes ohne DI zu schreiben?
  2. Die Schätzung der Entwicklungszeit eines Webprojekts mit 3-5 Tagen für das Design ist streng genommen unmöglich. Daher wird die Bewertung dem ähnlichsten Webprojekt entnommen und mit 666 multipliziert
  3. Manchmal, wenn es wirtschaftlich machbar ist, müssen Sie kritische Risiken am Prototyp beseitigen und vorbeugende Stresstests durchführen
  4. Es ist wichtig zu überprüfen, ob vorgefertigte Tools, Frameworks und Technologien verwendet werden, und es besteht ein klares Verständnis, dass je mehr Code, desto mehr Fehler behoben werden müssen
  5. Es ist wichtig, sehr wichtig, die intensivste Kommunikation bereitzustellen, die es Ihnen ermöglicht, vollständig in das Websystem einzutauchen, seine Bewegung und Architektur zu spüren und den Effekt zu erzeugen, dass "viele Augen auf den Code schauen". Denken Sie daran, dass es unter Linux, einem erfolgreichen Betriebssystem, lange Zeit keine automatisierten Tests gab, und wenn Test-Driven Design sofort verfügbar wäre, würde es wahrscheinlich immer noch ausgeführt werden. Andererseits verfügte Linux sofort über ein umfassendes Code-Audit und ein zentrales Änderungsakzeptanzsystem. Du musst es gut fühlen.
  6. In solchen Projekten können Sie die Risiken erheblich reduzieren, wenn Sie erfahrene Ingenieure zusammenbringen, um eine Architektur auf niedriger Ebene zu planen und über die Notwendigkeit eines Prototyps zu entscheiden. Sobald das Gefühl besteht, dass die Anforderungen und das Budget zunehmen, um in Schwierigkeiten zu geraten, müssen Sie ein paar Selbstmordtricks machen, Blut auf mehrere Wände und agile Bretter streuen. Opfer für den Erfolg des Projekts - was könnte cooler sein?



Somit kann die Qualität des Websystems immer noch effektiv verwaltet werden, wenn Sie die Angelegenheit mit Bedacht und Genügsamkeit angehen, ohne religiöse technische Dogmen auf den Glauben zu setzen, alles zu überprüfen und nach Einfachheit zu streben und die Menge an Code und Bibliotheken zu minimieren, die von oben erstellt wurden. Die schnelle technische Kreativität in Teams zu unterdrücken und sie auf die Suche nach Einfachheit, Prägnanz, geringen Kosten und Transparenz auszurichten, hilft sehr, insbesondere bei der Erstellung komplexer und nicht standardmäßiger Websysteme.

Aber das Schwierigste haben wir leider hinter den Kulissen gelassen. Am schwierigsten ist es zu lernen, wie man die Betonung des Rasierers ausbalanciert. Sie, ein Webentwickler, stehen ohne Rüstung in eng anliegenden Familienmitgliedern und einem Hemd mit der Aufschrift „Agile“ und einer sich drehenden Schlinge in der Hand vor dem Riesen. Und wenn Sie ihn auf die Stirn schlagen - Ihr Projekt. Aber verpassen Sie es ein paar Mal hintereinander - Sie werden von Samurai-Trupps 8 Dan mit einer guten Dehnung und voller Knöchel mit Füßen getreten, die beim Essen Ihrer Leiche mit Knochen spucken und lachen: „Ich wollte ein Problem mit 50 Klassen und 7 Frameworks in PHP lösen, verrückt“ . Im Allgemeinen nicht verpassen, Schusswaffen tragen, Webentwicklung lernen und ... viel Glück!

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


All Articles