it-swarm-eu.dev

Welche Programmiersprachen sollte jeder Informatikstudent lernen?

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 geht es um Informatik mit starkem Fokus auf Software-Engineering, nicht um reine Informatik. Es ist immer noch die Informatikausbildung und nicht die Softwareentwicklung, die im Mittelpunkt steht.

13
Anto

Ich werde eine Liste geben:

  • Versammlung (ein relativ einfacher Dialekt): Es ist wichtig, mindestens ein wenig der Grundlagen zu verstehen
  • C: Verfahrenssprache, die an vielen Stellen verwendet wird. Belastet neue Schüler nicht auf einmal mit ganz neuen Konzepten wie OOD.
  • Java/C #/Eiffel/C++: Etwas Objektorientiertes ist gut. Jedes davon würde das Ziel erreichen, den Schülern OOD beizubringen. Sobald sie eine dieser Sprachen verstehen, sollten sie in der Lage sein, die anderen zu lernen. Es gibt viele Gute Sprachen, ich habe Eiffel aufgelistet, weil es auch Design-by-Contract hat.
  • LISP und Prolog: Bringt den Schülern eine völlig neue Denkweise bei, die wichtig ist, auch wenn sie keines davon "in der realen Welt" verwenden.
  • SQL und XML: Einführung neuer Methoden zum Nachdenken über Daten und zum Abrufen und Verwalten von Daten.

Die Schüler sollten zumindest allen dieser Paradigmen ausgesetzt sein. Nicht nur ein oder zwei.

Ich nehme an, viele Leute werden Python vorschlagen, um den prozeduralen Stil, OOP Stil und vielleicht andere abzudecken, aber ich habe nicht genug persönliche Erfahrung mit Python in der Lage sein, es sicher zu empfehlen.

Ich persönlich finde es etwas traurig, dass funktionale Sprachen nicht mehr so ​​überwiegend unterrichtet werden wie früher. Ich denke, dass zumindest Comp-Sci-Studenten einer Sprache aus allen wichtigen Paradigmen ausgesetzt sein sollten: prozedural, objektorientiert, funktional und dynamisch.

45
Michael Brown

Ich denke, einem ausgewogenen CS-Schüler sollte eine Sprache in jedem der 4 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. Das Verständnis der Konstrukte der funktionalen Programmierung und warum sie in vielen Situationen nützlich sind, hilft einem Programmierer, Algorithmen auch in anderen Sprachen besser zu organisieren.

Objektorientiert - Treffen Sie Ihre Wahl. C #/Java/Python/Ruby/yadda yadda yadda. Diese Art muss einfach gelehrt werden, weil das moderne Geschäft das will.

Imperativ - C/Fortran/Pascal. Diese sind heutzutage weniger verbreitet, sollten aber dennoch aus praktischer/historischer Perspektive gelernt werden. Die Methoden, die sie anwenden, sind immer noch praktisch, da in jeder Sprache alles auf eine Anweisung hinausläuft. Und zwingende Sprachen sind sehr gut darin, Anweisungen aufzulisten und zu befolgen.

logisch - ProLog. Ich habe für keine dieser Sprachen eine gute praktische Verwendung gefunden, aber ich habe einige der Konzepte hinter den logischen Sprachen als nützlich empfunden, wenn ich herausfinden wollte, wie einige meiner Methoden in objektorientierteren Sprachen geschrieben werden können. 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.

33
Joel Etherton

Die Sprache Nr. 1, die jeder CS-Major mit Abschluss kennen sollte, ist diejenige, die sein Potenzial maximiert, einen großartigen Job zu bekommen. Das wird sich im Laufe der Zeit ändern, es wird sich basierend auf der Definition des Einzelnen für großartige Arbeit ändern, und es wird je nach geografischer Region variieren.

Im Moment werde ich sagen, dass Englisch die Sprache Nr. 1 ist, die jeder CS-Major kennen sollte (dies natürlich variiert je nach Region.)

6
oosterwal

