Mein Rat:
bash
(und sein Typ) sind keine Allzweck-Programmiersprachen. Obwohl es möglich ist, einige ausgefeilte Skripte zu erstellen, ist dies bash
nicht der beste Weg, um das Programmieren im Allgemeinen zu erlernen. Es ist die natürlichste Art, Systemadministrationsaufgaben zu erledigen, bei denen es in erster Linie darum geht, andere Programme auszuführen, ihre Datendateien und -verzeichnisse zu verwalten und Ein- und Ausgaben in diese und aus diesen zu marshallen. Wenn bash
es sich um einen Hammer handelt, reservieren Sie ihn für Probleme, die wirklich wie Nägel aussehen. Das Erlernen nicht-trivialer Aufgaben bash
wird erheblich erleichtert, wenn Sie einige sehr kleine Teilmengen von sed
und lernen awk
(da die Manipulation von Zeichenfolgen bash
weitgehend von der Syntax ähnlicher Operationen in diesen "kleinen" Sprachen inspiriert ist).
- Bei der allgemeinen Programmierung unter Linux werden Sie viele leidenschaftliche Argumente hören. Die beiden besten Konkurrenten sind Perl und Python . Hierbei handelt es sich sowohl um allgemeine Skriptsprachen auf sehr hohem Niveau, die über eine ausreichende Funktionalität auf niedrigem Niveau verfügen, um nahezu alle Operationen auszuführen, auf die ein beliebiger Benutzerbereichsprozess auf Ihrem System zugreifen kann, als auch um eine riesige Sammlung vorab geschriebener Module und Bibliotheken.
Ich empfehle , dass Sie einen einleitenden Text auf C gelesen und einige Zeit den Lauf verbringen strace
und ltrace
Befehle auf einigen einfachen Dienstprogramm Befehle wie ls
und mkdir
und /bin/echo
usw. (Eigentlich würde ich vorschlagen , in diesen Tagen ltrace -S
statt dem strace
aben Streifzüge in die Ausgabe von beiden Befehlen und in Die ltrace
Ausgabe, die durch die -S
Option erweitert wird, ist äußerst lehrreich.
C ist die primäre Programmiersprache, in der der Linux-Kernel und die GNU libc geschrieben sind. (Kleinteile sind in Montage). Fast alle Programme auf einem Linux-System (oder einem anderen UNIX-ähnlichen System) sind mit den C-Bibliotheken (libc) verknüpft. Die primären Perl- und Python-Interpreter (und die meisten anderen Skriptsprachen) sind ebenfalls in C geschrieben. Diese Programme (der Kernel, die allgemeinen Systembibliotheken und die verschiedenen Interpreter für Skriptsprachen) sind alle von C-Programmierern geschrieben, da ihr Design und ihre Funktionen stark beeinflusst werden durch ihre zugrunde liegenden Implementierungen. Ein tieferes Verständnis von alledem erfordert daher schließlich das Verständnis von C. Sie müssen weder C ++ noch Java kennen, um die Programmierung auf dieser Ebene zu verstehen. (Diese können je nach Karriere-Patch für sich interessant und notwendig sein.)
Wenn Sie also mit meinen bisherigen Prämissen einverstanden sind, haben wir uns für eine Wahl zwischen Perl und Python entschieden.
Hier beginnen echte Flammenkriege.
Mein Rat ist, sich zuerst auf Python (2.x) zu konzentrieren. Python hat eine relativ einfache und konsistente Syntax. Sie können die Grundlagen der Python- Syntax in wenigen Stunden erlernen, und das ist die überwiegende Mehrheit der Syntax, die Ihnen jemals begegnen wird. Es gibt nur wenige Funktionen (Listenverständnisse, Generatorausdrücke, Dekoratoren), die die grundlegende Syntax verknittern. Der größte Teil Ihrer Mühe beim Erlernen von Python wird dem Erlernen der umfangreichen Standardbibliotheken und dem Versuch gewidmet sein, den "besten" Weg zu finden, sie zu verwenden (und herauszufinden, welche spezifischen Ausnahmen es wert sind, behandelt zu werden, um Ihre Programme robust zu machen). und vor allem beim Erlernen der zugrunde liegenden Konzepte.
Ich denke, dass die umfangreichen Bibliotheken und die relativ einfache Syntax von Python zwei deutliche Nachteile haben.
Erstens, wenn Sie in Python lernen, wie man etwas auf einer sehr hohen Ebene macht, werden Sie vielleicht den Gedanken haben, auf einer niedrigeren Ebene arbeiten zu müssen, um mühsam zu sein. Wo ich arbeite Perl ist der Standard. Ich habe meine Arbeit in Python prototypisiert, wo ich weiß, dass ich sie viel schneller und zuverlässiger zum Laufen bringen kann als in Perl. dann fürchte ich, es für meine Kollegen nach Perl portieren zu müssen. (Ich war einigermaßen gut in Perl, bevor ich Python benutzte - es ist also keine Frage der einfachen Vertrautheit).
Der andere Nachteil ist, dass es manchmal schwierig ist, in Python die beste Lösung für eine bestimmte Aufgabe zu finden. Zum Beispiel, um eine Webseite abzurufen, könnten Sie zunächst versuchen, dies mit Sockets auf niedriger Ebene zu tun ... was funktionieren wird. Sie würden jedoch ziemlich viel Code duplizieren, den Sie bereits in den Modulen urllib
und / oder finden können urllib2
. Die Tatsache, dass die Standardbibliotheken ab 2.7.1 beides enthalten, macht meinen Standpunkt aus. Wo immer möglich, haben die Python-Betreuer ältere Module und APIs transparent erweitert. Es gibt jedoch Dutzende von Fällen, in denen Python zwei oder drei Module beibehält, bei denen eine transparente Erweiterung aus irgendeinem Grund nicht möglich war. (Für ein anderes Beispiel , das Sie bei den Optionen für das Parsen von Kommandozeilen - Optionen aussehen könnten: argparse
, optparse
undgetopt
. Das Schreiben von Programmen mit getopt
(dem ältesten davon) schadet wenig . Für sehr einfache Dienstprogramme mit wenigen Optionen und einer strengen Anrufkonvention (die zum Beispiel nur von einer kleinen Gruppe von Menschen verwendet wird) ist es nicht von Natur aus falsch, über sich sys.argv
selbst zu gehen. In der Regel lohnt es sich jedoch, die Dokumente sorgfältig zu lesen und den Links am Ende älterer oder niedrigerer Module zu folgen, die die verfügbaren neueren oder höheren Funktionen beschreiben.
Mein Rat basiert auf meiner Meinung, dass Sie sich auf tiefere Konzepte konzentrieren möchten und nicht viel Zeit und Mühe auf syntaktische und sprachspezifische Probleme verwenden müssen. Zu verstehen, wann ein Unterprozess oder ein Thread oder die in Python enthaltenen Multi-Processing-Funktionen verwendet werden müssen, hat relativ wenig mit der Sprache zu tun, und alles, was mit Programmierkenntnissen zu tun hat, unabhängig von der Sprache. (Wenn Sie Argumente zum ereignisgesteuerten Twisted-Modell im Vergleich zu Threading und Multiprocessing verstehen, haben Sie wahrscheinlich Python beherrscht und können in jeder Sprache programmieren.)
Das Gegenargument für Perl ist einfach und praktisch. Es gibt noch eine ganze Reihe weiterer Jobs, die speziell nach Perl-Kenntnissen verlangen. Perl ist eine mächtige Sprache und verfügt über extrem umfangreiche Bibliotheken. (Der Kern von Perl, der mit den meisten Linux-Systemen ausgeliefert wird, umfasst einen kleineren Funktionsumfang als die Standard-Python-Bibliotheken. Es wird davon ausgegangen, dass Sie eine erhebliche Anzahl zusätzlicher Pakete aus Ihrer Distribution oder über CPAN - das Comprehensive Perl Archive - installiert haben Netzwerk). (Im Gegensatz dazu gibt es weniger Python-Module und -Pakete, die ich separat abrufen muss ... diese sind bei PyPI erhältlich - dem Python-Paketindex).
Wenn Sie also Perl lernen, haben Sie kurzfristig die Qual der Wahl, einen Job zu finden, insbesondere einen Sysadmin-Job. Die Syntax von Perl ist jedoch ... naja ... in den Worten einiger seiner eigenen Enthusiasten ... "pathologisch vielseitig!" Perl kann extrem knapp sein und sein Code ist mit einer Menge Interpunktion gefüllt. Diejenigen, die es lieben, werden endlos behaupten, dass es "einfach" und sinnvoll ist - und sie werden endlose Möglichkeiten haben, dies in Foren zu tun, die voller Verwirrung darüber sind, wie genau ein bestimmter Codeausschnitt interpretiert wurde. Die Syntax und die Sprache, die in der Dokumentation verwendet werden, und diejenigen, die sie in öffentlichen Foren unterstützen, sind so differenziert, dass Sie erhebliche Anstrengungen unternehmen können, um sie zu erlernen.
Bitte beachten Sie, dass dieser vorhergehende Kommentar subjektiv und voreingenommen ist. Möglicherweise werden Sie Perl ausprobieren und feststellen, dass die Syntax intuitiv und angenehm ist. Wenn ja, mehr Kraft für Sie. Ich persönlich finde jedoch, dass mein Verständnis von Perls Eigenheiten sehr schnell abnimmt. Die Grundlagen, die ich beibehalten habe, sind jedoch schwierig, wenn ich für mehr als ein paar Zeilen Code wieder darauf zurückgreifen muss.
Es gibt viele andere Sprachen, die Sie lernen würden, Java, Lisp und Schema, TCL, Scala und so weiter. Ich würde jedoch vorschlagen, mit einem zu beginnen, das die beste Balance zwischen Nützlichkeit und Einfachheit bietet.