Langages de programmation qui améliorent vos compétences en programmation en général? [fermé]

27

Quelles langues suggéreriez-vous à un programmeur d'apprendre, non pas parce qu'il l'utilisera beaucoup (mais peut-être), mais parce que cela améliorera ses compétences en programmation en général et permettra de penser différemment (et peut-être mieux) ) façon?

Anto
la source
12
Pas un seul. Plutôt: autant d'entre eux que possible, chacun aussi différent que possible des autres.

Réponses:

27

pour une programmation et des algorithmes "normaux":

  • python, bon à apprendre, facile à utiliser, joli à lire.
  • C ++, vous apprend ce qu'est vraiment un ordinateur.

pour une expérience qui change la pensée:

  • Haskell
  • Prolog

pour avoir détruit votre esprit et franchi la frontière entre padawan et Jedi Master:

  • LISP commun
Lacrymologie
la source
3
oui, d'accord avec chrisaycock, C et l'assemblage vous apprendront ce qu'est vraiment un ordinateur, C ++ est un très très léger pas vers le haut, mais vous aurez toujours à gérer des problèmes tels que des pointeurs de mémoire et des problèmes de haute performance
Lacrymology
mh. Prolog est génial, mais je ne vois pas en quoi cela pourrait être intéressant pour améliorer les compétences générales en programmation. Je le vois comme un système de notation mathématique / logique alternatif, dont vous pouvez interroger les constructions, plus que comme des langages de programmation (décrit stati, pas des procédures). Edit: cela change bien sûr votre façon de penser à quelque chose, mais ce quelque chose n'est pas de la programmation.
cbrandolino
Prolog est sûr la programmation. Programmation déclarative et ancrée dans la logique (et donc relativement mathématique), oui. Mais toujours en programmation. En ce qui concerne le dernier point, pensez-vous qu'un autre Lisp (ie Scheme) ferait aussi bien?
3
Prolog est le langage le plus connu du paradigme logique. Il est important de réfléchir à tous les paradigmes que vous pouvez gérer.Si vous voulez vous améliorer en tant que programmeur, cela vous aidera à obtenir de l'agilité mentale et vous donnera de nouveaux outils. Je suppose que n'importe quel dialecte Lisp ferait l'affaire, ce que je vois dans Common Lisp, c'est qu'il ressemble au Lisp le plus utilisable en production pour moi.
Lacrymologie,
1
Je voterais pour Scheme sur Common Lisp - Je suppose que cela dépend si vous pensez que vous utiliserez réellement un Lisp en production. Sinon, optez pour Scheme.
Skilldrick
13

N'oubliez pas Javascript .

Il a des fonctionnalités OO qui ne sont pas vos fonctionnalités OO habituelles. Il est bien adapté aux fonctions et fermetures d'ordre supérieur, et vous les utilisez régulièrement. Il permet de nombreuses astuces de programmation fonctionnelles. Il est extrêmement flexible.

Et c'est pratique, car tout navigateur sérieux l'a.

(Bien sûr, il a aussi un certain nombre de bizarreries désagréables. Peu de langues pratiques ne le font pas)

9000
la source
1
JS a-t-il des fonctionnalités OO que Java n'a pas?
Mahmoud Hossam
3
@Phobia: JS fait OO d'une manière totalement différente. Il n'y a pas de cours. L'héritage se fait via des prototypes - essentiellement un objet peut hériter de tout autre objet. Les fonctions sont des valeurs de première classe; non seulement vous pouvez les faire circuler, mais vous pouvez facilement affecter de nouvelles méthodes aux objets existants. La façon dont JS masque les données est également très différente de Java: tout ce qu'un objet expose est public, vous masquez donc les données et les méthodes à l'aide de fermetures. Notez qu'il n'y a pas d '«OO canonique»; JS est un peu plus proche de l'OO «original» que Smalltalk a inventé que par exemple C ++, mais l'OO de Java est désormais également «canonique».
9000
11

C et assemblage pour le fonctionnement d'un ordinateur

Haskell et LISP pour la programmation fonctionnelle et la métaprogrammation

APL pour la programmation vectorielle et laconique

bash ou tcsh pour savoir comment administrer un ordinateur par programme

chrisaycock
la source
4
Au lieu d'APL, vous pouvez utiliser J du même auteur.
9000
+1 au montage. Vous ne regardez jamais tout à fait les langages de haut niveau de la même manière après avoir effectué un développement significatif. Si vous cherchez quelque chose qui vous fera penser au codage d'une manière vraiment différente, ASM le fera.
Kurtis
9

Je suggère Scheme.