Suchen Sie für einen CS-Studenten nach Programmiersprachen, die eng mit den besprochenen CS-Konzepten verknüpft sind. Ich würde vorschlagen:

  • Schema, um die Lambda-Rechnung besser zu verstehen
  • Erlang, um das Schauspielermodell zu verstehen
  • Prolog für Prädikatenlogik und Beweissysteme
  • Haskell, für Typ/Kategorie-Theorie, und weil faule Bewertung so vollständig in der Sprache ausgedrückt wird
  • mindestens eine Assemblersprache - wenn Sie sie unter diesem Banner zählen möchten, würde ich auch eine Bytecode-Sprache wie die Java oder CLR-Bytecodes und die LLVM) einfügen IR
  • wahrscheinlich eine Hardware-Definitionssprache wie Verilog oder VHDL
  • Bison für eine Compiler-Konstruktionsklasse
  • etwas mit einem dynamischen Typsystem (Ruby fällt mir ein) ...

Die Liste könnte auf diese Weise fortgesetzt werden, aber die Grundidee ist ziemlich einfach: Bringen Sie den Schülern die Programmiersprache bei, die für die Art und Weise, wie Sie die Konzepte unterrichten möchten, am besten geeignet ist.

4
Aidan Cully

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 begeistert von diesen drei. Aber wenn ich interviewe, suche ich nach:

  • Ein gewisses Maß an Erfahrung mit einer Sprache, in der Sie auf die Speicherverwaltung achten müssen (C/C++ und viele andere)
  • Ein gewisses Maß an Erfahrung mit einer objektorientierten Sprache mit Erwartungen an die API-Verwendung und den verschiedenen verfügbaren Abstraktionen (C++/Java)
  • Eine "Stretch" -Sprache - etwas, das seltsam, hart und herausfordernd ist. Ich werde nicht einstellen, weil jemand LISP, Assembly oder eine andere herausfordernde Sprache kennt, aber ich möchte sehen, dass der Ingenieur vor einer Herausforderung stand, die ernsthafte Problemlösungen und jede Menge "Was zum Teufel ist das?" Momente.

Als ein weiterer Beruf - ich denke, CS-Programme müssen Studenten in prominenten Sprachen auf dem Markt schulen. Ich denke, dass zu jedem Zeitpunkt 2-3 Sprachen für die meisten Jobs eine wichtige Rolle spielen. Ich denke, eine Schule schuldet es den Schülern, die Möglichkeit zu bieten, 2 von 3 dieser Sprachen mit einer in mindestens einer verfügbaren Ausbildungstiefe zu lernen.

4
bethlakshmi

yacc

um eine Vorstellung davon zu bekommen, was sich hinter den Kulissen abspielt, welche Programmiersprache Sie auch verwenden. Es hilft dabei, grundlegende Konzepte wie toten Code und verschiedene Arten von Optimierungen zu verstehen, die ein (guter) Compiler für Sie durchführen kann.

3
mariotomo

Ich denke, die Sprache ist nicht so wichtig, wie die Leute glauben.

Ja, Sie müssen wissen, wie man programmiert usw., aber viele großartige Programmierer sind Autodidakten und stützen sich auf ihre realen Erfahrungen, die ihnen bei der Entwicklung helfen.

Die Schüler könnten einige Lektionen über das Programmieren in der realen Welt und nicht nur über die Buchmethoden gebrauchen, dies würde sie "runder" und meiner Wahl nach bessere Entwickler/Absolventen machen.

Nachdem ich die Universität verlassen und mit der Arbeit begonnen hatte, lernte ich mehr über Programmierung und Softwareentwicklung!

2
user18041

LISP (mit CLOS für OOP) und Haskell. Diese Frage ist nicht auf Studenten beschränkt. Neue ausgefallene Programmiersprachen haben viele Funktionen 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 wichtigen Programmiersprachen wie C # (LINQ) oder C++ (Lambda) und vielen mehr eingeführt. Es ist schade, dass einige Schüler Java) lernen.

2
knivil

Kommt es wirklich darauf an?

Normalerweise juckt es hinter dieser Frage: "Welche Schlagworte kann ich in meinen Lebenslauf aufnehmen, um die lukrativsten/interessantesten/herausforderndsten/einfachsten Jobs zu bekommen?". Obwohl die Frage ihre Vorzüge hat, werden die meisten Lebensläufe zuerst von HR-Mitarbeitern überprüft, 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:

  1. 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 Code-Fleck zu optimieren und verwenden oft obskure Funktionen, nur weil sie es können.

  2. Dann gibt es diejenigen, die etwas über Techniken und Paradigmen lernen wollen. Welche Sprache sie verwenden, spielt keine Rolle, solange sie ihr mentales Bild elegant ausdrücken kann. Im Extremfall tendieren diese dazu, UML oder andere solche Systeme zu verwenden, in der Hoffnung, dass andere die grunzende Arbeit der Codierung erledigen.

