Wer kann programmieren lernen? [geschlossen]

17

Ich zögere immer, wenn ich mit Professoren darüber spreche, den Prozentsatz der Menschen, die einen Abschluss vom Typ CS haben, im Vergleich zu der Zahl zu verbessern, die anfangen zu glauben, dass sie das wollen. Einerseits denke ich wirklich, dass es wichtig ist, dass Fachleute einbezogen werden und dieses Feedback geben, andererseits wäre es besser, wenn weniger unterdurchschnittliche Schüler CS-Abschlüsse erhalten würden.

Ich glaube nicht, dass jeder Verstand für dieses Gebiet geschaffen ist und man muss ein guter Student sein, der ein Leben lang studiert. Man muss ein hohes Maß an Geduld und Problemlösungskompetenz haben, nur um vorbeizuschauen. Wenn Sie die "richtige" Art von Gehirn haben, sind diese schweren Probleme der Motor für Sie, weiterzumachen. Wenn Sie nur eine lange Liste einfacher Probleme haben, wird es Ihnen langweilig, und diese Leute sind eigentlich nicht in der Lage, sich wiederholende Jobs zu machen. Ich muss nicht auf alle Details eingehen ... Wenn Sie dies lesen, wissen Sie wahrscheinlich, worauf ich hinaus will.

Die Frage ist also: Wie finden Sie die Ausgewogenheit eines Studiengangs, der für genügend Personen zugänglich ist, um finanziert und als erfolgreich eingestuft zu werden? Vielleicht ist eine bessere Frage, welche Metrik verwenden Sie, um zu wissen, ob die Änderungen, die Sie in einem Studiengang vornehmen, es verbessern? Ich weiß nicht, dass eine höhere Abschlussquote eine gute Messgröße ist. Und es scheint, dass sich das Feedback, das Sie versuchen könnten, viele Jahre später über die Jobs der Absolventen zu erfassen, zu sehr verzögert.

Ich habe lange mit dieser Frage gekämpft, vor allem, weil ich glaube, dass es keine Antwort gibt. Aber ich dachte, ich würde fragen, ob jemand etwas darüber weiß.

Ergänzung: Ich wurde kürzlich von einem sehr klugen Professor daran erinnert, dass nicht jeder, der einen CS-Abschluss besitzt, auch nur ein Vollzeitprogrammierer sein möchte, wenn er tatsächlich entdeckt hat, was das bedeutet. Aber mit der Ausbildung, die sie erhalten haben, könnten sie möglicherweise großartige Projektmanager, Manager, Systemadministratoren usw. werden. Ich denke, dies war ein sehr guter Punkt, über den ich hier nicht nachgedacht hatte. Es gibt einen sehr hohen Prozentsatz von Menschen, die nicht in dem Bereich arbeiten, in dem sie studiert haben. CS ist keine Ausnahme. Die zusätzlichen Leute zu haben, hilft nicht nur beim Budget für das Studium, sondern auch dabei, den Prozentsatz der Nicht-Programmierer zu erhöhen, die noch genug darüber wissen, um mit Programmierern zusammenzuarbeiten.

Beth Whitezel
quelle
@Job- Danke, das ist ein toller Punkt und ich fühle mich viel besser.
Beth Whitezel
2
@job: Ich spreche als Psychologiestudent und programmiere jetzt NMR-Geräte, das kann ich bestätigen.
Matt Ellen

Antworten:

33

Ok, auf vielfachen Wunsch ... Lass es den freien Markt herausfinden. Wissen Sie, 95% der Psychologie-Majors machen am Ende etwas anderes. Nicht jeder mit einem CS-Abschluss / Nebenfach programmiert, aber er ist ein besserer Manager, Analyst und Projektmanager als derjenige ohne. Tragen Sie nicht das Gewicht der Welt auf Ihren Schultern. CS-Abschluss ist nur ein Stück Papier. Diejenigen mit Abschlüssen in Mathematik, Physik, Chemie und Biologie werden Programmierer, und nicht jeder mit einem CS-Abschluss wird Programmierer. Ohne Millionen von Kindern, die bestrebt sind, der beste Baseballspieler zu sein, hätten wir keine so großartigen Stars. Das System regelt sich selbst.