C'est un langage de programmation fonctionnel dérivé (la plupart pensent en fait que c'est un dialecte) de Lisp. La principale différence avec Common Lisp est que son approche est très minimaliste - extrêmement . Par exemple, dans une distribution normale de Scheme (n'importe quel schéma <R5, ou Mit / GNU / Scheme), vous ne trouverez pas d'implémentation de boucle: vous devrez créer la vôtre en utilisant la récursivité de queue.

C'est vraiment expressif et sa syntaxe est formidable pour apprendre quelque chose de nouveau sur la programmation, comme dans: en regardant simplement le code, vous avez une idée de la façon dont le compilateur / interprète fonctionnera à travers lui.

De plus, il est livré avec le meilleur livre de programmation jamais conçu, Structure et interprétation des programmes informatiques , téléchargeable gratuitement sur le site Web du MIT.

Voici une leçon vidéo qui, je l'espère, vous intéressera immédiatement à ce langage fascinant - les intervenants sont les auteurs du SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- conférences /

cbrandolino
la source
Merci. Je dois cependant vous avertir que les leçons sont faciles à faire pleurer des programmeurs passionnés.
cbrandolino
@cbrandolino - Certes, notre classe de programmation fonctionnelle a mis beaucoup de gens hors du programme d'informatique.
jmort253
1
Le schéma était minimaliste, mais en R5, il avait augmenté quelques verrues, et sur R6, il est décidément énorme. C'est dommage, car c'était très beau. Pour une langue vraiment minimaliste mais toujours pratique, consultez Lua
Javier
@Javier, tu as raison. Je vais modifier la réponse pour spécifier les implémentations.
cbrandolino
Je fais un programme dans un université et je déteste ça. Non pas parce que c'est un langage fonctionnel, je veux en parler depuis longtemps. Cependant, la syntaxe me tue vraiment. Il existe trois types d'accolades différents sur le clavier (quatre si vous comptez les parenthèses angulaires) et vous n'utilisez que des parenthèses. Pourquoi? Quel est le problème avec l'utilisation des autres?
Femaref
4

LISP, de préférence Scheme en combinaison avec "Structure et interprétation des programmes informatiques" d'Abelson & Sussman, vous apprendra à penser en d'autres termes que ceux imposés par C / C ++.

FORTH, spécifiquement un FORTH orienté bloc, pas un fichier orienté (tel que D85) vous apprendra à limiter votre loquacité. Lorsque vous ne pouvez en aucun cas écrire une routine de plus de 16 lignes de 64 caractères, vous êtes obligé d'abstraire et de factoriser.

John R. Strohm
la source
4

Java est l'une des langues les plus enseignées dans les universités du monde entier et il y a une raison à cela. Bien qu'il ressemble souvent à un dinosaure, il donne à tout le monde un très bon aperçu des concepts de la programmation moderne. Il ne vous montre PAS comment l'ordinateur lui-même fonctionne comme Assembleur ou même le langage C déjà beaucoup plus abstrait. Mais les pilotes doivent être capables de voler et de ne pas pouvoir construire un avion par eux-mêmes - allez apprendre JAVA comme bonne base pour tout code que vous écrirez dans les langages (pour une résonance) les plus courants de nos jours: Java, c ++, php, c #, ruby ​​(sur rails) python et ainsi de suite ...

max

madmax
la source
3

C # 3 avec LINQ.

C'est une excellente introduction à la programmation fonctionnelle.

Essayez d'écrire un programme (ou de résoudre Project Euler) et de remplacer autant de boucles que possible par des appels LINQ.
Il aide à maîtriser les concepts de programmation fonctionnelle et d'évaluation paresseuse.

De là, on peut passer à F #

SLaks
la source
3

De haut en bas, je dirais Haskell. Et pour deux raisons:

  • C'est tout simplement la meilleure façon d'apprendre la programmation fonctionnelle. Presque tous les autres langages autorisent les effets secondaires par défaut, mais peuvent faire les choses de manière fonctionnelle (et oui, cela inclut les ML et Erlang: voir cette présentation pour plus d'informations ). Haskell est fonctionnel par défaut, mais peut être utilisé pour utiliser des effets secondaires lorsque vous en avez besoin.
  • C'est certainement un langage qui vous encourage à réfléchir avant de coder. Pour être honnête, cela n'a jamais vraiment été un problème pour moi (au contraire, c'est exactement le contraire). Cela dit, il semble que je sois une minorité. La plupart des programmeurs que j'ai rencontrés semblent être plus de l'état d'esprit "coder d'abord, poser des questions plus tard" plutôt que l'état d'esprit "réfléchir à votre problème pendant des jours avant de coder la solution en 5 minutes" (ce qui a tendance à être mon état d'esprit) . Par conséquent, ce type de langage peut fournir une expérience précieuse à la plupart des programmeurs.
Jason Baker
la source
3

Je suggérerais Scala si l'un vient du monde C / Java.

Ce n'est pas un langage de programmation purement fonctionnel, mais il utilise OO pour simuler certaines fonctionnalités de programmation fonctionnelle (ex. Utiliser un objet pour simuler une fonction de première classe et une fonction de haut niveau).

Donc, si vous connaissez OO, Scala utilise des termes que vous connaissez déjà pour expliquer le monde fonctionnel.

J'ai trouvé qu'il était plus facile pour moi de comprendre la programmation fonctionnelle dans Scala plutôt que de plonger dans une programmation plus fonctionnelle comme Haskell, List ... etc.

Brian Hsu
la source
2

Les langages fonctionnels sont ceux qui, selon moi, ont contribué à m'amener là où je suis aujourd'hui. Même si je suis dans le développement d'applications Web, les concepts appris des langages fonctionnels m'aident à trouver des solutions à des problèmes que je n'aurais pas pu voir autrement. Voici les langues avec lesquelles j'ai travaillé dans mon université:

  • C ++ (non fonctionnel, mais des concepts comme les pointeurs et la gestion de la mémoire sont inestimables)
  • Dr. Scheme
  • ML / Ocaml (Nous avons écrit une autre langue en utilisant ML / Ocaml!)
  • JavaScript (langage fonctionnel qui gagne du terrain dans l'industrie, côté client et côté serveur)

L'apprentissage de ces langages vous aidera à comprendre le monde des abstractions et à créer des blocs de code qui encapsulent d'autres fonctionnalités, masquant les détails de bas niveau afin que vous puissiez vous concentrer sur les objectifs commerciaux de haut niveau.

jmort253
la source
1

Ruby possède l'un des cadres de test les plus puissants et intuitifs que j'ai utilisés. Je ne suis pas sûr d'avoir vraiment compris comment utiliser correctement la moquerie et le stubbing jusqu'à ce que je commence à écrire des tests en rubis. rSpec et Cucumber sont des outils fantastiques.

gposton
la source
1

Il existe un certain nombre de langages de programmation qui nécessiteront que vous pensiez à un problème d'une manière nouvelle (par rapport à ce à quoi vous êtes habitué, bien sûr). langage logique, par exemple prologue et lisp .

Certains langages sont fortement influencés par la théorie des catégories, comme ocaml et Haskell et certains sont des langages croisés comme Curry (fonctionnel et logique). Curry est probablement le langage le plus époustouflant que je connaisse, non seulement parce qu'il a obtenu tout le souffle de Haskell avec la programmation logique, mais aussi à cause de l'intégration avec la programmation basée sur les contraintes.

Un autre langage amusant est Occam-pi car il est si lourd sur la concurrence, mais aussi à cause du port arduino récent .

HaskellElephant
la source
1

Un programmeur bien équilibré a plusieurs sacs ou astuces dans sa manche, notamment:

  • Assemblage, pour apprendre comment fonctionnent les tripes d'un ordinateur.
  • Un langage procédural tel que C ou Pascal.
  • Un langage fonctionnel tel que Scheme.
  • Un langage POO tel que Squeak.

Tout cela vous apprend des façons légèrement différentes de penser et d' aborder les problèmes.

terre rouge
la source
0

vous n'apprendrez correctement aucun langage de programmation sans cible claire. Sachant ce que vous voulez en faire, vous pouvez alors décider quel programme convient à vos besoins.

Par exemple, disons à propos de c #.

C # peut faire un programme web, un programme console, un exécutable autonome, un programme de jeu, un programme silverlight et un programme mobile. Bien que la syntaxe soit identique dans presque tous les cas, elle fonctionne différemment dans chaque scénario. Par exemple, un exécutable autonome conserve ses informations jusqu'à ce qu'il soit déchargé ou que le programme soit terminé, tandis qu'un programme Web, les informations sont détruites à chaque fois que vous chargez une page, et en clair, vous passerez la plupart du temps à lutter avec un fichier xml.

Et deuxièmement, ne passez pas votre temps avec des langues exotiques (Haskel par exemple), parler en entreprise, il y a très peu de programmes qui valent la peine: java (roi de la colline), c # / vb.net, php et sql.

magallanes
la source
0

Il existe un programme très simple pour écrire des applets Java appelé Traitement

Ce langage vous donnera une compréhension très basique des variables, des boucles et de ce genre de choses, si vous débutez.

Brioches Vitrage
la source
0

Quelques bonnes suggestions ici. J'irais probablement avec C ou C ++ personnellement. Ils vous obligent à gérer de nombreux concepts qui comptent beaucoup pour comprendre comment les choses fonctionnent, mais qui ont tendance à être obscurcis dans d'autres langues. Le simple fait de comprendre comment les choses fonctionnent vraiment va vous aider en tant que programmeur même si le langage que vous utilisez plus tard cache certains détails.

L'assemblage est amusant si vous voulez creuser un niveau encore plus bas, mais ne vous attendez pas à en faire beaucoup. :)

Tridus
la source
0

Je recommanderais Ruby. Ruby n'exige pas que vous changiez de paradigmes, mais il vous encourage à travailler dans plusieurs paradigmes. Je pense que l'avantage de cela est qu'au lieu d'être frustré de ne pas pouvoir travailler comme vous êtes habitué, vous utilisez un paradigme différent par frustration avec les limites de faire les choses comme vous êtes habitué.

philosodad
la source