Ein Überlebensleitfaden für Software Engineering

Ressourcen, die Ihnen zu Beginn Ihrer Karriere helfen

Die ersten Jahre meiner Karriere waren eine Zeit intensiven Lernens.

Ich bin auf die Realität eines Software-Ingenieurs gestoßen und musste viele Fähigkeiten erwerben, von denen ich nicht wusste, dass ich sie brauchte. Rückblickend wäre es sicher schön gewesen, die Dinge zu wissen, die ich jetzt weiß.

Deshalb habe ich diesen Leitfaden geschrieben, um anderen zu helfen, basierend auf den Erfahrungen von Entwicklern, die ich in den ersten Jahren als Profis betreut habe, sowie denen von mir und einigen meiner Kollegen.

Ich werde abdecken:

  • Wie man das Beste aus Interviews macht,
  • Wie Sie in Ihrer Arbeit als Softwareentwickler überleben (und gedeihen) können,
  • Und welche Ressourcen sollten berücksichtigt werden, wenn eine kontinuierliche Verbesserung in Betracht gezogen wird?

Interviews

Wenn Sie Ihre Karriere im Software Engineering beginnen, müssen Sie sich einer unbestreitbaren Tatsache stellen. Interviews saugen.

Sie können für alle Beteiligten schrecklich sein. Als Interviewer und Interviewter kann ich bestätigen, dass Interviews eine große Zeitsenke sind, extrem stressig und ein wirklich schlechter Indikator für die zukünftige Arbeitsleistung. Trotzdem sind sie ein notwendiges Übel, auf das Sie und Ihr Lebenslauf besser vorbereitet sein sollten.

Vorbereitung auf den Kampf

Wenn Sie über eine Karriere im Bereich Software Engineering nachdenken, sollten Sie einige der am häufigsten gestellten Fragen zu Programmierinterviews kennenlernen, z. B. "FizzBuzz":

„Schreiben Sie ein Programm, das die Zahlen von 1 bis 100 druckt. Bei Vielfachen von drei wird jedoch 'Fizz' anstelle der Zahl und bei Vielfachen von fünf 'Buzz' gedruckt. Für Zahlen, die ein Vielfaches von drei und fünf sind, drucken Sie 'FizzBuzz'. ”(Coding Horror)

Klingt einfach genug, oder?

Nun, die überwiegende Mehrheit der Befragten besteht diesen einfachen Test nicht, geschweige denn seine komplexeren Varianten.

Ich persönlich habe gesehen, dass viele Kandidaten für leitende Positionen diesen Test bei vollem Internetzugang nicht bestanden haben . Stellen Sie also sicher, dass Sie, wenn eine Programmiersprache in Ihrem Lebenslauf aufgeführt ist, wissen, wie Sie mindestens FizzBuzz darin ausführen. Ansonsten verschwenden Sie nur die Zeit aller, einschließlich Ihrer.

Natürlich müssen Sie mehr als nur FizzBuzz wissen, um Ihre Interviews zu überleben. Sie müssen auch sicherstellen, dass Sie wissen:

  • Grundlegende Datenstrukturen und Algorithmen: wie verknüpfte Listen, Arrays, Bäume und Sortierungen.
  • Häufige „Fallstricke“ in der Sprache Ihrer Wahl, z. B. ob Zeichenfolgen unveränderlich sind und wie der Speicher verwaltet wird.
  • Objektorientierte Programmierkonzepte wie Klasse versus Objekt und Vererbung.

Zu Beginn Ihrer Karriere müssen Sie sich mit solchen Fragen auseinandersetzen, da Sie nicht die Erfahrung haben, um zu beweisen, dass Sie gut im Job sind. Es gibt zwei Ressourcen, die ich bei der Vorbereitung auf Interviews immer empfehle:

  • "Cracking the Coding Interview", ein fantastisches Buch, das viele Codierungsprobleme und deren Lösungen sowie Zusammenfassungen dessen enthält, was Sie wissen müssen, um sie zu lösen
  • CodeWars, eine Website mit einer großen Sammlung von Codierungsproblemen, die Sie im Browser mit einer großen Auswahl an Sprachen lösen können. Der nützlichste Teil ist zu sehen, wie andere Benutzer das gleiche Problem gelöst haben. Sie werden verschiedene Ansätze für dasselbe Problem sehen und neue Tools in der Sprache Ihrer Wahl lernen.