Job
quelle
Ich stimme einigermaßen zu, aber ich musste auch Code unterstützen, der von Leuten mit Abschlüssen in Physik, Mathematik und Maschinenbau geschrieben wurde, die dachten, sie wären Programmierer. Nur weil jemand etwas für seine Arbeit tut, heißt das nicht, dass er es gut macht ...
Joel C
7
Ich habe viel schlechten Code von CS-Schülern gesehen. Ich habe erstaunlichen Code gesehen, der von Leuten aus Mathe oder Physik oder was auch immer geschrieben wurde. Es gibt so gut wie keine Korrelation zwischen dem, was Sie genau studiert haben, und der Qualität Ihres Codes.
jhocking
1
Geh auch Biologie!
jhocking
11

Ich denke zwar, dass Hiobs Antwort wichtig ist, aber die gleiche Antwort könnte auf eine Grad-Mühle angewendet werden. "Ich habe meine 199,95 Dollar bezahlt, jetzt gib mir meinen CS-Abschluss."

Es ist nicht wirklich Ihre Aufgabe, die Schülerschaft nach einem Standard von "echten Programmierern" herunterzufahren. Den Schülern beibringen, wie man programmiert / gestaltet (vermutlich?). Wenn Sie Ihre Denkweise im College nicht geändert haben, haben Sie Ihre Zeit dort verschwendet. Ihr Ziel ist es, jedem Studenten, der Interesse zeigt, zu zeigen, dass das Werden eines Programmierers seine Denkweise zum Besseren ändert. Sie tun das indirekt, indem Sie ihnen zeigen ...

  1. Was Programmierung wirklich ist und ...
  2. dass sie es schaffen.

Wir machen es falsch

Es gibt umfangreiche Untersuchungen, die zeigen, dass die Art und Weise, wie 95% unserer College-Programme Programmieren / CS lehren, schrecklich ist. Das durchschnittliche CS-Programm beginnt mit

  • Ein Semester Basisprogrammierung in C ++ / Java / C #, das 16 Wochen lang einige fortgeschrittene Dinge lehrt als "this is a for loop". Eine Analogie könnte sein, wenn die Abteilung Physik ein Semester lang das griechische Alphabet studierte, bevor sie mit der Kinematik begann.
  • Das zweite Erstsemester greift in grundlegende Datenstrukturen ein und hinterlässt in der Regel 1/3 bis die Hälfte der Studierenden.
  • Das zweite Jahr wird in einer Kombination aus Assembler, Datenstrukturen, algorithmischer Analyse, einem Ethikkurs und vielleicht Ihrem ersten thematischen Kurs verbracht. In diesem Jahr neigen Sie dazu, die Hälfte Ihrer neu hinzukommenden Studenten zu verlieren.
  • Junioren und Senioren besuchen Klassen mit Namen wie "Grafik", "Networking I und II", "Betriebssystem" und es ist das erste wirklich interessante Material, das die Schüler sehen können.

Fast alles andere ist besser

