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?
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)
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
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.
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.
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 ...
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 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.
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.
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.
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.
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 .
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.
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. :)
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é.
Réponses:
pour une programmation et des algorithmes "normaux":
pour une expérience qui change la pensée:
pour avoir détruit votre esprit et franchi la frontière entre padawan et Jedi Master:
la source
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)
la source
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
la source
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 /
la source
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.
la source
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
la source
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 #
la source
De haut en bas, je dirais Haskell. Et pour deux raisons:
la source
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.
la source
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é:
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.
la source
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.
la source
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 .
la source
Un programmeur bien équilibré a plusieurs sacs ou astuces dans sa manche, notamment:
Tout cela vous apprend des façons légèrement différentes de penser et d' aborder les problèmes.
la source
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.
la source
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.
la source
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. :)
la source
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é.
la source