Gönnen Sie sich diesen zusätzlichen Vorteil

Es gibt verschiedene Dinge, die Sie tun können, um das gewisse Extra zu erhalten.

Zuerst lernen Sie Ihre Erfahrungen zu kommunizieren . Sie sollten einen Aufzugsplatz haben, der Ihren Lebenslauf in einer zusammenhängenden und ansprechenden Erzählung zusammenfasst.

Kennen Sie außerdem Ihren eigenen Lebenslauf! Es klingt albern, aber ich habe viele Befragte gesehen, die Schwierigkeiten hatten, einen bestimmten Punkt in ihrem Lebenslauf zu erklären. Sie sollten in der Lage sein, Fragen zu allen Erfahrungen zu beantworten, die Sie in Ihrem Lebenslauf auflisten, und zu erklären, wie Sie dadurch zu einem besseren Kandidaten für den Job gemacht wurden.

Lassen Sie als Nächstes Codebeispiele auf GitHub (oder einem anderen öffentlichen Repository) anzeigen.

Sehen ist Glauben, und Interviewer, die Ihren Code sehen können, werden Wunder bewirken. Außerdem zeigt es, dass Sie ein Verständnis für Versionskontrollsysteme haben.

Die Codebeispiele müssen nicht zu komplex sein, aber sie müssen sauber sein und gute Codierungspraktiken aufweisen. Dies ist Ihre Chance zu zeigen, wie Sie ohne den Zeitdruck eines Codierungsinterviews codieren.

Sobald Sie alle oben genannten Schritte ausgeführt haben, ist es an der Zeit, an einem Open Source-Projekt teilzunehmen . Es zeigt, dass Sie in einer vorhandenen Codebasis arbeiten und mit anderen Programmierern zusammenarbeiten können.

Dies ist der nächste Schritt zur Programmierung in einer Branchenumgebung, ohne sich tatsächlich in einer Branchenumgebung zu befinden. Dies ist bei weitem das schwierigste und zeitaufwändigste Element, also reservieren Sie es, bis Sie die oben hängenden hängenden Früchte fertiggestellt haben.

Interview mit Ihrem Interviewer

In der Hektik und im Stress der Jobsuche vergessen viele Kandidaten, dass das Vorstellungsgespräch eine Einbahnstraße ist. Da das Unternehmen versucht herauszufinden, ob Sie die richtige Person für den Job sind, sollten Sie herausfinden, ob das Unternehmen für Sie geeignet ist.

Stellen Sie sicher, dass Sie einige der folgenden Fragen stellen können, auch wenn diese in einer Folge-E-Mail enthalten sind. Beachten Sie, dass Unternehmen häufig versuchen, sich zu drehen, wenn sie nicht den besten technischen Praktiken folgen. Lesen Sie also zwischen den Zeilen.

Hier sind einige Beispielfragen, die Sie stellen könnten:

"Wie würde ein typischer Arbeitstag für mich aussehen?"

Es ist wichtig zu wissen, was von einer bestimmten Position zu erwarten ist, da die Jobs im Bereich Software Engineering sehr unterschiedlich sind. Es kann beispielsweise erwartet werden, dass Sie Server warten oder direkt mit Clients sprechen.

Rote Fahne: " Ich bin nicht sicher." → Bedeutet, dass die Personen, die Sie interviewen, nicht in Ihrem Team sind oder keine klare Vorstellung davon haben, warum sie Sie einstellen.

"Wie testen Sie Ihre Software?"

Idealerweise sollte eine Kombination aus Komponententests, manuellen Tests und automatisierten Tests verwendet werden, um die Qualität des Codes zu überprüfen.

Rote Fahne: " Wir schreiben einfach keine Bugs, haha." → Diese Leute sind genau diejenigen, die Fehler schreiben.

"Welches Versionskontrollsystem verwenden Sie?"

Versionskontrollsysteme sind äußerst nützlich für die Zusammenarbeit, und es gibt keine Gründe, eines in einem professionellen Umfeld nicht zu verwenden.

Rote Fahne Nr. 1: "Äh, Versionskontrollsystem?" → Lauf weit, weit weg.

Rote Fahne Nr. 2: gt; ” → Zeigt an, dass sie höchstwahrscheinlich nicht mit der Zeit Schritt halten und ihre Infrastruktur seit langem nicht mehr aktualisiert haben.

