it-swarm-eu.dev

Ideale Programmiersprachen-Lernsequenz?

Was denken Sie? Was ist die ideale Lernsequenz für Programmiersprachen, 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 eine Lernsequenz für Paradigmen anstelle von Sprachen vorschlagen.

N.B. : Dies ist der Port der Frage, die ich in stackoverflow gestellt habe und die geschlossen wurde, weil sie subjektiv und argumentativ war.

17
Gulshan

Python, LISP, C, Haskell

Angenommen, die Frage bezog sich auf eine ideale Lernsequenz für Programmieranfänger (da alte Hasen beim Programmieren ihre eigene (wahrscheinlich zufällige) Lernsequenz hatten), würde ich vorschlagen, Norvigs Aufsatz über das Erlernen des Programmierens in 10 zu lesen Jahre , dann:

  1. Python : Beginnen Sie mit einer dynamischen, übergeordneten, OO & funktionalen Sprache. Weil es für Anfänger wirklich wichtig ist, sich produktiv zu fühlen ASAP , und lassen Sie sich nicht durch fremde Syntax, fehlende Bibliotheken, fehlende Multi-Plattform, fehlende Lernressourcen und mangelnde Community ausschalten. Python ist gut lesbar, hat Tonnen von guten Bibliotheken (insbesondere wissenschaftliche Bibliotheken - ein moderner Wissenschaftler/Ingenieur muss wissen, wie man programmiert), ist von den meisten Betriebssystemen problemlos zu bedienen, hat Tonnen von Tutorials und ganzen kostenlosen Büchern und ist im Allgemeinen benutzerfreundlich - und das alles noch Leistungsstark genug, um mit Ihnen zu wachsen, wenn Sie ein fortgeschrittener Programmierer werden, der an großen Problemen arbeitet. Es ist auch wichtig, wichtige + nützliche Konventionen für Anfänger zu verstärken: Die Lesbarkeit von Code zählt eine Menge, und Sie sollten Code schreiben, damit Sie und andere ihn leicht verstehen.

  2. LISP: Insbesondere zumindest überfliegen Die Struktur und Interpretation von Computerprogrammen oder die SICP-Videos ansehen und die Augen sehr weit öffnen, indem Sie die Grundlagen sehen und Ausdruckskraft der Programmierung - mit so wenig kann man so viel machen. Erfahren Sie, wie LISP nicht nur das Funktionsparadigma, sondern auch OO, logisch/deklarativ und mehr ausdrücken kann - wie die Erstellung 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.

  3. C: Nur weil es die Verkehrssprache des Rechnens ist. :) Möglicherweise optional heutzutage, wenn man hauptsächlich Programmierer in einer bestimmten Nicht-Software-Domäne ist. Ich finde es hässlich, aber es lohnt sich zu wissen, wie man die zugrunde liegende Hardware erkennt. Gehen Sie natürlich mit K & R .

  4. 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 mit den Paradigmen hier vollkommen vertraut zu sein:

alt text

26
limist

So würde ich es machen:

  1. Python (oder Ruby oder Lua): Eine interpretierte Sprache, keine Typen, Sie können Dinge in wenigen erledigen Zeilen. Riesige Bibliothek (Python ist das Beste dafür, denke ich). Sie können tief in Algorithmen eintauchen, da es keine Ablenkungen gibt. Keine Kompilierung erforderlich. Führen Sie einfach aus. Darüber hinaus mit Python you Lehren Sie 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 Zeigen Sie dem Schüler, was getan werden kann.

  2. 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 nun 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 zu lehren gut. Damit meine ich, den Adressraum, die CPU, das Betriebssystem ein wenig zu erklären, damit Sie unter Ihrem Programm sehen können. Eine kompilierte Sprache führt die Unterscheidung zwischen Interpretation und Kompilierung ein, was sehr nützlich ist, um zu erklären, was Maschinensprache ist usw.

  3. Montage : Endlich keine Magie, du sprichst einfach mit der Maschine. Es gibt eine Debatte über Intel- und GAS-Syntax, es ist nicht wichtig. Wenn Sie MIPS haben, glaube ich, dass es besser für den Unterricht ist, aber ich nehme an, dass x86 bequemer ist, 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 wollen.

