Welche Auswirkungen haben Skriptsprachen auf Junior-Programmierer? [geschlossen]

18

Ich hatte neulich ein Gespräch mit einem meiner Lehrer.

Wir diskutierten die Auswirkungen, die einfachere Skriptsprachen (wie Python oder Ruby) auf Junior-Programmierer haben.

Er argumentierte, dass Skriptsprachen schlampige Codierungstechniken erzeugen, weil Anfänger nicht verstehen, was "unter der Haube" vor sich geht. Er führte auch andere Beispiele an, wie Skriptsprachen den Programmierer häufig dazu veranlassen, Bedenken hinsichtlich Effizienz, Speicherverwaltung, Betriebskomplexität usw. zu vernachlässigen.

Ich argumentierte, dass niedrigere Programmiersprachen für manche Menschen zu viel sein könnten und sie aufgeben könnten, bevor sie eine Leidenschaft für das Programmieren entwickeln. Als ich anfing, meine erste Programmiersprache (C) zu lernen, bekam ich Zeiger und gab auf, weil die Konzepte zu schwer waren (zu meiner Verteidigung war ich erst 14 Jahre alt). Ohne Java wäre ich vielleicht kein Programmierer geworden! Wenn ich mit einer einfacheren Sprache angefangen und dann tief gegraben hätte, hätte ich nicht aufgegeben und ich hätte genauso viel gelernt, wie ich mit C angefangen habe.

Die Klasse endete, bevor beide Seiten vollständig erforscht waren.


Bis zu diesem Punkt habe ich gepredigt, dass Anfänger mit Skriptsprachen beginnen und dann tief graben sollten; aber nach dieser Diskussion begann ich mich zu fragen, ob dies ein Irrtum war.

Welchen Einfluss haben Skriptsprachen auf Junior-Programmierer?

joe_coolish
quelle
8
Ich will kein Arsch sein, aber grammatik.quickanddirtytips.com/affect-versus-effect.aspx
Singletoned
4
Ich habe gelernt, mit einem Automatikgetriebe Auto zu fahren. Später bekam ich eine mit Schaltgetriebe. Es dauerte eine Weile, bis ich es gelernt hatte, und ich hatte das Glück, dass ich nicht das Kuppeln und Schalten lernen musste.
David Thornley
2
@Singletoned: Richtig. Irgendwie musste ich an xkcd.com/326 denken ...
2
Ich musste an diese joelonsoftware.com/articles/ThePerilsofJavaSchools.html
P.Brian.Mackey
4
Persönlich finde ich es unnatürlich, zu lernen, niedrig zu programmieren als hoch. Wir lernen, zu kriechen, zu laufen und zu rennen, zu reden und zu schreiben. Ich bin nicht sicher, was die Logik für die Umkehrung der natürlichen Ordnung im College ist. Normalerweise höre ich nur Leute zu dem Schluss kommen, "wenn es mir schwer gefallen ist zu lernen, dann muss es dir schwer fallen". Sogar Joel hat das gesagt. Ich denke, der Zyklus wird niemals enden.
P.Brian.Mackey

Antworten:

26

Ich stimme dir nicht zu. Erstens befinden sich Skriptsprachen auf einer höheren Abstraktionsebene, und daran ist nichts auszusetzen. Am Anfang versucht man nur, die Prinzipien zu lernen. Eigentlich würde ich sagen, dass die Wahl einer niedrigeren Programmiersprache zu einer schlechten Codierung führen kann, da man sich mit einigen Details befassen muss, bevor man sie verstehen kann. Stattdessen kann man mit einer einfacheren Sprache von Anfang an sauberen und präzisen Code schreiben.

Zweitens gibt es in diesen Sprachen viel zu lernen. Zum Erlernen der Sprache würde ich sagen, dass C einfacher ist als Python. Man muss sich mit Zeigern auseinandersetzen oder sich um Zeichenketten kümmern, aber in Python gibt es noch viel mehr Konzepte zu lernen. Verständnis, Objektorientierung, Reflexion, magische Methoden, erstklassige Funktionen, Lambdas, Iteratoren und Generatoren, Metaklassen: all dies ist Teil der Sprache.

Ich denke, dass das Beginnen mit Python es ermöglicht, viel mehr über das Programmieren und eine sanftere Lernkurve zu lernen. Eine niedrigere Sprache hat möglicherweise weniger Abstraktionen - also weniger allgemeine Konzepte zum Lernen - und überfordert den Anfänger mit Details, auf die er verzichten möchte.

Andrea
quelle
1
+1, obwohl ich glaube, dass C in keiner Hinsicht leichter zu lernen ist als Python. Vielleicht gibt es insgesamt weniger Konzepte zu lernen, aber Sie werden mit Python in der gleichen Zeit mehr lernen. Und natürlich, wenn C zu einfach ist, gibt es immer C ++, das Ihnen die Komplexität von High- und Low-Level-Sprachen beibringt. ;)
Martin
+1, das war mein Denken! Ich wünschte, ich hätte das vor dem Unterricht gelesen :)
joe_coolish
22

Es ist egal, wo Sie anfangen. Es ist wichtig, wohin du gehst, nachdem du angefangen hast.

BASIC ist vielleicht nicht die eleganteste Sprache auf dem Planeten, aber es umfasst die Grundlagen der prozeduralen Programmierung und das ist genug, um loszulegen.

Ich habe mit BASIC angefangen. Ich habe nicht bleiben dort.

Steven A. Lowe
quelle
+1 für die perfekte Antwort - zeigt genau, wie unangebracht die ursprüngliche Frage ist! (Zufällig habe ich auch mit BASIC angefangen ;-)
Péter Török
5
Es wundert mich, wie viele Leute dort bleiben ..: o /
Gary Willoughby
1
Excellect antworte. Kurz, präzise und auf den Punkt. Ich habe auch mit BASIC angefangen.
Michael Riley - AKA Gunny
11

Ihr Lehrer hat Recht, außer dass er annimmt, dass seine Konsequenzen schlimme Dinge sind.

Wenn Sie das Erlernen von Sprachen als reine akademische Aktivität betrachten, um zu lernen, wie Computer funktionieren, dann hat er Recht. Wenn Sie sie als einen Weg betrachten, Dinge zu erledigen, dann sind Sie richtig.

Singletoned
quelle
6
Ich muss dir nicht zustimmen. Die Konsequenzen sind schlimme Dinge, weil die Konsequenz Unwissenheit ist. Dies bedeutet, dass irgendwann etwas kaputt geht und das Problem auf einer niedrigeren Abstraktionsebene auftritt, als Sie es verstanden haben, und Sie keine Ahnung haben, wie Sie es beheben können. Das ist immer eine schlechte Sache.
Mason Wheeler
6
Ich muss dir zustimmen. Die Folge davon, nicht zu wissen, was unter der Haube vor sich geht, ist eine tiefe Einfachheit und Direktheit des Ausdrucks, ohne sich Gedanken über die Nuance der Hardware zu machen. Niedrigere Abstraktionsebenen sind für Sprachdesigner gedacht, nicht für Anwendungsentwickler.
S.Lott
1
@Mason: Auf jeden Fall. Ich habe einmal sehr viel Geld verdient, um die Ärsche eines Teams von Programmierern zu retten, die keine Ahnung davon hatten, was wirklich unter der Haube vor sich geht, und daher nicht in der Lage waren, die Leistung ihres Produktionssystems zu verbessern oder zuverlässig zu arbeiten. (Einmal, weil diese Art von Arbeit nervt. Das Leben ist zu kurz!)
William Pietri
1
@Mason - Ich stimme dem zu, was Sie gesagt haben, dass es wichtig ist, dieses Wissen zu haben, wenn Sie professionell programmieren wollen. Ich fand mein Wissen über Zeiger, diskrete Strukturen und Lambda-Kalkül äußerst wertvoll. Ich war in Teams gefangen, in denen meine Teammitglieder diese Fähigkeiten nicht besaßen und am Ende übermäßig komplizierten oder sehr fehlerhaften Code erstellten. nur weil sie es nicht besser wussten. Es scheint nur so, als würden Colleges CS-Schülern manchmal zu viel Milch und zu wenig Fleisch füttern. Auf der anderen Seite besteht jedoch die Gefahr, dass sie aus dem Programm ausscheiden, wenn sie das Fleisch des ersten Programmierers füttern.
Joe_coolish
1
@Joe: Laut Joel ist es der springende Punkt, diejenigen, die damit nicht umgehen können, zum Ausfall zu bringen . Und nicht nur als Computer - Programmierer , sondern ein Computer Benutzer auch, eine , die regelmäßig mit schrecklichen Programmen zur Arbeit hat , dass ich nur durch unfähigen Programmierer erstellt annähme, ich wünschte wirklich , die „so dass sie Drop - out“ Bit war erfolgreicher!
Mason Wheeler
5

Ich denke, "Skriptsprache" ist ein schreckliches Wort, das extrem veraltet ist oder bestenfalls zu einer Klasse von domänenspezifischen Sprachen passt. Ihr Lehrer richtet einfach alles, worüber er offensichtlich nicht genug Verständnis hat, auf eine Achse des Bösen aus.

Eine vernünftige Unterscheidung ist die zwischen Hochsprachen und Niedrigsprachen oder zwischen statisch und dynamisch typisierten Sprachen, die wirklich orthogonal sind.

Assembler ist auf niedriger Ebene dynamisch typisiert (wenn es überhaupt Sinn macht, von Typen zu sprechen), C ist auf niedriger Ebene statisch typisiert, Ruby ist auf hoher Ebene dynamisch typisiert, Haskell ist auf hoher Ebene statisch typisiert. Java ist weder auf hoher noch auf niedriger Ebene statisch typisiert, C ++ ist sowohl auf hoher als auch auf niedriger Ebene statisch typisiert. Und so weiter.

Die Diskussion kann nur sein, welche Paradigmen für einen Einsteigerprogrammierer besser geeignet sind.
Ich bin ziemlich davon überzeugt, dass Low-Level-Programmierung wahrscheinlich keine ist. Es könnte schon in den frühen 90er Jahren gewesen sein, als man damit in angemessener Zeit tatsächlich interessante Ergebnisse erzielen konnte.
Aber das Programmieren wird von Leidenschaft angetrieben. Leidenschaft wird durch Belohnungen genährt. Anfänger sollten daher mit lohnenden Tools beginnen. Niedrigstufige Werkzeuge lohnen sich nicht mehr, da es eine Unmenge hochstufiger Werkzeuge gibt, mit denen Sie in einem Bruchteil der Zeit das gleiche Ergebnis erzielen.

Das menschliche Denken ist abstrakt. Wenn wir lernen, die Welt zu verstehen, tun wir dies durch sehr grobkörnige Abstraktionen und gehen bei Bedarf ins Detail.
Damit ein Kind seine Umwelt versteht, wird es nicht Mathematik, dann Physik, dann Chemie, dann Biologie, dann Geschichte, Soziologie und Philosophie unterrichtet. Du gibst ihm ein sehr einfaches Modell der Welt, um damit fertig zu werden und wirst, wenn er jung ist, endlos Fragen auf dich werfen und deine Autorität später komplett negieren.

So denken wir. Das menschliche Gehirn kann nur begrenzte Informationsmengen "Einheiten" verarbeiten, aber der Grad der Abstraktheit spielt bei der Quantisierung von Informationen nur eine geringe Rolle. Zum Beispiel: Das Lesen des Ausdrucks '34 * 75 'ist für uns einfacher als das Berechnen, während es für Computer umgekehrt ist. Ein Bündel schwarzer Pixel in einer verzerrten Linie zu erkennen (und damit zu abstrahieren), die dann als einzelne Ziffer erkannt (und damit wieder abstrahiert) werden kann, ist ein enormer Arbeitsaufwand.
Meine Großmutter versteht die Idee, eine Datei zu öffnen. Unter dieser Ebene hat sie jedoch kein Verständnis. Und ehrlich gesagt, wenn sie dies hätte lernen müssen, indem sie zuerst die internen Abläufe der Hardware und des Betriebssystems studiert hätte und was nicht, wäre sie nie dort angekommen.

Es gibt eine Menge Leute, die Dinge überkomplizieren, weil sie nie gelernt haben, in klaren, präzisen und dabei eleganten Lösungen zu denken, sondern sich zu viel Zeit mit austauschbaren Details auf niedriger Ebene und der Lösung von Problemen mit diesen zu beschäftigen. Menschen beizubringen, wie Computer zu denken, ist der schlechteste Ansatz für die Programmierung.
Der Wert der Programmierung liegt in der Lösung eines Problems. Das Ausdrücken als Code ist eher eine langweilige, mechanische Aufgabe und sollte einfach mit allen geeigneten Werkzeugen durchgeführt werden.

Oh, und mach dir keine Sorgen, dass du die Hinweise nicht verstanden hast. Ich hatte ungefähr das gleiche Problem im gleichen Alter. Das Problem ist hier auch die fehlende Abstraktion. In der Regel lernen Sie Zeiger aus einem C-Buch kennen, und während Sie Schwierigkeiten haben, sie zu verstehen, geht dies mit der Speicherzuweisung und damit mit dem Stapel- und Heapspeicher usw. einher. Das abstrakte Konzept hinter Zeigern ist Indirektion. Eine Variable, die einen Index für ein bestimmtes Array enthält, ist genau das (tatsächlich ist es in C dasselbe, wo das bestimmte Array Ihr Adressraum ist), und Sie benötigen hierfür keine Zeigerarithmetik.
Dies soll nur veranschaulichen, dass die Auswahl einer hohen Abstraktionsebene das Verständnis der Dinge erheblich erleichtert.

EDIT: und wenn es um das Tippen geht, bevorzuge ich statisch getippte Sprachen. Und ich denke, Programmierer für Einsteiger sollten das Konzept der Typen (das abstrakt ist) klar verstehen.

back2dos
quelle
3

An Python ist nichts Einfaches. Schauen Sie sich Unicode und Meta-Programmierung an.

Christopher Mahan
quelle
Ich stimme zu, dass Python sehr komplex und SEHR leistungsfähig sein kann. Aber die Grundlagen (String-Manipulation, Array-Manipulation usw.) sind in Python viel einfacher als in C.
joe_coolish
1
Python ist sehr einfach zu starten und viele alltägliche Aufgaben sind um eine Größenordnung einfacher als z. B. in Systemsprachen. Nein, die Sprache als Ganzes, ihre wichtigsten Details und die erweiterten Funktionen sind nicht einfach (dies gilt für alle Sprachen, die kein Spielzeug sind). Aber das war nicht die Frage.
1
Warum funktionierte dann mein if searchstring.lower () in filecontent.lower () nicht? wegen der bom in UTF-16LE SQL-Datei in tfs unter Windows mit Python2.7. Hat keinen Spaß gemacht. habe es funktioniert. dauerte ein paar Stunden. string.find () funktionierte auch nicht ... Argghhh!
Christopher Mahan
1
Wie ist Unicode in C einfacher zu handhaben?
Dan04
3

Ich sehe ein anderes, viel tieferes Problem.