"Machen Sie Peer Reviews?"

Peer Reviews oder jemand anderes, der sich Ihren Code ansieht, bevor er in die Codebasis aufgenommen wird, ist eine fantastische Möglichkeit, dumme Fehler zu erkennen, und eine wichtige Trainingsmöglichkeit, wenn Sie Ihre Karriere beginnen.

Rote Fahne: „Wir vertrauen uns einfach!“ → Sehr wahrscheinlich, dass die leitenden Entwickler ihren Code sehr schützen und kein gutes Feedback erhalten.

"Welche Programme haben Sie für die kontinuierliche Weiterbildung?"

Softwareentwickler zu sein bedeutet, ständig zu lernen, wenn Technologien erscheinen, ausgereift und mit schwindelerregender Geschwindigkeit veraltet sind. Daher verfügen viele Unternehmen über ein Schulungsbudget, mit dem sie für Universitäts- und Online-Kurse, Konferenzen oder interne Gespräche bezahlen.

Rote Fahne: "Du meinst, in deiner Freizeit online zu lesen?" → Das Unternehmen ist entweder in Geldnot oder sieht Entwickler als austauschbar und nicht als langfristige Investitionen.

Original text


"Was ist der Softwareentwicklungsprozess, den Sie verwenden?"

Der Prozess ist für das Software-Engineering von entscheidender Bedeutung, unabhängig von den tatsächlichen Details. Die Einzelheiten darüber, was einen optimalen Prozess ausmacht , werden intensiv diskutiert, aber das bloße Vorhandensein einer vereinbarten Arbeitsweise an einem Projekt minimiert das Chaos und stellt sicher, dass alle auf derselben Seite sind.

Rote Fahne: „Unser Prozess ist vom Freiform-Jazz inspiriert.“ → Höchstwahrscheinlich befindet sich die gesamte Abteilung im Brandbekämpfungsmodus und springt von Notfall zu Notfall ohne klares Ziel.

"Wie gehen Sie mit technischen Schulden um?"

Technische Schulden sind eine Ansammlung veralteter Technologien und schneller, aber schmutziger Lösungen in der Codebasis. Die Adressierung ist wichtig für den langfristigen Zustand des Codes und sollte kontinuierlich erfolgen.

Rote Fahne: „Wir konzentrieren uns ausschließlich auf neue Funktionen.“ → Ihre Codebasis ist ein Chaos oder es wird bald sein.

"Wie ist Ihre Unternehmenskultur?"

Die Unternehmenskultur mag ein sehr vages Konzept sein, aber selbst kleine Dinge wie ein offenes Büro im Vergleich zu Kabinen werden Ihre tägliche Interaktion mit Kollegen erheblich verändern. Es gibt keine allgemeinen roten Fahnen, aber stellen Sie sicher, dass Sie mit ihrer Antwort jahrelang über 40 Stunden pro Woche leben können.

Arbeit als Software Engineer

Wenn Sie zu diesem Zeitpunkt in Ihren Interviews gute Leistungen erbracht haben und es Ihnen gefallen hat, wie die Interviewer Ihre Fragen beantwortet haben, werden Sie wahrscheinlich eingestellt.

Herzlichen Glückwunsch, Sie sind offiziell Ingenieur!

Was jetzt? Nun, es ist Zeit, viele Dinge über das Codieren und Arbeiten neu zu lernen. Und da wir Programmierer sind, wollen wir zunächst den Code diskutieren.

Guter Industriecode

Guter Branchencode hat die folgenden Eigenschaften in dieser Reihenfolge:

  • Lesbar , da Code häufiger gelesen und gepflegt wird als geschrieben. Die Absicht des Codes muss anderen Entwicklern Jahre nach dem Schreiben klar sein.
  • Defensiv, wie bei der Befolgung der Best Practices der defensiven Codierung. Defensives Codieren ist ein Thema für sich, aber das Wesentliche ist: Sie müssen sicherstellen, dass die unsachgemäße Verwendung von Klassen und Methoden, die Sie geschrieben haben, nicht dazu führt, dass Ihr Code die Software zum Absturz bringt.
  • Optimiert , das ist das letzte auf dieser Liste, da Sie sich die meiste Zeit nicht wirklich darum kümmern müssen. Das bedeutet nicht, dass Sie schlechten Code schreiben sollten, der etwas in O (n³) tut, wenn eine lineare Lösung existiert. Entwickler sind jedoch im Allgemeinen bestrebt, zu viel zu optimieren, wenn dies nicht erforderlich ist, was häufig die Lesbarkeit und Verteidigungsfähigkeit des Codes beeinträchtigt. Sie sollten immer nachweisen können, dass tatsächlich eine bestimmte Optimierung erforderlich ist, die diese Eigenschaften opfert.