(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 werden gelöst, wenn Sie eine klare Vorstellung davon haben, was passiert. Wenn Sie dies wissen, können Sie mit Zuversicht weiteres Wissen erwerben.)

  1. 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 dies nicht der Fall ist explizite Schleifen haben). Aber ich würde zwei andere Dinge lehren: Verschlüsse und Makros. Makros unterscheiden LISP-Sprachen von den anderen. 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. Sobald Sie sie erstellt haben, "sehen" Sie Javascript sofort. Nach dem Studium von C++, Python und LISP wird Javascript "trivial".

  2. Haskell : Für eine funktionale Sprache glaube ich nicht, dass Sie Haskell schlagen können. LISP und Schema werden als funktional betrachtet, aber um die funktionale Programmierung zu betonen, müssen Sie die Schüler zwingen, ohne Staat zu denken. Haskell hat auch andere sehr nette Dinge, wie Currying und Pattern Matching für "Destructuring". Ich kenne Haskell nicht viel, aber die Prägnanz des Codes, den Sie schreiben können, ist einfach wunderschön. Wenn man Haskell gut kennt, ist es viel einfacher, Erlang zu verstehen.

  3. Forth : Eine Stapelsprache. Es bricht Ihre Logik wieder völlig (wenn LISP und Haskell nicht genug wären). Ich würde so weit gehen zu unterrichten Jones's Forth da sie die Versammlung kennen und Sie dann völlig verstehen können, was los ist. (Wenn Sie weiter wissen, wird beispielsweise PostScript geöffnet.)

