JavaRush /Java-Blog /Random-DE /Ein Tag im Leben eines Java-Entwicklers. Teil 1
alex8894
Level 34
Санкт-Петербург

Ein Tag im Leben eines Java-Entwicklers. Teil 1

Veröffentlicht in der Gruppe Random-DE
Grüße, liebe Kolleginnen und Kollegen! Nach der Veröffentlichung von „ 20+ Years Later “ forderten einige Leser eine Fortsetzung der Geschichte. Worüber könnte ich noch reden? Es scheint, dass ich das Thema, aus einem „bärtigen Enikey“ einen Java-Entwickler zu machen, vollständig abgedeckt habe. Einige Schlussfolgerungen werden frühestens nach einem Jahr Arbeit möglich sein. Und dann beschloss ich, einfach zu beschreiben, wie mein typischer Arbeitstag verläuft. Unter dem Motto „Ein Tag im Leben eines Java-Entwicklers“. Als ich jung war, liebte ich es zu schlafen. Als ich ein Enikey war, kam es vor, dass ich bis Mittag schlief und um drei oder sogar um halb drei zur Arbeit kam. Jedes Mal, wenn ich auf die regelmäßigen Aufforderungen des Managements reagierte, „wie alle anderen zu kommen“, also um 9 Uhr morgens, jedes Mal auf die gleiche Weise – hieß es, ich müsse am Computer arbeiten, wenn ich niemanden störe. Es rollte. Aber mit zunehmendem Alter hat sich offenbar etwas im Körper verändert, und jetzt bin ich eher eine „Lerche“ als eine „Nachteule“. Deshalb komme ich jetzt als Erster (oder als einer der Ersten) zur Arbeit. Heute bin ich der Erste und habe eine halbe oder eine Stunde Ruhe, bis andere, weniger „Frühaufsteher“ aufholen. Es ist Zeit, heute zu planen. Ich entwickle unter Linux Mint. Ich mag den Start-Button, schlicht und elegant, nicht wie diese Kacheln. Der Cinnamon-Desktop-Manager ist nicht mit visuellen Effekten überladen, aber in Sachen Politur ist er MacOS etwas unterlegen, was in dieser Hinsicht natürlich der Standard ist. Der Vergleich ist einfach: Auf dem Nebentisch steht ein Mac, dahinter arbeitet ein UX-Designer. Auch am Betriebssystem selbst kann ich mich kaum beschweren: Es läuft schnell und sehr stabil, ich habe es in dieser Zeit nur dreimal neu gestartet – als ich den Rechner während der langen Ferien ausgeschaltet habe. Tatsächlich lädt es auch fast sofort, selbst der Begrüßungsbildschirm erscheint nicht, da alle Computer der Entwickler mit SSD-Laufwerken ausgestattet sind. Als erstes öffne ich den Thunderbird-E-Mail-Client, dort kommen Briefe mit Informationen über Änderungen an den Seiten, die mich im Wiki interessieren (es gibt Einstellungen und Spezifikationen), aber Hauptsache sind Benachrichtigungen vom Tracker. Was ist uns Interessantes passiert? Oh, sie sind vom Testen einer Funktion zurückgekehrt, die ich gestern abgeschlossen habe. Es sieht so aus, als hätten sie einen Fehler gefunden. Nun ja, das ist es. Ich muss das Problem so schnell wie möglich beheben. Vielleicht habe ich Zeit, bevor der Tester eintrifft, und er wird sich die Korrekturen sofort ansehen, bevor er sich an eine noch „unvollendete Konstruktion“ macht. Das ist das Erste für heute. Hier geht es also um meine „unvollendete Konstruktion“, die ich im letzten Sprint geschrieben habe. Es scheint, dass er dieses Mal allen Kreisen der Hölle erfolgreich widerstanden hat Testphasen und heute muss es wahrscheinlich in den Hauptzweig des Projekts integriert werden. Aber das kommt später, nach dem Mittagessen. Auch heute noch müssen wir in DevOps arbeiten und den Stand der Branche aktualisieren, in der gerade entwickelt wird, wir müssen neue Funktionen zeigen. „Mit großer Macht geht große Verantwortung einher“, zeigt der Befehl sudo eine Warnung an, bevor Root-Rechte gewährt werden. In meiner etwas lockeren Übersetzung klingt dieser Satz so: „Je mehr du tun kannst, desto mehr musst du tun.“ Es ist daher nicht verwunderlich, dass ich, der ich den „Verwaltungsstempel“ trage, oft solche „Grenz“-Aufgaben bekomme. Nun, fangen wir an. Gestern habe ich an einer anderen Funktion gearbeitet und jetzt muss ich zu dem Zweig zurückkehren, in dem der Fehler liegt. Windows-Benutzer lieben normalerweise alle Arten von grafischen Shells und verwenden Turtle (TortoiseGit), aber für mich ist es über die Befehlszeile einfacher und vertrauter. Generell ist die Kommandozeile unter Linux ein kleines Meisterwerk, unglaublich durchdacht und leistungsstark, insbesondere in Kombination mit Midnight Commander. Wir haben gewechselt, jetzt müssen wir das Projekt neu aufbauen. Ich gebe den Befehl gradle clean ass ein. Ich weiß nicht, ob dieser Befehl ursprünglich von den Gradle-Autoren gedacht war oder zufällig erstellt wurde, aber er bereinigt und baut das Projekt einfach neu auf (ass ist die Abkürzung für Assemble und nicht das, was mir zuerst in den Sinn kommt). Auf Javarush wird Gradle nur kurz erwähnt, als „und andere Build-Systeme“. Ja, Gradle hat gegenüber Maven keine Vorteile beim Zusammenstellen von Bildungsprojekten. Die meisten Tutorials und Anleitungen im Internet verwenden ebenfalls Maven. Die Entstehung und wachsende Beliebtheit von Gradle ist wahrscheinlich auf die rasch zunehmende Komplexität moderner Bauprojekte zurückzuführen. Das Projekt, an dem ich beteiligt bin, besteht aus mehreren Dutzend Komponenten, wobei das Backend in Java, das Frontend in Javascript und die Tests in Python geschrieben sind. Heutzutage ist das Zusammenstellen eines Javascript-Projekts übrigens ein separater und völlig komplizierter Prozess, der sogar einen Namen hat – Web Workflow, und der Abhängigkeitsbaum ist dort fast so weitläufig wie in Java. Nun, zumindest müssen Sie keine Python-Komponenten zusammenbauen, also fast gar nicht ... Nach dem Zusammenbau und dem Start (was ebenfalls nicht trivial ist) müssen Sie eine gesamte Umgebung mit einer relationalen Datenbank erstellen und mit Testdaten initialisieren und eine NoSql-Datenbank, eine Nachrichtenwarteschlange und einen In-Memory-Cache. Dann muss das alles noch einmal zusammengestellt und auf dem CI-Server ausgeführt und dann mit Ansible bereitgestellt werden. Gleichzeitig wird die Entwicklung hauptsächlich unter Windows durchgeführt, und „Combat“, Demo-, Test- und andere Pre-Prod-Server laufen selbstverständlich unter Linux. Ich kann mir nicht wirklich vorstellen, wie es möglich ist, solche Dinge in Maven zu implementieren, aber ganz gut in Gradle. Tatsache ist, dass die Gradle-Build-Datei in Groovy geschrieben ist. Es ist eine sehr lustige Sprache, man sagt, es sei eine Kreuzung zwischen Java und Ruby, aber ich kenne Ruby nicht, aber ich kenne ein wenig Javascript, und viele Konstrukte daraus funktionieren auch. Die Ersteller von Gradle haben eine solche API implementiert, dass die Build-Datei in einfachen Fällen ziemlich deklarativ aussieht (und meiner Meinung nach ist sie übrigens sogar einfacher zu lesen als Mavens pom.xml), aber wenn Sie etwas Komplexeres benötigen, all diese Deklarativität wird verworfen, Variablen, Funktionen, Klassen erscheinen – kurz gesagt, alle Funktionen von Groovy, die übrigens auf derselben JVM wie der Java-Code kompiliert und ausgeführt werden können. Die Assembly selbst ist, wie bereits erwähnt, plattformübergreifend, interagiert jedoch mit der Umgebung und muss daher auch unter Windows überprüft werden. Dazu habe ich Windows auf einer virtuellen Maschine installiert. KVM schreitet rasant voran und bei richtiger Konfiguration des Gastsystems ist die Virtualisierung nahezu unsichtbar. Ja, Spice unterstützt jetzt zwei Monitore, Bildschirmauflösungen werden automatisch angepasst und paravirtualisierte Gerätetreiber verursachen nahezu keinen Leistungsverlust. Manchmal denke ich, dass ich keinen großen Unterschied zwischen den beiden Plattformen spüre. Dennoch ist Java ein erstaunliches Werkzeug, das zwei völlig unterschiedliche und manchmal sogar feindselige Welten näher zusammengebracht hat – die Welt der proprietären Software, Cracks, Keygens und Serien,verkörpert durch Windows und die Welt der offenen Systeme Linux. Also, das Projekt ist zusammengestellt, wir starten es (natürlich auch über Gradle) und werfen einen Blick darauf. Nun ja, schade um meinen grauen Bart, ich habe eine der Anforderungen der Produktion nicht umgesetzt, hier ist sie schwarz auf weiß im Wiki geschrieben. Bei meinem vorherigen Job war ich regelmäßig mit dieser Situation konfrontiert und war immer verwirrt darüber, wie der Entwickler einen ganzen Absatz der Spezifikation übersehen konnte. Ja, ganz einfach! Ich dachte darüber nach, konzentrierte mich auf ein anderes Problem – und da war ein Fehler. Erst hier, dank mehrerer Testphasen, wird sie gefangen, aber an der vorherigen Stelle – na ja, was auch immer passiert ist. Glücklicherweise wird die Arbeit hier nicht lange dauern. Ich bringe Idea Ultimate auf den Markt, das übrigens eines der wenigen kostenpflichtigen Produkte ist, die in der Entwicklung eingesetzt werden. Prinzipiell kommt man mit der Community Edition zurecht, an die guten Sachen, zum Beispiel die Integration mit Spring, gewöhnt man sich aber schnell. Sie benötigen außerdem ein paar Terminals für Protokolle, einen Browser für das Frontend und ein Wiki, ein weiteres Terminal mit einer Befehlszeile, alles bewegt sich, blinkt ... Generell beginnt das Bild auf den Bildschirmen zweier Monitore beängstigend zu werden Erscheinungsbild, wie es in Low-Budget-Filmen gezeigt wird und die harte Arbeit eines Hackers darstellt. Aber das sind immer noch Kleinigkeiten, aber ich erinnere mich, als ich einen Failover-Cluster erstellen und konfigurieren musste – sieben Terminalfenster, etwas anderes in der Ecke des Bildschirms, in allen Fenstern – einige Zahlen und Bilder aus ASCII-Grafiken … Aber Ich schweife ein wenig von der Arbeit ab und die Zeit vergeht. ... Puh, nun, es scheint, als hätte ich alles getan, was ich brauchte, und anscheinend habe ich nichts kaputt gemacht, was ich zuvor getan hatte. Ich füge der Funktion einen Kommentar hinzu und sende den Thread zum Testen. Ich versuche, detaillierter zu beschreiben, was ich genau getan oder geändert habe, um die Arbeit des Testers zu vereinfachen. Bei meinem vorherigen Job habe ich solche Erklärungen wirklich vermisst, als ich von Entwicklern erhaltene Verbesserungen überprüfen musste. Während sich der Morgen sanft in den Tag verwandelte, zogen die Menschen nach und nach an. Bald wird es ein Stand-up-Meeting geben, oder unserer Meinung nach ein Stand-up. Eigentlich sollte damit der Arbeitstag beginnen, und für die meisten „Nachteulen“ ist das fast der Fall. Das Aufstehen dient als Grenze dafür, so spät wie möglich zur Arbeit zu kommen; daher wird dringend davon abgeraten, zu spät zu kommen. Nun, für mich ist es wie eine Pause. Also, lasst uns alle aufstehen. Bei einem Stand-Up erzählen wie üblich die Entwickler, was sie gestern gemacht haben und was sie heute vorhaben, die Tester erzählen uns, was sie getestet haben und mit welchen Ergebnissen, und die Chefs, es ist klar, was sie als nächstes vorhaben, welche Probleme aufgetreten sind und worauf besonders geachtet werden muss. Unser Team ist geografisch verteilt und seine volle Besetzung ist nur im Stand-up-Modus (natürlich im Fernsehen) und vielleicht auch ein paar Mal im Jahr bei einer allgemeinen Firmenveranstaltung zu sehen. Im Stand-up kommt mir oft der Gedanke, dass es eigentlich erfunden wurde, um Entwickler davon abzuhalten, sich zu entspannen. Wenn Sie jeden Tag den Fortschritt Ihrer Arbeit nachweisen müssen und nicht in einem Papierbericht, den nur Ihr Chef liest, sondern vor Ihren Kollegen, werden Sie wohl oder übel versuchen, mehr zu tun, etwas zu besprechen haben. Natürlich gibt es „langfristige Bauprojekte“, bei denen man mehrere Tage hintereinander wiederholt: „Gestern habe ich das gemacht, und heute werde ich es weiter machen“, aber auch bei ihnen gibt es ständig kleine dringende Aufgaben eingeklemmt. Kurz gesagt, echt Ein Cowboy- Entwickler hat seinen Kollegen immer etwas zu sagen. Beim Stand-up wurde ich gebeten, meinen Stand schnell zu aktualisieren, also werde ich das jetzt tun. Wenn der Hauptzweig des Projekts veröffentlicht wird, wird das Update von den Administratoren vorgenommen, aber jetzt müssen wir eine Funktion veröffentlichen, die noch nicht fertig ist, und gleichzeitig werden unweigerlich einige Probleme auftreten, die die Administratoren nicht lösen können. Der Stand befindet sich in einem Rechenzentrum, der Zugriff darauf ist nur per SSH möglich, eine grafische Shell gibt es dort natürlich nicht – also nur die Kommandozeile, nur Hardcore! Das Update selbst ist automatisiert und verlief reibungslos, allerdings startet nach dem Update eine der Komponenten nicht. Ich schaue mir die Protokolle mit dem Befehl less an; der hat übrigens eine sehr praktische Funktion: Wenn man Umschalt-F drückt, wird ständig der aktuelle Inhalt der Datei angezeigt, was für Protokolle perfekt ist. Und was ist das... Seltsames? Vollständiger Bildschirm mit durch Kommas getrennten Fragezeichen. Zweiter Bildschirm, dritter, zehnter ... Wie viele davon gibt es? Oh, es ist vorbei, es war ein ziemlicher Stacktrace. Jemand hat eine SQL-Abfrage mit dem IN-Operator geschrieben, um die gewünschten Datensätze aus einer Liste auszuwählen, und für jedes Element der Liste einen Parameter erstellt. Alles funktionierte, bis die Liste mehr als 32767 Elemente enthielt, woraufhin der SQL-Server endgültig die Geduld verlor. Sie müssen hierzu einen Fehlerbericht verfassen, dieser hat jedoch nichts mit dem Problem einer nicht funktionierenden Komponente zu tun. Schauen wir weiter. Jetzt ist klar, dass die Migration der Datenbankstruktur auf die neue Version nicht durchgeführt wurde. Es scheint, dass der Autor des Features bei der Migration etwas geändert hat, und hier am Stand gab es die vorherige Version. Sie müssen Strukturänderungen manuell über das SQL Server-Konsolendienstprogramm rückgängig machen. Wie kann ich in DML einen Befehl schreiben, um ein Feld zu löschen? Index? Tische? Sieht so aus, als wäre es das. Ich habe die Komponente neu gestartet, die Migration verlief einwandfrei ... alles ist in Ordnung. Es ist Zeit zum Mittagessen, das Wetter ist heute übrigens großartig. „Der leuchtend gelbe Ball, der regungslos am Himmel hing und die Stadtbewohner so erschreckte, entpuppte sich als die Sonne.“ Fast der erste sonnige Tag des Jahres. Ich möchte gar nicht erst die Straße verlassen, aber ich muss – die Zeit der Verschmelzung naht. Fortsetzung folgt
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION