Was wird einem aufstrebenden Programmierer besser helfen: Ein klassisches Buch im Schema oder eine moderne Sprache wie Python?

7

Ich bin wirklich daran interessiert, ein ernsthafter Programmierer zu werden, der Typ, den Leute für Hacker-Chops bewundern, im Gegensatz zu einer Unternehmensdrohne, die nicht einmal FizzBuzz vervollständigen kann.

Momentan habe ich mich in ein paar Sprachen eingemischt, die meiste Erfahrung habe ich in Perl und Shell, und ich habe mich ein wenig in Ruby versucht.

Allerdings kann ich nicht anders, als zu fühlen, dass ich, obwohl ich ein paar Teile von Sprachen kenne, nicht weiß, wie man programmiert .

Ich habe wirklich keine große Eile, um sofort eine Sprache zu lernen, die mir einen Job bringen kann (obwohl ich es gerne bald machen würde), und ich überlege, PLT Scheme (jetzt Racket genannt) zu benutzen Wie man Programme oder die Struktur und Interpretation von Computerprogrammen im Wesentlichen zu einem der Schemaklassiker gestaltet, weil ich immer gehört habe, dass sie Leuten beibringen, wie man qualitativ hochwertigen, lesbaren Code schreibt.

Aber sogar MIT änderte seinen Einführungskurs von der Verwendung von SICP und Scheme zu einem in Python.

Also bitte ich um den weisen Rat der vielen erfahrenen Programmierer hier bezüglich der folgenden:

  • Führt Scheme (und diese Bücher) wirklich dazu, wie man gut programmiert? Wenn ja, welches der beiden Bücher empfehlen Sie?
  • Ist dieser Lernansatz immer noch relevant und anwendbar? Bin ich auf dem richtigen Weg?
  • Müsste ich meine Zeit lieber damit verbringen, eine praktischere Sprache wie Python zu lernen?
  • Ist Scheme (oder Lisp im Allgemeinen) wirklich eine Sprache, die man lernt, nur um sie niemals zu benutzen? Oder tun diejenigen von euch, die einen Lisp-Code darin oft kennen?

Danke und Entschuldigung für das Wandern.

    
Gnats 28.07.2010, 15:49
quelle

12 Antworten

8
  • Führt Scheme (und diese Bücher) wirklich dazu, wie man gut programmiert? Wenn ja, welches der beiden Bücher empfehlen Sie?

Wahrscheinlich. Wahrscheinlich besser als jedes der Bücher zum Lernen X in Y Timespan.

  • Ist dieser Lernansatz immer noch relevant und anwendbar? Bin ich auf dem richtigen Weg?

Ja.

  • Müsste ich meine Zeit lieber damit verbringen, eine praktischere Sprache wie Python zu lernen?

Nur wenn Sie planen, einen Job darin zu bekommen. Scheme wird Ihnen jedoch eine bessere Grundlage geben.

  • Ist Scheme (oder Lisp im Allgemeinen) wirklich eine Sprache, die man lernt, nur um sie niemals zu benutzen? Oder tun diejenigen von euch, die einen Lisp-Code darin oft kennen?

Ich mache Emacs elisp fiedeln, um meine Emacs anzupassen. Ich arbeite auch mit funktionalen Sprachen auf der Seite, um zu versuchen, meinen Geist flexibel zu halten.

Meine persönliche Meinung ist, dass es im Wesentlichen zwei Tracks gibt, die durchlaufen werden müssen, bevor der Student behaupten kann, etwas über Programmierung zu wissen. Track one ist die Maschine selbst, der Computer. Sie sollten hier mit der Montage beginnen und lernen, wie der Computer funktioniert. Nach etwas Arbeit und Verständnis dort - nicht zu knausern - sollten Sie C und dann C ++ lernen; wirklich das Verständnis von Ressourcenmanagement und was wirklich passiert. Track two ist der sehr hohe Sprachtrack - Scheme, Prolog, Haskell, Perl, Python, C #, Java und andere, die auf einer VM oder einem Interpreter ausgeführt werden, liegen in diesem Bereich. Auch diese müssen untersucht werden, um zu lernen, wie Probleme auf verschiedene Weise abstrahiert und durchdacht werden können, ohne die frechen Teile eines echten Computers zu involvieren.

