Apprendre chaque type de langage de programmation

24

J'ai entendu plusieurs fois que chaque programmeur devrait apprendre un de chaque type de langage. Maintenant, ce n'est pas nécessairement vrai, mais je pense que c'est une bonne idée.

J'ai appris un langage procédural (Perl), mais quels sont les autres types?

Quelles sont les différences entre eux et quels sont quelques exemples de chacun?

Dynamique
la source
8
Vous devez être conscient qu'il existe d'innombrables façons de classer les langues qui se chevauchent. Le plus courant est la programmation par paradigme, mais même alors, il existe des distinctions majeures et mineures, de nombreux axes complètement séparés, et de nombreux langages se répartissent en plusieurs paradigmes.
1
J'oublierais les catégories - si vous êtes vraiment intéressé à apprendre d'une langue, je suggère à la fois Lisp et Scala, si vous pouvez gérer ces deux, vous avez couvert beaucoup de terrain.
Bill K
3
Le conseil de Peter Norvig : Apprenez au moins une demi-douzaine de langages de programmation. Inclure un langage qui prend en charge les abstractions de classe (comme Java ou C ++), un qui prend en charge l'abstraction fonctionnelle (comme Lisp ou ML), un qui prend en charge l'abstraction syntaxique (comme Lisp), un qui prend en charge les spécifications déclaratives (comme les modèles Prolog ou C ++), un qui prend en charge les coroutines (comme Icon ou Scheme), et une qui prend en charge le parallélisme (comme Sisal).
legends2k

Réponses:

34

Même si la terminologie est loin d'être normalisée, une façon courante de classer les principaux paradigmes de programmation en

  • De procédure
  • Fonctionnel
  • Logique
  • Orienté objet
  • Générique

Vous semblez déjà savoir à quoi ressemble la programmation procédurale.

Dans les langages fonctionnels , les fonctions sont traitées comme des objets de première classe. En d'autres termes, vous pouvez passer une fonction en tant qu'argument à une autre fonction, ou une fonction peut renvoyer une autre fonction. Le paradigme fonctionnel est basé sur le calcul lambda, et des exemples de langages fonctionnels sont LISP, Scheme et Haskel. Fait intéressant, JavaScript prend également en charge la programmation fonctionnelle.

Dans la programmation logique , vous définissez des prédicats qui décrivent les relations entre les entités, telles que president(Obama, USA)ou president(Medvedev, Russia). Ces prédicats peuvent devenir très compliqués et impliquer des variables, pas seulement des valeurs littérales. Une fois que vous avez spécifié tous vos prédicats, vous pouvez poser des questions à votre système et obtenir des réponses logiquement cohérentes.

La grande idée de la programmation logique est qu'au lieu de dire à l'ordinateur comment calculer les choses, vous lui dites ce que sont les choses. Exemple: PROLOG.

Le paradigme orienté objet est à certains égards une extension de la programmation procédurale. Dans la programmation procédurale, vous avez vos données, qui peuvent être des types primitifs, comme des entiers et des flottants, des types composés, comme des tableaux ou des listes, et des types définis par l'utilisateur, comme des structures. Vous avez également vos procédures, qui opèrent sur les données. En revanche, dans OO, vous avez des objets, qui incluent à la fois des données et des procédures. Cela vous permet d'avoir de belles choses comme l'encapsulation, l'héritage et le polymorphisme. Exemples: Smalltalk, C ++, Java, C #.

La programmation générique a été introduite pour la première fois dans Ada en 1983 et s'est généralisée après l'introduction de modèles en C ++. C'est l'idée que vous pouvez écrire du code sans spécifier les types de données réels sur lesquels il opère et demander au compilateur de le comprendre. Par exemple au lieu d'écrire

void swap(int, int);
void swap(float, float);
....

tu écrirais

void swap(T, T);

une fois, et que le compilateur génère du code spécifique pour tout ce qui Tpourrait être, quand swap()est réellement utilisé dans le code.

La programmation générique est prise en charge à des degrés divers par C ++, Java et C #.

Il est important de noter que de nombreux langages, tels que C ++, prennent en charge plusieurs paradigmes. Il est également vrai que même lorsqu'un langage est censé prendre en charge un paradigme particulier, il peut ne pas prendre en charge toutes les fonctionnalités du paradigme. Sans oublier qu'il y a beaucoup de désaccords quant aux fonctionnalités requises pour un paradigme particulier.

