Warum ich 8 Monate lang Vollzeit für ein Vorstellungsgespräch bei Google gelernt habe

von Googley as Heck

Mein abgenutztes Whiteboard, geschmückt mit Dijkstras Single-Source-Kürzeste-Wege-Algorithmus.

Es stimmt. Ich habe Tausende von Stunden damit verbracht, Bücher zu lesen, Code zu schreiben und Informatikvorlesungen zu hören, um mich auf das Vorstellungsgespräch bei Google Software Engineer vorzubereiten.

Wenn Sie sich auf ein Vorstellungsgespräch bei Google vorbereiten möchten, finden Sie hier meinen Studienplan:

jwasham/google-interview-university
google-interview-university – Ein kompletter Tagesplan für das Studium zum Google-Software-Ingenieur.github.com

Wie ich hierher kam

Ich habe in der Mittelschule mit dem Programmieren begonnen, aber als es Zeit für das College wurde, habe ich einen Abschluss in Wirtschaftswissenschaften angestrebt. Meine Überlegung war, dass es zu viele Programmierer geben würde, die nach meinem Abschluss einen Job suchen. Junge, ich habe mich geirrt.

Später ging ich zur Armee, um Programmierer zu werden, aber der Rekrutierer überredete mich zu einer Stelle beim militärischen Geheimdienst, und ich verbrachte die nächsten zwei Jahre damit, die koreanische Sprache zu lernen. Danach diente ich 2 Jahre lang in Südkorea.

Bevor ich die Armee verließ, versuchte ich, wieder in die Programmierung einzusteigen, und war von den Schwierigkeiten überrascht. Ich hatte BASIC in der Mittelschule gelernt und es während der Highschool weiter programmiert. Aber ich begann meine Programmierstudien mit C++, und der Sprung war zu groß. Ich konnte es einfach nicht begreifen.

Es machte mir jedoch Spaß, Websites zu erstellen, aber ich benutzte eine Software mit einer Word-ähnlichen Oberfläche, mit der ich meine Websites veröffentlichte. Ich wusste nicht, wie man Websites von Grund auf erstellt.

Nach der Armee beschloss ich, ein Jahr lang in Korea zu bleiben und Englisch zu unterrichten. Ich nutzte meine Nächte und Wochenenden, um Webprogrammierung zu studieren, mit Perl, HTML, CSS (was damals neu war), JavaScript und SQL.

Nach einem Jahr intensiven Studiums fand ich einen Job in der Gegend von Seattle, und seitdem bin ich hier.

Ich arbeite vom Balkon im schönen Bellevue, WA.

Ich bin jetzt seit 15 Jahren Webentwickler. Ich habe 3 Unternehmen gegründet, von denen 2 immer noch laufen und Umsatz machen. Ich habe in großen und kleinen Unternehmen gearbeitet, Startups beim Start und Wachstum geholfen und Teams rekrutiert und geleitet. Ich war Produktmanager, CEO, Designer und Vermarkter.

Ich habe eine erfolgreiche Karriere hinter mir und dabei viel gelernt. Aber ich bin noch nicht fertig.

Suche nach einer beruflichen Veränderung

Erinnern Sie sich an den Teil, in dem ich keinen Informatikabschluss gemacht habe? Das hat einen Unterschied gemacht.

Vor ein paar Jahren dachte ich, ich könnte überall eingestellt werden. Ich dachte, ich sei der heiße Feger: der schwer fassbare Full-Stack-Webentwickler. Aber während meiner Arbeitssuche im Jahr 2013 wurde mir klar, dass meine Fähigkeiten nicht ausreichten. Ich hatte so viel Zeit damit verbracht, in meiner Freizeit Start-ups zu gründen, dass ich meine Fähigkeiten verkümmern ließ. Ich hatte mich nicht auf dem neuesten Stand der Technik gehalten.

Jahrelang hatte ich gerade genug gelernt, um zurechtzukommen. Ich hatte ein breites Spektrum an Fähigkeiten, war aber kein Experte in irgendetwas.

Verstehen Sie mich nicht falsch, ich konnte immer noch eingestellt werden, aber nicht in den Technologien oder Bereichen, in denen ich arbeiten wollte. Ich konnte in Bereichen eingestellt werden, in denen die Technik etwas veraltet war, wie bei mir. Da ist viel Geld drin, aber ich sah keine aufregenden Perspektiven.

Die Erkenntnis erreichte letztes Jahr auf einer Karrieremesse ihren Höhepunkt. Ich interessierte mich dafür, vielleicht für eines der örtlichen Unternehmen zu arbeiten, die von Risikokapitalfirmen betriebene Startup-Labors sind. Da ich aber keinen Abschluss in Informatik hatte und auch nicht die Fähigkeiten und Kenntnisse, die mit einem solchen Abschluss einhergehen, hatte ich keine Chance.

