D'après un langage de programmation relativement commun, lequel des deux est le plus déroutant?
J'ai écouté beaucoup de podcasts de programmation et j'ai pris le temps d'apprendre de nouvelles langues considérées comme importantes et à venir. Je ne parle pas nécessairement de BrainFuck , mais quelle langue considéreriez-vous comme une langue qui défie les paradigmes de programmation courants?
En ce qui me concerne, j’ai fait de la programmation fonctionnelle et logique (par exemple, Prolog ) dans les années 90, je ne peux donc pas dire que j’y trouve rien de spécial.
Je suis loin d’être un expert en la matière, mais même aujourd’hui, le langage de programmation le plus déroutant pour moi est Perl . Non pas parce que "Hello World" est difficile à mettre en œuvre, mais il y a plutôt une telle flexibilité lexicale que certaines des solutions les plus difficiles peuvent être décomposées de manière si poétique que je dois sortir de mon terminal pour me vider la tête. Je ne dis pas que je vendrais probablement une implémentation logicielle commerciale, mais simplement que Perl est si (si) célèbre. Il suffit de regarder la liste de base des livres à ce sujet.
Alors, quel est votre langage hallucinant qui fait la promotion de vos meilleurs programmes et pratiques ?
la source
Réponses:
APL
Cette langue est incroyablement puissante et très laconique, elle va faire mal à votre cerveau.
Pour les débutants, il est difficile de l'utiliser sans un clavier personnalisé, ou du moins une superposition de clavier pour afficher tous les symboles obscurs qu'il utilise.
Ensuite, le langage est du paradigme basé sur les vecteurs / matrices et se spécialise dans l'algèbre linéaire complexe. La version originale ne comportait même pas de construction de boucle, ni aucun élément en chaînant ensemble des opérateurs de tableau plutôt inhabituels.
strip_tags()
n'importe qui? (emprunté à Wikipedia)la source
Haskell . C'est très proche d'être purement fonctionnel, ce à quoi la plupart des gens ne sont pas habitués; très exigeant, ce qui est utile une fois que vous savez ce que vous faites mais frustrant jusque-là; a une syntaxe plutôt cryptique et hautement symbolique, ce qui est génial une fois que vous la connaissez mais opaque avant cela ... la liste est longue.
En outre, il est tout simplement impossible de formater les éléments d’une manière qui me convient.
la source
Prolog. C'était tellement différent de tout autre langage que j'avais utilisé quand j'ai été exposé pour la première fois. J'aime ça, donc je ne déteste pas la syntaxe ou quoi que ce soit.
la source
!
).Je suis d'accord avec vous sur Perl. C'est la syntaxe la plus moche que j'ai jamais vue. Ils disent que même les développeurs Perl ne peuvent pas se rappeler ce qu'ils ont écrit le lendemain.
la source
Je devrais dire Forth . La notation que toutes les opérations sont des manipulations de pile. Dans sa forme pure, il n'y a pas de variables locales à utiliser.
la source
Ruby .
Cela me donne envie de me tuer:
(Je pourrais avoir la syntaxe exacte incorrecte, mais vous obtenez le point).
la source
DateTime.Now.AddMonths(1);
? Ces fonctionnalités rendent difficilement le code plus lisible. (Je ne dis pas que C # a la meilleure syntaxe. Vous pouvez le changer pour n'importe quelle convention de langue et cela s'appliquera toujours.)Brainfuck
Quiconque peut honnêtement écrire cette moquerie d'une langue ne devrait même pas avoir besoin d'un fil comme celui-là.
Bonjour tout le monde (pointeurs à gauche; explication à droite):
la source
Lisp est ma dernière langue hallucinante.
J'ai emporté avec moi les monades et la programmation fonctionnelle de Haskell et j'ai maintenant des macros sur lesquelles travailler. J'entre dans CLOS et je n'ai pas du tout touché au système de condition.
la source
OREILLONS
C'est un langage qui apparaît de temps en temps dans les articles en ligne et qui a l'honneur d'être utilisé en production pour stocker des informations essentielles sur la sécurité des personnes (c'est-à-dire les dossiers des patients). Toutefois, il s’agit également d’un langage dans lequel le sens de la densité est apprécié et où des fonctions telles que les suivantes peuvent apparaître dans le code de production (exemple tiré de l’article de Wikipedia sur le sujet):
la source
Je dirais Coq , ou une autre implémentation de la théorie des types dépendants. Le système de types de Haskell n’est pas très expressif comparativement. Le passage à un système de type plus expressif (par exemple, le calculus de constructions (CoC)) vous permet de réaliser des tâches soignées, telles que prouver les propriétés de programmes dans le langage et incorporer des invariants forts dans vos types, qui peuvent être vérifiés statiquement.
la source
Objective-C . Pour être juste, je ne l'ai que très brièvement étudiée et j'aimais tellement la syntaxe au premier abord que je l'ai abandonnée.
Comme il s’agit d’un langage (relativement) commun (principalement pour le développement Mac / iPhone / iPad ), je suis sûr que c’est un peu correct une fois que vous vous y serez habitués.
la source
[foo bar]
s'agit que d'un sucre syntaxique pourobjc_sendMsg(foo, "bar");
lequel le pointeur de fonction est à son tour (c'est un "bar" spécial, pas un générique). Saviez-vous qu'il est entièrement tapé?[receiver doStuff:arg]
il ressemblera beaucoup à un java dynamiqueJe choisis Mercure .
Mercure plié mon esprit en me montrant que même les langues pures peuvent faire d' E / S .
La façon dont cela fonctionne est que les fonctions d'E / S dans Mercury prennent une valeur «d'état du monde» et retournent une nouvelle valeur «d'état du monde». Ainsi, les fonctions I / O dans Mercure transforment le monde et la pureté est maintenue.
la source
Ce doit être Scheme , sûrement. Essayer d'expliquer
call-with-current-continuation
me blesse toujours le cerveau, mais une fois que vous le comprenez, vous pouvez trouver des solutions incroyablement élégantes.Voulez-vous arrêter en cours d'algorithme et le contrôle manuel à quelqu'un d'autre? Sûr!
Voulez-vous reprendre la même continuation plusieurs fois? Bien sûr!
Vous souhaitez suspendre l'exécution d'un algorithme, redéfinir une fonction, puis reprendre l'exécution avec la pile d'origine mais avec un état global mis à jour? Aucun problème! Et faites-vous cela plusieurs fois avec différentes modifications de l'état global mais le même point de rentrée de pile? Pour vous, monsieur, n'importe quoi!
la source
J'avais l'habitude d'utiliser un ancien éditeur appelé TECO (Text Editor and COmparator), qui était un langage de modification de texte très puissant, avec toutes sortes de fonctions de macro. Je ne me souviens pas de la célèbre citation à ce sujet, mais l'essentiel était: "toute collection aléatoire de 20 caractères est presque toujours un programme TECO légitime, et modifiera votre fichier (c'est un éditeur) d'une manière fondamentalement imprévisible. Je me souviens d'avoir écrit un convertisseur Fortran en PL1 dans environ une page de code TECO.
la source
L’assemblée a été la plus "déconcertante" pour moi, mais je commence tout juste.
la source
Lisp . L’apprentissage consiste en une série de petites épiphanies, chacune d’elles changera totalement votre façon de penser à la résolution de problèmes de programmation.
la source
REBOL
Il repose sur la notion de code en tant que données, à l'instar de Lisp . Les adeptes du langage ont du mal à expliquer ses avantages uniques par rapport aux autres approches de cette famille, et finissent généralement par hausser les épaules et dire quelque chose du genre : et une fois que vous l'aurez compris, ce sera comme si vous preniez la pilule Matrix rouge et vous ne voudrez plus jamais revenir en arrière. "
Le problème, c’est en partie parce que c’est bizarre et que le marché n’est pas défini avec précision. Mais aussi en partie parce que beaucoup de ceux qui le préconisent ne savent pas bien expliquer . :)
Mais Douglas Crockford était un fan, s’en est inspiré avec la création de JSON et a suggéré aux gens de s’y intéresser aussi récemment qu’en octobre 2010:
Je pense que cela vaut la peine d’être regardé par ceux qui cherchent à préciser leur conception de la conception et de l’extensibilité de la langue. Maintenant que c'est de l'open source (après 18 ans de développement propriétaire), les renonciations habituelles que j'avais l'habitude de donner pour le garder à distance ne s'appliquent plus ... ça vaut le coup d'oeil! La communauté s'est même sortie de son programme de messagerie propriétaire basé sur Rebol et a commencé à discuter sur Stack Overflow (à ma grande surprise!).
la source
Je dirais que, vu le temps que beaucoup de gens prennent pour ne pas avoir à l'écrire directement, les développeurs trouvent que SQL est époustouflant. Je suppose que beaucoup de gens ne pensent pas naturellement en termes de jeux.
la source
Pur
Pure est un langage fonctionnel basé sur la réécriture de termes. J'aime ça, il est à la fois clairsemé et expressif, même s'il est un peu minimisé.
la source
Ce n’est peut-être pas le plus difficile, mais c’est de loin le plus difficile à apprendre pour moi (je pensais que Haskell et le langage assembleur étaient plus faciles!)
C’est l’ensemble des langages HDL , notamment le VHDL (et Verilog dans une moindre mesure )
Il est extrêmement difficile de surmonter le fait que chaque "fonction" s'exécute en même temps et vous ne pouvez pas éviter le passage à la parallélisation absolue. Bien sûr, il ne s’agit cependant que d'un langage de programmation à la frontière.
la source
Tcl
J'ai commencé à l'apprendre une fois, mais comme j'en ai appris suffisamment pour donner un sens, je détestais vraiment la façon dont mon cerveau se sentait. Cela semblerait qualifier de hallucinant.
la source
Le langage machine de Turing , évidemment. Il est extrêmement puissant, nettement supérieur à tous les autres langages de programmation existants et vous fera mal à votre cerveau si vous essayez de l’utiliser.
la source
C
Les pointeurs, la gestion de la mémoire et les transformations typographiques demandent beaucoup de réflexion et sont faciles à se tromper. L'absence de structures de données intégrées, telles que des tables de hachage ou des listes, vous oblige à concevoir votre propre bibliothèque ou à trouver une bibliothèque tierce et à connaître son API.
la source
JESS (Java Expert System Shell). Intégré dans un environnement Java, cette adaptation de CLIPS est un langage système expert basé sur des règles fonctionnelles. Tenter de cartographier les vrais objets Java en tant que faits et trouver les bonnes questions à poser pour obtenir les résultats escomptés est un véritable défi. Moins si vous êtes familier avec la théorie des systèmes experts, mais quand vous venez d'un pur esprit POO, cela ne vous va pas. NOTE: CLIPS n’est pas Lisp, mais y ressemble. Encore un autre esprit bender.
Une fois que vous avez dépassé la courbe d’apprentissage initiale, il est assez puissant et rapide de proposer des réponses.
la source
TeX est considéré comme un langage, puisqu'il est complet et que je le trouve assez déconcertant. Un langage pour la composition mathématique (et les livres de programmation) ...
la source
CIL
CIL, le langage commun intermédiaire que tous les programmes .NET compilent, est une sorte d'assemblage orienté objet. C'est intéressant pour moi d'essayer d'écrire ou de lire du code et de comparer ses constructions à celles de C # que je connais déjà. C'est un bon moyen d'en savoir plus sur ce que fait .NET en coulisse. Et cela peut être utile pour la génération de code dynamique ou la réécriture de code compilé existant avec Mono Cecil .
la source