Unityped-Sprachen zwingen nicht dazu, auf Typen zu achten, in Typen zu denken. Das ist schön und gut, solange ich kleine Skripte mit einigen Zeichenfolgen und Zahlen habe, die ohne es zu merken ineinander konvertiert werden. Aber der Tag wird kommen, an dem dies brechen wird. Plötzlich bricht das Programm ab, und bei jeder schnellen Fehlerbehebung bricht es erneut ab.

Oder der unerfahrene Möchtegern-Programmierer stellt fest, dass er eine Liste mit Listen anstelle einer Liste mit Tupeln benötigt, aber nicht die geringste Ahnung hat, wie dies zu tun ist, und stellt Fragen zum Stapelüberlauf, die zeigen, dass es absolut hilflos ist.

Ingo
quelle
6
Aber Python und Ruby sind stark typisiert. Dies ist orthogonal zur dynamischen Typisierung. Zeichenfolgen und Zahlen werden nicht implizit ineinander konvertiert.
dsimcha
3
@dsimcha: Ja - und wie widerlegt das, was @Ingo gesagt hat?
Jim G.
1
Denn bei dieser Frage geht es hauptsächlich um Ruby und Python. Ich dachte, er meinte, Ruby und Python seien schwach getippt, was ein weit verbreitetes Missverständnis ist.
DSIMCHA
1
@ Davidk01 - das ist mein Punkt: Werte haben Typen, ob wir es wollen oder nicht. In dynamisch getippten Sprachen (wenn Ihnen dieser Begriff besser gefällt) haben Variablen dies jedoch nicht. Stattdessen wird zur Laufzeit eine Typprüfung durchgeführt, um die vielen Varianten des Unitype zu unterscheiden.
Ingo
2
@Ingo: Ich war zumindest in der Lage, Common Lisp-Benutzer zu finden, die dachten, dass das Fehlen statischer Typisierung ein Vorteil ist (eigentlich optionale statische Typisierung, die entweder zur Fehlerprüfung oder zu Leistungszwecken verwendet werden kann), da sie die Entwicklung beschleunigte und so weiter Die Fehler, die durch statisches Tippen vermieden worden wären, erwiesen sich in der Praxis nicht als schwierig zu finden und zu beheben. Ich habe nicht mehr als die eine oder andere Meinung gesehen.
David Thornley
2

Ich behaupte immer noch, dass formaler Unterricht und Mentoring ein viel größerer Faktor als die Sprachwahl für die Codequalität von Anfängern ist. Wenn ich jedoch eine Muttersprache für Anfänger wählen müsste, würde ich Python für Autodidakten und C ++ für den College-Unterricht wählen.

Der Grund dafür ist, dass Sie mit formalen Anweisungen mit kleinen, trivialen Programmen beginnen können, um eine starke theoretische Grundlage zu legen, bevor Sie etwas Nützliches tun müssen. Ich denke, diese Reihenfolge ist ideal, wenn Sie sich die Zeit leisten können, und C ++ gibt Ihnen eine Menge Hilfe bei Compilerfehlern und Segmentierungsfehlern zwischen den Vorlesungen, um Sie zu informieren, wenn Sie die Grundlagen nicht verstehen.

Einige dieser Grundlagen sind einfach schwer zu erlernen, wenn Sie Autodidakt sind, bis Sie einige Erfahrungen gesammelt haben. Außerdem müssen Sie in der Regel so schnell wie möglich etwas Nützliches herstellen und können bei Bedarf die theoretischen Grundlagen erlangen, obwohl Sie das Risiko eingehen, bei diesem Ansatz nie mehr als das Nötigste zu lernen. Deshalb empfehle ich in diesem Fall eine Sprache wie Python.

Karl Bielefeldt
quelle
2