Dima
la source
2
Dans quelle catégorie SQL tomberait-il?
Kirk Kuykendall
@KirkKuykendall SQL serait un langage spécialisé ou "petit".
Kevin Lacquement
17
SQL est un langage déclaratif. Vous lui dites ce que vous voulez, il trouve comment l'obtenir. (Les langues "logiques" comme Prolog sont un sous-ensemble différent des langues déclaratives)
Izkata
3
Pourrions-nous avoir une description de la procédure, afin de rendre la réponse plus complète?
deworde
3
@Dima Nice résumé. Cependant, une piqûre relativement mineure: la «programmation générique» n'est pas née de l'utilisation de modèles en C ++, et est également très fréquemment utilisée dans des langages fonctionnels tels que Haskell.
Andres F.
11

Les langages de programmation ont un certain nombre de caractéristiques principalement orthogonales; le plus important réside dans le ou les paradigmes qu'ils soutiennent. L' article de wikipedia couvre de manière exhaustive les paradigmes; les paradigmes les plus importants sont probablement ceux-ci:

  • Procédure / Structuré
  • Fonctionnel
  • Orienté objet
  • Evénementiel et Orienté Aspect
  • Générique
  • Logique

Mais les langues diffèrent également d'autres manières:

  • Système de dactylographie (typage dynamique vs statique et types fort vs faible)
  • Processus de construction et environnement d'exécution (interprétés, compilés en bytecode, entièrement compilés)
  • Gestion de la mémoire (manuelle comme C / C ++, ramasse-miettes automatique obligatoire comme Java, GC optionnel comme D, ...)
  • Discipline d'évaluation (désireux vs paresseux; la plupart des langues sont désireuses par défaut, mais beaucoup fournissent des constructions paresseuses)
  • Règles de portée (comparer le fonctionnement de la portée en PHP, Javascript et C, trois langages qui sont par ailleurs assez similaires en termes de syntaxe)
tdammers
la source
2

Il existe plusieurs paradigmes de programmation différents qui sont actuellement en vogue:

  • Orienté objet - VB.NET, C #, Java entrent dans cette catégorie. Le code est organisé autour d'objets qui ont un comportement et des données associées et qui communiquent entre eux en passant des messages.
  • Fonctionnel - Haskel, Scheme, Lisp et F # entrent dans cette catégorie. Fonctions pures qui n'ont pas d'effets secondaires. Pensez aux fonctions comme en mathématiques. On peut souvent étendre le langage lui-même à travers ses constructions.
Oded
la source
S'agit-il des seuls autres types?
Dynamique
@ perl.j - Non, mais ce sont les principaux qui sont largement utilisés ces jours-ci. Voir wikipedia - Paradigme de programmation .
Odé
@ perl.j, il existe également Stack-based: comme Forth et Postscript. Logique: comme Prolog.
Jetti
2
Et le type zéro est C;)
yati sagade
La vraie question est de savoir combien d'entre eux un développeur a besoin pour coder efficacement la plupart des problèmes de programmation.
JeffO
0

Prolog est un langage de programmation logique et est relativement facile à démarrer. Cela nécessite une pensée complètement différente de la programmation procédurale, il est donc bon d'explorer lorsque vous essayez d'étirer votre cerveau.

Si vous allez au collège, vous devriez suivre un cours sur les langages de programmation, car il vise à introduire les différents types de langages de programmation et à quoi ils sont le mieux utilisés.

c_maker
la source
0

La plupart des langages traditionnels mélangent des aspects de programmation impérative, fonctionnelle et déclarative. Les langues de niche ont tendance à être plus exotiques ou à introduire de nouvelles idées intéressantes qui, pour une raison ou une autre, ne conviennent pas à la programmation à usage général. Quelques exemples, nullement exhaustifs:

  • Langues des feuilles de calcul (Excel, Google Forms): conçues pour gérer les données tabulaires.
  • Langages de tableaux (APL, J): conçus pour traiter rapidement des tableaux multidimensionnels. Dans J, (+/ % #)&.:*:calcule le RMS d'un tableau. Célèbre pour être concis, notoire pour être illisible.
  • Langages d'automatisation (AutoHotkey, Bash): conçus pour rationaliser les tâches courantes, comme remplir des formulaires, télécharger des fichiers, etc.
Hovercouch
la source