(Diese letzten drei sind also die Breite, die Sie gesagt haben. Für mich sind diese Sprachen so seltsam, 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 studieren:

  1. Smalltalk : Eine rein objektorientierte Sprache. Um zu sehen, was passiert, wenn Sie die Objektorientierung ernst nehmen, benötigt die Sprache nicht "if", "for". Alles ist eine Botschaft: wieder große Erkenntnis. (Dies würde Objective-C jetzt einfach machen.)

  2. Go : Eine (schöne) Sprache mit Schwerpunkt auf Parallelität. Ich finde Go sehr schön und angenehm zu programmieren.

  3. Prolog : Ein weiteres Paradigma der Programmierung. Ich habe keinen Prolog geschrieben, aber ich verstehe, dass es eine weitere umwerfende Sprache ist.

28
Pau Fernández
  • Die, die du jetzt brauchst
  • Die, die du als nächstes brauchst
  • Die, die du danach brauchst

Im Ernst, ich habe in meiner Zeit vielleicht BASIC, COBOL, Fortran, Forth, Pascal und Prolog gelernt, aber ich musste sie nie besonders verwenden, und ich kann nicht wirklich sehen, wie sie meine Verwendung anderer beeinflusst haben Sprachen, außer vielleicht Paradigmen falsch ineinander anzuwenden. Ich brauchte Ewigkeiten, um BASIC genug zu verlernen, um tatsächlich strukturierten Pascal zu schreiben, ein paar Jahre, um das Schreiben von Pascal-Code in C zu beenden, und ein paar Jahre, um OOP tatsächlich zu groken, als ich anfing, Objective-C und Java zu verwenden . Andererseits konnte ich mich, da ich (fast) ausschließlich in OO Sprachen gearbeitet habe, darauf konzentrieren, meine Verwendung von OO Sprachen zu verbessern, ohne zu versuchen, sie zu erstellen sehen aus wie Scheme oder PostScript.

12
user4051

Es ist schwer zu behaupten, dass eine Sequenz ideal ist, aber ich werde einen Plan aufstellen, den ich rechtfertigen kann:

  1. C

    Das Erlernen von C erfordert Geduld und Sorgfalt und führt Sie in die grundlegenden Methoden ein, mit denen Computer mit Daten umgehen, und zeigt Ihnen fast die breitesten Verantwortlichkeiten, die ein Programmierer für den Umgang mit einer solchen Maschine übernehmen kann.

  2. Perl

    Versuchen Sie als Gegenmittel gegen die von C geforderte Strenge den unglaublich verzeihenden Perl. Was eine Woche gedauert hat, um in C zu schreiben, können Sie in einer Stunde in Perl schreiben. Es führt eine andere Art von Freude an der Programmierung ein und zeigt, wie das Ausschließen bestimmter Bedenken und Details den Programmierer frei macht, sich auf verschiedene Dinge zu konzentrieren.

  3. C++ oder vielleicht Java

    Als nächstes sehen Sie, wie Cs Fokus auf einfache und primitive Aspekte der Programmierung als Grundlage für die Erhöhung der Abstraktionsebene dient, wobei die Trades notiert werden, die man in der Effizienz macht, wenn man in der Abstraktion aufsteigt. Erfahren Sie, wie Sie Abstraktionen erstellen, die die für Ihr Programm wichtige Effizienz beibehalten.

  4. Common LISP

    Dies ist die Belohnung für den vorhergehenden Slog. Sie werden Echos von dem finden, was Sie in allen vorhergehenden Sprachen gelernt haben, und sehen, wie albern so viele der vorhergehenden Zugeständnisse beim Programmieren in LISP erscheinen. Der Präprozessor von C und die Vorlagen von C++ bereiten einen darauf vor, das Makrosystem von LISP zu schätzen. Sie werden die einfache Ausdrucksweise von Perl, die Möglichkeiten zur Optimierung auf niedriger Ebene von C, die Funktionen zur Erstellung von Abstraktionen von C++ oder Java wiedererlangen und alle weit hinter sich lassen. Keiner der drei vorhergehenden - vielleicht außer Perls Debugger - hat Sie auf das interaktive Programmiererlebnis mit einem fähigen [~ # ~] repl [~ # ~] ("read, eval, print" vorbereitet Schleife"). Wenn Sie mit einer image - basierten Umgebung arbeiten, die die Beziehung zwischen Ihrem Quellcode und der Idee eines "ausführbaren Programms" ändert, ändert sich Ihre gesamte Vorstellung davon, was es bedeutet, ein Programm zu erstellen.

Über diese vier hinaus führt die Erforschung anderer Programmierstile wie der funktionalen Programmierung in Haskell oder der Logikprogrammierung in Prolog zu einem umfassenderen Verständnis des Programmierbereichs - wenn Sie so wollen, breites Wissen -, aber zu diesem Zeitpunkt ist Ihre Zeit besser bedient indem Sie Ihr Handwerk - tiefes Wissen - mit jeder Sprache verbessern, die Sie kennen.

Wenn Sie genug verschiedene Sprachen probiert haben, wird sich Ihre Sichtweise 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 fährt any Auto: Möglicherweise müssen Sie den Miet-Minivan einige Tage lang nicht fahren, wenn Sie genau wissen die Freuden, einen Lieblingssportwagen zu fahren, aber Sie werden herausfinden, wie man ihn bedient, und werden dem armen Biest sicherlich mehr entlocken als einem Amateur.

8
seh

1. Smalltalk

Ursprünglich zumindest teilweise als Möglichkeit für Kinder konzipiert, Computer zum Lernen zu verwenden. Die Syntax ist einfach genug, um sie in einem Absatz zu beschreiben. Es ist wie LOGO ein Beispiel 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 Funktionstechniken vermittelt, 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 Anzahl von professionellen Pädagogen hat.) Es gibt auch eine andere Liste für Anfänger.

2. PROLOG

Eine Logikprogrammierung Sprache, die Ihnen eine ganz andere Sicht auf die Berechnung bietet als jede andere Sprache. Prolog ist auch hoch deklarativ (aber nicht ganz so: das ! oder Schnittoperator können einen signifikanten semantischen Effekt auf ein Prädikat haben).

3. Gemeinsame LISP

Ersetzen Sie das Schema hier, wenn Sie möchten. 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 FORTRAN ist älter ).

4. Haskell

(Vorsichtsmaßnahme: Ich habe gerade erst angefangen, es zu lernen.) Wahrscheinlich die reinste funktionale Sprache auf dem Planeten. Es hat ein sehr fortschrittliches statisches Typsystem. Handy IntroBü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 darüber anregen, wie sich ihre Sprache zur Versammlung zusammensetzt.

Warum diese Bestellung?

Smalltalk ist sehr einfach zu erlernen, sodass Sie sich schnell darauf konzentrieren können, Probleme zu lösen, anstatt gegen einen Compiler zu kämpfen ("niedrige Eintrittsbarriere"). Sobald Sie mit dem Programmieren beginnen, gibt es auch keine künstliche Begrenzung für Ihre Möglichkeiten - "hohe Decke".

Wenn Sie eine gute Vorstellung davon haben, wie OO) funktioniert (und - mit der Maßgabe, dass es VIELE unterschiedliche Auffassungen darüber gibt, was "OO" bedeutet -, ist es fair zu sagen, dass OO dominiert den Markt), wenn Sie zu Prolog wechseln, denken Sie nicht, dass OO der einzige Weg ist. Prolog ist sehr anders als die meisten anderen Sprachen und wird Ihre mentalen Muskeln dehnen, so dass Sie nicht anfangen zu denken, dass Sie alles wissen.

Common LISP wiederum ist die Sprache eines Erwachsenen. Es hat einen ausgereiften Standard und 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 entweder in LISP oder Smalltalk inkubiert. Gewöhnliche LISPs sind auch ein bisschen warzig, und Sie werden überall Warzen finden.

Haskells vierter 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 (z. B. "Katamorphismus"), und Sie sollten wahrscheinlich etwas Programmiererfahrung sammeln, bevor Sie sich damit befassen. (Aber ich muss es noch einmal wiederholen, ich habe gerade erst angefangen, es zu lernen! Nehmen Sie diese Meinung mit einer Prise Salz!)

Und warum C/Delphi zuletzt? Denn wenn Sie nicht in eingebetteten Systemen arbeiten, sollten Sie wirklich nicht lernen müssen, wie man programmiert und denkt, dass manuelle Speicherverwaltung alles ist, was es gibt. Die Müllabfuhr funktionierte gut genug für eine Maschine der 1980er Jahre. Dein Telefon ist so mächtig!

Schließlich habe ich Erlang nicht in die obige Liste aufgenommen, obwohl ich es wirklich sollte.

6
Frank Shearar
  1. Python. Eine hervorragende Einführung in die Programmierung. Dies hängt auch mit früheren Programmierkenntnissen zusammen.

  2. Planen. Auch eine hervorragende Einführung in die Programmierung. Wenn Sie sich mit Programmieranfängern beschäftigen, sollten Sie dies zuerst und Python zweitens) lehren. Eine Alternative wäre Python zuerst und dann Common LISP anstelle von Scheme: more Arbeit, aber mehr Belohnung.

  3. C. Eine einfache Sprache, die nahe am Silizium bleibt. Gut, um zu lernen, was ein Computer kann. Sie könnten eine Form der Assembler-Sprache ersetzen, aber C ist den Grundlagen ziemlich nahe und viel einfacher zu bearbeiten.

  4. Prolog. Alternativ können Sie auch eine deklarative Allzwecksprache ersetzen, wenn Sie eine finden, die Ihnen besser gefällt.

  5. Haskell. Für das Typensystem und die reine Funktionalität, wenn nichts anderes.

  6. Hier gibt es mehrere Kandidaten, da es unmöglich ist, alle Konzepte mit sechs Sprachen abzudecken. Common LISP ist es wert, gelernt zu werden, schon allein für das Makrosystem und das Objektsystem (das sich von den meisten anderen unterscheidet, die ich gesehen habe). Forth, Tcl und APL sind alles seltsame 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 Parallelität.

5
David Thornley

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 aufgeführten und für jeden Programmierer, der sich mit Datenbanken befassen muss, sehr wichtig.

Möglicherweise möchten Sie auch einige Skriptsprachen auf Betriebssystemebene in Betracht ziehen, z. B. Batch, grep, awk usw. 'Make' fällt möglicherweise ebenfalls in diese Kategorie.

