Ich werde nicht an Ihrem Interview zum algorithmischen Test teilnehmen

Veröffentlicht: Zuletzt aktualisiert:
Tomasz Nurkiewicz algorithmischer Test

Wie stellt der Durchschnittsmensch einen erstklassigen Schneider ein? Sie bitten die Kandidaten, ihnen zu zeigen, was sie bisher genäht haben, vielleicht bitten sie sie sogar, etwas schnell zu nähen. Dann beobachten sie die Ergebnisse, notieren, wie gut sie die Nähmaschine bedienen, die Organisation des Arbeitsplatzes und beurteilen die Liebe zum Detail des Schneiders. Vergeuden sie zu viel Stoff oder machen sie einfach keine gute Arbeit?

Wie stellen Softwareentwickler erstklassige Schneider ein? Nun, es würde wahrscheinlich ein wenig so gehen; "Dies ist ein Whiteboard. Bitte zeichnen Sie den Unterschied zwischen einem Ghiordes- und Senneh-Knoten. Die Länge des Fadens in Abhängigkeit von der Oberfläche des Gewebes ableiten".

Ehrlich gesagt glaube ich, dass ein erstklassiger Schneider den Unterschied kennen sollte, aber was überprüfen wir hier wirklich? Wollen Sie eine elegante Jacke oder eine elegante Gleichung auf einer weißen Tafel?

Meine Erfahrungen mit einer Suchfirma und einer Investmentbank

Lassen Sie mich einige Erfahrungen teilen, die ich als Interviewpartner in zwei großen Unternehmen gemacht habe. Das erste verkaufte Anzeigen, die gelegentlich mit den eigentlichen organischen Suchergebnissen verflochten waren, und das andere war eine große Unternehmensbank. In ersterem verbrachte ich mehrere Stunden damit, Lösungen für nicht-triviale algorithmische Aufgaben zu finden. Bei letzterer war es ähnlich, aber ich beschrieb meine Algorithmen am Telefon einer Person, die auf der anderen Seite des Atlantiks saß ... und es wurde noch seltsamer als das.

Algorithmischer Test-Tweet

Bei der Suchfirma suchte ich nach dem längsten Suffix einer verknüpften Liste, die ... irgendetwas tat. Ehrlich gesagt, ich erinnere mich nicht mehr an viel. Genauso wie ich mich nicht daran erinnern kann, wann ich das letzte Mal eine verknüpfte Liste benutzt habe. Ja, ich weiß, dass sie sich von einem Array unterscheidet - Performance-Implikationen, unterschiedliche Anwendungsfälle, etc. Ich weiß das auch zufällig, weil diese Frage in jedem verdammten Bewerbungsgespräch gestellt wird! Aber in der realen Arbeit hatte ich einfach nie die Chance, diese zu nutzen. Es gab auch eine Frage, die sich auf das Balancieren oder Traversieren eines Baumes auf irgendeine bizarre Art und Weise bezog. Ehrlich gesagt, keine sehr einprägsame Erfahrung. Eigentlich wäre es ehrlich von mir zu sagen, dass ich diese Übung schon vorher kannte. Nicht aus einem Buch über Algorithmen, sondern aus einem Leitfaden, wie man bei dieser speziellen Firma eingestellt wird. Dazu später mehr.

Bei der Investmentbank wurde ich zunächst gebeten, alle möglichen Permutationen einer Liste von Elementen zu generieren. Denken Sie daran, dass dies alles über ein transkontinentales Telefongespräch geschah. OK, nur zum Spaß stelle ich mir vor, dass ich mir diese Art von Frage stelle. Hier sind die möglichen Antworten, die ich erwartet habe, von der schlechtesten bis zur besten:

  • Suchen Sie im Internet nach einer Lösung, behaupten Sie, es sei Ihre und denken Sie, ich höre das Klopfen der Tastatur nicht
  • Eine Lösung aus dem Gedächtnis aufsagen, Zeile für Zeile, weil man sich wie verrückt vorbereitet hat und die Lösung zufällig aus dem Kopf weiß. Und nicht viel mehr als das.
  • Imperativer, verschachtelter Code, der über die Eingabe iteriert. Vorzugsweise mit Variablen wie i, j, k
  • Saubere, rekursive Lösung, weil der Kandidat erkannt hat, dass dieses Problem zerlegt werden kann.
  • Ekeln Sie sich vor handgeschriebenem Code, suchen Sie ein bisschen länger und finden Sie eine Bibliothek, die genau das tut (z. B. Kollektionen2 von Guava)
Whiteboard-Algorithmus-Tests

