Mon conseil:
bash
(et ses semblables) ne sont pas des langages de programmation à usage général. Bien qu'il soit possible d'accomplir des scripts sophistiqués, bash
ce n'est pas la meilleure façon d'apprendre la programmation en général. C'est le moyen le plus naturel d'accomplir des tâches d'administration de systèmes qui tournent principalement autour de l'exécution d'autres programmes, de la gestion de leurs fichiers et répertoires de données et du marshaling des entrées et sorties vers et depuis ces derniers. Si bash
c'est un marteau, réservez-le aux problèmes qui ressemblent vraiment à des clous. Apprendre à faire quelque chose de non trivial dans bash
sera beaucoup plus facile si vous apprenez de très petits sous-ensembles de sed
et awk
(puisque la manipulation de chaîne dans bash
est largement inspirée par la syntaxe d'opérations similaires dans ces "petits" langages).
- Pour la programmation à usage général sous Linux, vous entendrez de nombreux arguments passionnés. Les deux meilleurs prétendants sont Perl et Python . Ce sont deux langages de script de très haut niveau à usage général, qui exposent suffisamment de fonctionnalités de bas niveau pour effectuer presque toutes les opérations accessibles à n'importe quel processus de l'espace utilisateur sur votre système, et avec d'énormes collections de modules et de bibliothèques pré-écrits disponibles.
Je vous recommande de lire un texte d'introduction sur C et de passer un peu de temps à exécuter les commandes strace
et ltrace
sur certaines commandes utilitaires simples comme ls
et mkdir
et /bin/echo
etc. (En fait, ces jours-ci, je suggère ltrace -S
au lieu de strace
mais incite à la sortie des deux commandes et dans la ltrace
sortie augmentée par l' -S
option sera extrêmement éducative).
C est le langage de programmation principal dans lequel le noyau Linux et la libc GNU sont écrits. (Les petites pièces sont en montage). Presque tous les programmes sur un système Linux (ou autre système UNIX) sont liés aux bibliothèques C (libc). Les principaux interprètes Perl et Python (et la plupart des autres langages de script) sont également écrits en C. Ces programmes (le noyau, les bibliothèques système communes et les divers interprètes de langage de script) sont tous écrits par des programmeurs C dont la conception et les fonctionnalités sont fortement influencées. par leurs implémentations sous-jacentes. Ainsi, une compréhension plus approfondie de l'un de ces éléments implique éventuellement de comprendre C. Vous n'avez pas besoin de connaître quoi que ce soit sur C ++ ou Java pour comprendre la programmation à ce niveau. (Ceux-ci peuvent chacun être intéressants et nécessaires en fonction de votre carrière,
Donc, si vous êtes d'accord avec mes prémisses jusqu'à présent, nous l'avons réduit à un choix entre Perl et Python.
Voici où les véritables guerres de flammes commencent.
Mon conseil est de se concentrer d'abord sur Python (2.x). Python a une syntaxe relativement simple et cohérente. Vous pouvez apprendre les bases de la syntaxe Python en quelques heures et c'est la grande majorité de la syntaxe que vous rencontrerez jamais. Il n'y a que quelques fonctionnalités (listes de compréhension, expressions de générateur, décorateurs) qui sont des rides de la syntaxe de base. Ainsi, la plupart de vos efforts dans l'apprentissage de Python seront consacrés à l'apprentissage des bibliothèques standard étendues et à essayer de trouver la "meilleure" façon de les utiliser (et de déterminer quels sont les ensembles spécifiques d'exceptions qui méritent d'être manipulés pour rendre vos programmes robustes) et, surtout, dans l'apprentissage des concepts sous-jacents.
Je pense que les bibliothèques étendues de Python et sa syntaxe relativement simple ont deux inconvénients distincts.
Tout d'abord, lorsque vous apprenez à faire quelque chose à un niveau très élevé en Python, vous pourriez trouver fastidieux l'idée de devoir travailler à un niveau inférieur. Où je travaille Perl est la norme. Je prototype mon travail en Python, où je sais que je peux le faire fonctionner beaucoup plus rapidement et de manière fiable qu'en Perl; puis je redoute de devoir passer et de le porter à Perl pour mes collègues. (J'étais raisonnablement bon en Perl des années avant d'utiliser Python --- ce n'est donc pas une simple question de familiarité).
L'autre inconvénient est qu'il est parfois difficile de trouver le moyen le plus élevé d'accomplir une tâche donnée en Python. Par exemple, pour récupérer une page Web, vous pouvez d'abord essayer de le faire avec des sockets de bas niveau ... ce qui fonctionnera. Cependant, vous dupliqueriez pas mal de code que vous pouvez déjà trouver, y compris dans les modules urllib
et / ou urllib2
. Le fait même que les bibliothèques standard, à partir de la version 2.7.1, incluent les deux fait mon point. Dans la mesure du possible, les responsables de Python ont étendu les anciens modules et API de manière transparente; cependant, il existe des dizaines de cas où Python conserve deux ou trois modules où l'extension transparente n'était pas possible pour une raison quelconque. (Pour un autre exemple , vous pouvez regarder les options pour l' analyse des options de ligne de commande: argparse
, optparse
etgetopt
. Il n'y a pas de mal à écrire vos programmes en utilisant getopt
(le plus ancien d'entre eux). Pour les utilitaires très simples avec peu d'options et une convention d'appel rigide (utilisée uniquement par un petit groupe de personnes, par exemple), alors il n'y a rien de mal à marcher avec sys.argv
soi-même. Cependant, il vaut généralement la peine de lire attentivement les documents et de suivre les liens au bas des modules de niveau plus ancien ou inférieur qui décrivent les fonctionnalités plus récentes ou de niveau supérieur disponibles.
Mon conseil est basé sur mon opinion que vous voulez vous concentrer sur des concepts plus profonds et ne pas avoir à consacrer beaucoup de temps et d'efforts à des problèmes syntaxiques et linguistiques spécifiques. Comprendre quand utiliser un sous-processus, par rapport à un thread, ou les fonctionnalités de multi-traitement incluses avec Python a relativement peu à voir avec le langage et tout à voir avec la maîtrise de la programmation, quel que soit le langage. (Au moment où vous pouvez comprendre les arguments concernant le modèle piloté par événements de Twisted par rapport au threading et au multitraitement, vous aurez probablement maîtrisé Python et serez prêt à programmer dans n'importe quel langage).
Le contre-argument, pour Perl, est simple et pratique. Il y a pas mal d'autres emplois qui demanderont spécifiquement des compétences avec Perl. Perl est un langage puissant et possède des bibliothèques extrêmement étendues. (Le noyau de Perl distribué avec la plupart des systèmes Linux couvre une gamme de fonctionnalités plus petite que les bibliothèques Python standard; il est supposé que vous aurez installé un nombre important de packages supplémentaires à partir de votre distribution ou via CPAN --- Comprehensive Perl Archive Réseau). (En revanche, il y a moins de modules et de packages Python que je dois récupérer séparément ... ceux-ci sont disponibles auprès de PyPI --- l'index des packages Python).
Donc, si vous apprenez Perl, vous aurez une longueur d'avance pour trouver des emplois, en particulier des administrateurs système, à court terme. Cependant, la syntaxe de Perl est ... eh bien ... selon les mots de certains de ses propres passionnés ... "pathologiquement éclectique!" Perl peut être extrêmement concis et son code est rempli de ponctuation. Ceux qui l'aiment argueront sans cesse que c'est "facile" et est parfaitement logique --- et auront des possibilités infinies de le faire dans des forums qui sont remplis de confusion sur la façon dont un extrait de code donné a été interprété. La syntaxe et le langage utilisés dans la documentation et par ceux qui la prennent en charge dans les forums publics sont nuancés au point où vous pouvez consacrer des efforts considérables à les apprendre.
Maintenant, veuillez vous rendre compte que ce commentaire précédent est subjectif et biaisé. Il est possible que vous essayiez Perl et que sa syntaxe soit intuitive et agréable. Si oui, plus de pouvoir pour vous. Cependant, je trouve personnellement que ma compréhension des particularités de Perl se détériore très rapidement. Les principes fondamentaux que je retiens, mais je trouve que c'est difficile chaque fois que je dois y revenir pour plus de quelques lignes de code.
Il y a beaucoup d'autres langages que vous étudieriez, Java, Lisp et Scheme, TCL, Scala, etc. Cependant, je suggère de commencer par celui qui offre le meilleur équilibre entre utilité et simplicité.