Les bases de la plupart des langages procéduraux sont à peu près les mêmes.
Ils offrent:
- Types de données scalaires: généralement booléens, entiers, flottants et caractères
- Types de données composés: tableaux (les chaînes sont des cas spéciaux) et structures
- Constructions de code de base: arithmétique sur les scalaires, accès tableau / structure, assignations
- Structures de contrôle simples: if-then, if-then-else, while, for loops
- Paquets de blocs de code: fonctions, procédures avec paramètres
- Scopes: zones dans lesquelles les identificateurs ont des significations spécifiques
Si vous comprenez cela, vous maîtrisez bien 90% des langues de la planète. Ce qui rend ces langues un peu plus difficiles à comprendre, c'est l'incroyable variété de syntaxes étranges que les gens utilisent pour dire les mêmes choses de base. Certains utilisent la notation succincte impliquant une ponctuation impaire (APL étant un extrême). Certains utilisent beaucoup de mots-clés (COBOL étant un excellent représentant). Cela n'a pas beaucoup d'importance. Ce qui compte, c’est que le langage soit suffisamment complet pour effectuer des tâches complexes sans vous arracher les cheveux. (Essayez de coder un hacking sérieux dans le script shell Windows DOS: il est capable de Turing mais vraiment mauvais en tout).
Des langues de procédures plus intéressantes offrent
- Portées imbriquées ou lexicales, espaces de noms
- Pointeurs permettant à une entité de faire référence à une autre, avec allocation de stockage dynamique
- Empaquetage du code associé: paquets, objets avec méthodes, traits
- Contrôle plus sophistiqué: récursivité, suites, fermetures
- Opérateurs spécialisés: opérations sur les chaînes et les tableaux, fonctions mathématiques
Bien qu'elles ne soient pas techniquement des propriétés du langage, mais des propriétés de l'écosystème dans lequel vivent ces langages, elles sont facilement accessibles ou fournies avec le langage dans le cadre de l'outil de développement. Disposer d'un large éventail d'installations de bibliothèques simplifie / accélère l'écriture d'applications simplement parce qu'il n'est pas nécessaire de réinventer ce que font les bibliothèques. Alors que Java et C # sont généralement considérés comme de bons langages, ce qui les rend vraiment utiles, ce sont les énormes bibliothèques qui les accompagnent et les bibliothèques d’extensions faciles à obtenir.
Les langues qui sont plus difficiles à comprendre sont les non-procédurales:
- Langages purement fonctionnels, sans affectation ni effet secondaire
- Langages logiques, tels que Prolog, dans lesquels interviennent calcul et unification symboliques
- Langages de correspondance de modèle, dans lesquels vous spécifiez des formes qui correspondent au problème, et les actions sont souvent déclenchées par une correspondance
- Langues de contrainte, qui vous permettent de spécifier des relations et de résoudre automatiquement des équations
- Langages de description du matériel, dans lesquels tout s’exécute en parallèle
- Langages spécifiques à un domaine, tels que SQL, réseaux de Petri colorés, etc.
Il existe deux principaux styles de représentation pour les langues:
- Basé sur le texte, dans lequel les identifiants nomment les entités et les flux d'informations sont codés implicitement dans des formules utilisant les identifiants pour nommer les entités (Java, APL, ...)
- Graphique, dans lequel les entités sont dessinées en tant que nœuds et les relations entre entités sont dessinées sous forme d'arcs explicites entre ces nœuds (UML, Simulink, LabView)
Les langages graphiques autorisent souvent les sous-langages textuels sous forme d'annotations dans les nœuds et sur les arcs. Les langages graphiques Odder permettent récursivement les graphes (avec du texte :) en nœuds et en arcs. Des langages graphiques vraiment étranges permettent aux graphes d'annotation de pointer vers des graphes annotés.
La plupart de ces langages sont basés sur un très petit nombre de modèles de calcul:
- Le lambda calcul (base pour Lisp et tous les langages fonctionnels)
- Systèmes de publication (ou techniques de réécriture chaîne / arbre / graphique)
- Machines de Turing (modification d'état et sélection de nouvelles cellules mémoire)
Étant donné que la plupart des industriels se concentrent sur les langages procéduraux et les structures de contrôle complexes, vous êtes bien servis si vous apprenez l’un des langages les plus intéressants de cette catégorie, en particulier s’il inclut une forme ou une autre d’orientation objet.
Je recommande vivement d'apprendre Scheme, notamment à partir d'un livre vraiment merveilleux:
Structure et interprétation des programmes informatiques . Ceci décrit tous ces concepts de base. Si vous connaissez ce genre de choses, d’autres langues sembleront assez simples, à l’exception de la syntaxe loufoque.