Helfen Sie Nachwuchs-Programmierern, ihre Mängel zu überwinden? [geschlossen]


15

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.


13
Am ärgerlichsten ist es, ständig zu fragen, was irritierend ist. :-)
Jerry Coffin

12
Ich denke nicht, dass Sie irritiert sein sollten, wenn die Leute Dinge nicht wissen, von denen Sie erwarten, dass sie es wissen. Was wichtig ist, dass sie bereit sind zu lernen =)
Koenmetsu

Ja, stimme mit @KoMet überein, wenn du die Bereitschaft hast zu lernen,
zuzuhören,

8
Ich mag diese Frage nicht, sie hat die falsche Mentalität für einen Entwickler. WIR WAREN ALLE EINMAL dieser Neuling, und jeden Tag sind wir ein Neuling in etwas. Ich würde mich NIEMALS über jemanden ärgern, der etwas nicht weiß. Dies fühlt, dass es zu viel Arroganz beteiligt ist ....
Darknight

3
Oh, geschlossen, BRAVO. Ich habe die sechs Richtlinien für konstruktive subjektive Fragen gelesen und dies erfüllt alle von ihnen. Ehrlich gesagt ist der nicht konstruktive Teil, dass die Busybodies einen Thread schließen, den 13 Personen bereits beantwortet haben, nur weil sie die Frage falsch verstanden haben. Es ist einfach eine Tatsache, dass Senior-Entwickler manchmal von den Fähigkeiten von Junior-Entwicklern enttäuscht sind. Diese Frage versucht nur, Muster in dieser Enttäuschung zu finden, damit wir Schwierigkeiten besser vermeiden können. Das Ignorieren legitimer Beschwerden und Kritik nützt niemandem und hat nichts mit Arroganz zu tun.
Andrew M

Antworten:


25

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 ...?


4
Zusammenzucken? Sie hat Glück, dass sie noch einen Job hat.
Rein Henrichs

2
Dies scheint eher eine Frage von "nicht zu wissen, was Sie nicht wissen" oder "nicht zugeben, was Sie nicht wissen" zu sein. Hätte sie von Anfang an um Hilfe gebeten, wäre es überhaupt eine große Sache gewesen?
Michael McGowan

1
autsch, es klang wie ich, haha, wir haben die Versionskontrolle erst kürzlich implementiert, und ich bin als frisch Absolvent in das Unternehmen eingetreten. Ich habe ein bisschen Versionskontrolle und Subversion an der Universität gelernt, aber noch nie zuvor implementiert.
Sufendy

1
"Das ist das Werkzeug für die Datensicherung, nicht wahr? Verwenden Sie es, um Ihren Code jeden Abend zu speichern?"
David

2
Es ist eine große Sache, die sie dir in der Schule so gut wie nie beibringen
Elijah Saounkine,

23

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.


Gee ... fast die gleiche Antwort, die ich geschrieben habe, Sie gehen in etwa 5 Sekunden vor.
quick_now

2
"du nervst !! ich bin hier beschäftigt, kannst du nicht alleine denken?" wenn du Pech hast !! haha
Sufendy

4
+1 - Ein Teilfall davon fragt nach einer Erklärung nicht zurück. Es hat mich wirklich wütend gemacht, als ich einem Junior eine Aufgabe erklärt habe, er nickte, ich dachte, er hat es verstanden und würde zum Job, dann zwei Wochen später kommt er zurück, stellt die gleichen Fragen noch einmal , nickt noch einmal, dann noch zwei Wochen später ... Fair genug, es war keine triviale Aufgabe, aber um Himmels willen, tu nicht so, als würdest du es verstehen, wenn du es nicht tust. Und wenn Sie glauben, etwas verstanden zu haben, machen Sie sich Notizen, damit Sie sich zwei Wochen später daran erinnern können.
Péter Török

1
Andererseits stellen einige Leute zu viele Fragen (zum Stapelüberlauf).
BoltClock

1
@ SnOrfus: Diese nicht qualifizierten sind, auf die ich mich beziehe: P
BoltClock

14

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.


1
+1 für "Kopieren und Einfügen statt zu versuchen zu verstehen", obwohl dies natürlich kein Problem ist, das nur für schlechte Programmierer gilt. Neue Programmierer haben zumindest die Chance, daraus zu wachsen - die Leute, mit denen ich zusammenarbeite, die seit Jahrzehnten Programmierer sind und dies immer noch nicht tun.
Tom Anderson

Ein Teil davon kann auch eine Folge des Managementstils sein. Die Aufgabe spricht bereits länger als erwartet und der Manager möchte Ihre Funktion morgen. Sie beeilen sich, es zum Laufen zu bringen und gehen schnell zur nächsten Aufgabe über. Alles ist in mikroskalierte Aufgabenkarten unterteilt, so dass keine Zeit bleibt, sich umzugestalten oder einen Schritt zurückzutreten und das größere Problem als Ganzes zu betrachten
Jamie McGuigan

14

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.


1
Sie möchten auch nicht, dass der Entwickler den gesamten Code aus zweifelhaften Ressourcen aus dem Web kopiert und einfügt. Suchen ist gut, um einige Ideen zu bekommen, vielleicht einige grundlegende Verständnisprobleme zu lösen, aber niemals, um fertige Lösungen zu finden. Es macht auch den Entwickler dümmer; Vielleicht ist er ein guter Sammler, aber kein Erfinder.
Elijah Saounkine

Irgendwann stimme ich Elijah zu. Wenn Sie Code kopieren, ohne Zeit dafür zu haben, zu lernen, was er tut, beschleunigen Sie Ihre Programmierkenntnisse nicht. Das Schlimmste ist, dass es die Kontrolle übernimmt und zu einer schlechten Angewohnheit wird.
Setzamora

