Welche Sprachen (oder Klassen (wie in Paradigmen) von Programmiersprachen sowie eine empfohlene Sprache dieser Klasse) sollte jeder Informatikstudent Ihrer Meinung nach am College unterrichtet werden? Motivieren Sie Ihre Antworten. warum diese Sprache? Welchen Nutzen wird man daraus ziehen? Welche Konzepte lehrt es (besser als Sprache X)?
Anmerkung / Klarstellung : Bei dieser Frage handelt es sich um Informatik mit Schwerpunkt auf Software-Engineering, nicht um reine Informatik. Der Schwerpunkt liegt nach wie vor auf der Informatikausbildung und nicht auf der Software-Ingenieurausbildung.
Antworten:
Ich werde eine Liste geben:
Die Schüler sollten zumindest mit all diesen Paradigmen konfrontiert sein. Nicht nur ein oder zwei.
Ich nehme an, dass viele Leute Python vorschlagen werden, um den prozeduralen Stil, den OOP-Stil und vielleicht auch andere zu behandeln, aber ich habe nicht genug persönliche Erfahrung mit Python, um es sicher empfehlen zu können.
quelle
Ich persönlich finde es etwas traurig, dass funktionale Sprachen nicht mehr so vorherrschend sind wie früher. Ich denke, dass die Studenten der Informatik zumindest einer Sprache aus allen wichtigen Paradigmen ausgesetzt sein sollten: prozedural, objektorientiert, funktional und dynamisch.
quelle
Ich denke, einem ausgewogenen CS-Schüler sollte eine Sprache in jedem der vier Programmiersprachentypen beigebracht werden:
Funktional - Lisp / Haskell / PostScript. Ich habe nicht viel Erfahrung mit Haskell, aber ich habe andere Programmierer gehört, die davon schwärmen. Wenn Sie die Konstrukte der funktionalen Programmierung verstehen und wissen, warum sie in vielen Situationen nützlich sind, können Sie Algorithmen auch in anderen Sprachen besser organisieren.
Objektorientiert - Treffen Sie Ihre Wahl. C # / Java / Python / Ruby / yadda yadda yadda. Dieser Typ muss einfach gelehrt werden, weil das moderne Unternehmen will.
Imperativ - C / Fortran / Pascal. Diese sind heutzutage weniger verbreitet, sollten aber aus praktischer / historischer Perspektive gelernt werden. Die Methoden, die sie anwenden, sind immer noch praktikabel, denn in jeder Sprache läuft alles auf eine Anweisung hinaus. Und imperative Sprachen sind sehr gut darin, Anweisungen aufzulisten und zu befolgen.
Logisch - ProLog. Ich habe noch nie eine gute praktische Verwendung für eine dieser Sprachen gefunden, aber ich fand einige der Konzepte hinter den logischen Sprachen nützlich, als ich versuchte, herauszufinden, wie ich einige meiner Methoden in objektorientierteren Sprachen schreiben kann. Ich konnte mich während meiner Studienzeit nicht lange auf die logischen Sprachen konzentrieren, und ich denke, ein stärkerer Fokus dort hätte mir dann vielleicht etwas Gutes getan.
quelle
Die erste Sprache, die jeder CS-Absolvent beherrschen sollte, ist die, die sein Potenzial für die Erreichung eines hervorragenden Arbeitsplatzes maximiert. Das wird sich im Laufe der Zeit ändern, es wird sich basierend auf der Definition eines großartigen Jobs durch den Einzelnen ändern , und es wird sich je nach geografischer Region ändern.
Im Moment werde ich sagen, dass Englisch die erste Sprache ist, die jeder CS-Hauptfach beherrschen sollte (dies variiert natürlich je nach Region).
quelle
Ich denke, es ändert sich mit der Zeit, aber im Idealfall - 3 Sprachen aus 3 sehr unterschiedlichen Perspektiven. Zu meiner Zeit war es prozedural, OO und funktional - Pascal, C ++ und LISP. Ich bin nicht so sehr von diesen dreien begeistert. Aber wenn ich interviewe, suche ich nach:
Als weiterer Beruf - ich denke, CS-Programme müssen Studenten auf dem Markt in wichtigen Sprachen ausbilden. Ich denke, zu jedem Zeitpunkt haben 2-3 Sprachen für die meisten Berufe einen ernsthaften Stellenwert. Ich denke, eine Schule schuldet es den Schülern, 2 von 3 dieser Sprachen zu erlernen, wenn in mindestens einer Sprache eine umfassende Ausbildung vorhanden ist.
quelle
Suchen Sie für einen CS-Studenten nach Programmiersprachen, die eng mit den besprochenen CS-Konzepten verknüpft sind. Ich würde vorschlagen:
Die Liste könnte auf diese Weise fortgesetzt werden, aber die Grundidee ist ziemlich einfach: Bringen Sie den Schülern die Programmiersprache bei, die am besten zu der Art und Weise passt, wie Sie die Konzepte vermitteln möchten.
quelle
yacc
Damit Sie sich ein Bild davon machen können, was sich hinter den Kulissen abspielt, unabhängig von der verwendeten Programmiersprache. Es hilft dabei, grundlegende Konzepte wie toten Code und verschiedene Arten von Optimierungen zu verstehen, die ein (guter) Compiler für Sie ausführen kann.
quelle
Lisp (mit CLOS für OOP) und Haskell. Diese Frage ist nicht auf Studierende beschränkt. Neue ausgefallene Programmiersprachen haben eine Menge Features von diesen beiden ausgeliehen (kopiert, gestohlen? ... nein, es ist nicht schlecht). Sie können sich auf die Zukunft vorbereiten. Funktionale Programmierung (Stil) ist heute wichtiger und wird in imperativen Programmiersprachen wie C # (LINQ) oder C ++ (Lambda) und vielen mehr eingeführt. Es ist schade, dass einige Schüler nur Java lernen.
quelle
Ich denke, die Sprache ist nicht so wichtig, wie die Leute glauben.
Ja, Sie müssen wissen, wie man usw. programmiert, aber viele großartige Programmierer sind Autodidakten, die sich auf ihre realen Erfahrungen stützen, die ihnen bei der Entwicklung helfen.
Die Schüler könnten mit einigen Lektionen über das Programmieren in der realen Welt und nicht nur über die Buchmethoden fertig werden, dies würde sie "runder" machen und meiner Meinung nach bessere Entwickler / Absolventen.
Nachdem ich die Universität verlassen hatte und mit der Arbeit begonnen hatte, lernte ich mehr über Programmierung und Softwareentwicklung!
quelle
IST ES WIRKLICH WICHTIG ?
Normalerweise juckt es hinter dieser Frage: "Welche Schlagworte kann ich in meinen Lebenslauf aufnehmen, die mir die lukrativsten / interessantesten / herausforderndsten / leichtesten Jobs bringen?". Die Frage hat jedoch Vorzüge, da die meisten Lebensläufe zuerst von HR-Mitarbeitern überprüft werden, die kein Verständnis dafür haben, wonach sie suchen. Aber es ist sehr flach, denn sobald Sie die Tore passiert haben, müssen Sie die Waren liefern.
Es ist nicht die Sprache, die Sie kennen, die Sie zu einem guten oder schlechten Programmierer macht, sondern die Art und Weise, wie Sie sie verwenden können. Dafür gibt es grundsätzlich zwei Kategorien von Programmierern:
Diejenigen, die sich darauf konzentrieren, eine Sprache bis ins Mark zu lernen. Das wichtigste ist die Sprache und wie man sie benutzt. Im Extremfall neigen sie dazu, jeden kleinen Codefleck zu optimieren, und verwenden häufig undurchsichtige Funktionen, nur weil sie dies können.
Dann gibt es diejenigen, die etwas über Techniken und Paradigmen lernen wollen. Welche Sprache sie benutzen, spielt keine Rolle, solange sie ihr geistiges Bild elegant ausdrücken kann. Im Extremfall tendieren diese dazu, UML oder andere solche Systeme zu verwenden, in der Hoffnung, dass andere das Grunzen des Codierens übernehmen.
Meiner Meinung nach braucht man beides. Nr. 1 vermittelt kurzfristige Fähigkeiten und erleichtert Ihnen bei einer vernünftigen Auswahl das Durchstarten der Personalabteilung. Nr. 2 begleitet Sie während Ihrer gesamten Karriere und definiert Sie als Programmierer.
Nr. 2 wird Ihnen eine Anleitung geben und Ihren Gedankengang zu einer funktionierenden Lösung des vorliegenden Problems organisieren, aber ohne 1 bleibt es eine Idee, die für immer in den Grenzen des Dampfgeschirr-Himmels schwebt (oder der Hölle, je nachdem, von wo Sie es betrachten).
# 1 gibt Ihnen die Möglichkeit, Ideen in real funktionierende Systeme umzusetzen, aber ohne 2 tendieren Ihre Systeme zu krebsartigen, formlosen Monstern.
quelle
Ich glaube, Sie haben Ihre Frage teilweise selbst beantwortet.
Es ist sehr wichtig, den Schülern die Möglichkeit zu geben, mit verschiedenen Paradigmen in Kontakt zu treten. Die eigentlichen Sprachen sollten keine Rolle spielen.
Natürlich ist es wichtig, in erster Linie die Paradigmen zu vermitteln, die die meisten Arbeitsmöglichkeiten bieten (derzeit wahrscheinlich OOP). Dementsprechend ist es auch besser, eine weit verbreitete Sprache für dieses Paradigma zu unterrichten, da dies nützlicher ist, als etwas zu lernen, das Sie wahrscheinlich niemals verwenden werden. Daher hasste ich es auch, Pseudocode für meine Prüfungen schreiben zu müssen. Pseudocode ist in Ordnung, solange es keine 'feste' Syntax gibt. Sie sollten nur in der Lage sein, Konzepte zu vermitteln.
Also konkret:
OOP: .NET oder Java
Mindestens 1 zusätzliches Programmierparadigma, um den Schüler auf andere Ansätze aufmerksam zu machen.
Funktional: Lisp?
quelle
Assemblersprache und Mikrocode. Ein CS-Student sollte alle grundlegenden Abstraktionsebenen zwischen booleschen Zustandsautomaten und den neuesten hochrangigen funktionalen / OOP / etc verstehen. Paradigma der Programmiersprache.
Basic oder Logo oder Squeak (et.al.), wenn sie jemals verstehen wollen, wie man kleinen Kindern Computerkenntnisse beibringt.
Fortran, Cobol und Lisp, wenn sie die Geschichte der Programmiersprachen verstehen wollen und die eigentlichen Probleme, die durch moderne Praktiken behoben werden, kennen.
quelle
Die Auswahl von 3 oder mehr Sprachen aus verschiedenen Paradigmen ist nicht so schwer, es wurden viele gute Antworten gegeben. Wenn ich jedoch nur eine Sprache auswählen müsste, würde ich mich für Scala entscheiden, da es sowohl funktional als auch objektorientiert ist. Sie können verschiedene Ansätze in derselben Sprache erklären und vergleichen.
quelle
Vergessen Sie nicht die stapelorientierten / verketteten Sprachen! Sie können echte Geisteskrankheiten sein. Sie betonen die Komplexität des Aufbaus mit kleinen, leicht verständlichen Grundelementen. Sie können sie verwenden, um pointfree (oder stillschweigenden) Code zu schreiben, der sich so verdammt sauber anfühlt.
Die klassische Sprache ist Forth , aber heutzutage bin ich Factor . Sehenswert sind auch Joy und Cat . Verpassen Sie nicht das Wiki für verkettete Sprachen . Es macht mehr Spaß als eine Tasche voller Hämmer!
quelle
Etwas Funktionales, Haskell oder Lisp, wäre meine erste Wahl, aber vielleicht Erlang. In funktionalen Sprachen lernen Sie wirklich, wie Sie auf sehr leistungsstarke Weise Abstraktionen erstellen.
quelle
Trotz des Mangels an Mainstream finde ich, dass D, speziell Version 2, einige interessante Lektionen bietet, die anderswo nicht leicht zu lernen sind. Es ist ein ernsthafterer Versuch als jede andere Sprache, die ich mir vorstellen kann, eine imperative / prozedurale, objektorientierte und funktionale Programmierung zu schaffen, um gut miteinander zu spielen und eine Programmierung auf einem sehr niedrigen Niveau zu ermöglichen (Zeiger, manuelle Speicherverwaltung, Inline-Programmierung) Assemblersprache) und ein sehr hohes Niveau (generische und generative Programmierung) in derselben Sprache.
Das ist wertvoll, denn anstatt Paradigmen isoliert zu betrachten, als ob sie in verschiedenen Universen existieren, können Sie den Wald durch die Bäume sehen. Sie können die Stärken und Schwächen jedes Paradigmas auf einer detaillierten Ebene erkennen, wenn Sie sie in Ihre Programme integrieren. Sie werden sehen, wie wichtige Aspekte von Paradigmen in Form von Code auf niedrigerer Ebene in Bibliotheken implementiert werden können. Das Standardbibliotheksmodul std.algorithm implementiert wichtige funktionale Programmierprimitive, ist jedoch einfacher D-Code ohne Zauberei. Ebenso std.rangeImplementiert Lazy Evaluation, ist aber wieder ziemlich einfacher D-Code. Sie werden die Kosten verstehen, die mit den Grundelementen jedes Paradigmas verbunden sind, da die metallnahen Funktionen von D die tatsächlichen Vorgänge unter der Haube relativ transparent machen. Sie können sogar einen Low-Level-Code schreiben, der wie C aussieht, und dann eine hübsche High-Level-Benutzeroberfläche in derselben Sprache erstellen, ohne dass magische Leimschichten in die Quere kommen.
quelle
Pseudocode.
Fachleute sollten in der Lage sein, ihre Ideen in einer kohärenten, strukturierten Weise ohne eine Framework- oder Syntax-spezifische Fachsprache zu erläutern. Ich sollte den Unterschied zwischen eckigen und geschweiften Klammern nicht kennen müssen, um Ihren Algorithmus zu verstehen. Ich sollte nicht wissen müssen, was
??
bedeutet oder was diegrep
Schalter sind.Schreiben Sie im Klartext, aber strukturieren und formatieren Sie es wie Code. Jeder kann es dann in einer beliebigen Sprache implementieren.
edit: Diese Antwort ist teilweise durch die Unfähigkeit einiger Programmierer motiviert, Pseudocode zu schreiben.
Der Vorteil von Pseudocode besteht darin, dass Stakeholder ohne Programmierkenntnisse ihn verstehen können. Ich schlage nicht vor, dass Sie möchten, dass BAs und Benutzer Ihren Code prüfen. Es kann jedoch hilfreich sein, wenn ein Nicht-Programmierer den erforderlichen Algorithmus versteht. Psuedocode beseitigt die Notwendigkeit zu erklären
for (int i = 0; i < j; i++)
und was ist im Wesentlichen Boilerplate Jargon.quelle
C.
Natürlich sollte man mehr als eine Sprache kennen und nicht nur eine alte Verfahrenssprache. Aber wenn ich mit nur einem Compiler auf eine einsame Insel gehen müsste, würde ich mit meinem guten alten gcc gehen. Sie können High-Level-Programmierung verstehen, wenn Sie sich mit Low-Level-Programmierung auskennen. Ich denke, dass es andersherum nicht stimmt.
quelle
Einige der Programmiersprachen, die angewendet wurden, um allgemeine Problemlösungsfähigkeiten und Programmierkonzepte zu erwerben, sind Logo und Karel. Sie sollten vor C / C ++ / Java / Lisp / PERL / Assembly / jedem Programmierparadigma unterrichtet werden.
Die Schüler erhalten eine sehr praktische Einführung in die Programmierung.
quelle
Alles mit Gegenständen. Stellen Sie einfach sicher, dass sie es gut lernen.
Ich würde jederzeit einen großartigen Java-Programmierer für c # einstellen, aber ich hätte viele Zweifel, jemanden einzustellen, der nie echten Code geschrieben hat
quelle