In meiner täglichen Arbeit trete ich selten als „Programmierer“ auf. Ich leite ein Team von Ingenieuren und betrachte mich als Ingenieur. Ich entwickle Funktionen, behebe Fehler, arbeite an APIs, DBs usw., aber ich muss selten Algorithmen schreiben ... und wenn ich das tue ... Ich google einfach nach dem besten Weg, etwas zu tun, und das hat für mich funktioniert das letzte Jahrzehnt.
Ich habe viel Zeit damit verschwendet, von Leuten interviewt zu werden, die wollten, dass ich Fragen im LeetCode- Stil löse, und ich habe einfach keine Lust, mich darauf einzulassen. Ich bin ein leitender Ingenieur mit einem guten Lebenslauf und einer guten Bezahlung, und ich möchte diese Art von Position während meiner gesamten Karriere beibehalten.
Wie sage ich Unternehmen, dass ich nicht daran interessiert bin, mit Algorithmen herumzuspielen, um sie zu interviewen?
Erstens könnten Sie Ihre Terminologie falsch haben. Wie ich sehe, beschreiben die verwendeten Wörter "Programmierer" häufiger eine Position, in der einfacher Code gemäß vorhandenen Spezifikationen und APIs geschrieben wird, wo "Softwareingenieur" ein Job ist, der komplexe Algorithmen, Entwurfsmuster, Architektur und Systemdesign beinhaltet. Vielleicht möchten Sie nach Programmierjobs statt nach Softwareentwicklungsjobs suchen.
Ich bin ein leitender Ingenieur mit einem guten Lebenslauf und einer guten Bezahlung und möchte diese Art von Position während meiner gesamten Karriere beibehalten.
Ich denke, das ist die Ausnahme, und die meisten Unternehmen erwarten von einem leitenden Softwareentwickler, dass er in der Lage ist, einfache Variationen eines Diagrammproblems oder einer Listensuche zu lösen. Wenn Sie ein leitender Ingenieur werden möchten, sollten Sie sich meiner Meinung nach an die Idee des Lernens von Algorithmen gewöhnen. Nicht, dass von Ihnen erwartet wird, jeden Tag komplexe Algorithmen zu schreiben, aber wenn Sie den Unterschied zwischen einer O(N^2)-Lösung und einer O(N)-Lösung nicht sehen können, werden Sie ein Problem nicht erkennen können, wenn Sie es tun darüber stolpern, z. B. wenn Sie als leitender Ingenieur den Code von jüngeren Entwicklern überprüfen.
Wenn Sie sich also für eine Stelle als "Lead Software Engineer" bewerben, sind die Chancen hoch, dass Sie Ihre Zeit verschwenden. Haben Sie darüber nachgedacht, nach mehr Führungspositionen zu suchen, wie zum Beispiel Infrastrukturmanager oder Engineering Manager?
Konzertpianisten können immer noch Tonleitern spielen. Algorithmen sind keine seltsame Sache, die nur Akademiker verwenden. Sie sind minimale, gekapselte Entwurfsmuster, die in fast allen Bereichen ziemlich oft verwendet werden. Ja, kein Kunde wird zu Ihnen kommen und sagen: „Bitte implementieren Sie eine binäre Suche in Ihrer nächsten Softwareversion“, aber er wird sagen: „Diese Seite ist viel zu langsam“, und eine binäre Suche wird zufällig der beste Weg sein etwas reparieren.
Wenn Sie ein „Das ist zu langsam“-Problem bekommen und Sie nicht wissen, dass Sie eine binäre Suche benötigen, und in der Lage sind, genau zu kommunizieren, was Sie brauchen, wird es einfach an jemand anderen im Unternehmen weitergegeben Wer kann. Als einer der Leute, denen die Bugs „Dieses andere Team kann keine Algorithmen machen“ zugewiesen werden, kann ich Ihnen sagen, wie ärgerlich es ist, mit Leuten zu arbeiten, die glauben, dass dies nicht zu ihrem Job gehört.
Wie sage ich Unternehmen, dass ich nicht daran interessiert bin, mit Algorithmen herumzuspielen, um sie zu interviewen?
Indem man auf eine Einladung zu solchen Tests mit „nein danke“ antwortet. Sie können versuchen, einen alternativen Prozess für das „Nein“ vorzuschlagen, aber das ist ein Ave Maria.
Wenn Sie gut sind, werden Sie irgendwann ein Unternehmen finden, das mit Ihrer Weltanschauung übereinstimmt. Wenn nicht, müssen Sie möglicherweise Kompromisse eingehen und die Algorithmusschreibtests durchführen oder mit Arbeitslosigkeit rechnen.
Lehnen Sie sie einfach ab, wenn sie präsentiert werden
Ob Unternehmen dies nutzen oder nicht, wäre aus der Anwendung schwer konsistent zu bestimmen. In meiner jetzigen Organisation wurden mir keine algorithmischen Fragen gestellt. Wir stellen den Interviewpartnern derzeit algorithmische Fragen, weil der Ingenieur, der die Interviews leitet, gewechselt hat.
Bei anderen Unternehmen, für die ich Vorstellungsgespräche geführt habe, müssen sie ein Vorstellungsgespräch im LeetCode-Stil führen, es sei denn, Sie werden empfohlen. Ich bin als Empfehlung direkt in die Endrunde gesprungen.
Bei einer weiteren Regierungsorganisation, die ich interviewt habe, haben sie LeetCode als eine von mehreren Optionen, die Sie als Kompetenznachweis verwenden können. Im Rahmen des Einstellungsverfahrens wurde dies nicht erwähnt, und es schien ungewöhnlich, dass die Regierung dies überhaupt tat.
Das kann man nicht wirklich vorhersagen.
Wenn Sie dieses Zeug wirklich vermeiden wollen, pflegen Sie Beziehungen zu den Personalvermittlern, die unweigerlich auf Ihrem LinkedIn landen. Ich habe festgestellt, dass sie dir verdammt viel darüber sagen können, wie die Dinge laufen werden.
Holen Sie sich einen Executive Recruiter und konzentrieren Sie sich auf Management-Jobs. Sagen Sie dem Personalvermittler, wonach Sie suchen.
Executive-Search-Beratungsfirmen werden in der Regel für leitende Positionen und Vorstandsmitglieder eingesetzt. Zuweisungen sind im Allgemeinen für Positionen vorgesehen, bei denen der beste Kandidat schwerer zu finden und schwerer zu überzeugen ist, einen Schritt zu tun, und wo die potenziellen Auswirkungen von Erfolg oder Misserfolg am größten sind. Kontingent-Recruiter werden am häufigsten für Positionen auf mittlerer Ebene oder Positionen mit einer großen Anzahl qualifizierter Kandidaten eingesetzt. Drei Dinge, die Kandidaten über Executive Recruiter wissen sollten, Forbes
Gehen Sie nicht davon aus, dass ein engagierter Personalberater Sie an mehrere Arbeitgeber vermarkten wird, um Ihnen das beste Angebot zu unterbreiten... Kein Kandidat, der einem Kundenunternehmen vorgestellt wurde, sollte an einen anderen Kunden verwiesen werden, bis der ursprüngliche Kunde den Kandidaten ausgeschlossen hat. Da Notfall-Recruiter nicht angestellt werden, vermarkten sie Kandidaten gleichzeitig an mehrere Arbeitgeber. Sie tun dies, um die Chancen auf eine Platzierung und Bezahlung zu maximieren. Sie vermarkten jedoch nur sogenannte MPCs – Most Placeable Candidates – und konzentrieren sich auf Rollen auf niedrigeren Ebenen. So lernen Sie einen Retained Executive Recruiter kennen
Es ist nicht einfach, einen Executive Recruiter zu bekommen, aber es könnte etwas sein, das Sie irgendwann anstreben möchten.
Richten Sie Ihre Karriere auf das Management aus.
Beim Lesen der Frage hatte ich den Eindruck, dass Sie kein großes Interesse an Softwareentwicklung haben (wobei Algorithmen einen wesentlichen Teil ausmachen), aber Berufsbezeichnung, Gehalt und Lebenslauf sind Ihnen wichtig. Zum Glück für Sie ist die Softwarebranche voll von Managementjobs, die vom technischen Hintergrund profitieren, aber keine eigentliche Programmierung beinhalten, wie z Rollen, und Sie konkurrieren nicht mit Personen, die ein tatsächliches Interesse an ihrem Beruf haben, das über das obligatorische hinausgeht. Ein weiterer Vorteil besteht darin, dass in Unternehmen, die keine ernsthafte Forschung und Entwicklung haben, Ingenieurkarrieren sehr begrenzt sind und das Management mehr Optionen bietet.
Unter http://they.whiteboarded.me/ finden Sie eine Liste der Unternehmen mit Whiteboard-Interviews.
Wenn Sie ein Unternehmen finden, mit dem Sie ein Vorstellungsgespräch führen möchten, können Sie zu Glassdoor gehen und nach dem Unternehmen suchen. Auf der Unternehmensseite können Sie von Benutzern eingereichte Bewertungen, Gehälter und Interviewfragen sehen. Hier ist ein Beispiel für Google-Interviewfragen .
Wenn viele Interviewfragen von Benutzern für das Unternehmen eingereicht wurden, können Sie sich eine gute Vorstellung davon machen, welche Art von Fragen gestellt werden, einschließlich der Arten von Codierungsproblemen, die gelöst werden müssen. Wenn es sich um ein kleineres Unternehmen mit wenigen Benutzereingaben handelt, hilft Ihnen dies natürlich möglicherweise nicht weiter.
Ich stimme Helenas Antwort größtenteils zu und würde davon ausgehen, dass die meisten anständigen Unternehmen ein gewisses Maß an Erfahrung mit Algorithmen von Leuten erwarten, die eine führende Rolle in der Softwareentwicklung einnehmen möchten. Es kann jedoch einige Ausnahmen geben, bei denen das Projekt hauptsächlich die Behandlung der wesentlichen Details des Komponenten- und Abhängigkeitsmanagements erfordert, die Rolle in Richtung Management tendiert, das Geschäft auf sehr leichte Anwendungen ohne algorithmische Komplexität oder das Unternehmen ausgerichtet ist nicht "anständig" in dem Sinne, dass sie ihre Terminologie so falsch verstanden haben wie Ihre aktuelle ^^. Zumindest Ihrer Beschreibung nach scheinen Sie eher ein Teamleiter zu sein, der sich auch auf das Entwerfen von APIs und algorithmisch geradliniger Software konzentriert (nichts Schlimmes daran, die Auswahl der richtigen Technologie ist auch ein interessanter Teil des Jobs, nur nicht alles, was ich von einem leitenden Softwareentwickler erwarten würde). Für mich scheinen Sie also ein teamleitender Entwickler zu sein. Vielleicht sind Sie auch besonders gut darin, Frameworks auszuwählen oder APIs zu entwerfen, dann könnten Sie sich darauf konzentrieren.
Ein paar Dinge, auf die ich in Stellenbeschreibungen achten würde, um einen passenden Job zu finden und die Chance zu erhöhen, nicht mit (zu vielen) algorithmischen Fragen konfrontiert zu werden, wären diese:
Also im Prinzip für Jobs, die sich entweder „nach oben“ zum Design der äußeren Hülle von Anwendungen neigen und wie sie zusammenarbeiten, ohne die algorithmische Komplexität zu betrachten, oder für Jobs, die sich „seitwärts“ neigen, z. B. in die Geschäftsdomäne oder in Team oder Infrastruktur Management. Manchmal kann es Rollen geben, hauptsächlich für das Entwerfen von APIs oder „Spitzenreiter“, die mit Leuten diskutieren, die die Geschäftsdomäne kennen, wie eine Software auf Geschäfts- und API-Ebene funktionieren soll, die Details werden dann von Softwareingenieuren entworfen.
* Warum eine Startup-/Selbstlernkultur? Denn – Klischee, ja, aber ich habe es oft genug gesehen – diese wissen oft nicht genau, was sie tun (technisch), sie stellen oft ein, wen sie bekommen können und der Dinge schnell implementieren kann, ohne sich um die algorithmische Leistung zu kümmern. Manchmal scheitern sie nach einer Weile, manchmal sind sie erfolgreich und müssen dann möglicherweise das Chaos aufräumen, sobald sie exponentiell wachsen und ihre kleinen, algorithmisch naiven Lösungen nicht mehr skalieren, aber sie können immer noch jahrelang gute Arbeit leisten. Manchmal ist das überhaupt kein Problem, weil ihr Zielmarkt keine algorithmische Leistung braucht, sondern nur jemanden, der ein Programm mit einer netten Benutzeroberfläche für diesen Nischenbereich schreibt, um den sich noch niemand gekümmert hat.
Bewerben Sie sich nur auf Senior- , Principal- oder Lead -Positionen und geben Sie in Ihrem Lebenslauf an, wonach Sie suchen und so oft es wahr ist, drücken Sie Ihre Erfahrung im Lebenslauf und im Anschreiben und in der E-Mail-Korrespondenz als solche aus.
Zumindest in meinem Nacken des Waldes, Junior zu "No Prefix", bekommen diese Fragen. Senioren und darüber nicht.
Wie sage ich Unternehmen, dass ich nicht daran interessiert bin, mit Algorithmen herumzuspielen, um sie zu interviewen?
Eine Alternative ist ein eigenes Open-Source -Software-Portfolio auf Plattformen wie github oder gitlab (oder auf Ihrem gemieteten VPS). Beteiligen Sie sich an bestehenden Open-Source-Projekten (wie GCC oder FLTK oder RefPerSys oder Frama-C oder zsh oder Tausenden anderen). Sobald Sie so berühmt sind wie Linus Torvalds oder Guido Von Rossum oder Xavier Leroy , werden Sie gut bezahlt und haben Jobmöglichkeiten. Beachten Sie, dass die meisten Entwickler von GCC oder des Linux-Kernelsfür ihre Arbeit bezahlt werden (siehe dazu LWN , und vielleicht dort schreiben...). Sobald Sie eine Programmiersprache entworfen und implementiert haben, die nur wenige Benutzer hat (das ist wirklich schwierig , wie Simon Peyton-Jones erklärt), könnten Sie interessante Jobmöglichkeiten haben.
Eine andere Alternative ist zumindest ein öffentlicher Blog, in dem Sie einige Architekturansichten von Software erläutern , die Sie entwickelt (oder technisch geleitet) haben. Holen Sie dafür unbedingt vorher eine Genehmigung ein.
Eine dritte Möglichkeit ist ein Highscore auf Plattformen wie StackOverflow . Seien Sie dort über den oberen 1%.
Eine vierte Alternative besteht darin, ein technisches Buch zu Ihrem herausragenden Thema geschrieben und veröffentlicht zu haben (oder zumindest öffentliche Berichtsentwürfe wie diesen ).
Eine fünfte Alternative besteht darin, zu promovieren und/oder wissenschaftliche Arbeiten – mit Peer-Review – in zB ACM- Konferenzen zu veröffentlichen . Damit verbunden ist es, (Teilzeit) bezahlt zu werden, um etwas über Softwareentwicklung und -programmierung zu unterrichten und Praktikanten zu leiten und zu betreuen.
Eine andere Alternative sind freiwillige (und unbezahlte) Vorträge über Programmierung und Softwareentwicklung (wie diesen, den ich auf Französisch gehalten habe). Es können sogar Videos auf youtube über Programmierung und Softwareentwicklung sein (wenn sie einmal tausendfach angesehen wurden , zB dieses hier ).
basile@starynkevitch.net
Fühlen Sie sich frei, mich per E-Mail an (zu Hause, in der Nähe von Paris in Frankreich) oder basile.starynkevitch@cea.fr
(Arbeit, bei CEA, LIST ) zu kontaktieren.
Ich bin fast immer über einen Personalvermittler gegangen, und ein Personalvermittler weiß, wie die Vorstellungsgespräche ablaufen. Erstens wissen sie es aus Erfahrung, zweitens fragen sie den Personalchef und drittens besprechen sie alle anderen Interviewpartner, die sie geschickt haben. (Ich habe Personalvermittler buchstäblich versucht, mir die Testfragen zu geben, die sie gehört haben von Kandidaten, die sie zuvor eingeschickt haben.)
Sagen Sie dem Personalvermittler also einfach, dass er sich nicht die Mühe machen soll, Sie für solche Vorstellungsgespräche vorzuschlagen, wenn Sie sie wirklich nicht machen wollen.
Eine Alternative könnte ein sehr ausgefeilter Lebenslauf sein. Eine, die zeigt, wie gut du bist.
Wenn möglich, geben Sie ihnen auch genügend Code, damit sie eine Vorstellung davon haben, wie Sie Code schreiben, Fehler beheben, an APIs oder mit Datenbanken arbeiten (z. B.: ein persönliches Github-Repository, das nichts mit dem aktuellen Unternehmen zu tun hat ).
Und wenn Ihnen eine Frage im LeetCode-Stil präsentiert wird, stellen Sie sich ihr einfach als Teil der Korrektur eines Fehlers, den Sie gefunden haben und der behoben werden muss. Dies kann ihnen zeigen, dass Sie die Grundlagen kennen.
Bitte beachten Sie : Es ist nicht schlecht, Google zu verwenden, um einige Dinge aufzufrischen, die Sie vergessen haben! (Es sei denn, Ihr Code ist 100 % StackOverflow Copy-Paste-Glue.)
Ein Beispiel: Ich hatte ein Interview, in dem ich vergessen habe, wie man sich mit einer Datenbank in PHP verbindet (mein Herz raste und ich schlief an diesem Tag schlecht).
Ich habe nur ein paar Beispiele aufgefrischt und mein eigenes Ding geschrieben, ohne Copy-Paste .
Das Ziel war es, eine Datenbank + ein PHP-Skript zu schreiben, um die für ein Restaurant erforderlichen Informationen basierend auf einem schriftlichen Beschreibungstext zu speichern und abzurufen.
Aber wenn Sie wirklich nicht daran interessiert sind, diese "falschen" Probleme zu lösen, können Sie versuchen , eine alternative Methode auszuhandeln, mit der sie Ihre Fähigkeiten bewerten, und sehen, wie es läuft.
Denken Sie nur daran, dass dies der Person, die Sie interviewt, einen nicht optimalen Überblick über Ihre Programmierkenntnisse geben kann (ich hätte sicherlich meine Zweifel an Ihren Programmierkenntnissen).
Neo