Ernsthaft, Sie suchen wahrscheinlich nach einem neuen Teamkollegen. Würden Sie lieber einen Pull Request mit elegantem, rekursiven Code sehen oder einen einzelnen Bibliotheksaufruf? Eine von Millionen von Entwicklern kampferprobte Bibliothek, basierend auf Donald Knuths "Die Kunst der Computerprogrammierung"? Außerdem hat es eine Weile gedauert, bis ich eine Bibliothek gefunden habe, während handgefertigte, verschachtelte Schleifen überall im Internet zu finden sind. Nach welcher Art von Einstellung suchen Sie? Auswendiglernen und blindes Kopieren von Code aus dem Internet, oder tatsächlich die Recherche, um kampferprobte Lösungen zu finden?

Eine andere Aufgabe, die mir gestellt wurde, erforderte das zufällige Mischen eines Arrays, wobei mir nur ein zufälliger Münzwurf zur Verfügung stand. Das ist an sich ein interessantes Problem, hat aber nichts mit den Arbeitsbedingungen zu tun. Ich habe mir irgendwie einen Algorithmus ausgedacht (und es war ziemlich unterhaltsam), aber nach ein paar Monaten bestand alles, was ich tat, darin, ein Stück XML von einer Seite der Bank zur anderen zu übergeben. Hunderte von banalen Transformationen pro Sekunde und nebenbei noch jede größere Sprache hat Shuffle-Unterstützung: [1], [2], [3], [4], oder ein Paket [5].

Algorithmische Test-Interview-Fragen: der Fluch des Recruitings

Da ich einen Abschluss in Informatik habe, finde ich algorithmische Tests nicht einschüchternd oder sinnlos. Ganz im Gegenteil, sie sind großartig, um das Gehirn zu trainieren, wie das Lösen von Sudoku oder Bridge spielen. Ich habe an mehreren algorithmischen Wettbewerben teilgenommen (z. B. Advent des Codes) und fand sie immer unterhaltsam. Aber das ist nur mein Hobby, Sie studieren vielleicht lieber DDD oder fortgeschrittenes SQL. Und ich bin mir nicht sicher, ob reine Algorithmen und Datenstrukturen für die Mehrheit der Einstellungsprozesse besonders gut geeignet sind. Sie überprüfen zwar die abstrakten analytischen Fähigkeiten eines Bewerbers sowie solide CS- und Mathematikkenntnisse (beides wichtige Eigenschaften im Software-Engineering), aber sie erfassen andere wichtige Eigenschaften nicht oder sind zu unübersichtlich, um aussagekräftig zu sein.

Heutzutage besteht die meiste Arbeit in der IT darin, APIs und Frameworks zusammen zu nähen. Wir sind mehr wie Schneider als Stoffproduzenten. Algorithmische Kenntnisse sind hilfreich, wenn Sie eine einzelne Funktion Ihres Systems skalieren wollen, aber mehr fokussierte Erfahrung in verteilten Systemen wird Sie wahrscheinlich weiterbringen. Zum Beispiel ist es wertvoll, die Graphentheorie oder diskrete Funktionen zu kennen. Praktische Erfahrung mit einem großen Netzwerk von replizierten Datenbanken oder das Verständnis, warum manche Hash-Funktionen kompromittiert sind, hat jedoch einen viel größeren Einfluss auf Ihre tägliche Arbeit.

Whiteboard-Algorithmus-Tests

In der Tat ist es wichtig zu verstehen, was eine Rekursion ist. Genau wie zu wissen, warum HashMap in Java so schnell ist. Aber verstehen, warum Wörterbuch ist noch schneller in C# ist die nächste Stufe. Hinweis: Speicherlayout, etwas, das nichts mit theoretischer Berechnungskomplexität zu tun hat. Viele glauben jedoch, dass das Stellen von rein algorithmischen Fragen der einfachste Weg ist, um außergewöhnliche, gut ausgebildete Entwickler zu finden. Ein solcher Glaube ist sehr romantisch, aber oft extrem naiv. Schauen Sie sich nur an, wie viele Bücher Ihnen helfen, speziell in (berühmt-berüchtigten algorithmischen) Google-Interviews erfolgreich zu sein. Sie lehren nicht die Grundlagen von CS, sie erklären kaum, wie man bestimmte Klassen von Problemen im Google-Stil löst.