Aber was wird nicht funktionieren, ist ein Dilettant in der Sprache, wenn man programmieren lernt. Sie müssen eine Sprache finden - Schema ist akzeptabel, obwohl ich empfehlen würde, zuerst mit dem niedrigen Niveau zu beginnen - und dann mindestens ein gutes Jahr bei dieser Sprache zu bleiben.

    
Paul Nathan 28.07.2010, 16:30
quelle
11

Wenn Sie lernen wollen, wirklich zu programmieren, fangen Sie an, es zu tun. Quit dabbling und Code schreiben. Wählen Sie eine Sprache und schreiben Sie Code. Lösen Sie Probleme und veröffentlichen Sie Anwendungen. Arbeiten Sie mit erfahrenen Programmierern an Open-Source-Projekten, aber machen Sie es. Viel.

    
Adam Crossland 28.07.2010 15:57
quelle
5

Die wichtigsten Teile von Scheme sind die Programmiersprachenkonzepte, die Sie aufgreifen können, die moderne Sprachen jetzt einfach übernehmen oder hinzufügen.

Lisp und Scheme haben vor den meisten anderen Sprachen Funktionen unterstützt, die für die damalige Zeit oft revolutionär waren: Schließungen und Funktionen erster Ordnung, Fortsetzungen, hygienische Makros und andere. C hat nichts davon.

Aber sie tauchen immer häufiger in Programmiersprachen auf, die heute fertig sind. Warum können Sie Funktionen einfach irgendwo in JavaScript deklarieren? Was passiert mit externen Variablen, auf die Sie innerhalb einer Funktion verweisen? Was sind diese neuen "Schließungen", die PHP 5.3 gerade bekommt? Was sind "Nebenwirkungen" und warum können sie schlecht für das parallele Rechnen sein? Was sind "Fortsetzungen" in Ruby? Wie funktionieren LINQ-Funktionen? Was ist ein "Lambda" in Python? Was ist die große Sache mit F #?

Das sind alles Fragen, auf die das Lernschema antwortet, aber C nicht.

    
erjiang 28.07.2010 17:52
quelle
1

Ich würde sagen, es hängt davon ab, was Sie tun möchten.

Wenn Sie in die Programmierung einsteigen wollen, ist Python wahrscheinlich besser. Es ist eine ausgezeichnete erste Sprache, ähnelt den meisten gängigen Programmiersprachen und ist weit verbreitet. Sie werden mehr Bibliotheken finden, die handlich sind und die Dinge einfacher machen können.

Wenn Sie in die Informatik einsteigen wollen, würde ich Scheme zusammen mit SICP empfehlen.

In jedem Fall würde ich empfehlen, einige sehr unterschiedliche Sprachen zu lernen, um Ihnen mehr Möglichkeiten zu geben, Probleme zu betrachten und zu lösen. Wenn Sie zum Beispiel Common Lisp einigermaßen beherrschen, werden Sie ein besserer Java-Programmierer. Ich würde sie trotzdem einzeln nehmen.

    
David Thornley 28.07.2010 16:41
quelle
1

Die wahrscheinlich besten Sprachen sind:

  • eine Sprache, die Sie in
  • spielen / lernen möchten
  • eine Sprache, in der Sie arbeiten möchten

Und wahrscheinlich auch in dieser Reihenfolge, es sei denn, die dringendste Notwendigkeit besteht darin, sich selbst zu ernähren.

Hier ist die Sache: Der Weg zu lernen, zu programmieren ist, es viel zu tun. Um es viel zu tun, braucht man viel Geduld und mehr als nur ein bisschen Enthusiasmus. Dies ist wichtiger als die spezifische Sprache, die Sie auswählen .... aber es kann sein, dass Sie eine Sprache auswählen, in der Sie arbeiten (egal ob Sie die Features mögen oder weil Sie denken, dass es Ihnen etwas beibringt) ein großer Schub.

Das heißt, hier sind ein paar Kommentare zu Scheme:

  

Tut Scheme (und mache diese Bücher)   wirklich lehren, wie man gut programmiert?