Ich arbeitete damals Vollzeit an meinen Unternehmen und tue dies auch heute noch.

Anfang 2016 beschloss ich, dass es an der Zeit war, einen Karrierewechsel vom Webentwickler zum Softwareingenieur zu vollziehen. Ich würde viel lernen und üben müssen, um ein Informatikstudium in ein paar Monaten zu schaffen, aber sobald ich das geschafft hatte, konnte ich eine neue Karriere starten.

Sie sehen Webentwicklung und Softwaretechnik vielleicht nicht als unterschiedliche Positionen. Bei beiden geht es um Programmierung und handwerkliches Geschick, aber bei der Softwareentwicklung kommen noch Kenntnisse über Datenstrukturen und Algorithmen, kompilierte Sprachen, Speicherüberlegungen und das Verständnis der Auswirkungen von Kodierungs- und Architekturentscheidungen auf die Maschinen, auf denen sie sich befinden, hinzu.

Große Unternehmen, die Stellen für Softwareentwickler besetzen, erwarten, dass die Bewerber über diese Kenntnisse verfügen.

Ich wandte mich an einen Bekannten, der bei Google arbeitet, und stellte ihm Fragen zu seinen Erfahrungen in dem Unternehmen. Ich hatte „How Google Works“ gelesen und war mit Google bereits recht gut vertraut.

Über einen anderen Kontakt erhielt ich eine Kopie der Coaching-Notizen von Google, die den Bewerbern für Vorstellungsgespräche zur Verfügung gestellt werden. Dies wurde zur Grundlage meines Studienplans.

Google ist ein ziemlich toller Arbeitsplatz, aber bevor ich das wusste, war Google mein Ziel.

Warum Google?

Google legt die Messlatte für Einstellungen sehr hoch. Sie wollen nur die Besten einstellen. Wenn ich mir also hohe Ziele setze (bei Google eingestellt zu werden), kann ich auch anderswo eingestellt werden, selbst wenn ich nicht ausgewählt werde.

Je mehr ich über Google erfahre, desto mehr möchte ich dort arbeiten.

Zusammenfassend lässt sich sagen, dass Google ein Unternehmen ist, das intelligente, kreative Leute einstellt und sie gut behandelt. Google belohnt Leistung, ermutigt zu großen Ideen und gibt den Mitarbeitern die Freiheit, gute Entscheidungen für die Nutzer zu treffen.

Das Einstellungsverfahren ist darauf ausgerichtet, kluge und leidenschaftliche Mitarbeiter zu gewinnen. Google hat das Einstellungs- und Interviewverfahren im Laufe der Jahre verfeinert. Die Rätselfragen sind längst überholt. Heutzutage werden die Bewerber nach ihren Programmierfähigkeiten, ihrem technischen Wissen und ihrer „Googleyness“ ausgewählt. In diesem einen Wort steckt eine Menge.

Auf einem Roadtrip im Jahr 2015 besuchte ich das Hauptquartier in Mountain View. Das hat den Stein ins Rollen gebracht.

Management ist anders. Manager machen keine Kleinstarbeit. Sie vertrauen den Ingenieuren, dass sie die richtigen Entscheidungen treffen. Das Vertrauen in die Mitarbeiter verändert die Rolle der Manager bei Google von dem, was sich die meisten Leute unter Management vorstellen. Außerdem können Manager nicht einseitig Mitarbeiter einstellen, entlassen oder befördern. Viele der wichtigen Managemententscheidungen, die als bürokratisch empfunden werden könnten, werden von einem Ausschuss getroffen, um diese Gefahr auszuschließen.

Googles Personalabteilung (HR) hat im Laufe der Zeit gelernt, was funktioniert, und nutzt Daten und Mitarbeiterfeedback, um Bewertungssysteme, Einstellungsverfahren, Beförderungen, Vergütungen, Sozialleistungen und vieles mehr zu verbessern. Lesen Sie Work Rules! von Laszlo Bock (SVP, People Operations), um mehr zu erfahren.

Ja, die Vorteile sind erstaunlich. Ich habe mir das Google-Büro in Kirkland, WA, angesehen, und es hat meine Erwartungen übertroffen. Und meine Erwartungen waren bereits hoch.

Google Interview University

Erinnern Sie sich an die Coaching-Notizen, die ich erhielt und die mir sagten, was ich lernen sollte? Die Liste der Themen schien überschaubar, obwohl ich nichts davon wusste.