Nahezu jedes Experiment verbessert die Situation, gemessen am Verständnis der Schüler für die Themen UND der Einschreibungs- UND Abschlussquoten. Einige der Experimente, die ich in den Zeitschriften von ACM CSE gesehen habe, sind ...

  • Aufbau von sehr einfachen theoretischen Zustandsautomaten über Assembler bis hin zu C und Abschluss mit C # / Java in Ihrem Abschlussjahr. Der Fokus liegt darauf, die Abstraktionsebenen langsam hochzukriechen.
  • Wählen Sie eine sehr "einfache" Sprache, um die Schüler auf Datenstrukturen und Abstraktion zu konzentrieren. Ich habe gute Ergebnisse mit Schülern gesehen, die bis zum Ende des ersten Studienjahres ziemlich komplexe Web-Apps in einer Schema-Variante geschrieben haben. (Es war ein modifiziertes Wiki, das den Seitentext durch das Schema laufen ließ, bevor es angezeigt wurde ... irgendwie lustig)
  • Anfänger auf einen bestimmten Bereich fokussieren (Networking) und jede Java-Struktur / Anweisung als "beiseite" lehren. Schüler der zweiten Woche, die den Mailserver anpingen, um eine Liste ihrer E-Mails anzuzeigen, ist das endgültige Projekt ein einfacher IM-Client. Der Schwerpunkt liegt darauf, den Schülern zu zeigen, wie Programmierer einen Teil der Welt zum Arbeiten bringen.
  • Einige Programme konzentrieren sich auf Robotik. Erstsemester spielen mit Lego-Mindstorms ... Studenten und Senioren arbeiten mit den MEs und EEs in einer campusübergreifenden Zusammenarbeit zusammen, um ziemlich komplexe Systeme zu erstellen.
  • Ein Programm konzentriert sich auf das Lesen von Code für das erste halbe Semester. Sie analysieren den Code im X11-System, um 8 Wochen lang die Ablaufsteuerung und die grundlegende Syntax beizubringen, bevor sie überhaupt mit dem Schreiben von Code beginnen. Ihre ersten Programme sind kleine Patches, um ein wenig Verhalten zu ändern.

Jedes einzelne dieser Experimente zeigte massive Verbesserungen des anfänglichen Interesses der Schüler, des Wissenstransfers und der Bindung bis zum Abschluss. Einige sind für bestimmte College-Umgebungen besser geeignet als andere. Wenn Sie jedoch die im obigen Abschnitt beschriebene Struktur einhalten, fragen Sie sich: "Würde ich die ersten zwei Jahre dieses Programms durchhalten?"

jkerian
quelle
Ich stimme Ihnen darin zu, dass wir uns darauf konzentrieren sollten, ihnen zu zeigen, worum es beim Programmieren geht und wie es Ihren Denkprozess verändern kann, unabhängig davon, was Sie danach tun. Gute Gedanken.
Beth Whitezel
2

Programmieren heißt, logisch zu instruieren, um die gewünschte Ausgabe zu erzielen. Mit anderen Worten, es fordert den Computer auf, eine Aufgabe zu erledigen. Der einzige Weg, um vorwärts zu kommen, ist das Üben.

Genau wie beim Erlernen von Englisch oder einer anderen Sprache müssen Sie zunächst die Syntax (Alphabet) erlernen und dann mit der Grammatik und anderen Konstrukten fortfahren. Die erforderliche Zeit hängt von der Komplexität der Sprache ab. Python ist mit höheren Programmiersprachen wie SQL fast wie das Schreiben von Englisch.

Nayan
quelle
2

Ein paar Aspekte würden helfen, denke ich -

  • Profis, die sich der modernen Realität bewusst sind . Wenn sie in der Lage sind, über aktuelle Technologien zu sprechen und darüber, wie sie in theoretische Rahmenbedingungen passen, ist dies für Studenten, die sich der Geschichte nicht bewusst sind, weitaus relevanter als Dissektionen von VAXen ohne Bezug zur aktuellen Technologie.

  • Abteilungsunterstützte Praktika. Wenn die Abteilung mindestens zwei Sommer bezahlter Arbeit mit Technologiefirmen garantieren kann, gibt es einen großen Anreiz, bei der Sache zu bleiben.

Ehrlich gesagt, sind moderne Informatikstudenten viel gesegneter als diejenigen, die vor fünf bis zehn Jahren gelebt haben. Die Möglichkeit, ein Low-End-System zu kaufen und dann eine VM zu installieren und mehrere Sprachen, Betriebssysteme usw. kostenlos zu lernen, ist ein solcher Enabler, der nur schwer zu übertreiben ist.

Natürlich haben sich die wegweisenden Leute wie Hopper und Knuth selbst beigebracht, ohne zu glänzen. Genius wird raus.