Meiner Meinung nach braucht man beides. # 1 wird kurzfristige Fähigkeiten vermitteln und wenn Sie mit Bedacht ausgewählt werden, werden Sie durch die HR-Tore geführt, aber # 2 wird Ihnen während Ihrer gesamten Karriere zur Seite stehen und Sie als Programmierer definieren.

# 2 wird 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 Gliedern des Vaporware-Himmels schwebt (oder in der Hölle, je nachdem, von wo aus Sie es betrachten).

# 1 gibt Ihnen die Möglichkeit, Ideen in reale Arbeitssysteme umzusetzen, aber ohne 2 tendieren Ihre Systeme zu krebsartigen, formlosen Monstern.

2
Newtopian

Assemblersprache und Mikrocode. Ein CS-Student sollte alle grundlegenden Abstraktionsebenen zwischen booleschen Zustandsmaschinen und den neuesten übergeordneten Funktionen/OOP/etc. Verstehen. Programmiersprachenparadigma.

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 was die eigentlichen Probleme sind, die moderne Praktiken beheben.

1
hotpaw2

Die Auswahl von 3 oder mehr Sprachen aus verschiedenen Paradigmen ist nicht so schwer, es wurden viele gute Antworten gegeben. Aber wenn ich nur eine Sprache wählen müsste, würde ich mich für Scala entscheiden, weil es sowohl funktional als auch objektorientiert ist. Sie können verschiedene Ansätze in derselben Sprache erklären und vergleichen.

1

Vergessen Sie nicht die stapelorientierten/verketteten Sprachen! Sie können echte Geisteskranke sein. Sie betonen die Komplexität von Gebäuden mithilfe kleiner, leicht verständlicher Grundelemente. Sie können sie verwenden, um pointfree (oder stillschweigend) Code zu schreiben, der sich so verdammt sauber anfühlt.

Die klassische Sprache ist Forth , aber meine heutige Adresse ist Faktor . Ebenfalls einen Besuch wert sind Joy und Cat . Verpassen Sie nicht das verkettete Sprache Wiki . Es macht mehr Spaß als eine Tasche voller Hämmer!

1
Scant Roger

Ich glaube, Sie haben Ihre Frage teilweise selbst beantwortet.

Von wirklicher Bedeutung ist es, den Schülern die Möglichkeit zu geben, mit verschiedenen Paradigmen in Kontakt zu treten. Die tatsächlichen Sprachen sollten keine Rolle spielen.

Natürlich ist es wichtig, in erster Linie diejenigen Paradigmen zu lehren, die die meisten Arbeitsmöglichkeiten bieten (wahrscheinlich OOP in diesem Moment)). Dementsprechend ist es auch besser, eine weit verbreitete Sprache für dieses Paradigma zu unterrichten, so wie dies ist Nützlicher als etwas zu lernen, das Sie wahrscheinlich nie verwenden werden. Deshalb hasste ich es auch, bei meinen Prüfungen Pseudocode schreiben zu müssen. Pseudocode ist in Ordnung, solange er keine 'feste' Syntax hat. Sie sollten nur in der Lage sein, Konzepte mitzubringen über.

Also konkret:

OOP: .NET oder Java

Mindestens 1 zusätzliches Programmierparadigma, um den Schüler auf andere Ansätze aufmerksam zu machen.

Funktionell: Lisp?

1
Steven Jeuris

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 erhalten, um Nice miteinander zu spielen, und eine Programmierung auf einer sehr niedrigen Ebene zu ermöglichen (Zeiger, manuelle Speicherverwaltung, Inline) Assemblersprache) und ein sehr hohes Niveau (generische und generative Programmierung) in derselben Sprache.