Eine andere Sprache, die Sie in Betracht ziehen sollten (wenn sie noch nicht vollständig tot ist), ist COBOL. Es unterscheidet sich ausreichend von anderen Verfahrenssprachen, so dass es eine Erwähnung verdient. Variationen von C, Fortran, Basic usw. sind so ähnlich geworden, dass es kein großes Problem ist, zu einem anderen zu wechseln, sobald Sie mit einem vertraut sind, aber COBOL fehlen viele der Konstrukte, die in den anderen als selbstverständlich angesehen werden. (Es ist mindestens 20 Jahre her, seit 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 in Ruhe ruhen lassen. Deine Entscheidung.

4
oosterwal

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:

  • Smalltalk - dies ist das Beste, was OO bekommt, und eine einfache Belichtung öffnet Ihre Augen für die Art und Weise, wie Dinge getan werden sollten. Am besten lernen Sie OO Konzepte auf.
  • Java oder C # - bietet einen architektonischeren und geplanteren Ansatz für OO und führt statisch überprüfte Typen ein.
  • Ruby oder Python - Sie können es nicht schätzen, bis Sie Java oder C # gefühlt haben.
  • Erlang - Parallelität auf eine Weise, die es einfach erscheinen lässt. Es ist viel besser als Ihre OO Sprachen oder C können.
  • LISP, Haskell oder eine andere funktionale Sprache - dies ist ein anderer Ansatz zur Lösung von Problemen.
  • C - Entweder durch Erstellen nativer Erweiterungen für Java oder durch Implementieren von Algorithmen auf niedrigerer Ebene ist dies so nah an Assembly, wie es jemand benötigt, bis er Compiler schreibt

Sie können fragen "Wo ist C++?" und was ist mit X? Ehrlich gesagt macht das Erlernen mehrerer Sprachen ein paar Dinge: 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 wertvolle Lektionen beigebracht. Ich kann zumindest verstehen, was mit diesen Sprachen los ist. Es gibt eine Menge, die ich nicht erforscht habe, aber vielleicht in der Zukunft. Es gibt auch einige Markup-Sprachen: HTML, XSL: FO, XSLT, CSS, XML, SGML, denen die Benutzer ausgesetzt sein müssen, wenn sie in irgendeiner Weise mit dem Web arbeiten möchten.

Nachdem Sie mindestens zwei verschiedene Sprachen gelernt haben, sollten Sie wirklich nicht einschränken, was jemand, der lernen möchte, als nächstes lernen 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.

2
Berin Loritsch

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 der Programmierung und weniger auf die syntaktischen Besonderheiten einer bestimmten Sprache konzentrieren kann. Zum jetzigen Zeitpunkt hat Tcl genau 12 Regeln, die die gesamte Sprache regeln (von elf in den letzten Jahrzehnten).

Zum anderen verfügt Tcl über eine fantastische integrierte GUI-Sprache, sodass Sie relativ sofort zufrieden sein 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 man die Wiederholung verwendet ... bis Sie lernen, wie sie sich von einer while-Schleife unterscheidet, weil Sie sie tatsächlich selbst geschrieben haben.

Da es erweiterbar ist, gibt es auch einen einfachen Übergang zu C. Sie können C-Grundlagen lernen und lernen, wie Sie entweder a) Tcl mit neuen Befehlen erweitern, die in einer anderen Sprache geschrieben sind, oder b) lernen, wie Sie einem 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 leicht zu erlernen sein. Meine vollständige Liste mit den vier, die ich nach Tcl und C unterrichten würde, ist:

  1. Tcl
  2. C.
  3. Python - für OO Konzepte sowie das Verhalten zum Definieren von Blöcken durch Einrückung im Gegensatz zu anderen Sprachen.
  4. Ruby - für eine andere Sichtweise auf OO plus Rails, um mehr über Frameworks zu erfahren
  5. Java - es wird überall verwendet, Sie müssen es kennen und etwas über die JVM lernen
  6. groovy - Kreis zurück zu dynamischen Sprachen
2
Bryan Oakley

Ich würde vorschlagen, zuerst Eric Raymonds "Wie man ein Hacker wird" zu lesen, da er einige sehr interessante Punkte für den Einstieg hat, einschließlich LISP mit dem Begriff "Code ist Daten und Daten sind Code".

Für die Programmierung würde ich auch Haskell, Prolog, SQL und Assemblersprache vorschlagen (nur einige).

Unabhängig davon, was Sie lernen möchten, nehmen Sie sich Zeit, um es richtig zu lernen, und schreiben Sie nicht triviale Mengen an Code. Es ist ähnlich wie Fahrradfahren - man kann es nicht aus einem Buch lernen.

2
user1249

Zuerst> Was möchten Sie tun, wenn Sie mit dem Programmieren beginnen? Zu lernen, wie man ein Spielprogrammierer ist, ist anders als zu lernen, 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 anfangen und sich nach unten arbeiten? Oder fangen Sie niedrig an und arbeiten Sie sich nach oben. Das Lernen von C # (hohes Niveau) unterscheidet sich stark vom Lernen von Assembly (niedriges Niveau).