Wir haben es im College anders herum gesehen und ich denke, es ist nützlich. * Wir fingen auf dem niedrigen Niveau an. Zeiger, Speicherverwaltung, Zeichen-Arrays ... Also ja, wir haben mit C begonnen. Dasselbe gilt für Algorithmen: Zuerst eine verknüpfte Liste, eine Hash-Tabelle, einen Baum implementieren ... und dann nur die Standardbibliotheken verwenden.

Danach sind wir zu mächtigeren Sprachen wie Java, C # oder Perl aufgestiegen. Aber mit dem Vorteil zu wissen, was unter dem Gurt vorgeht.

Während dies funktioniert, denke ich, ist es auch in Ordnung, von Skriptsprachen zu einer niedrigeren Sprache zu wechseln. Wenn Sie sowohl eine höhere als auch eine niedrigere Sprache beherrschen, können Sie sicher sein, dass Sie die Sprache auf hoher Ebene problemlos verwenden können und trotzdem wissen, was gerade vor sich geht. Die Reihenfolge, in der Sie sie lernen, ist weniger wichtig.

Carra
quelle
1

Skriptsprachen machen Programmierer nicht schlampig. Mangelnde Klarheit im Verständnis der Problemdomäne (z. B. des Geschäfts, dem das Programm dient) führt zu Schlamperei.

Wie das alte Sprichwort sagt : „Sie können COBOL in einer beliebigen Sprache schreiben.“, Obwohl ich das vermuten , wenn jeder Datentyp gleich aussieht , dann wird es schwieriger , zu sehen , was die wesentlichen Aspekte des Programms sind, ein wichtiges Merkmal der Cobol- isierung.

