Was denkst du? Was ist die ideale Programmiersprachen-Lernsequenz, die die meisten der heute häufig verwendeten Sprachen und Paradigmen abdeckt und dabei hilft, gemeinsame Programmiergrundlagen, -ideen und -praktiken zu verstehen? Sie können sogar Lernsequenzen für Paradigmen anstelle von Sprachen vorschlagen.
NB: Dies ist die Antwort auf die Frage, die ich im Stackoverflow gestellt habe und die ich für subjektiv und argumentativ hielt.
programming-languages
Gulshan
quelle
quelle
Antworten:
Python, Lisp, C, Haskell
Unter der Annahme, dass es sich bei der Frage um eine ideale Lernsequenz für Programmieranfänger handelt (da alte Programmierer ihre eigene (wahrscheinlich zufällige) Lernsequenz hatten), würde ich vorschlagen, Norvigs Aufsatz zu lesen, wie man in 10 Jahren Programmieren lernt :
Python : Beginnen Sie mit einer dynamischen, übergeordneten OO- und funktionalen Sprache. Weil es für Anfänger sehr wichtig ist, sich so schnell wie möglich produktiv zu fühlenund nicht durch fremde Syntax, fehlende Bibliotheken, fehlende Multiplattform, fehlende Lernressourcen und fehlende Community ausgeschaltet werden. Python ist gut lesbar, verfügt über unzählige gute Bibliotheken (insbesondere wissenschaftliche Bibliotheken - ein moderner Wissenschaftler / Ingenieur muss wissen, wie man programmiert), kann von den meisten Betriebssystemen problemlos ausgeführt werden, hat unzählige Tutorials und kostenlose Bücher und ist im Allgemeinen benutzerfreundlich - und das, während Sie leistungsfähig genug sind, um mit Ihnen zu wachsen, während Sie ein fortgeschrittener Programmierer werden, der an großen Problemen arbeitet. Es ist auch wichtig, wichtige + nützliche Konventionen für einen Anfänger zu bekräftigen: Die Lesbarkeit von Code zählt eine Menge, und Sie sollten Code für sich und andere schreiben, um ihn leicht zu verstehen.
Lisp: Insbesondere die Struktur und Interpretation von Computerprogrammen zumindest überfliegen oder sich die SICP-Videos ansehen und die Augen weit öffnen, indem man die Grundlagen und die Ausdruckskraft der Programmierung sieht - man kann so viel mit so wenig tun. Erfahren Sie, wie Lisp nicht nur das Funktionsparadigma, sondern auch OO, logisch / deklarativ und mehr ausdrücken kann - wie das Erstellen neuer domänenspezifischer Sprachen. Lesen Sie Norvigs PAIP, um zu sehen, was ein Meister mit der Sprache anfangen kann. Dann schauen Sie sich Clojure an , einen modernen Lisp-Dialekt, der eines der nächsten großen Dinge sein könnte.
C: Nur weil es die Verkehrssprache des Rechnens ist. :) Möglicherweise optional in diesen Tagen, wenn man hauptsächlich Programmierer in einer bestimmten Nicht-Software-Domäne ist. Ich finde es hässlich, aber es lohnt sich darüber Bescheid zu wissen, um eine Wertschätzung für die zugrunde liegende Hardware zu erhalten. Natürlich mit K & R.
Haskell : Reine Funktionskraft. Wo aktuelle Com.Sci. Theorie und praktische Ausdruckskraft treffen aufeinander. Siehe Real World Haskell .
Nach der obigen Tour wäre man sehr geschickt darin, Probleme anzugehen und Lösungen im Code auszudrücken, und würde sich mit den Paradigmen hier vollkommen wohlfühlen :
quelle
So würde ich es machen:
Python (oder Ruby oder Lua): Eine interpretierte Sprache, keine Typen, Sie können Dinge in wenigen Zeilen erledigen. Riesige Bibliothek (Python ist das Beste, denke ich). Sie können tief in Algorithmen gehen, weil es keine Ablenkungen gibt. Keine Kompilierung notwendig, einfach ausführen. Darüber hinaus lehren Sie mit Python implizit guten Stil, da das Einrücken in Python obligatorisch ist. Sie können auch Objektorientierung unterrichten (in Lua ist dies eher ein Problem). Der Zweck hier ist, viel Spaß zu haben und dem Schüler zu zeigen, was getan werden kann.
C ++ (oder vielleicht Java): Eine typisierte, schnelle Sprache. Wenn Sie Objektorientierung benötigen, kennen Sie bereits einige Konzepte. Die Hauptidee ist, das, was Sie in Python getan haben, zu "übersetzen" und es mit den neuen Einschränkungen (hauptsächlich Typen) zu tun. Wenn Sie die richtigen Konzepte haben, ist das Hinzufügen von Typen kein solches Problem. Der nächste Schritt besteht darin, niedriger zu denken (Java hilft hier nicht) und Zeiger gut zu lehren . Damit meine ich das Erläutern des Adressraums, der CPU, des Betriebssystems, damit Sie beginnen können, unter Ihrem Programm zu sehen. Eine kompilierte Sprache führt in die Unterscheidung zwischen Interpretation und Kompilierung ein und ist sehr nützlich, um zu erklären, was Maschinensprache ist usw.
Montage : Endlich keine Zauberei, du sprichst nur mit der Maschine. Es gibt eine Debatte über Intel und GAS-Syntax, es ist nicht wichtig. Wenn Sie MIPS haben, ist es meiner Meinung nach besser zum Unterrichten, aber ich nehme an, x86 ist praktischer, da es weiter verbreitet ist (x86_64 ist besser, da es mehr Register und Feinheiten hat). Sie müssen nur einen Teil der Komplexität entfernen und die Schüler weiter untersuchen lassen, wenn sie möchten.
(Diese ersten 3 sind die "Tiefe". Bis jetzt sind wir runtergegangen, bis Sie den Boden berühren, der "nahe am Metall" ist, wie sie sagen. Ich denke, das ist sehr wichtig, viele Fragen in der Programmierung sind gelöst, wenn Sie eine klare Vorstellung davon haben, was gerade passiert. Wenn Sie dies wissen, können Sie sich vertrauensvoll weiteres Wissen aneignen.)
Schema (oder Common Lisp oder Clojure): Wie @dukeofgaming sagte, können Sie mit Lisp-Sprachen Rekursion gut unterrichten (für dieses Schema ist es am besten, da es keine expliziten Schleifen gibt). Aber ich würde zwei andere Dinge lehren: Abschlüsse und Makros. Makros sind das, was Lisp-Sprachen von den anderen unterscheidet. Persönlich mag ich keine Schema-Makros, aber das ist nicht so wichtig. Ich denke, Clojure-Makros sind zum Beispiel nett (aber die Rekursion in Clojure ist nicht so sauber, da die JVM keine Schwanzrekursion hat). Verschlüsse sind ein sehr wichtiges Konzept. Wenn Sie sie erst einmal in den Griff bekommen, "sehen" Sie Javascript sofort. Nach dem Studium von C ++, Python und Lisp wird Javascript "trivial".
Haskell : Für eine funktionierende Sprache denke ich nicht, dass Sie Haskell schlagen können. Lisp und Scheme gelten als funktional, aber um die funktionale Programmierung hervorzuheben, müssen Sie die Schüler zwingen, ohne Zustand zu denken. Haskell hat auch andere sehr schöne Dinge, wie Currys und Pattern Matching für "Destructuring". Ich kenne Haskell nicht sehr gut, aber die Prägnanz des Codes, den Sie schreiben können, ist einfach wunderschön. Wenn Sie Haskell gut kennen, können Sie Erlang viel einfacher verstehen.
Forth : Eine Stack-Sprache. Es bricht deine Logik wieder total (wenn Lisp und Haskell nicht genug wären). Ich würde so weit gehen, Jones's Forth zu unterrichten, da sie sich mit Zusammenbau auskennen, und dann können Sie vollkommen verstehen, was los ist. (Knowing Forth öffnet beispielsweise PostScript.)
(Also sind diese letzten 3 die Breite, die Sie gesagt haben. Für mich sind diese Sprachen seltsam genug, dass sie Ihre Denkweise ändern. Sie haben es zumindest für mich getan. Und ich denke, mit diesen verstehen Sie genug Paradigmen, um eine neue Sprache zu lernen sehr schnell.)
Optional können Sie diese lernen:
SmallTalk : Eine rein objektorientierte Sprache. Um zu sehen, was passiert, wenn Sie die Objektorientierung ernst nehmen, benötigt die Sprache kein "if", "for". Alles ist eine Botschaft: wieder große Erkenntnis. (Dies würde Objective-C jetzt einfacher machen.)
Go : Eine (schöne) Sprache mit Schwerpunkt auf Nebenläufigkeit. Ich finde Go sehr schön und angenehm zu programmieren.
Prolog : Ein weiteres Paradigma der Programmierung. Ich habe keinen Prolog geschrieben, aber ich verstehe, dass es eine weitere Sprache ist, die den Verstand erschüttert.
quelle
Im Ernst, ich habe in meiner Zeit vielleicht BASIC, COBOL, Fortran, Forth, Pascal und Prolog gelernt, aber ich habe sie nie besonders gebraucht und kann nicht wirklich erkennen, inwiefern sie meinen Umgang mit anderen beeinflusst haben Sprachen, außer vielleicht Paradigmen von einem in den anderen falsch anwenden. Es dauerte eine Ewigkeit, bis ich BASIC genug verlernt hatte, um strukturiertes Pascal tatsächlich zu schreiben, ein paar Jahre, um Pascal-Code nicht mehr in C zu schreiben, und ein paar Jahre, um OOP tatsächlich zu aktivieren, als ich anfing, Objective-C und Java zu verwenden. Andererseits konnte ich mich darauf konzentrieren, die Verwendung von OO-Sprachen zu verbessern, ohne zu versuchen, sie wie Scheme oder PostScript aussehen zu lassen, da ich (fast) ausschließlich in OO-Sprachen gearbeitet habe.
quelle
Es ist schwer zu behaupten, dass jede Sequenz ideal ist, aber ich werde einen Plan aufstellen, den ich rechtfertigen kann:
C
Das Erlernen von C erfordert Geduld und Fleiß und führt Sie in die grundlegenden Methoden des Computerbetriebs ein und zeigt Ihnen die weitesten Verantwortlichkeiten, die ein Programmierer für den Umgang mit einem solchen Computer übernehmen kann.
Perl
Versuchen Sie als Gegenmittel gegen die von C geforderte Strenge das unglaublich verzeihende Perl. Was in C eine Woche gedauert hat, kann in einer Stunde in Perl geschrieben werden. Es bietet eine andere Art von Freude an der Programmierung und zeigt, wie der Programmierer sich ohne bestimmte Bedenken und Details auf verschiedene Dinge konzentrieren kann.
C ++ oder vielleicht Java
Sehen Sie sich als Nächstes an, wie Cs Konzentration auf einfache und primitive Aspekte der Programmierung als Grundlage für die Erhöhung der Abstraktionsebene dient und dabei feststellt, welche Abläufe man in Bezug auf die Effizienz in der Abstraktion macht. Erfahren Sie, wie Sie Abstraktionen erstellen, bei denen die für Ihr Programm wichtigen Effizienzvorteile erhalten bleiben.
Common Lisp
Dies ist die Belohnung für den vorangegangenen Slog. Sie werden Echos dessen finden, was Sie in allen vorhergehenden Sprachen gelernt haben, und sehen, wie albern so viele der vorhergehenden Zugeständnisse erscheinen, wenn Sie in Lisp programmieren. Der Präprozessor von C und die Vorlagen von C ++ bereiten einen darauf vor, Lisps Makrosystem zu schätzen. Sie werden die Leichtigkeit des Ausdrucks von Perl, die Möglichkeiten der Low-Level-Optimierung von C, die abstraktionsbildenden Fähigkeiten von C ++ oder Java wiedererlangen und sie alle weit hinter sich lassen. Keiner der vorhergehenden drei - vielleicht mit Ausnahme von Perls Debugger - hat Sie auf die interaktive Programmiererfahrung mit einer fähigen REPL ("read, eval, print loop") vorbereitet . Mit einem Bild arbeiten-basierte Umgebung - die die Beziehung zwischen Ihrem Quellcode und der Idee eines "ausführbaren Programms" ändert - ändert Ihre gesamte Vorstellung davon, was es bedeutet, ein Programm zu erstellen.
Wenn Sie sich darüber hinaus mit anderen Programmierstilen wie der funktionalen Programmierung in Haskell oder der logischen Programmierung in Prolog befassen, erhalten Sie ein umfassenderes Verständnis des programmierweiten Wissens, wenn Sie so wollen. Zu diesem Zeitpunkt ist Ihre Zeit jedoch besser gerüstet indem Sie Ihr Handwerk verbessern - tiefe Kenntnisse - mit jeder Sprache, die Sie kennen.
Wenn Sie genug verschiedene Sprachen gekostet haben, wird sich Ihre Sicht auf die Ideen konzentrieren, die über eine von ihnen hinausgehen. Es ist ein bisschen wie der Unterschied zwischen dem Erlernen des Autofahrens Ihres Vaters und dem Wissen, wie man ein Auto fährt: Es kann sein, dass Sie einige Tage lang keinen Miet-Minivan fahren müssen, wenn Sie die Freuden eines Lieblingssportwagens genau kennen. aber Sie werden herausfinden, wie man es bedient, und werden mit Sicherheit mehr aus dem armen Tier herauslocken als ein Amateur.
quelle
1. Smalltalk
Entwarf ursprünglich zumindest teilweise, damit Kinder mit Computern lernen können. Die Syntax ist einfach genug, um sie in einem Absatz zu beschreiben. Es steht wie LOGO beispielhaft für das Prinzip "niedrige Eintrittsbarriere, hohe Decke".
Smalltalk ist eine reine OO-Sprache in dem Sinne, dass "alles ein Objekt ist".
Es werden auch viele funktionale Techniken unterrichtet, insbesondere in der Sammlungs-API: Verketten von Nachrichten, Funktionen höherer Ordnung, Zuordnen, Reduzieren usw.
Die Squeak- Community ist lebendig und einladend. Sie werden auch viele Diskussionen über fortgeschrittene Techniken sehen: Ähnlich wie in der Lisp-Community gibt es viele sehr erfahrene Smalltalker auf der Mailingliste, die bereit sind, ihr Wissen zu teilen. (Es tut nicht weh, dass die Squeak-Community eine große Unterpopulation professioneller Pädagogen hat.) Es gibt auch eine andere Liste für Anfänger.
2. PROLOG
Eine logische Programmiersprache , mit der Sie eine ganz andere Ansicht der Berechnung erhalten als mit nahezu jeder anderen Sprache. Prolog ist sehr auch deklarative (aber nicht ganz so: die
!
oder Schnitt Betreiber eine erhebliche semantische Wirkung auf einem Prädikat haben können).3. Common Lisp
Wenn Sie möchten, ersetzen Sie hier das Schema. Common Lisp unterstützt mehrere Paradigmen, insbesondere OO und funktional. Es hat auch eine lange Geschichte (Lisp ist die zweitälteste noch weit verbreitete Sprache: nur FORTRANs ältere).
4. Haskell
(Einschränkung: Ich habe gerade erst angefangen, es zu lernen.) Wahrscheinlich die reinste funktionale Sprache auf dem Planeten. Es hat ein sehr fortgeschrittenes statisches Typensystem. Handlicher Intro Bücher existieren.
5. C oder Delphi
Sie müssen wissen, wie Computer funktionieren. Sie müssen wissen, wie Speicher und CPU tatsächlich funktionieren. Beide sind traditionell "nah am Metall" und haben Gemeinschaften, die zum Nachdenken anregen, wie sich ihre Sprache zu einer Versammlung zusammensetzt.
Warum diese Bestellung?
Smalltalk ist sehr einfach zu erlernen, sodass Sie sich schnell auf das Lösen von Problemen konzentrieren können, anstatt gegen einen Compiler zu kämpfen ("niedrige Eintrittsbarriere"). Sobald Sie mit dem Programmieren beginnen, gibt es auch keine künstliche Beschränkung Ihrer Möglichkeiten - "High Ceiling".
Wenn Sie eine faire Vorstellung davon haben, wie OO funktioniert (und - mit der Maßgabe, dass es VIELE unterschiedliche Auffassungen darüber gibt, was "OO" bedeutet - kann man sagen, dass OO den Markt beherrscht), stellt Prolog sicher, dass Sie nicht anfangen zu denken, dass OO der einzige Weg ist. Prolog unterscheidet sich sehr von den meisten Sprachen und spannt Ihre mentalen Muskeln, sodass Sie nicht glauben, dass Sie alles wissen.
Common Lisp wiederum ist die Sprache eines Erwachsenen. Es hat einen ausgereiften Standard, es ist seit Jahrzehnten führend im Sprachdesign (zusammen mit Smalltalk) - all diese ausgefallenen neuen Funktionen, die Ihre Lieblingssprache gerade erworben hat? Wahrscheinlich sind die Ideen in Lisp oder Smalltalk inkubiert. Gemeines Lisp ist auch ein bisschen wartig, und Sie werden Wartiness finden, wohin Sie gehen.
Haskells vierter Platz auf der Liste, weil (mir wurde gesagt: Ich habe gerade erst angefangen, es zu lernen) seine Reinheit bedeutet, dass einige sehr häufige Dinge (wie E / A) schwieriger zu tun sind als in weniger rein funktionalen Sprachen. Die Haskell-Leute verwenden auch einige ziemlich exotische Terminologien (Wörter wie "Katamorphismus"), und Sie wären wahrscheinlich besser dran, wenn Sie ein wenig Programmiererfahrung mitbringen würden, bevor Sie sich damit befassen. (Aber ich muss noch einmal wiederholen, ich habe gerade erst angefangen, es zu lernen! Nimm diese Meinung mit einer Prise Salz an!)
Und warum C / Delphi zuletzt? Denn wenn Sie nicht in eingebetteten Systemen arbeiten, sollten Sie nicht lernen müssen, wie man den manuellen Speicher verwaltet. Die Müllabfuhr funktionierte gut genug für eine Maschine der 80er Jahre. Ihr Telefon ist so leistungsfähig!
Schließlich habe ich Erlang nicht in die obige Liste aufgenommen, obwohl ich es wirklich sollte.
quelle
Python. Eine hervorragende Einführung in die Programmierung. Dies knüpft auch an frühere Programmierkenntnisse an.
Planen. Auch eine hervorragende Einführung in die Programmierung. Wenn Sie mit Programmieranfängern zu tun haben, sollten Sie dies zuerst und Python zweitens unterrichten. Eine Alternative wäre zuerst Python und dann Common Lisp anstelle von Scheme: mehr Arbeit, aber mehr Belohnung.
C. Eine einfache Sprache, die in der Nähe des Siliziums bleibt. Gut, um zu lernen, was ein Computer kann. Sie könnten irgendeine Form der Assemblersprache ersetzen, aber C ist ziemlich nah an den Grundlagen und viel einfacher zu handhaben.
Prolog. Ersetzen Sie alternativ eine Allzwecksprache im deklarativen Stil, wenn Sie eine Sprache finden, die Ihnen besser gefällt.
Haskell. Für das Typensystem und reine Funktionalität, wenn nichts anderes.
Hier gibt es mehrere Kandidaten, da es unmöglich ist, alle Konzepte mit sechs Sprachen abzudecken. Es lohnt sich, Common Lisp zu lernen, wenn auch nur für das Makrosystem und das Objektsystem (was sich von den meisten anderen unterscheidet, die ich gesehen habe). Forth, Tcl und APL sind alles merkwürdige Sprachen, die einige Erfolge erzielt haben, und eine davon wäre gut, um zu verhindern, dass der Schüler das Gefühl hat, alles gelernt zu haben. Erlang wäre gut für die Nebenläufigkeit.
quelle
Es wurden viele gute Antworten gegeben, aber ich habe niemanden gesehen, der SQL anbietet. Es ist ein völlig anderes Tier als die meisten anderen aufgelisteten und sehr wichtig für jeden Programmierer, der mit Datenbanken zu tun hat.
Möglicherweise möchten Sie auch einige Skriptsprachen auf Betriebssystemebene in Betracht ziehen, z. B. Batch, grep, awk usw. 'Make' kann ebenfalls in diese Kategorie fallen.
Eine andere Sprache, die Sie in Betracht ziehen könnten (wenn sie noch nicht vollständig tot ist), ist COBOL. Es unterscheidet sich hinreichend von anderen Verfahrenssprachen, so dass es eine Erwähnung verdient. Variationen von C, Fortran, Basic usw. sind so ähnlich geworden, dass der Wechsel zu einem anderen, sobald Sie mit einem vertraut sind, kein großes Problem darstellt, aber COBOL fehlen viele der Konstrukte, die in den anderen als selbstverständlich vorausgesetzt werden. (Es ist mindestens 20 Jahre her, dass ich etwas mit COBOL gemacht habe, sodass meine Beobachtungen in Bezug auf diese Sprache möglicherweise nicht mehr gültig sind.)
Vielleicht möchten Sie APL nur aus historischer Sicht erwähnen - oder es in Ruhe lassen. Deine Entscheidung.
quelle
ich würde vorschlagen , Eric Raymonds "Wie ein Hacker?" Zum ersten Mal zu lesen, da er einige sehr interessante Punkte zu den ersten Schritten enthält, einschließlich Lisp, der den Begriff "Code ist Daten und Daten ist Code" hat.
Für die Programmierung würde ich auch Haskell, Prolog, SQL und Assembler (nur einige) vorschlagen.
Unabhängig davon, was Sie lernen möchten, nehmen Sie sich die Zeit, um es richtig zu lernen und nicht-triviale Mengen an Code zu schreiben. Es ist wie beim Fahrradfahren - man kann es nicht aus einem Buch lernen.
quelle
Zuerst> Was möchten Sie tun, wenn Sie mit dem Programmieren beginnen? Das Erlernen, wie man ein Spielprogrammierer ist, ist anders als das Erlernen, wie man ein Datenbankprogrammierer für ein Unternehmen ist ... ist anders als ein webbasierter Programmierer ...
Zweitens: Wenn Sie anfangen zu lernen, möchten Sie hoch hinaus und sich nach unten arbeiten? Oder fangen Sie niedrig an und arbeiten Sie sich nach oben. Das Erlernen von C # (hohes Niveau) unterscheidet sich erheblich vom Erlernen von Assembly (niedriges Niveau).
Eine große Auswahl hängt davon ab, was Sie tun möchten. Das Programmieren eines Treibers wird höchstwahrscheinlich C oder Assembly beinhalten. Das Programmieren einer Website wird PHP, C #, ASP usw. sein. Sie werden Assembly für die Webprogrammierung nicht berühren. Usw.
Was die Grundlagen angeht ... Sobald Sie sich entschieden haben, WAS Sie tun möchten, ist es einfacher, eine Sprache auszuwählen. Ich bin zum Beispiel Datenanalytiker in einem Krankenhaus geworden. Meine "Wahl" der Sprachen ist also SQL / TSQL / DB2 für den Datenzugriff, C # WPF für Windows-Clients, Silverlight für Web-Clients, einige RPG / CL für IBM-Back-End-Logik ...
Persönlich halte ich mich an ein gutes Buch und erstelle ein eigenes Programm, um die Sprache zu üben. Ich mag APress und habe es geliebt, C # 2008 Illustrated zu lesen, wenn ich C # lerne. Sie haben andere Bücher, die sowohl Grundlagen für Ungelernte als auch für Experten enthalten.
quelle
Ein Neuling benötigt zunächst nur eine Sprache, nachdem er die zweite Sprache gelernt hat, geht er bereits über viele konkurrierende Entwickler hinaus. Ich würde in der folgenden Reihenfolge lernen:
Sie können fragen, "wo ist C ++?" und was ist mit X? Um ehrlich zu sein, das Erlernen mehrerer Sprachen hat ein paar Gründe: Es bereichert Ihre Erfahrung und bietet den Antrieb, mehr Sprachen zu lernen. Die Liste der Sprachen, die ich gut kenne (Java, C #, Ruby, C ++, Javascript), ist alle objektorientiert - aber das liegt hauptsächlich daran, dass ich das jeden Tag bei der Arbeit tun muss. Die Liste der Sprachen, denen ich ausgesetzt war (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go), hat mir alle wertvolle Lektionen beigebracht. Ich kann zumindest verstehen, was mit diesen Sprachen los ist. Es gibt eine Menge, die ich noch nicht erforscht habe, aber sehr wohl in der Zukunft. Es gibt auch ein paar Auszeichnungssprachen: HTML, XSL: FO, XSLT, CSS, XML, SGML, mit denen die Leute vertraut sein müssen, wenn sie in irgendeiner Weise mit dem Web arbeiten wollen.
Nachdem Sie mindestens zwei verschiedene Sprachen gelernt haben, sollten Sie meiner Meinung nach nicht einschränken, was jemand, der lernen möchte, als Nächstes aufgreifen möchte. Lernen sollte eine organische Erfahrung sein, und zu viel Struktur im Prozess schafft eine Gruppe von Menschen, die genauso denken. Eine Monokultur sozusagen.
quelle
Die meisten dieser Antworten scheinen ungefähr gleich zu sein, daher werde ich eine andere Meinung vertreten. Ich habe lange geglaubt, dass die beste Muttersprache Tcl ist.
Warum? Zum einen ist es sehr leicht zu lernen. Die Sprache hat nicht viel Syntax, so dass sich der Schüler mehr auf die Konzepte des Programmierens und weniger auf die syntaktischen Besonderheiten einer bestimmten Sprache konzentrieren kann. Ab diesem Zeitpunkt hat Tcl genau 12 Regeln, die die gesamte Sprache regeln (seit elf Jahren in den letzten Jahrzehnten).
Zum anderen verfügt Tcl über eine fantastische integrierte GUI-Sprache, sodass Sie eine relativ schnelle Befriedigung erhalten und die Grundlagen der ereignisgesteuerten Programmierung erlernen können.
Drittens ist es erweiterbar. Möchten Sie über eine Wiederholungsschleife unterrichten? Sie können einen Befehl schreiben, der eine Wiederholungsschleife ausführt, damit Sie nicht nur lernen, wie Sie die Wiederholungsschleife verwenden, sondern auch, wie sie sich von einer while-Schleife unterscheidet, da Sie sie selbst geschrieben haben.
Da es erweiterbar ist, gibt es auch einen einfachen Einstieg in C. Sie können C-Grundlagen erlernen und lernen, wie Sie entweder a) Tcl mit neuen Befehlen erweitern, die in einer anderen Sprache geschrieben wurden, oder b) wie Sie einem in C geschriebenen Programm eine Skriptsprache hinzufügen C.
Sobald Sie Tcl und C gelernt haben, liegen die meisten anderen Sprachen irgendwo zwischen diesen beiden Extremen und sollten relativ einfach zu erlernen sein. Meine vollständige Liste mit den vier, die ich nach Tcl und C unterrichten würde, lautet:
quelle
Assemblersprache, C, SQL, C #
Ich weiß, langweilig und altmodisch. Und die gesamte Frage ignoriert den wirklich schwierigen Teil der Programmierung, nämlich Problemlösung, Domänenmodellierung und Algorithmuskonstruktion. Aber hier ist warum:
Sie können sich nicht durch die Assemblersprache schleichen. Du bekommst es entweder oder nicht. Der Compiler wird Sie nicht retten, es gibt keinen Framework- oder Bibliotheksaufwand und Sie können sich nicht vor der Maschinenarchitektur verstecken. es ist reine Programmierung (auf der Ebene der Anfänger mit zwei Zahlen)
Nachdem Sie einige Assembler-Programme mit mehr als ein paar hundert Zeilen geschrieben haben, sind Zeiger und Speicherverwaltung nicht mehr geheimnisvoll, und Sie sollten anfangen, Muster im Code zu bemerken (if, switch, array, loops usw.). ). C bringt diese Muster ins Sonnenlicht und lässt sie leuchten. Die Standardbibliothek ist nützlich, ohne immens zu sein, aber Sie müssen sich nicht mit Makros / Vorlagen / etc. in diesem Stadium.
Springen Sie jetzt mit SQL in Datenbanken. Gehen Sie mit gespeicherten Prozeduren nicht über Bord, sondern lernen Sie die Grundlagen von Tabellen und Abfragen kennen.
Nachdem Sie einige C-Programme mit mehr als ein paar hundert Zeilen geschrieben haben, sind Zeiger, Strukturen und Speicherverwaltung selbstverständlich, und prozedurale Konstrukte sind alte Bekannte. Sie werden anfangen, Muster höherer Ordnung zu bemerken: Diese Funktionen gehören immer zu dieser Datenstruktur, dieser Teil des Codes entspricht genau dem Teil des Codes, mit Ausnahme der Methoden X, Y und Z und so weiter. Ergänzen Sie Ihr Verständnis für relationale Daten, und Sie sind jetzt bereit für eine objektorientierte Sprache. Mit einem massiven Rahmen und allgemein lückenhafter Dokumentation. Willkommen in der realen Welt! Entdecken Sie GUIs, schreiben Sie Desktop-Apps, schreiben Sie Websites, schreiben Sie Webdienste und schreiben Sie, was immer Sie möchten. Suchen Sie sich einen Job, wenn Sie dazu neigen.
Bist du jetzt ein programmierender Jedi? Ein Code-Ninja? Nein , jetzt bist du nur kompetent. Aber Sie haben eine solide Grundlage, auf der Sie stehen können, um die glänzenden neuen lustigen Dinge zu erkunden.
quelle
Sie brauchen Grundlagen:
Danach ist es wahrscheinlich egal.
quelle
OK, das ist der letzte Tag für Kopfgeld. Und ich füge meine Antwort hinzu. Meine vorgeschlagene Sequenz-
C, C ++, JAVA / C #, Python / Ruby, jede andere Sprache (Assembly / Lisp / Prolog usw.)
quelle
Schema, C, C ++
Ich werde parteiisch sein und das Modell verwenden, das meine Universität derzeit für ihren Kernlehrplan für Informatik verwendet. Ich war in meinem ersten Jahr dagegen, aber in meinen späteren Jahren bin ich dankbar dafür. Das Modell basiert darauf, dass keine Programmiererfahrung, sondern Lernfähigkeit erforderlich ist.
Schema
Wir sind, Sie lernen zuerst Programmieren, je weniger Magie, desto besser. Die Unterrichtssprache von Scheme stellt eine klare und vernünftige Definition einer Sprache dar, eine wirklich kleine Menge von Axiomen (die "Magie"), auf die Sie aufbauen und die Sie erweitern können. Jeder, der mathematische Funktionen verstehen kann, kann Schema-Programme nachvollziehen und begründen. Das Starten mit Schema bietet eine saubere und dennoch leistungsstarke Möglichkeit, über Berechnungen nachzudenken, ohne sich um sprachspezifische Details zu kümmern.
C Der
Wechsel von Schema zu C ist ein drastischer Schritt, aber Sie können sich mit der sehr wichtigen Zuordnung von Hochsprachen zu Niedrigsprachen vertraut machen. Das Erlernen des Speichermodells (Zeiger, Heap, Stack usw.) und der Kompilierung und Ausführung von Programmen sowie die Funktionsweise von Zeigern, Stack und Heap sind wesentliche Fähigkeiten. Durch dieses Verständnis auf niedriger Ebene können Sie beginnen, Programme auf einer höheren Ebene (Big O) zu analysieren. Sie können damit beginnen, Ihre eigenen abstrakten Datentypen zu rollen, indem Sie mit verschiedenen Implementierungen spielen (z. B. einer einfachen Hash-Tabelle im Vergleich zu einem Binärbaum für eine Menge).
C ++
Durch das Erlernen von C und Scheme lernen wir verschiedene Paradigmen von Programmiersprachen kennen und wie sie auf verschiedene Probleme angewendet werden können. Jetzt können Sie sich den gruseligsten Aspekten der Programmierung nähern: Auswahl und Kompromisse. Die Wahl der Programmiersprache kann die Leistung, Lesbarkeit, Wartbarkeit, Robustheit usw. beeinträchtigen. Diese Wahl ist großartig, aber auch gefährlich, um Probleme zu lösen, die größer sind als das, was Sie im Kopf haben. C ++ versucht, für den Programmierer so wenig Auswahl wie möglich zu treffen. Durch das Erlernen von C ++ lernen Sie, wie Sie diese Kompromisse und Entscheidungen zur Lösung Ihrer Probleme selbst treffen können.
Sie werden möglicherweise keine dieser Sprachen in der Industrie verwenden oder sie jemals wieder anfassen, aber der Lernprozess hilft Ihnen dabei, andere Sprachen zu verstehen, die Sie verwenden werden. Ein weiterer Aspekt ist, dass Sie die Tools rund um eine bestimmte Sprache lernen. Führen Sie gcc über die Befehlszeile aus, lernen Sie Vim, gehen Sie mit GDB durch ein Programm, erstellen Sie Make-Dateien, checken Sie Code mit SVN ein, schreiben Sie Shell-Skripte, um das Testen zu automatisieren usw.
Im Kerncurriculum gibt es jedoch auch andere Kurse (Computerarchitektur, Datenstrukturen und Algorithmen, Compiler, Betriebssysteme usw.). Nur diese Sprachen zu lernen, reicht also nicht aus, um Programmieren zu können.
quelle
Der Weg von einer einfachen Sprache zu einer höheren ist der richtige. Auf diese Weise haben Sie immer noch eine Idee, was im Hintergrund passiert.
quelle
Python. Um Dinge zu erledigen, programmieren Sie einfach. Prozedural, OO und (in gewissem Umfang) funktional.
Reguläre Ausdrücke. Sie befinden sich in der Python-Bibliothek, es handelt sich jedoch um ein separates DSL.
Shell (BASH oder was auch immer). Das "&", "|", ";" Operatoren zum Kombinieren von Prozessen sind in Python kritisch und unangenehm.
SQL. Dies ist vorerst die Verkehrssprache für den Datenzugriff.
XHTML. Dies ist vorerst die Verkehrssprache für die Datenpräsentation.
CSS.
Vielleicht C, wenn es nötig wurde.
quelle
Beginnen Sie in der Nähe des Metalls:
Das Problem bei einem so breiten Ansatz ist nun, dass niemand ohne jahrelanges Studium in diesen Sprachen überhaupt aus der Ferne fähig werden kann.
Es sei denn, Sie möchten ihnen "Hallo Welt" beibringen, was für alle 6 ungefähr einen Monat dauern sollte.
quelle
Warum gehst du nicht gleich rein und lernst VB oder C #? Beide sind meiner Meinung nach vollständige Sprachen von Anfänger bis Fortgeschrittene, imho.
quelle