Ich wollte schon lange in die Entwicklung einsteigen, aber wie so oft glaubte ich nicht wirklich an mich. Ich glaubte, mein Zug sei schon lange weg, und die Köpfe waren nicht mehr diejenigen, die diesen schwierigen Beruf beherrschten. Zum Glück war ich überzeugt, außerdem gaben sie mir die Möglichkeit, mich zu beweisen, und machten ein Praktikum in der Entwicklungsabteilung. Es passierte so beiläufig und einfach, dass ich es zunächst nicht glauben konnte. Die ganze Zeit schien es mir, dass jetzt jeder endlich verstehen würde, dass ich ein Ignorant war und ihren Stift zum Abschied winken würde. Aber das passierte nicht, sie unterstützten mich weiterhin und ich versuchte mein Bestes, niemanden im Stich zu lassen.
Ich bin Praktikant in unserer Backend-Abteilung, die sich mit Tracking-Produkten befasst, und arbeite gleichzeitig in meiner eigenen Abteilung für technische Integration (seit 6 Monaten). Die Hauptsprache im Team ist Python . Ich habe ihm alleine beigebracht, ein Praktikum zu machen. Grundsätzlich natürlich zu Handbüchern und Videos im Internet.

Ich hatte eine kleine Basis - ich habe mehrere Trainingsprojekte in C geschrieben, aber im Allgemeinen kann ich nicht sagen, dass ich zumindest ein etwas erfahrener Programmierer war, als ich für ein Praktikum angenommen wurde. Auf dem Höhepunkt dieser bescheidenen Erfahrung möchte ich Ihnen einige Dinge erzählen, die ich am Anfang nicht oder kaum wusste.
Teamwork mit Git
Wenn jemand zu seinem ersten Praktikum kommt, stellt er sich vor, was Git ist (sonst wird er kaum genommen), aber er hat wenig Ahnung, wie er mit ihm in einem Team arbeitet. Wir haben alle auf einmal ein Konto auf GitHub erstellt und die erste Codezeile glücklich an die Hauptniederlassung übergeben, um uns wie echte Profis zu fühlen. Also: Dies ist nicht der beste Ansatz für große Projekte.
In der Teamentwicklung wird die Arbeit mit Git gemäß dem genehmigten Git-Flow ausgeführt . Zum Beispiel haben wir zwei Zweige: Entwickeln und Beherrschen. Niemand außer dem Teamleiter kann Code in die Hauptniederlassung hochladen, da das Team sicherstellen muss, dass dort Arbeitscode vorhanden ist, der die Produktion bei der Bereitstellung nicht zerstört. Die Verantwortung dafür liegt auf den Schultern des Teamleiters, und niemand möchte den Teamleiter verärgern.

Um solche Situationen zu vermeiden, gibt es eine Teamüberprüfung. Jeder Entwickler arbeitet an einer Aufgabe in seiner eigenen Niederlassung und stellt am Ende der Arbeit eine Zusammenführungsanforderung in die Entwicklungsniederlassung. Und der Teamleiter hat die Zusammenführungsanforderung bereits in der Hauptniederlassung abgelegt und ist für die Qualität des Codes vor seinem Eigentümer verantwortlich. Auf diese Weise wird die Reinheit des Codes garantiert, der in der Produktion landet, und das Risiko, etwas zu gießen, das die Arbeit des Projekts ruiniert, wird minimiert.
Imbiss: Wenn Sie sich besser auf die Teamarbeit vorbereiten möchten, informieren Sie sich über Git-Flow und fügen Sie Ihrem Haustierprojekt über Zweigstellen neue Commits hinzu.
Codearchitektur ist wichtig
Als ich zum Praktikum kam, erwartete ich, dass mir angesichts einiger kleiner Funktions- oder Komponententests gesagt wurde, was ich tun sollte, und ich würde unter der Aufsicht des Teams daran arbeiten.
Es stellte sich jedoch alles anders heraus. Nein, niemand hat mich angewiesen, etwas sehr Kompliziertes zu tun, aber mir wurde ein Miniprojekt (Meilenstein) für die Überwachung (Python + Prometheus + Grafana ) zugewiesen , das ich während meines Praktikums durchführen musste. Außerdem musste ich selbst über die Architektur nachdenken, das Projekt in Aufgaben zerlegen und es durch die Kanban-Phasen bewegen. Es war aufregend, aber sehr korrekt. Dieser Ansatz ermöglichte es meinem Kurator und mir, meine Probleme klar zu verstehen und sie zu beheben.
Um ehrlich zu sein, war meine erste Entscheidung erfolglos. Und der zweite auch. Ich habe zu große Aufgaben erledigt, sie mehrmals in den Rückstand zurückgeführt, eine erfolglose Architektur erstellt und konnte die Nuancen nicht berücksichtigen.