Eine große Auswahl hängt davon ab, was Sie tun möchten. Das Programmieren eines Treibers umfasst höchstwahrscheinlich C oder Assembly ... Das Programmieren einer Website erfolgt über PHP, C #, asp usw. 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 Datenanalyst in einem Krankenhaus geworden. Meine "Wahl" von 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 + baue dein eigenes Programm, um die Sprache zu üben. Ich mag APress und habe es geliebt, C # 2008 zu lesen. Illustriert beim Lernen von C #. Sie haben andere Bücher, die sowohl Grundlagen für Ungelernte als auch für Experten enthalten.

2
WernerCD

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 der Grund:

  1. sie können sich nicht durch die Assemblersprache täuschen. Sie bekommen es entweder oder Sie tun es 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 Anfänger-Add-Two-Numbers-Ebene)

  2. nachdem Sie einige Assembler-Programme mit mehr als ein paar hundert Zeilen geschrieben haben, sind Zeiger und Speicherverwaltung nicht mehr mysteriös, und Sie sollten begonnen haben, 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 kümmern Sie sich nicht um Makros/Vorlagen/etc. in diesem Stadium.

  3. springen Sie jetzt mit SQL in Datenbanken. Gehen Sie bei gespeicherten Prozeduren nicht über Bord, sondern lernen Sie die Grundlagen von Tabellen und Abfragen kennen.

  4. nachdem Sie einige C-Programme mit mehr als ein paar hundert Zeilen geschrieben haben, sind Zeiger, Strukturen und Speicherverwaltung eine Selbstverständlichkeit, und prozedurale Konstrukte sind alte Freunde. Sie werden Muster höherer Ordnung bemerken: Diese Funktionen passen immer zu dieser Datenstruktur. Dieser Teil des Codes entspricht genau dem Teil des Codes, mit Ausnahme der Methoden X, Y und Z usw. Fügen Sie dazu Ihr Verständnis für relationale Daten hinzu und jetzt sind Sie bereit für eine objektorientierte Sprache. Mit einem massiven Rahmen und allgemein stumpfer Dokumentation. Willkommen in der realen Welt! Entdecken Sie GUIs, schreiben Sie Desktop-Apps, schreiben Sie Websites, schreiben Sie Webdienste und schreiben Sie, was Sie möchten. Geh und hol dir einen Job, wenn du so geneigt bist.

Bist du jetzt ein Programmier-Jedi? Ein Code Ninja? Nein, jetzt bist du nur noch kompetent. Aber Sie haben eine solide Grundlage, um das glänzende neue lustige Zeug zu erkunden.

1
Steven A. Lowe

Sie brauchen Grundlagen:

  1. Maschinensprache
  2. Assemblersprache
  3. C.
  4. LISPELN

Danach spielt es wahrscheinlich keine Rolle mehr.

1
Scott Whitlock

Beginnen Sie in der Nähe des Metalls:

  1. Assembler
  2. C.
  3. C++
  4. C #
  5. LISPELN
  6. Python oder Ruby

Das Problem bei einem so breiten Ansatz ist nun, dass niemand ohne jahrelanges Lernen in diesen Sprachen auch nur aus der Ferne fähig werden kann.

  1. Assembler: 3 Monate
  2. C: 6 Monate
  3. C++: 2 Jahre
  4. C #: 6 Monate
  5. LISP: 3 Monate
  6. Python/Ruby: 3 Monate

Es sei denn, Sie möchten ihnen "Hallo Welt" beibringen, was für alle 6 ungefähr einen Monat dauern sollte.

0
SnoopDougieDoug

Schema, C, C++

Ich werde voreingenommen 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 dafür dankbar. Das Modell basiert darauf, dass keine Programmiererfahrung, sondern Lernfähigkeit erforderlich ist.

  1. Schema
    Wir sind Sie lernen zuerst Programmieren, je weniger Magie, desto besser. Die Unterrichtssprache des Schemas enthält eine klare und vernünftige Definition einer Sprache, eine wirklich kleine Menge von Axiomen (die "Magie"), auf die Sie aufbauen und die Sie erweitern können. Jeder, der Funktionen in Mathematik verstehen kann, kann Schema-Programme verfolgen und begründen. Das Beginnen mit Schema bietet eine saubere und dennoch leistungsstarke Möglichkeit, über Berechnungen nachzudenken, ohne sich um die sprachspezifischen Details kümmern zu müssen.

  2. C
    Der Wechsel von Schema zu C ist drastisch, ermöglicht Ihnen jedoch das Erlernen der sehr wichtigen Zuordnung von Hochsprachen zu Niedrigsprachen. Das Erlernen des Speichermodells (Zeiger, Heap, Stapel usw.) und wie Programme kompiliert und ausgeführt werden, wie Zeiger, Stapel und der Heap funktionieren, 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 Ihre eigenen abstrakten Datentypen rollen und mit verschiedenen Implementierungen spielen (z. B. eine einfache Hash-Tabelle im Vergleich zu einem Binärbaum für eine Menge).

  3. C++
    Durch das Lernen von C und Schema sehen wir verschiedene Paradigmen von Programmiersprachen 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. Um Probleme zu lösen, die größer sind als die Dinge, die Sie im Kopf behalten können, ist diese Wahl großartig, aber auch gefährlich. C++ versucht, so wenige Entscheidungen wie möglich für den Programmierer zu treffen. Durch das Erlernen von C++ lernen Sie, wie Sie diese Kompromisse und Entscheidungen selbst treffen, um Ihre Probleme zu lösen.