Die Sache mit Scheme (oder etwas Ähnlichem) ist, dass wenn Sie es lernen, es Ihnen einige sehr nützliche Abstraktionen beibringen wird, die viele Programmierer nie wirklich in den Griff bekommen mit einer funktionalen Programmiersprache nie lernen. Sie werden denken anders Die Substanz der Programmiersprachen und Computer wird Ihnen flüssiger erscheinen. Sie werden eine bessere Vorstellung davon haben, wie Sie Ihre eigenen Quasi-Primitive aus einer sehr kleinen Menge von Primitiven zusammensetzen können, anstatt sich auf die im Allgemeinen statische Menge von Primitiven zu verlassen, die in einigen anderen Sprachen angeboten werden.

Das Problem ist, dass eine Menge von dem, was ich sage, Ihnen im Moment nicht viel bedeutet, und es ist ein bisschen mehr ein umständlicher Weg, als in eine gemeinsame dynamische Sprache wie Perl, Python oder Ruby zu kommen ... oder sogar eine Sprache wie C, die der Von-Neumann-Mechanik der Maschine nahe kommt.

Dies bedeutet nicht, dass es eine schlechte Idee ist, dort anzufangen: Ich war Teil eines Experiments, in dem wir Prolog aller Dinge Erstprogrammierern beigebracht haben, und es hat überraschend gut funktioniert . Manchmal hilft der Verstand des Anfängers tatsächlich. :) Aber Scheme als erste Sprache ist definitiv ein unkonventioneller Weg. Ich vermute Ruby oder Python wäre ein sanfterer Weg.

  

Ist Scheme (oder lisp im Allgemeinen) wirklich   eine Sprache, die man lernt, nur um   benutze niemals?

Es ist eine Sprache, in der Sie wahrscheinlich nicht eingestellt werden . Aber während Sie lernen, zu programmieren, und nachdem Sie gelernt haben und es in Ihrer Freizeit tun, Sie können Code schreiben, was immer Sie wollen, und aufgrund des Internets werden Sie wahrscheinlich in der Lage sein, Leute zu finden, die an Open-Source-Projekten in der von Ihnen gewünschten Sprache arbeiten. :)

    
Weston C 28.07.2010 17:51
quelle
1

Ich hasse es, dir zu sagen, aber niemand bewundert Programmierer für ihre "Hackerhacken". Es gibt Leute, die Scheiße machen, dann gibt es noch alle anderen. Viele der früheren Typen sind die "Unternehmensdrohnen", die Sie zu verachten scheinen.

Nun, für Ihre Frage, ich persönlich liebe Lisp (und Scheme), aber wenn Sie etwas wollen, die Sie eher in der Industrie verwenden "Anfang Python" könnte besser Material für Sie sein, wie Python häufiger in der gefunden wird wild. Oder wenn Ihnen Ruby gefällt, finden Sie gutes Ruby-Material und beginnen Sie mit der Erstellung funktionierender Lösungen (gleiches gilt für Java oder .Net oder was auch immer).

Wirklich, jede Route wird dir gut dienen. Der Trick ist, dabei zu bleiben, bis Sie die Konzepte, die gelehrt werden, verinnerlicht haben.

    
Shaun 29.07.2010 01:19
quelle
0

Die Frage, ob ein Lernansatz relevant und anwendbar ist, ist schwierig - es gibt viele verschiedene Lernstile, und es geht darum herauszufinden, welche für Sie persönlich relevant sind. Denken Sie daran, dass der Stil, der Ihnen am besten gefällt, nicht der ist, der am besten für Sie funktioniert: -)

Sie haben viel Zeit und es klingt, als ob Sie Enthusiasmus übrig haben. Es ist also keine Frage, welche Sprache Sie lernen sollten, sondern welche Sie zuerst lernen sollten zuerst . persönlich würde ich mir ansehen, was Sie bisher gelernt haben, welche Arten von Sprachen und Paradigmen Sie haben, und dann auf eine wilde Tangente gehen und eine völlig andere wählen.

    
Andy 28.07.2010 15:54
quelle
0

Ich habe schon sehr früh mit dem Programmieren angefangen. Als ich in der High School war, dachte ich, ich wäre ein guter Programmierer. Das war der Zeitpunkt, an dem ich angefangen habe zu lernen, WIE und WARUM die Sprachen funktionieren und nicht nur die Syntax.