Ich machte aus den Themen in den Notizen eine Gliederung und begann, die Themen mit YouTube-Videos von Vorlesungen des MIT und der UC Berkeley zu ergänzen. Ein Video über verknüpfte Listen an einer Stelle, ein Video über Warteschlangen an einer anderen. Die Liste begann zu wachsen.

Ich veröffentlichte die Liste auf Github, weil mein Github-Konto ziemlich leer war. Da der gesamte Code, den ich für meine Unternehmen und meine Arbeit schrieb, privat war, ließ mein Github-Konto den Anschein erwecken, dass ich überhaupt nicht programmierte. Ich musste mir ein Portfolio aufbauen. Ich nannte das Projekt ursprünglich „Projekt 9894“. Google wurde am 4. September 1998 gestartet. Daher der Name. Später habe ich es in „Google Interview University“ umbenannt.

Mit der Zeit habe ich einige optionale Themen hinzugefügt, die ich auf dem Weg entdeckt habe.

Meine Sommerleseliste.

Ich war ziemlich erstaunt, dass ich in meiner Karriere so weit gekommen war, ohne überhaupt zu wissen, wie eine CPU ein Programm verarbeitet, wie der Speicher funktioniert oder irgendetwas davon. Ich hatte „gerade genug“ gewusst, um erfolgreich zu sein.

Mein kleines Github-Projekt bekam ein paar Sterne, und ich veröffentlichte einen Blogbeitrag, in dem ich 20 Sterne feierte.

Eines Morgens wachte ich auf und stellte fest, dass es auf 120 Sterne angewachsen war. Jemand Berühmtes hatte in der Nacht darüber getwittert, und das führte dazu, dass es im täglichen Trending Report von Github auftauchte. Ich war einige Tage lang die Nummer 1 auf Github.

Viele nette Menschen haben sich gemeldet, um mir zu danken und mich zu ermutigen. Es stellte sich heraus, dass es Tausende von Leuten gibt, die nicht nur bei Google arbeiten, sondern auch als Software-Ingenieur arbeiten wollen, und diese Liste war genau die To-Do-Liste, die sie brauchten.

Sie hat jetzt über 21.000 Sterne.

Ich kann es immer noch nicht glauben.

Was ist, wenn ich den Job nicht bekomme?

Das wird nicht das Ende der Welt sein.

Ich habe viel Zeit und Hingabe in mein Studium gesteckt, um bei Google als Software-Ingenieur angestellt zu werden, aber selbst wenn ich scheitere, werde ich immer noch mit den Fähigkeiten und dem Wissen ausgestattet sein, die für die Arbeit als Software-Ingenieur in jedem Unternehmen erforderlich sind.

Wo auch immer ich lande, ich werde als Software-Ingenieur der Einstiegsklasse anfangen. Ich werde nicht mit 15 Jahren Erfahrung in der Softwareentwicklung einsteigen, weil ich sie einfach nicht habe. Wenn es um diese Dinge geht, bin ich das Äquivalent eines frischen CS-Absolventen.

Aber ich habe auch den Enthusiasmus eines neuen Absolventen. Dies ist eine neue Welt für mich. Ich fange gerade erst an. Ich habe keine Angst, Fehler zu machen. Ich weiß, dass ich sie machen werde. Außerdem möchte ich alles lernen, was ich kann, und eine hervorragende Ergänzung für jedes Team sein.

Lernen Sie nicht so viel wie ich

Ja, ich habe 8 Monate gebraucht. Aber ich hätte den Prozess auch abkürzen können. Wie bei jedem Start-up mit einem großen Ziel macht man Fehler und tut Dinge, die Zeit kosten. Es gibt viele Dinge, die ich im Nachhinein anders machen würde.

Ich habe Themen studiert, die ich nicht brauchte, einige, weil ich dachte, ich würde sie für das Vorstellungsgespräch brauchen, und andere, weil ich das Wissen für den Arbeitsbeginn parat haben wollte. Ich wollte dem Team, dem ich zugewiesen wurde, nicht zur Last fallen. Es stellte sich heraus, dass ich mich einfach zu gut vorbereitet hatte.

Ich habe drei Wochen lang ein 1.000-seitiges Buch über C++ gelesen. Ich erinnere mich nicht an 1.000 Seiten, aber ich weiß jetzt eine ganze Menge über C++. Wie sich herausstellte, verwende ich für das Vorstellungsgespräch Python, nicht C++. Ich war davon ausgegangen, dass ich C++, C oder Java brauche, aber da lag ich falsch. Es ist gut, zu fragen und nicht anzunehmen.

Ich habe viel mehr Bücher gelesen, als ich brauchte. Es gibt nur 3 oder 4 Bücher, die ich hätte lesen sollen.

