Was haben Sie mit Nachwuchsentwicklern gemein, die Ihrem Team beitreten oder mit denen Sie zusammenarbeiten müssen? Offensichtlich sind sie unerfahren, so dass Sie nicht erwarten können, dass sie alles wissen, aber welche Fähigkeiten fehlen oft unerklärlich - und wie können wir ihnen speziell dabei helfen, diese fehlenden Fähigkeiten aufzubauen?
Ich meine nicht zwischenmenschliche Fähigkeiten wie „auf Rat hören“, sondern technische Angelegenheiten wie (falls zutreffend):
"Sie haben noch nie SQL gemacht?"
"Sie haben noch nie einen Komponententest geschrieben?"
'Sie wissen nicht, wie man eine Unix-Kommandozeile benutzt?'
Dinge , die Sie tun erwarten - Ich mag Ihre Beobachtungen und Techniken für den Unterricht neue Programmierer hören Vergangenheit dieser spezifischen Mängel zu bekommen.
quelle
Antworten:
Keine Ahnung, was Versionskontrolle ist oder wie man sie richtig benutzt .
Einer der jüngeren Entwickler, der seit einigen Monaten in meiner Firma ist, musste sich die Grundlagen von Subversion aneignen. Es hat mich wirklich erschreckt ... sie hat die ganze Zeit Code für Live-Projekte eingecheckt ... und hatte keine Ahnung, was sie tat ...?
quelle
Nicht genug Fragen stellen
Ich weiß, dass sie Junioren sind, ich erwarte, dass sie Fehler machen und einfach keine Dinge wissen. So viele königliche Scherze hätten vermieden werden können, wenn man nur eine Frage gestellt hätte, anstatt etwas anzunehmen. Ehrlich gesagt, ich kann nicht genug belästigt werden.
Ich hatte Tonnen von Fragen, als ich anfing - sie zu stellen, rettete mir mehrmals den Arsch. Zur Hölle, ich habe immer noch viele Fragen ... Ich denke nur, dass sie jetzt bessere Fragen sind.
quelle
Kopieren, Einfügen und Ausprobieren, anstatt zu versuchen, die zugrunde liegenden Grundlagen zu verstehen
Viele Nachwuchsentwickler kopieren Code, der genau aussieht, und probieren dann fast zufällig verschiedene Permutationen von Modifikationen aus, bis sie auf eine treffen, die funktioniert. Wenn Sie nicht wissen, warum es funktioniert, führen Sie möglicherweise Fehler in den Grenzfällen ein, die später von jemandem beseitigt werden müssen, der dies versteht.
Behalten Sie ihren "ersten Entwurf" des Codes
Wenn ein erfahrener Entwickler eine neue Funktion mit einer bestimmten Komplexität schreibt, beginnt er mit einem Stub, der nur kompiliert, und schreibt dann neu, um übergeordnete Pseudocodekommentare für den Gesamtalgorithmus hinzuzufügen, und schreibt diese Kommentare dann nacheinander mit Tatsächlicher Code, Hinzufügen und Entfernen von Dummy-Code nach Bedarf zum Testen, anschließendes Umschreiben, um die Redundanz zu beseitigen, die während der Implementierung aufgetreten ist, usw. in einer Reihe aufeinanderfolgender und inkrementeller Verbesserungen.
Nachwuchsentwickler neigen dazu, es in einem großen Block zu schreiben und dann massives Brute-Force-Debugging durchzuführen. Sie mögen es nicht, eine Codezeile zu löschen, nachdem sie in den Editor eingegeben wurde, und sind so froh, dass sie sie endlich zum Laufen gebracht haben, dass sie es ablehnen, für nicht-funktionale Verbesserungen umzuschreiben, aber sie sind diejenigen, die dies tun müssen also am meisten.
quelle
Ich glaube, du bist der erste, der einer Situation begegnet.
Jedes Programmierproblem, mit dem Sie konfrontiert sind, wurde in irgendeiner allgemeinen Form von anderen bearbeitet. Von erfahrenen Programmierern gibt es so viel zu lernen. Ich bin alt genug , um die Programmierung vor Google zu erinnern, und es gesaugt . Es war noch schlimmer, als wir Suchmaschinen hatten, aber es gab noch nicht so viele gute Informationen im Web. Das Programmieren ist jetzt so viel produktiver, weil Sie innerhalb von Sekunden Zugriff auf globales Wissen haben. Leute, die es nicht benutzen, ignorieren es auf eigene Gefahr.
Bearbeiten :
Nur um klar zu sein, ich befürworte keine Copy / Paste-Programmierung. Ich bin mir jedoch sicher, dass Sie das vorhandene Wissen überprüfen müssen, bevor Sie selbst gute Entscheidungen treffen können.
quelle
Zu denken, dass sie alles wissen.
Ich hatte eine jr. Praktikant, der versucht hat alles mit Javascript zu lösen. Versuchte, verschiedene Konzepte zu erklären, aber er dachte immer, er könnte es besser machen. Jetzt hat er ein großes Programm beendet und überarbeitet, das er für die Druckausgabe mithilfe von HTML anstelle einer druckfertigen Technologie wie PDF erstellt hat. Ganz zu schweigen von vielen anderen großen Problemen.
Die Lektion besteht darin, die Senioren zu Beginn eines Projekts um eine umfassende Anleitung zu bitten. Bauen Sie nicht ohne Hilfe ab. Sie können den Code und die Details alleine schreiben, aber stellen Sie sicher, dass Sie mindestens die richtige Technologie verwenden.
quelle
Ich ärgere mich selten, wenn Junioren die Grundlagen nicht kennen, ihnen keine Branchenkenntnisse wie SCC an der Universität beigebracht werden. Es ist die Aufgabe der Senior-Entwickler, sie zu unterrichten. Ich ärgere mich nur über Persönlichkeitskonflikte. Aber ich ärgere mich am meisten über ältere Entwickler, die die Grundlagen nicht kennen.
quelle
Sie wollen ihr Wissen nicht weiterentwickeln, sondern den Weg des geringsten Widerstands beschreiten.
Neulich bat ein Praktikant zusammen mit dem Grafikdesigner (der überraschend gut programmiert) um Hilfe, weil er Probleme bei der Implementierung von etwas in jQuery hatte - das Schließen kann schmerzhaft sein, wenn man es nicht kommen sieht.
Ich setzte mich mit dem Praktikanten zusammen und erklärte ihm genau, was und warum falsch lief. Wir haben den Fehler behoben, dann habe ich auf einige zusätzliche Verbesserungen hingewiesen, die vorgenommen werden könnten ("seit ich hier bin"), und schließlich haben wir die Schuldfunktion in 10 Zeilen anstatt in 20 Zeilen und ohne Fehler neu geschrieben. Nachdem ich alle Fragen beantwortet hatte und zufrieden war, dass wieder alles in Ordnung war, ging ich.
Am nächsten Tag kam der Praktikant mit einer Frage, die enthüllte, dass er "ähm, einige Änderungen vornehmen und die Funktion auf meine Weise umschreiben wollte, weil ich es schwer zu verstehen fand" (zum größten Teil meine Verbesserungen rückgängig zu machen).
Er konnte entweder versucht hat , härter statt (zusätzliche Fragen zu stellen, auf den Konzept Lesung bis ich erwähnte) - Code , so kann kurz nicht immer sein , dass schwer zu verstehen - oder den einfachen Weg nehmen. Es macht mich jedes Mal traurig, wenn ich sehe, dass jemand Letzteres tut.
quelle
OOP nicht verstehen. Leider ist dies weitaus üblicher, als die meisten von uns wahrscheinlich glauben.
Zu wissen, wie man eine Klasse, eine abstrakte Klasse, eine Schnittstelle oder gar einen Polymorphismus erstellt, ist eine Sache. zu verstehen, wie man sie zum Nutzen Ihres Programms richtig einsetzt, ist eine andere .
Wenn Sie dies vermeiden möchten, fand ich diese Fragen und die Antworten darauf aufschlussreich:
quelle
writing code other ways than OOP
undwriting bad OOP
sind zwei völlig verschiedene Dinge. Das erste, mit dem ich kein Problem habe.Nicht zu wissen, was Sie nicht wissen, und in Unwissenheit zu denken, Sie wissen alles.
(Und sein enger Cousin, der nicht fragen will.)
Teilweise ist dies eine organisatorische Sache - eine angemessene Einführung würde einen großen Beitrag dazu leisten, zu verhindern, dass einige dieser Dinge zu Problemen werden. Aber nur sehr wenige Unternehmen haben Zeit oder Personal für eine eingehende Einführung - etwas, das einige Tage bis einige Wochen in Anspruch nehmen und die Entwickler von ihrer Arbeit entbinden sollte. Also müssen wir stattdessen die Feuer löschen.
quelle
Ich bin erstaunt, wie viele Nachwuchsprogrammierer, die noch nicht mit einem CS-Programm vertraut sind, mit Algorithmen schwach sind. Die Wahl eines schlechten Algorithmus sticht in Geschäftsanwendungen vielleicht nicht wirklich heraus, aber bei der Verarbeitung von Milliarden von Web-Service-Anfragen pro Tag spielt es wirklich eine Rolle.
Hier ist eine Interviewfrage, die ich benutze und die fast alle Junior-Programmierer vermissen und die das Problem hervorhebt:
Schreiben Sie einen Code, der die N-te Fibonacci- Zahl berechnet .
Sie schreiben fast immer die offensichtlichsten, aber ineffizienten
Wenn ich nach der algorithmischen Komplexität gefragt werde, erhalte ich normalerweise "es ist schlimmer als O (N) ... ähm ... O (N logN)". Es ist tatsächlich (viel) schlimmer als das ...
quelle
Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution.
de.wikipedia.org/wiki/Fibonacci_number#Closed-form_expressionCode-Einrückung rückwärts ausführen!
Natürlich ist es nicht sehr "typisch". Ich könnte nie glauben, dass es überhaupt möglich ist, aber wie würde ein normaler Entwickler schreiben
sie würde gerne schreiben (Gott, es scheint mir immer noch unmöglich!)
Frustrierend, nicht wahr?
quelle