Dies ist wertvoll, weil Sie den Wald durch die Bäume sehen können, anstatt Paradigmen isoliert zu sehen, als ob sie in verschiedenen Universen existieren würden. Sie können die Stärken und Schwächen jedes Paradigmas auf einer feinkörnigen Ebene erkennen, wenn Sie sie in Ihre Programme einbinden. Sie sehen, wie wichtige Aspekte von Paradigmen in Bibliotheken in Bezug auf Code auf niedrigerer Ebene implementiert werden können. Das Standardbibliotheksmodul std.algorithm implementiert wichtige funktionale Programmierprimitive, ist jedoch gerader, einfacher D-Code ohne Magie. In ähnlicher Weise implementiert std.range eine verzögerte Auswertung, ist aber wiederum ein ziemlich einfacher D-Code. Sie lernen die Kosten kennen, die mit den Grundelementen jedes Paradigmas verbunden sind, da die metallnahen Merkmale von D das, was wirklich unter der Haube vor sich geht, relativ transparent machen. Sie können sogar etwas Low-Level schreiben, das wie C aussieht, und dann eine hübsche High-Level-Oberfläche in derselben Sprache erstellen, ohne dass magische Klebeschichten im Weg stehen.

0
dsimcha

Pseudocode.

Fachleute sollten in der Lage sein, ihre Ideen auf kohärente, strukturierte Weise ohne und ohne Framework- oder Syntax-spezifische Fachsprache zu erklären. Ich sollte den Unterschied zwischen eckigen Klammern und geschweiften Klammern nicht kennen müssen, um Ihren Algorithmus zu verstehen. Ich sollte nicht wissen müssen, was ?? Bedeutet oder was die Schalter grep sind.

Schreiben Sie im Klartext, strukturieren und formatieren Sie es jedoch 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.

"Schreiben Sie einfach den Algorithmus in Pseudocode"

"Was ist das?"

Der Vorteil von Pseudocode besteht darin, dass nicht programmierende Stakeholder ihn verstehen können. Ich schlage nicht vor, dass Sie möchten, dass BAs und Benutzer Ihren Code prüfen. Dies kann jedoch hilfreich sein, wenn ein Nicht-Programmierer den erforderlichen Algorithmus versteht. Psuedocode beseitigt die Notwendigkeit, for (int i = 0; i < j; i++) und den im Wesentlichen Boilerplate-Jargon zu erklären.

0
Kirk Broadhurst

Einige der Programmiersprachen, die zum Erwerb allgemeiner Fähigkeiten zur Problemlösung und Programmierkonzepte verwendet wurden, sind Logo und Karel. Sie sollten vor C/C++/Java/LISP/Perl/Assembly/einem beliebigen Programmierparadigma unterrichtet werden.

Die Schüler erhalten eine sehr praktische Einführung in die Programmierung.

0
umlcat

C.

  • Erstens wird es immer noch verwendet (weit verbreitet!) Und nicht nur für Kernel. Ich pflege derzeit eine in C codierte Geschäftsanwendung. Selbst mit reinem und einfachem C können Sie also immer noch einen Job bekommen. In großen Unternehmen, in der Industrie, fast überall (aber in Webentwicklern).
  • Wenn Sie in einer Unix/Linux-Umgebung arbeiten, ist es ein bisschen so, als würden Sie einkaufen gehen und die Preise auf den Tags nicht lesen können, wenn Sie nicht mindestens ein bisschen C kennen.
  • Zeiger! Jeder sollte Hinweise verstehen (vgl. Joel Spolsky ). Sobald Sie das Malloc-Konzept verstanden haben, wissen Sie genau, was passiert, wenn Sie unachtsam ein "neues" in eine OOP - Sprache) eingeben.
  • Die meisten "populären Sprachen" -Syntaxen stammen von C.
  • Ja, das ist nicht immer klar. Ja, es ist schwer zu lernen. Ja, Saiten sind für Anfänger ein Albtraum. Die Programmierung ist jedoch nicht immer klar und schwer zu erlernen, und Sie werden wirklich verstehen, was an OOP] großartig ist, wenn Sie nach dem Studium von C C++ ausprobieren und std :: string entdecken.

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 die Programmierung auf hoher Ebene verstehen, wenn Sie sich mit der Programmierung auf niedriger Ebene auskennen. Ich denke, es ist nicht umgekehrt.

0
Raveline

Etwas Funktionales, Haskell oder LISP, wäre meine erste Wahl, aber vielleicht Erlang. In funktionalen Sprachen lernen Sie wirklich, wie Sie Abstraktionen auf sehr mächtige Weise erstellen.

0
Zachary K