Ich habe einen Code-Katalog mit Dutzenden von Algorithmen, die ich überprüfe, von denen ich die meisten nicht in einem Vorstellungsgespräch erwarten würde. Das ist nicht nötig.

Ein Stapel Algorithmen, ausgedruckt zur Durchsicht.

Ich habe mir viele Stunden YouTube-Videos angesehen, hätte mir aber viel weniger ansehen und die Themen über die Zeit verteilen können.

Ich hätte früher aufhören sollen, Bücher zu lesen und Videos anzusehen, und früher mit Programmieraufgaben beginnen sollen. Dann hätte ich mehr Zeit gehabt, die gelernten Themen anzuwenden.

Abgestufte Wiederholungen sind der Schlüssel zum Auswendiglernen. Wenn Sie etwas gelernt haben, wiederholen Sie es später noch einmal, und noch später. Bei jeder Wiederholung verstärken Sie Ihr Lernen. Wenn Sie viele Stunden am Stück mit Prioritätenlisten verbringen, werden Sie nicht zu einem Experten. Sie werden zum Experten, indem Sie das Gelernte im Laufe der Zeit wiederholen und wiederholen lassen. Wenn du das tust, kommst du an einen Punkt, an dem du keine Details mehr vergessen kannst.

Um das Wiederholen zu erleichtern, habe ich 1.792 Lernkarten (digitale Lernkarten) erstellt. Das ist viel zu viel. Ich gehe sie auf meinem Handy oder Tablet durch, wann immer ich Zeit habe (z. B. beim Weihnachtseinkauf). Lernkarten und räumliche Wiederholung gehen Hand in Hand. Sobald ich eine Antwort auf einer Karteikarte richtig habe, markiere ich sie nicht als bekannt. Ich behalte sie im Stapel, und wenn ich sie mehrmals gesehen und richtig beantwortet habe, markiere ich sie als bekannt.

Mein Gefühl der Angst („Was ist, wenn sie mir eine Frage über rot-schwarze Bäume stellen?“) führte dazu, dass ich viel mehr Themen lernte, als ich musste.

Aber ich wollte mich nicht nur auf das Vorstellungsgespräch vorbereiten, sondern auf eine Karriere bei Google, wo ich große Probleme lösen kann. Das bedeutet, dass ich Algorithmen kennen muss, die Rechenressourcen in Form von Zeit, Platz und E/A einsparen.

Vielleicht muss ich nie einen Maximum-Flow-Algorithmus (Ford-Fulkerson) kennen, aber es ist schön zu wissen, dass ich dieses Werkzeug zur Verfügung habe, wenn die Situation eintritt (ohne die Implementierung auswendig zu lernen), und dass ich seine Anwendung auf ein Problemfeld erkennen kann.

Schlussfolgerung

Anfänglich wünschte ich mir, ich könnte das ganze Lernen überspringen und mich einfach beeilen und eingestellt werden, damit ich meine Zeit damit verbringen kann, die Sprachen und Werkzeuge für das Team zu lernen, dem ich beitrete. Aber im Laufe der Zeit wurde mir klar, wie wichtig dieses Wissen ist, und auch wenn das meiste davon im Alltag vielleicht nicht anwendbar ist, bin ich froh, dass ich mir die Mühe gemacht habe. Ich habe ein neues Verständnis für die Geschichte der Informatik, für die Großen auf diesem Gebiet, für Datenstrukturen und Algorithmen (und wie sie sich gegenseitig ergänzen) und dafür, wie Computersysteme auf niedriger Ebene funktionieren.

Ich werde meine Bewerbung bald einreichen. Es war ein langer Weg bis zu diesem Punkt – fast ein ganzes Jahr. Es begann im Januar, aber ich konnte mich erst im April zu einem Vollzeitstudium verpflichten.

Ich bin so gut vorbereitet, wie ich nur sein kann. Ich kann nicht ewig weiterstudieren und die Bewerbung aufschieben. Irgendwann muss ich den Schritt wagen.

Ich sehe eine glänzende Zukunft vor mir.

Danke, dass Sie sich die Zeit genommen haben, meine Geschichte zu lesen.

Artikel auch auf Arabisch, Vietnamesisch und Koreanisch verfügbar.

Aktualisierung: 10. Januar 2017

Ich wurde nicht eingestellt. Lies weiter. Danke an alle für die tolle, überwältigende Unterstützung.

Update: 6. März 2017

Die Geschichte hat ein Happy End! Ich wurde von Amazon eingestellt, um als Software Development Engineer bei Amazon Web Services zu arbeiten!

Wo man mich findet

Ich blogge bei Startup Next Door.

Google Interview University auf Github:

jwasham/google-interview-university
google-interview-university – Ein kompletter Tagesplan für das Studium zum Google Software Engineer.github.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.