Jetzt, da Sie wissen, wie man guten Branchencode schreibt:

Sie werden nicht viel codieren

Es mag überraschen, aber die meiste Zeit werden Sie keinen neuen Code schreiben, sondern:

  • Debuggen
  • Vorhandenen Code lesen
  • In Besprechungen oder beim Schreiben von E-Mails
  • Wenn Sie nachforschen, was zu tun ist, schreiben Sie keinen Code

Daher sind andere Fähigkeiten als das Codieren für Ihre Karriere genauso wichtig.

Debuggen und Lesen von Code

  • Sie benötigen viel mehr als das Debuggen mit print-Anweisungen. Alle weit verbreiteten Sprachen und Tech-Stacks verfügen über eine Vielzahl leistungsstarker Tools. Lernen Sie, sie zu verwenden, da sie das Debuggen zum Kinderspiel machen und Ihnen unzählige Stunden sparen.
  • Verstehen Sie die Codebasis. Die meisten Tech-Stacks verfügen über Tools zur Generierung von Codegraphen, mit denen Sie die Struktur der Codebasis besser verstehen können. In Unternehmens-IDEs ist diese Funktionalität im Allgemeinen integriert. Sie können den Code auch mit Tools wie ReSharper, grep oder Sourcegraph untersuchen.
  • Verstehen Sie das Produkt. Y ou'll überrascht sein , wie viele Entwickler nicht wissen , wie die Software funktionieren soll , bevor sie zu „reparieren“ es versuchen. Lesen Sie einfach die Dokumentation.

Organisieren Sie Ihre Gedanken

Da ein Großteil Ihrer Zeit für Kommunikation, Forschung und Multitasking aufgewendet wird, benötigen Sie einige Tools, um alles in Ordnung zu halten.

  • TODO-Listen / Tasking: Ihr Unternehmen sollte bereits über eine Tasking-Software verfügen, aber es ist auch hilfreich, ein persönliches System zu haben. Verwenden Sie Haftnotizen oder Software wie Trello oder Todoist.
  • Notizen: Machen Sie sich in Besprechungen immer Notizen, arbeiten Sie an der Verbesserung der vorhandenen Dokumentation und erstellen Sie eine persönliche Wissensbasis. Verwenden Sie Evernote, OneNote oder ein Notizbuch wie früher. Es mag wie ein Overkill erscheinen, aber Sie werden sich ein Jahr später bedanken, wenn Sie diesen obskuren Build-Prozess wiederholen, für den Sie 3 Tage gebraucht haben, um das erste Mal herauszufinden. Ich habe noch nie einen guten Software-Ingenieur getroffen, der keine ausführlichen Notizen gemacht hat.
  • Diagramme / Visualisierungen: Menschen sind visuelle Wesen, und das Erstellen von Diagrammen von Prozessen und Architekturen hilft Ihnen und anderen, komplexe Themen zu verstehen. Diagramme sind besonders nützlich, wenn Sie mit nicht technischen Kollegen kommunizieren. Verwenden Sie Lucidchart, Visio oder ein einfaches Whiteboard.

Wissen, wann Bibliotheken verwendet werden müssen

Kurze Antwort: Fast immer.

Lange Antwort: In 99% der Fälle sollten Sie das Rad nicht neu erfinden. In den meisten Positionen im Bereich Software Engineering ist die Implementierung einer bestimmten Art von Sortierung reine Zeitverschwendung. Das bedeutet nicht, dass Sie nicht wissen sollten, wie die von Ihnen verwendeten Algorithmen und Datenstrukturen funktionieren, da dies Ihnen bei der Entscheidung hilft, was und wann verwendet werden soll.