Paul Nathan
quelle
Die Idee ist großartig ... zwei Sommer garantierter bezahlter Praktikumsarbeit sind leider nicht realistisch. Ja, es gibt bezahlte Praktika, aber die meisten Absolventen haben das Glück, gerade jetzt ein Praktikum zu bekommen, und müssen sich oft mit unbezahlten zufrieden geben. Dies kann in anderen Staaten anders sein. Ich denke, Sie haben Recht damit, dass sie mehr Möglichkeiten haben. Sie können zu viel mehr Open-Source-Projekten beitragen, als es vor ein paar Jahren noch war.
Beth Whitezel
@BitOff: Ich habe noch nie von einem unbezahlten CS-Praktikum gehört.
Paul Nathan
Im Ernst? Dann muss es eine lokalisierte Sache sein.
Beth Whitezel
1

Schaffen Sie einen Staging-Bereich für potenzielle, erfolgreiche Studenten außerhalb Ihres Studiengangs, um das Risiko zu verringern. Dies könnte das Sponsern von AP CompSci-Klassen an örtlichen Gymnasien umfassen, um die Spreu vom Weizen zu trennen. Wenn sich herausstellt, dass dies zu schwierig ist, versuchen Sie, lokale DECA-Kapitel mit einem CS-orientierten Programm in den Abteilungen der High School oder des Colleges zu infiltrieren (oder ein neues zu erstellen). Umgekehrt zeigen Sie unternehmerisch denkenden Studenten, die nach Managementfähigkeiten mit möglicherweise nicht realisiertem CS-Potenzial suchen, einen neuen Weg, um ihre geschäftlichen Ambitionen durch Ihr akademisches Medium zu erfüllen.

Travis J
quelle
Ja, ich stimme voll und ganz zu, dass wir mehr tun müssen, um CS in einem früheren Alter als am College einzuführen. Ich weiß, dass die meisten Hochschulen ein oder zwei fortgeschrittene Computerklassen anbieten, die in eine Programmiersprache umgewandelt werden können, aber ich denke nicht, dass das ausreicht. Ich habe oft geglaubt, dass man, wenn man 4.-6. Schülern eine einfache, kinderfreundliche Sprache beibringen könnte, ihr Interesse im richtigen Alter wecken würde. Ich habe Grundkenntnisse erworben, als ich 8 oder 9 Jahre alt war, und obwohl ich noch ungefähr 10 Jahre gebraucht habe, um mich wirklich darauf einzulassen, blieb mir eine großartige Erinnerung an "Programmieren".
Beth Whitezel
1

Ich würde argumentieren, dass der Schlüssel darin liegt, verschiedene Ebenen solcher Programme zu verstehen:

Universitäten - Hier kann man in der Regel nur zum Zweck des Studiums studieren. In diesem Fall kann es einen ganz anderen Standard für die Erstellung und Anpassung von Programmen geben, da dies durchaus theoretisch sein kann, oder zumindest das, woran ich mich aus dem Studium der Informatik in meinen Oberstufen erinnere.

Hochschulen - Diese sind in der Regel eher karriereorientiert. Hier ist das Feedback der Branche und die Verbindung von Unternehmen mit Hochschulen von zentraler Bedeutung. Ein Blick auf die Praktika 6-12 Monate nach dem Abschluss kann als Maßstab dafür dienen, wie gut die Leute nach dem Abschluss abschneiden, da die Schlüsselfrage lautet, ob jemand ihre Zeit und ihr Geld für eine solche Ausbildung als lohnenswert ansieht oder nicht. Die Aktualisierung des Programms wird wahrscheinlich häufiger sein, da die Programme hier möglicherweise etwas kürzer sind, z. B. bei den Honour-Bachelor-Programmen der Universität mit einer Laufzeit von 4 Jahren und bei den College-Diplomprogrammen mit einer Laufzeit von 18 bis 24 Monaten. Daher besteht die Herausforderung eher darin, diesen Teil mit Unternehmen in Verbindung zu bringen, damit die Leute der Arbeit ausgesetzt werden und sehen können, was für sie funktioniert oder was nicht.

JB King
quelle