Welche Fähigkeiten sollte jeder Programmierer, der das College abschließt, haben? [geschlossen]

9

Wir hatten einen Gastdozenten an unserer Schule, der sich mit den Absolventen befasste und nicht das von ihm erwartete Können erreichte, d. H. Kenntnisse einer großen kompilierten Sprache wie Java, C ++ oder C #, einer Skriptsprache wie Python oder Ruby, eines Webframeworks. Welche anderen Fähigkeiten sollten Ihrer Meinung nach für den Abschluss des Studiums unbedingt erforderlich sein?


quelle
Ich gehe davon aus, dass Sie meinen Universitätsabschluss meinen?
Michael Shaw
1
@Ptolemy: In den Staaten ist der Begriff College korrekt.
Macneil
1
Ein Wille, sich in den Arsch zu treten und SMS zu verlernen, sprich, du junger Punks! socializedpr.com/…
Job

Antworten:

27

Bei weitem würde ich Lernbereitschaft sagen. Das College soll Ihnen nicht die Fähigkeiten vermitteln, die Sie benötigen, um Programmierer zu werden. Es soll Ihnen die Fähigkeiten beibringen, die Sie benötigen, um diese Fähigkeiten zu erlernen .

Jason Baker
quelle
Hätte es nicht besser sagen können.
Chris
4

Neue Absolventen brauchen mehr als nur den Wunsch zu lernen, sie brauchen eine Besessenheit des Lernens, ein Verständnis für das Lernen und eine feste Grundlage in der Realität von Software. Es ist mir im Allgemeinen egal, welche Sprachen Sie kennen, aber jeder Junior muss:

  1. Geschichte verstehen . Die Informatik ist ein gut erforschtes Gebiet mit vielen gelösten Problemen. Wenn Sie diese Tatsache kennen, können Sie aus dem lernen, was vor Ihnen liegt. Selbst zu wissen, dass es eine reiche Geschichte gibt, aus der ich mein Wissen abbauen kann, ist mehr als viele Absolventen. Dazu gehören Dinge wie Big-O-Notation, Geschichte der Algorithmen, Prinzipien der Propheten (Knuth, K & R, Hofstdater usw.) und allgemein akzeptierte Praktiken und Muster.

  2. Wisse, dass es gelöst werden kann . Ich bin immer überrascht, wenn ein Entwickler von einem Problem überrascht wird. Ein Teil des Lernens zu lernen ist das einfache Prinzip, dass Probleme immer leicht lösbar sind. Sobald Sie dies wissen, rahmt es Ihr Denken ein, um eine vernünftige Antwort zu finden.

  3. Zersetzung verstehen . Probleme können nicht nur gelöst werden, sondern der Weg dazu ist so einfach wie Teilen und Erobern. Reduzieren Sie ein Problem auf einfachere Komponenten, und Ihre Antwort wird immer angezeigt.

  4. Wissen, wie man misst . Neue Entwickler müssen nicht nur Probleme zerlegen können, sondern auch wissen, wie sie Fakten über diese Probleme sammeln können. Wie lang? Wie groß? Wie schnell? Wie viele? Einfache Fakten sind ein Schritt zum Verständnis und zum objektiven Denken. Annahmen ohne Fakten zu treffen, ist eine einfache Möglichkeit, sich im Problembereich zu verlieren.

  5. Sei objektiv . Alle Probleme können einfach zerlegt, gemessen und verstanden werden. Die Probleme, die nicht verstanden werden können, erfordern lediglich eine zusätzliche Zerlegung, Messung und ein zusätzliches Verständnis. Es hat keinen Sinn, wütend oder frustriert zu werden, und es ist auch nicht produktiv, über Theorien zu streiten oder Schuldzuweisungen zu geben. Jedes irrationale Verhalten oder jede irrationale Überzeugung im Zusammenhang mit dem Lösen von Problemen ist Gift, was es sehr schwierig macht, Lösungen zu finden.

  6. Bevorzugen Sie Muster und Prinzipien . Sie werden auf Dutzende von richtigen Möglichkeiten stoßen, Dinge, Sprachen, Programmiermodelle, Computerarchitekturen und sogar technische Methoden zu tun. Es gibt keinen einzigen richtigen Weg, aber es gibt solide zugrunde liegende Konzepte, die Sie immer wieder anwenden können. Lernen Sie, diese Muster zu sehen, da sie Ihr Lernen und Denken bei jedem Schritt des Weges leiten.

Bruce Alderson
quelle
1
  1. Eine Leidenschaft für gutes Programmieren
  2. Demut
  3. Die Fähigkeit, schnell neue Dinge zu lernen
TaylorOtwell
quelle
0

Als Arbeitgeber werde ich nur Leute als Programmierer beschäftigen, die:

  1. Erfahrung im einmaligen Durchlaufen von Code.
  2. Kann ein geeignetes Designmuster auswählen, um ein einfaches spezifisches Problem zu lösen.
  3. Kann Code implementieren, der das ausgewählte Designmuster widerspiegelt.