Bevor wir das Wie und Warum gelernt haben, wäre die Umstellung auf eine neue Sprache die Hölle gewesen. Ich hatte eine Sprache gelernt, aber ich hatte nicht gelernt zu programmieren. Jetzt, wo ich die grundlegenden Konzepte gut kenne, kann ich sie auf praktisch jede Sprache anwenden und sie mit Leichtigkeit aufheben.

Ich würde ein Buch (oder sogar eine grobe Schule, wenn Sie es sich leisten können) wärmstens empfehlen, das Sie durch die Prozesse des Codierens führt, ohne sich auf eine bestimmte Sprache zu verlassen.

Leider habe ich keine Bücher zu empfehlen, aber wenn andere mir zustimmen und davon wissen, können sie vielleicht einen Vorschlag machen.

// Edit: Nachdem ich deine Frage noch einmal durchgelesen habe, habe ich bemerkt, dass ich auf keinen von ihnen wirklich geantwortet habe ... Tut mir leid. Ich denke, dass es sehr hilfreich ist, ein Buch aufzuheben, das Sie mit Best Practices vertieft, unabhängig von der gewählten Sprache.

    
Alec Sanger 28.07.2010 15:56
quelle
0

Es gibt grundlegende Programmierkonzepte (Logikfluss, Datenstrukturen), die sich leicht mit Sprachen wie Python vermitteln lassen. Es gibt jedoch viel komplexere Programmierkonzepte (Entwurfsmuster, Optimierung, Threading usw.), die die klassischen Sprachen nicht für Sie abstrahieren.

Wenn Ihre Suche nach Wissen mehr auf die Entwicklung von Algorithmen und die Wissenschaft der Programmierung abzielt, beginnen Sie mit C. Wenn Ihre Suche mehr nach einem praktischen Zweck ist, höre ich Ruby als guten Ausgangspunkt / p>     

TreDubZedd 28.07.2010 15:59
quelle
0

Ich stimme mit gruszczy überein. Ich würde anfangen, mit C. zu programmieren.

Es mag zunächst etwas gruselig sein (zumindest für mich: S), aber auf lange Sicht wäre es dir dankbar. Ich meine, ich liebe Python, aber weil ich zuerst C gelernt habe, war die Lernkurve für andere Sprachen überhaupt nicht sehr steil.

Beginne mit C und mach es so.

Denk nur daran, zu üben, weil du dich nie verbessern wirst, indem du nichts tust. ;)

    
Ashley Grenon 28.07.2010 16:13
quelle
0

Zu einem bestimmten Punkt in Ihrer Frage helfen Ihnen die "Klassiker", die Sie erwähnen, genau, was die Titel sagen. SICP beschäftigt sich mit der Struktur und Interpretation von Computerprogrammen. Es geht nicht darum, Scheme zu lernen (obwohl Sie Scheme lernen werden). Bei HtDP geht es darum, Programme zu entwickeln, es geht nicht darum, Scheme zu lernen (obwohl Sie Scheme lernen werden).

Schema ist im Prinzip eine sehr kleine und prägnante Sprache mit fast keinen Problemen. Dies macht es ideal, um weiter zu lernen, wie man Programme strukturiert und interpretiert oder wie man sie gestaltet. Traditionelle "praktische" Sprachen wie C, C ++, Python oder Java haben diese Qualität nicht. Sie sind voller Syntax. Mit diesen Sprachen zu lernen bedeutet, dass Sie gleichzeitig syntaktische Macken lernen müssen, während Sie lernen, wie ein Programmierer zu denken. Meiner Meinung nach ist das bedauerlich. In einigen Fällen sind die Macken gut, in anderen sind sie Geschichtsunfälle, aber in allen Fällen ist es bedauerlich.

    
anonymous 05.08.2010 23:03
quelle
-1

Startcodierung in C . Es sollte zuerst ein Horror für Sie sein, aber das bringt Ihnen die wichtigsten Sachen wie: Zeiger, Wiederholung, Gedächtnismanagement. Versuchen Sie, einige klassische Bücher über Programmierung wie Die Kunst der Computerprogrammierung von Donald Knuth zu lesen. Wenn Sie das beherrschen, können Sie über objektorientierte Programmierung oder funktionale Programmierung nachdenken. Erste Grundlagen . Wenn es dir gelingt, sie zu lernen, wird dir nichts wieder schwer fallen.

    
gruszczy 28.07.2010 16:01
quelle

Tags und Links