1
Sicher, aber @Scott hat nichts über das Kopieren und Einfügen von Code gesagt. Er hat nur gesagt, dass Sie nicht der Erste sind, der auf eine Situation stößt. Beispiel: Ich möchte wissen, ob zwei Zeichenfolgen ähnlich sind. Gibt es bereits einen bekannten Algorithmus, um dieses Problem zu lösen? Stellen Sie sich vor, ein Entwickler entschließt sich nur, seine eigenen zu entwickeln, ohne zu wissen, dass es bereits Antworten gibt.
David Conrad

@ David Conrad das ist richtig, Punkt genommen, wir sind auf der gleichen Seite hier.
Elijah Saounkine

10

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.


5

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.


1
@Graig ist richtig, viele Dinge, die uns erfahrene Entwickler in Bezug auf Junioren ärgern, mussten wir nicht an einer Universität, sondern in einem kommerziellen Umfeld lernen.
Nickz

5

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.


Interessant, ich frage mich jedoch, ob Sie es möglicherweise schwieriger gemacht haben, zu lesen. Ich erinnere mich, dass mein erster Projektmanager dies ein paarmal getan hat (und ich war schuldig, dass ich es auch wieder geändert habe). Obwohl ich mir im Nachhinein sicher bin, dass sein Ansatz besser war, war ich zu der Zeit einfach nicht weit genug fortgeschritten, um zu verstehen, warum und wie es funktionierte .
Maxim Gershkovich

3

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:


Sie wissen nicht, was Sie mit dem Erstellen von Objekten, Klassen und Vererbung meinen. Oder fortgeschrittenere Dinge wie die Verwendung der Design-Muster (Sie müssen zugeben, das GoF-Buch ist ziemlich abstrus, obwohl es natürlich auch andere Bücher / Anleitungen gibt)
Andrew M

@ Andrew Ich habe die Antwort ein bisschen erweitert.
Nicole

1
Und ich sehe das Gegenteil: Ich weiß nicht, wie ich alten prozeduralen Code in C schreiben soll, weil ich nur OOP gelernt habe. Lassen Sie mich auch nicht über Leute reden, denen nicht mehr beigebracht wird, Parser zu schreiben, weil ihnen gesagt wird, dass all diese Probleme mit Lex und Yacc gelöst werden können.
quick_now

1
@quickly_now Das ist aber ein guter Punkt writing code other ways than OOPund writing bad OOPsind zwei völlig verschiedene Dinge. Das erste, mit dem ich kein Problem habe.
Nicole

Die meisten Universitäten unterrichten kein objektorientiertes Design. Auch viele Arbeitsplätze arbeiten wie Silos auch mit Nachwuchsentwicklern ... oder haben "Senior" -Entwickler, die sich mit objektorientierter Programmierung nicht auskennen. Es gibt "Senior" -Entwickler, die den Titel von Working X Years erhalten haben, und Senior-Entwickler, die sich auskennen ...
Cervo

3

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.


2

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

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

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 ...


1
Um Ihre Frage nach der Vollständigkeit zu beantworten, sollte man diese Formel kennen, um Fibonacci-Zahlen ohne Rekursion zu berechnen, die er an erster Stelle anstelle von Rekursion verwenden würde.
P Shved

1
@Pavel: Es gibt eine O (n) und eine O (1) Lösung ... Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. de.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.

1
Ich sage nicht, dass die von Ihnen gepostete Lösung perfekt ist. Ich frage nur die Relevanz Ihrer Folgefrage für eine solche Lösung, die Frage nach der Komplexität. Was möchten Sie erreichen, indem Sie es fragen, und - was am wichtigsten ist - warum erwarten Sie, dass das , was Sie wollten, erreicht wird, wenn Sie die Antwort auf die vorherige Frage geben? (Habe ich darauf
hingewiesen

Um meinen Standpunkt klarer zu machen, sollten Sie sich fragen, wie der Code verbessert werden könnte, anstatt die Komplexität abzuschätzen. Ich bin mir sicher, dass einige CS-Absolventen ein Memo vorschlagen oder sagen, dass sie die Formel kennen, sie aber nicht sofort zeigen wollten, weil man denkt, dass sie schlau sind.
P Shved

In der Praxis könnte eine solche Funktion mithilfe eines Profilers entdeckt und durch Hinzufügen eines Memoization-Caches optimiert werden. Die Ineffizienz ist nur für große Werte von N wirklich ein Problem. Der beste Weg, einem Junior einen solchen Code beizubringen, besteht darin, ihn zu zwingen, die gesamte Codeausführung mit einem Debugger durchzugehen. Für wirklich große Werte von N gibt es eine mathematische Formel maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
Jamie McGuigan

1

Code-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

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

sie würde gerne schreiben (Gott, es scheint mir immer noch unmöglich!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Frustrierend, nicht wahr?


Was im Namen von ...
Mike Speed

1
Es ist sehr erstaunlich !!!
Javanna

Es ist fast so, als wären sie arabisch, hebräisch oder chinesisch, wo man von rechts nach links liest, und nicht die westliche Konvention von links nach rechts. Dies ist eine absolut gültige Methode zum Einrücken Ihres Codes, bedeutet jedoch, dass Sie Ihre gesamte Datei basierend auf der tiefsten Verschachtelungsebene neu einrücken müssen. Dadurch ist Ihr Code nicht mit allen kompatibel, die die entgegengesetzte Konvention verwenden.
Jamie McGuigan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.