Möglicherweise verwenden Sie keine dieser Sprachen in der Industrie oder berühren sie jemals wieder, aber der Lernprozess hilft Ihnen, andere Sprachen zu verstehen, die Sie verwenden werden. Ein weiterer Aspekt ist, dass Sie die Werkzeuge für eine bestimmte Sprache lernen. Führen Sie gcc über die Befehlszeile aus, lernen Sie Vim, durchlaufen Sie ein Programm mit GDB, erstellen Sie Make-Dateien, checken Sie Code mit SVN ein, schreiben Sie Shell-Skripte, um das Testen zu automatisieren usw.

Allerdings enthält der Kernlehrplan auch andere Kurse (Computerarchitektur, Datenstrukturen und -algorithmen, Compiler, Betriebssysteme usw.). Das bloße Erlernen dieser Sprachen reicht also nicht aus, um die Programmierung zu beherrschen.

0
Kirk Fernandes

Der Übergang von einer Basissprache zu einer höheren Sprache ist der richtige Weg. Auf diese Weise haben Sie immer noch eine Vorstellung davon, was hinten passiert.

  • C - Zeiger & Speicherverwaltung
  • C++ - OO Grundlagen und immer noch sehr beliebt
  • Java/C # - Die beliebtesten Sprachen
  • Einige grundlegende Montage
  • Funktionssprache - z.B. Haskell
  • Skriptsprache - z. Python
0
Carra

OK, dies 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.)

  • Ich denke nicht, dass die erste Sprache die einfachste sein muss. Ich denke eher, es sollte die Gesamtidee darüber geben, wie der Computer funktioniert, wobei eine gewisse Abstraktion beibehalten wird.
  • Der Übergang von C nach C++ wird einfacher. Es wird OOP geben, das heutzutage am häufigsten verwendete Paradigma.
  • Der Übergang von C++ zu C #/Java wird einfacher. Ich bevorzuge C #, weil es viele Paradigmen wie funktionale Programmierung enthält.
  • Wenn jemand jetzt zu dynamischen Sprachen wie Python oder Ruby) kommt, wird es ein "WoW" geben. Es wird einfacher sein, die Schönheit des dynamischen Tippens zu spüren. Aber das Lernen Dynamische Sprachen zuerst und statische später verursachen: "Oh! Warum muss ich all diese hinzufügen?"
  • Jetzt sind die am häufigsten verwendeten Paradigmen und Sprachen fast fertig. Erforschen Sie also, was Sie wollen. Von der Versammlung zum LISP, Prolog oder Haskell. Und entdecken Sie neuere Kontexte und Funktionen verschiedener Programmiersprachen.
0
Gulshan
  1. Python. Um Dinge zu erledigen, programmieren Sie normal. Prozedural, OO und (bis zu einem gewissen Grad) funktional.

  2. Reguläre Ausdrücke. Sie befinden sich in der Bibliothek Python], es handelt sich jedoch um ein separates DSL.

  3. Shell (BASH oder was auch immer). Das "&", "|", ";" Operatoren zum Kombinieren von Prozessen sind in Python kritisch und unangenehm.

  4. SQL. Dies ist - vorerst - die Verkehrssprache für den Datenzugriff.

  5. XHTML. Dies ist vorerst die Verkehrssprache für die Datenpräsentation.

  6. CSS.

Vielleicht C, wenn es nötig wurde.

0
S.Lott