Nach meiner Erfahrung verfügen weniger als 5% der Absolventen der Informatik, die sich für Programmierjobs bewerben, tatsächlich über diese Fähigkeiten. Dies sind die Mindestfähigkeiten, die erforderlich sind, um kommerziell nützlich zu sein, und vor allem ist nicht jeder in der Lage, diese Fähigkeiten zu erlernen.

Andere nette Dinge sind:

  • Erfahrung in der Arbeit an einem Teamprojekt
  • Verwendung der Quellcodeverwaltung
  • Erfahrung mit Unit-Tests

Diese erleichtern die Integration in das bestehende Entwicklungsteam, sind jedoch Fächer, die normalerweise am Arbeitsplatz unterrichtet werden können.

Michael Shaw
quelle
0

Ich hatte einmal ein Team, das ich mit größtenteils neu graduierten Mitarbeitern "geerbt" hatte, und ich hatte die Erfahrung, dass diejenigen, die "neben" dem Studium echte Programmierung machten (um etwas mehr Geld zu verdienen), die fähigsten Teammitglieder waren. Daher ist Erfahrung der Schlüssel und es spielt keine Rolle, welche Sprache.

Wenn Sie jedoch nachsehen, wonach Personalvermittler suchen (auf allen gängigen Websites für Personalvermittler wie jobserver.com usw.), ist es interessant zu beobachten, dass viel nach C ++, C #, Java gefragt wird, aber auch nach anderen gesucht wird und Auch "exotische" Dinge wie COBOL gibt es noch.

hol
quelle
0
  1. Zwischenmenschliche und kommunikative Fähigkeiten
  2. Pragmatischer Ansatz (nicht diese akademische Theorie)
  3. Fähigkeit, als Kunde zu denken, der technisch nicht geneigt ist
  4. Fähigkeit zu bewerten, was wichtig ist / und was in Bezug auf Kosten / Nutzen außer Acht gelassen werden kann
  5. Teamfähigkeit
  6. Fähigkeit, strategisch zu denken: Architektur, Erweiterbarkeit, Skalierbarkeit
  7. Offenheit zu akzeptieren, dass Universitätslehre wenig mit der realen Welt zu tun hat (hängt von der Universität ab - manche schneiden davon besser ab).

Der Lernprozess in diesem Beruf endet nie. Man muss ständig lernen und sich verbessern, sonst "fällt" er sehr schnell aus dem Spiel.

Turm
quelle
Diese sind alle nützlich. Fast null Hochschulabsolventen haben sie jedoch und sie sind nicht kritisch, da die meisten leicht am Arbeitsplatz erworben werden können. Ich denke, Sie haben eine andere Frage beantwortet.
dbkk
@dbkk - Ich bitte um Verzeihung, aber die Frage war nicht "welche Fähigkeiten Programmierer haben", sondern "was ... sollte". Nein, sie sind auch nicht leicht zu erwerben. Im Gegenteil - meistens fehlen den meisten Menschen mit langjähriger Erfahrung noch die meisten.
Turm
1
Dies sind allgemeine Fähigkeiten, und viele eignen sich nicht wirklich zum Lernen in der Schule.
David Thornley
-1

Die anderen Antworten sind gut, aber ich würde sagen, dass die Nummer 1 der übersehenen Fähigkeiten an der Universität tatsächlich Software-Engineering zu sein scheint .

Die Grundkurse zum Unterrichten von OOP und einer Sprache wie Java sind großartig, aber warum schreiben Studenten (zumindest an meiner örtlichen Universität) im 3. und 4. Jahr Compiler und Betriebssysteme, anstatt zu lernen, wie man eine gute Architektur identifiziert und erstellt, wie Anforderungen zu analysieren und daraus eine Liste technischer Spezifikationen zu erstellen, und vielleicht am wichtigsten, was der Unterschied zwischen gutem Code, der funktioniert, und schlechtem Code, der funktioniert, ist.

Es ist wie unsere Universitäten fast wollen am laufenden Band produzieren Programmierer anstelle von Software - Ingenieuren . Ich würde niemals jemanden einstellen, der keine technischen Fähigkeiten aufweist.

Nicole
quelle
4
Denn was den Menschen beigebracht wird, ist Informatik, nicht Software-Engineering. Dieses Problem würde verschwinden, wenn Universitäten und Studenten erkennen würden, dass Informatik! = Software-Engineering, Informatik eine Wissenschaft ist, Informatik nicht Programmieren und Software-Engineering mehr als Programmieren.
Thomas Owens
-1. Es ist wichtig zu lernen, wie Dinge unter der Haube funktionieren (Compiler, Betriebssysteme, Assemblersprache usw.), auch wenn Sie nie auf dieser Ebene arbeiten, da Sie irgendwann mit undichten Abstraktionen konfrontiert werden.
Dsimcha
@dsimcha, wenn Sie das glauben, haben Sie eine sehr enge Vorstellung davon, welche Arten von Software-Ingenieuren derzeit in Unternehmen in der realen Welt beschäftigt sind. Es ist nicht so, dass diese Dinge keinen Mehrwert bringen - es sind die Opportunitätskosten, wenn man etwas Wesentlicheres nicht lehrt.
Nicole