Farley Knight
quelle
1
Probieren Sie es aus, bevor Sie es vermuten. Der Hauptunterschied ist, dass es dir egal ist, wo ein Foooder Baroder etwas ganz anderes ist, solange du .frobnicate()es so oder so kannst . Ohne explizite Schnittstellen.
Ich bin mit dynamischen Sprachen ziemlich vertraut, da mein Tagesjob bei Ruby on Rails liegt. Und ja, das ist eine wichtige Konvention in der dynamischen Sprachgemeinschaft. Im Allgemeinen wird dies als "Ententypisierung" bezeichnet. In der Forschungsliteratur werden sie Strukturtypen genannt, und es gibt einige Syntaxkonventionen, die Ihnen zeigen können, wie ein "quackbarer Typ" aussieht. Nicht nur das, es gibt Typsysteme, die sie erkennen und überprüfen können, ob Ihr Programm die Enten mit Freundlichkeit behandelt.
Farley Knight
Ich kenne Strukturtypen und halte sie für eine ziemlich nette Idee. Da es jedoch keine einzige ausgereifte, remote weit verbreitete Sprache gibt (Benutzer auf O'Caml-Ebene wären ein guter Einstieg), die sie verwendet, halte ich sie nicht für eine praktische Alternative zum dynamischen Tippen. Traurig, aber Tatsache.
Weit verbreitete Sprachen tun dies nicht, aber das hindert Sie nicht daran, Ihr eigenes Typensystem auf ein weit verbreitetes zu packen. Ich bin sicher, Sie haben Artikel über Typinferenz für dynamische Sprachen gesehen.
Farley Knight
Auch hier halte ich etwas, das ich und der Typ von nebenan benutzt haben, nicht für eine praktische Alternative. Ein Programmierer braucht Dinge wie Bibliotheken, stabile Syntax, Werkzeuge usw.
1

Ich würde behaupten , dass Skriptsprachen haben schlampig Techniken fördern. (Beachten Sie, dass dies nicht bedeutet, dass die Sprachen schlecht sind, sondern dass es schwierig ist, große Codebasen in diesen Sprachen zu verwalten.) Ich denke jedoch, dass dies andere Gründe hat als die anderen Antworten hier.

Ich denke, um eine Sprache zu verwenden, muss ein Programmierer ein grundlegendes Verständnis der Programmierung als Ganzes haben. Sie werden nirgendwo effektiv sein, wenn sie Konzepte wie Vektoren, Bäume und Hash-Tabellen nicht verstehen. Sie müssen diese Dinge nicht unbedingt umsetzen können, aber sie müssen ihre Eigenschaften kennen.

Wo ich denke, dass die Schlamperei ins Spiel kommt, ist nicht das Programmieren, sondern das Erstellen wiederverwendbarer Komponenten. Für diese Sprachen müssen Sie keine guten Schnittstellen zwischen Codeeinheiten oder die Mechanismen definieren, mit denen Bibliotheken Einschränkungen für ihre Clients erzwingen. Es ist nicht unmöglich, gute wiederverwendbare Komponenten in solchen Sprachen herzustellen, es ist nur viel schwieriger.

Die Skriptsprachen sind für Anfänger von Interesse, da sie es ihnen ermöglichen, mehr "einmalige" Aufgaben in kürzerer Zeit zu erledigen. Wenn dieselben Programmierer jedoch mit der Wartungsprogrammierung beginnen, haben sie häufig schnell Probleme mit diesen Sprachen.

Ich sage nicht, dass Skriptsprachen schlecht sind - bei weitem nicht. Sie machen es jedoch schwierig, enorme Codebasen (mehrere Millionen Zeilen) zu verwalten (was einer der Gründe ist, warum Sie keine solchen Codebasen in Skriptsprachen finden). Wenn Sie relativ kleine oder einmalige Lösungen benötigen, können Sie viel mehr in weniger Zeit und weniger Code erreichen (und weniger Code ist fast immer besser).

Denken Sie nur daran, dass kein Werkzeug für jeden Job das Beste ist. Wählen Sie das für die Situation am besten geeignete Werkzeug. Das gilt für Programmiersprachen genauso wie für jedes Werkzeug.

Billy ONeal
quelle
0

Ich bin bei Ihrem Lehrer, aber auch bei @Singletoned, wenn er sagt, Ihr Lehrer geht davon aus, dass die Konsequenzen (z. B. keine Kenntnis der Leistung) schlecht sind.

Ich denke, mit C anzufangen ist besser als mit Skriptsprachen anzufangen. Als Lehrer würde ich mich auf die ganze Sache mit der von Neumann-Architektur konzentrieren (ALU, Register, Speicher, I / O-Ports, ...), direkt zu den Zeigern übergehen (es tut mir leid, es ist wirklich ein Schlüsselkonzept [nicht veröffentlichen] Referenzen (dh Zeiger) in VM-Sprachen sind eine Hauptquelle für Speicherverluste]), treffen Sie einige Datenstrukturen (Baum, verknüpfte Liste, Hash-Tabelle 1 ) und ... stoßen Sie eine Abstraktionsebene in etwas anderes (OO, funktionale Programmierung, etwas - starke statische Typisierung Regeln , yo \ m /, so dass keine "Skriptsprachen"> :().

1 Hmm, vielleicht stimme ich schließlich mit Ihrem Lehrer in Bezug auf die Leistung überein.

JohnL4
quelle
Schlampige Programmierung ist eine Quelle für Speicherverluste, und es ist nicht sehr aufwändig, den Überblick über Ressourcen wie Dateihandles zu behalten. Es gibt unzählige C-Programme mit Speicherverlusten, ich bin mir also nicht sicher, was Sie damit anfangen sollen, den Leuten so schnell wie möglich Zeiger beizubringen.
Davidk01
Das ist wahr, aber ... (a) wenn ich die Grundlagen nicht verstehe, führt dies zu einem schlechten Code (über Hacking-bis-es-richtig oder schlampige Programmierung), und (b) ich habe versucht zu motivieren, warum Zeiger immer noch relevant sind, nicht Behauptung, dass C in Bezug auf Speicherverluste besser ist als Sprachen, die mit Speicherbereinigung erstellt wurden. Das Ziel, so schnell wie möglich zu den Zeigern zu gelangen, ist, dass wir C.
JohnL4,
0

Ich denke, das Beste ist, mit einer modularen Sprache zu beginnen und dann zu komplizierteren Dingen überzugehen. In meinen Tagen begannen wir mit Pascal und COBOL und versuchten zu verstehen, was Subroutinen, Kontrollflussvariablen usw. bedeuten. Erst als ich mit Pascal vertraut war, hatte ich den Wunsch, auf Sprachen wie C / C ++ umzusteigen und all die anderen Techniken zu erlernen, die eher eine Erweiterung für den Junior-Programmierer darstellen.

Gaurav Sehgal
quelle
0

Sie haben beide recht.

Skriptsprachen erschweren es auf jeden Fall unerfahrenen Entwicklern, zu verstehen, was wirklich vor sich geht. (So ​​auch Datenbanken, Frameworks und Bibliotheken. Oh, und Browser, Server, Netzwerke und Dateisysteme.) Wenn ich jüngere Entwickler interviewe, bin ich oft verblüfft, wie wenig sie wissen, wie Computer tatsächlich funktionieren und wie anfällig sie für Fracht sind -Kultprogrammierung.

Andererseits ist die Nummer eins, nach der ich in Interviews suche, nicht das perfekte Verständnis, sondern dass sie es lieben, Dinge zu machen. Als ich anfing, war ein Computer, auf dem alles möglich war, ziemlich beeindruckend, und so schienen mir meine kleinen Dinge mit Apple Basic und 6502 Assembler wirklich großartig. Aber heutzutage machen Computer eine Menge erstaunlicher Dinge. Ich denke, es ist in Ordnung, wenn die Leute auf einem ziemlich hohen Niveau anfangen, wenn es das ist, was sie brauchen, um süchtig zu werden.

Grundsätzlich denke ich, dass es in Ordnung ist, am flachen Ende des Pools zu beginnen, solange man sich irgendwann in tieferes Wasser stürzt.

William Pietri
quelle
0

Erstens würde ich definitiv mit einer Sprache höheren Abstraktionsniveaus beginnen. Zur Zeit würde ich Python empfehlen. Der wichtigste Grund für die Auswahl einer Skriptsprache als erste Sprache ist, dass Sie auf einfache Weise etwas zusammenstellen können, das funktioniert. Wie Joe in seiner Frage erwähnt, ist das Wichtigste, wenn man Programmierer wird, dass man die Motivation hat, weiterzumachen und tiefer zu graben. Diese Motivation wird gewonnen, wenn Sie in der Lage sind, funktionierende und nützliche Software zu erstellen.

Neben den Punkten, bei denen es darum geht, die Abstraktion (hohe Ebene) und die zugrunde liegende Implementierung (niedrige Ebene) zu verstehen, fehlt ein dritter Punkt. Um heutzutage ein guter Programmierer zu sein, müssen Sie auf jeden Fall beide der beiden oben genannten Punkte beherrschen. Darüber hinaus ist es für Ihre Kompetenz entscheidend, dass Sie sich ständig mit neuen Technologien und Standpunkten auseinandersetzen. Unabhängig davon, von welcher Abstraktionsebene Sie ausgehen, müssen Sie sich ständig verbessern und Ihre aktuellen Methoden in Frage stellen.

Es sollte von Anfang an klargestellt werden, dass Programmiersprachen lediglich Werkzeuge sind, um die Arbeit zu erledigen. Es ist sehr wichtig, das richtige Werkzeug für eine bestimmte Aufgabe auszuwählen. Ich denke, dass für einen Anfänger-Programmierer eine Skriptsprache auf hohem Niveau hilfreich ist, um diesen Punkt hervorzuheben. Eine höhere Sprache bietet eine breitere Perspektive und motiviert den Programmierer, sich eingehender mit dem Thema auseinanderzusetzen.


quelle