Sortieren ist eine der am häufigsten (ab)verwendeten algorithmischen Interviewfragen. Zu wissen, wie Quicksort arbeitet, ist wertvoll, auch wenn z. B. Java hat es nicht benutzt für fast ein Jahrzehnt. Zu verstehen, was O(nlogn) ist, kann auch nützlich sein. Aber viel öfter war es nicht die algorithmische Komplexität, die mein System zum Stillstand brachte. Stattdessen war es ein N+1-Problem - etwas, dem ich immer wieder auf die harte Tour begegnete, das aber während meiner CS-Ausbildung kaum behandelt wurde. Wenn Sie dem Drang nicht widerstehen können, nach der Sortierung zu fragen, diskutieren Sie wenigstens, was es für einen Algorithmus bedeutet, stabil zu sein. Sie werden höchstwahrscheinlich einen vorgefertigten, schnellen Algorithmus verwenden. Stabil vs. instabil ist höchstwahrscheinlich Ihre einzige Sorge. Hinweis: Die Sortierung in Java ist stabil, in C# ist sie es nicht.

Whiteboard-Algorithmus-Tests

Denken Sie daran, dass algorithmische Fragen großartig sind, wenn es wirklich das ist, was Sie täglich brauchen. Experten für maschinelles Lernen müssen verstehen, was Gradientenabstieg ist, und das erfordert einen erheblichen Mathe-Hintergrund. Auch Statistik, Forschung, Computergrafik und Spieleentwicklung erfordern in der Regel ein gewisses Maß an CS-Hintergrund. Ansonsten sollten Sie das Zeitfenster für das Recruiting klug nutzen und die richtigen Fragen stellen.

Ein besserer Ansatz für eine algorithmische Prüfung: gemeinsam gestalten und arbeiten

Ich habe während meiner Karriere tonnenweise Vorstellungsgespräche geführt, ich betrachte das als Teil meines Jobs, besonders in höheren Positionen. Viele der Vorstellungsgespräche waren zum Vergessen, aber gelegentlich waren die Kandidaten extrem zufrieden, auch wenn sie die Stelle nicht bekommen haben. Das baut eine tolle Beziehung und eine Marke für Ihr Unternehmen auf. Wie habe ich so ein tolles Erlebnis geschaffen?

  • Bevorzugen Sie das Lösen von Problemen aus dem wirklichen Leben. Entwerfen Sie eine Twitter-ähnliche Architektur oder skalieren Sie eine Instagram-ähnliche Website - solche Übungen machen viel mehr Spaß als die Suche nach dem kürzesten Weg oder dem längsten Palindrom.
  • Ziehen Sie Paarprogrammierung dem Skizzieren am Whiteboard vor. Zu sehen, wie ein Kandidat arbeitet, wie er oder sie durch den Code navigiert, nach Antworten sucht, Hindernisse angeht - das sollte Ihnen eine Menge sagen. Auch das gemeinsame Arbeiten reduziert Stress und macht den Prozess menschlicher.
  • Vorhandene Codebase einem leeren Editor vorziehen. Wir lieben Projekte auf der grünen Wiese, aber das Ändern einer bestehenden Codebasis ist viel näher an der echten Arbeit.
  • Testen gegenüber reinem Produktionscode bevorzugen. Codieren ist toll, aber sucht oder entwickelt ein Kandidat neben der Implementierung auch Tests? Dieser Aspekt wird bei einem algorithmischen Test fast durchgängig übersehen.
Algorithmus-Test

Denken Sie daran, dass gemeinsames Arbeiten kein Treffen vor Ort erfordert. Bildschirmfreigabe und Zusammenarbeit in Echtzeit sind heutzutage ziemlich nahtlos, auch mit DevSkiller.

Zusammenfassung

Es ist nichts falsch an algorithmischen Fragen während eines Vorstellungsgesprächs. Dies ist ein wichtiger Teil unseres Fachgebiets. Wenn man jedoch bedenkt, wie wenig Zeit Sie für die Rekrutierung haben, gibt es klügere Wege, um Ihren nächsten besten Ingenieur auszuwählen. Indem Sie echte Fähigkeiten abfragen, stellen Sie sicher, dass ein Kandidat in dem, was Sie wirklich brauchen, gut ist. Außerdem reduziert dies den Stress und verbessert die Wahrnehmung eines Kandidaten von Ihrem Unternehmen.

Beitrag teilen

Erfahren Sie mehr über die Einstellung von Technikern

Abonnieren Sie unseren Learning Hub, um nützliche Einblicke direkt in Ihren Posteingang zu erhalten.

Kodierfähigkeiten nahtlos verifizieren & entwickeln.

Sehen Sie DevSkiller-Produkte in Aktion.

Sicherheitszertifizierungen & Konformität. Wir sorgen dafür, dass Ihre Daten sicher und geschützt sind.

DevSkiller-Logo TalentBoost-Logo TalentScore Logo