Um ein effizienter Software Engineer zu sein, müssen Sie die Bibliotheken verstehen, die Ihnen zur Verfügung stehen. Die Standardbibliotheken der beliebtesten Sprachen sind äußerst nützlich und größer als erwartet. Darüber hinaus kann die Codebasis auch zusätzliche, spezialisierte Bibliotheken verwenden. Lesen Sie die Dokumentation und wissen Sie, wann Sie sie verwenden müssen.

Sie sollten auch keine Angst haben, zusätzliche Bibliotheken vorzuschlagen, wenn diese Zeit sparen. Sie müssen jedoch sicherstellen, dass Sie eine gute Bibliothek für den industriellen Gebrauch auswählen. Eine gute Bibliothek ist:

  • Open Source , damit Sie die Qualität des Codes selbst überprüfen und möglicherweise Fehler beheben können, die für Ihre Anwendung kritisch sind.
  • Lizenziert unter einer zulässigen Lizenz wie MIT und BSD , damit Ihr Unternehmen bei der Verwendung auf keine Probleme stößt. Seien Sie vorsichtig mit der GPL, damit Sie nicht versehentlich Ihre gesamte Codebasis als Open Source verwenden.
  • Ausgereift , dh es ist seit einiger Zeit nicht mehr erhältlich und verfügt über zahlreiche Funktionen.
  • Gepflegt , wobei häufig Neuerscheinungen herauskommen.
  • Wird von anderen Unternehmen oder Projekten verwendet . Dies dient als Gütesiegel und stellt sicher, dass die Industrie Unterstützung für die weitere Wartung bietet.

Ständige Verbesserung

Sie müssen nicht nur die Fähigkeiten erlernen, die Sie in Ihrer täglichen Arbeit verbessern, sondern auch Ihre Fähigkeiten kontinuierlich verbessern und neue erlernen, um neue Karrieremöglichkeiten für sich selbst zu schaffen.

Es gibt viele Möglichkeiten zu lernen und viele davon sind ziemlich erschwinglich:

  • Online-Kurse: Die Möglichkeit, in einem flexiblen Format von den besten Professoren der Branche zu lernen, sollte nicht verpasst werden. In Coursera, Udacity und edX (unter vielen) finden Sie Kurse, die Ihre vorhandenen Fähigkeiten ergänzen können.
  • Online-Master-Abschlüsse: Online-Master-Abschlüsse sind ein aktueller Trend unter hochrangigen Universitäten und eine flexible Möglichkeit, Ihre formale Ausbildung fortzusetzen. Dank der Abschlüsse auf dem Campus sind sie im Allgemeinen auch günstiger. Die meisten Programme kosten ~ 10.000 US-Dollar für den gesamten Abschluss. Georgia Tech, UT und UC San Diego sind einige der Universitäten, die solche Abschlüsse anbieten. Ich persönlich empfehle den Online-Master von Georgia Tech, den ich in diesem Jahr abgeschlossen habe.
  • Blogs: Blogs sind ein wichtiger Teil der Entwickler-Community (keine Überraschung, da Sie gerade eines lesen). Blogs wie Coding Horror, Joel on Software oder noch humorvollere Websites wie The Daily WTF können Ihnen eine gute Vorstellung davon geben, was Sie als Software Engineer tun und was nicht. Browsing Medium, R / Programming, HackerNews oder andere Feeds führen Sie auch zu guten Artikeln und Blogs.
  • Konferenzen: Zu guter Letzt sind Konferenzen eine erstaunliche Lernmöglichkeit, und Sie sollten auf jeden Fall das Schulungsbudget Ihres Unternehmens nutzen, indem Sie zu ihnen gehen. Eine sehr unvollständige Liste guter Konferenzen zum Auschecken (neben ihrem Thema): GOTO; (Allgemein), Strange Loop (Allgemein), PyCon (Python), CPPCon (C ++), DEF CON (Sicherheit), Fluent (Web Dev). Alle haben auch Videos von (den meisten) Vorträgen auf YouTube, so dass Sie etwas lernen können, auch wenn Sie nicht teilnehmen können!

Hoffentlich hat dieser Artikel Sie mit dem Wissen ausgestattet, was Sie zu Beginn Ihrer Karriere als Software-Ingenieur zu erwarten haben, und Ihnen die Werkzeuge gegeben, um auf dieser aufregenden Reise gute Leistungen zu erbringen! Danke fürs Lesen! Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte einen Kommentar oder twittern Sie @AlexievValeri.