Im Moment wurde der größte Teil des Projekts jedoch bereits implementiert, und ich werde mir immer bewusster, wie sich mein Code auf den Rest des Projekts auswirkt. Es ist aufregend. Ich las mehrere Artikel über saubere Architektur, studierte abstrakte Klassen, lernte zuerst, wie man eine Schnittstelle plant und erst dann mit der Implementierung beginne. Ich kann nicht sagen, dass ich alles herausgefunden habe, aber ich habe den Satz "Jedes Problem kann durch Einführung einer zusätzlichen Abstraktionsebene gelöst werden, mit Ausnahme des Problems einer übermäßigen Anzahl von Abstraktionsebenen" definitiv verstanden. Und ich habe auch gelernt, meine Stärke richtig einzuschätzen (aber das ist nicht richtig).
: . , , . , Netflix, . , .
In unserem Unternehmen werden alle Dienstleistungen in Containern angeboten. Dementsprechend sollte jeder Entwickler verstehen, wie derselbe Docker funktioniert , wie eine einfache Docker- Datei geschrieben oder seine Dienste über Docker Compose erhöht werden .
Für eine Person, die nur für sich selbst und auf ihrem Computer schreibt, ist es schwer zu verstehen, warum eine Containerisierung erforderlich ist. Bei großen Projekten muss jedoch sichergestellt werden, dass der Code unabhängig von der Umgebung funktioniert. Wenig später, wenn Sie die Grundlagen herausfinden, wird klar, wie bequem es ist. Sie müssen keine Abhängigkeiten in Ihrer Umgebung installieren, es ist kein langer und schwieriger Projektstart erforderlich. Sie können Tests ausführen oder Pro und Dev trennen, indem Sie nur einige Konfigurationen einmal schreiben.

Der gleiche Rat kann die Arbeit mit der IDE beinhalten. Bevor ich mit dem Praktikum anfing, schrieb ich alle meine Programme ausschließlich in Emacs, aber als ich anfing zu arbeiten, entschied ich mich, auf ein fortgeschritteneres Tool umzusteigen, und am Ende bereute ich es nicht. An einigen Stellen bevorzuge ich immer noch die Verwendung der Konsole (zum Beispiel ist es bequemer, alle Container wegzulassen
docker stop $(docker ps -qa)), aber ansonsten bin ich der Git-GUI und den Tipps in PyCharm dankbar .
Fazit: Lesen Sie mehr über Docker. Versuchen Sie, Ihren Code in einem Container auszuführen. Probieren Sie eine IDE für Ihre Sprache aus und sehen Sie, was sie für Sie tun kann.
Dokumentation und Tests sind genauso wichtig wie Code
Mein Kurator hat einmal gesagt, dass Tests die Dokumentation des zweiten Entwicklers sind. Und das ist sehr richtig, denn wenn die eigentliche Dokumentation fehlt, können Sie jederzeit in Tests gehen und sehen, welches Verhalten erwartet wird.
Vor meinem Praktikum habe ich UnitTest und PyTest verwendet, aber nur im Rahmen meiner Ausbildung. Und Mock zum Beispiel hat überhaupt nicht verwendet, weil meine Projekte nicht so komplex waren, dass es notwendig war, Daten zu ersetzen (na ja, oder meine Tests waren so schlecht).

Ich würde allen unerfahrenen Entwicklern empfehlen, Tests für die gesamte Logik zu schreiben, die im Projekt vorkommt. Selbst wenn Sie der Meinung sind, dass das Verhalten offensichtlich ist, ist es am besten, auf Nummer sicher zu gehen. Wenn eine andere Person eine Funktion schreibt, die Ihren Code verwendet, besteht die Möglichkeit, dass sie nicht auf Details eingeht, und es ist Ihr fehlgeschlagener Test, der das Projekt vor Problemen bewahrt.
Um die Risiken weiter zu minimieren, schreiben Sie eine klare Dokumentation. In Admitad wirft eine Methode oder Funktion ohne Dokumentation Fragen zur Überprüfung auf. Zwei Wochen später möchte niemand Zeit damit verschwenden, den Code eines anderen erneut herauszufinden. Es ist nur eine Frage des Respekts gegenüber Kollegen.
Darüber hinaus werde ich sagen, dass wir in Python auch Typen detailliert kommentieren. Wenn Sie jedoch in einer stark typisierten Sprache schreiben, ist dieser Kommentar nichts für Sie. (Die Verwendung eines Linter wie Flake8 hilft in dieser Hinsicht sehr ).
Fazit: Achten Sie auf Tests und Dokumentation. Beginnen Sie mit einer regulären Git-Readme-Datei - beschreiben Sie, wie das Projekt ausgeführt wird, was es tut und was Sie erwarten. Versuchen Sie, Tests für wichtige Methoden und Funktionen zu schreiben, oder erstellen Sie Docker Compose, das alle Tests ausführt.
Welche Erfahrung haben Sie gemacht?
Für etablierte Entwickler mag mein Rat trivial und offensichtlich erscheinen. Ich verstehe Sie perfekt, aber anfangs mangelte es mir stark an Systemkenntnissen. Ich bin sicher, dass viele von denen, die den Beruf alleine beherrschten, mit diesem Problem konfrontiert waren.
Daher ermutige ich Sie, die Erfahrungen und Beobachtungen zu teilen, die Sie nach den ersten Monaten (oder Jahren) in der Branche gemacht haben. Welchen Rat würden Sie sich zu Beginn Ihrer Karriere geben? Welche Fähigkeiten würden Sie zur Entwicklung empfehlen? Sowohl ich als auch andere Autodidakten benötigen möglicherweise Ihre Tipps. Sie können also gerne Kommentare hinterlassen.