Quel est le pire langage de programmation-vous déjà travaillé? [fermé]

Si vous avez une histoire intéressante à partager, s'il vous plaît poster une réponse , mais n'abusez pas de cette question pour bashing langue.


Nous sommes des programmeurs, et notre outil principal est le langage de programmation que nous utilisons.

bien qu'il y ait beaucoup de discussions sur le meilleur, j'aimerais entendre vos histoires sur les pires langages de programmation vous jamais travaillé avec et j'aimerais savoir exactement ce qui vous dérange.

j'aimerais recueillir ces histoires en partie pour éviter les pièges courants tout en concevant une langue (en particulier un DSL) et en partie pour éviter les langues excentriques dans le futur en général.


cette question Est Non subjective . Si une langue ne supporte que des identificateurs à caractère unique (voir ma propre réponse ) c'est mauvais d'une manière non discutable .


modifier

certaines personnes se sont dites préoccupées par le fait que cette question attire les trolls. Patauger dans toutes vos réponses, une chose est claire. La grande majorité des réponses sont appropriées, utiles et bien rédigées.

MISE À JOUR 2009-07-01 19:15 GMT

l'aperçu de langue est maintenant complet, couvrant 103 langues différentes à partir de 102 réponses. J'ai décidé d'être laxiste sur ce qui compte comme un langage de programmation et inclus quelque chose de raisonnable. Merci David pour vos commentaires à ce sujet.

Voici tous les langages de programmation couverts jusqu'à présent (par ordre alphabétique, en lien avec la réponse, les nouvelles rubriques en caractères gras):

ABAP , toutes les langues du XXe siècle , toutes les faire glisser et déposer des langues , tous les langages propriétaires , APF , APL (1) , AS400 , Authorware , Autohotkey , BancaStar , de base , Bourne Shell , Brainfuck , C++ , Centura Team Developer , Cobol (1) , La Fusion Froide , Coldfusion , CRM114 , Syntaxe Crystal , CSS , Dataflex 2.3 , DB /c DX , dbase II , DCL , Delphi IDE , portes DXL , DOS batch (1) , langage Macro Excel , FileMaker , FOCUS , de l'avant , FORTRAN , FORTRAN 77 , HTML , Illustra web blade , Informix 4e Génération de la Langue , Informix Universelle web du Serveur lame , INTERCAL , Java , JavaScript (1) , JCL (1) , karol , LabTalk , Labview , Lingo , LISP , Logo , LOLCODE , LotusScript , m4 , Magic II , Makefiles , MapBasic , MaxScript , Meditech Magic , MEL , mIRC Script , MS Access , oreillons , Oberon , extensions d'objets de C , Objectif-C , OPS5 , Oz , Perl (1) , PHP , PL /SQL , PowerDynamo , PROGRESS 4GL , prova , PS-FOCUS , Python , Expressions Régulières , RPG , RPG II , Régime , ScriptMaker , sendmail.conf , Smalltalk , Smalltalk , SNOBOL , SpeedScript , Sybase PowerBuilder , Symbian C++ , Système de RLP , TCL , TECO , L'Environnement Logiciel Visuel , Tiny praat , TransCAD , troff , uBasic , VB6 (1) , VBScript (1) , VDF4 , Vimscript , Visual Basic (1) , Visual C++ , Visual Foxpro , VSE , Webspeed , XSLT

Les réponses couvrant 80386 assembleur, VB6 et VBScript ont été supprimés.

44
demandé sur Ludwig Weinzierl 2009-06-07 18:08:39

30 réponses

PHP (dans aucun ordre particulier)

  • Incompatible noms de fonction et argument commandes
    • parce qu'il y a un zillion de fonctions, dont chacune semble utiliser une convention de nommage et un ordre d'argument différents. "Permet de voir... c'est foo_bar ou foobar ou fooBar... et est-ce aiguille, meule de foin ou aiguille, meule de foin ?"Les fonctions PHP string sont parfaites exemple de cette. La moitié d'entre eux utilisent str_foo et l'autre moitié utilisent strfoo .
  • Non-standard de format de date de caractères
    • Prendre j par exemple
      • In UNIX (qui, soit dit en passant, est ce que tout le monde utilise comme guide pour les formats de chaîne de date) %j retourne le jour de l'année avec les zéros non significatifs.
      • PHP date fonction j renvoie le jour du mois sans zéros non significatifs.
  • Toujours Pas de Support pour Apache 2.0 MPM
    • ce n'est pas recommandé.
    • pourquoi n'est-ce pas pris en charge? "Lorsque vous rendez le cadre sous-jacent plus complexe en ne ayant des fils d'exécution complètement séparés, des segments de mémoire complètement séparés et un bac à sable fort pour chaque requête à jouer, des pieds d'argile sont introduits dans le système de PHP." Lien ... il n'est pas supporté parce qu'il rend les choses plus difficiles? Parce que seules les choses faciles valent la peine d'être faites, pas vrai? (Pour être honnête, comme Emil H l'a fait remarquer, ceci est généralement attribué à de mauvaises libs de tiers n'étant pas thread-safe, alors que le noyau de PHP l'est.)
  • Aucun natif de l'Unicode
    • le support des Unicodes natifs est prévu pour PHP6
    • je suis sûr que nous n'avons pas vécu dans un environnement mondial où nous pourrions avoir besoin de parler aux gens dans d'autres langues pour le passé, oh 18 ans . oh attends. (Pour être juste, le fait que tout n'utilise pas Unicode de nos jours m'agace vraiment. Ce que je veux dire, c'est que je ne devrais pas avoir à faire de travail supplémentaire pour que Unicode arrive. Ce N'est pas mais un problème PHP.)

j'ai d'autres beefs avec la langue. Ce sont juste quelques-uns. Jeff Atwood a un old post sur pourquoi PHP craint. Il a également dit qu'il n'a pas d'importance. Je ne suis pas d'accord, mais nous y sommes.

212
répondu baudtack 2017-05-23 12:34:39

XSLT.

  • XSLT est déconcertant, pour commencer. La métaphore est complètement différente de tout ce que je sais.
  • la chose a été conçue par un comité si profond dans les crochets d'angle qu'il sort comme un frankenstein bizarre.
  • les incantations bizarres nécessaires pour spécifier le format de sortie.
  • intégré, invisible règles.
  • l'étrange boulon-sur le truc, comme script.
  • la dépendance à XPath.
  • le support des outils a été assez mince, jusqu'à récemment. Déboguer XSLT dans les premiers jours était un exercice de navigation dans l'obscurité totale. Les outils changent cela, mais, toujours XSLT en tête de ma liste.

XSLT est assez bizarre que la plupart des gens l'ignorent. Si vous devez l'utiliser, vous avez besoin d'un Shaman XSLT pour vous donner les incantations magiques pour faire bouger les choses.

101
répondu Cheeso 2009-06-09 12:17:30

fichiers DOS Batch. Pas sûr si cela est admissible en tant que langage de programmation. Ce n'est pas que vous ne pouvez pas résoudre vos problèmes, mais si vous êtes habitué à bash ...

juste mes deux cents.

96
répondu bbuser 2012-01-03 21:40:39

Je ne sais pas si c'est un vrai langage, mais je déteste les Makefiles.

Makefiles ont des différences significatives entre l'espace et TAB, donc même si deux lignes semblent identiques, ils ne fonctionnent pas les mêmes.

Faire s'appuie également sur un ensemble complexe de règles implicites pour de nombreuses langues, qui sont difficiles à apprendre, mais sont fréquemment remplacé par le fichier make.

un système Makefile est généralement réparti sur beaucoup, beaucoup de fichiers, à travers de nombreux répertoires. Avec pratiquement aucune détermination de la portée ou abstraction, un changement dans un fichier make à plusieurs répertoires peut empêcher ma source de se construire. Pourtant, le message d'erreur est invariablement une erreur de compliation, et non une erreur significative sur make, ou les makefiles.

tout environnement dans lequel j'ai travaillé et qui utilise makefiles A avec succès un expert de Make à plein temps. Et tout ça pour quelques minutes de moins de compilation??

92
répondu abelenky 2011-11-25 17:50:29

le pire langage que j'ai jamais vu vient de l'outil praat, qui est un bon outil d'analyse audio. Il fait un bon travail jusqu'à ce que vous utilisez le langage de script. soupir mauvais souvenirs.

petit praat script tutorial pour débutants

  • appel de fonction

    Nous avons énuméré au moins 3 syntaxe d'appel de fonction différente :
    • La régulière

      string = selected("Strings")

      rien de spécial ici, vous assignez à la chaîne variable le résultat de la fonction sélectionnée. Pas vraiment effrayant... encore.

    • Le "je suis en invoquant certains GUI de commande avec les paramètres"

      Create Strings as file list... liste 'path$'/'type$'

      comme vous pouvez le voir, le nom de la fonction commence par "Create" et finit par "The"...". Commande "Create Strings as file list" est le texte affiché sur un bouton ou un menu (j'ai peur de vérifier) sur praat. Cette commande prend 2 paramètres liste et une expression. Je vais chercher plus profondément dans l'expression 'path$'/'type$'

      Hmm. Ouais. Pas d'espaces. Si des espaces étaient introduits, ce serait des arguments séparés. Comme vous pouvez l'imaginer, la parenthèse ne fonctionne pas. À ce point de la description, je voudrais souligner le suffixe des noms de variables. Je ne le développerai pas en ce paragraphe, je suis juste une blague.

    • Le "Oh, mais je veux obtenir le résultat de l'interface de commande dans ma variable"

      noliftt = Get number of strings

      Oui, nous pouvons voir un modèle ici, long et étrange nom de fonction, il doit être un GUI appelant. Mais il n'y a pas '...'donc pas de paramètres. Je ne veux pas voir ce que l'analyseur ressemble.
  • L'incroyable système de type

    (AKA Haskell et OCaml, praat est à venir pour vous)
    • simples types indigènes

      windowname$ = left$(line$,length(line$)-4)

      Alors, que se passe-il? Il est maintenant temps de regarder la convention et les types d'expression, donc ici nous avons :

      • left$ :: (String, Int) - > String
      • longueur :: (String) - > Int
      • nomfenêtre$ :: String
      • ligne$:: String
      Comme vous pouvez le voir, les noms de variables et de fonctions sont suffixés avec leur type ou leur type de retour. Si leur suffixe est un'$', alors il renvoie une chaîne ou est une chaîne. Si il n'y a rien c'est un nombre. Je peux voir le point de préfixer le type à une variable pour faciliter l'implémentation, mais pour le suffixe, non désolé, Je ne peux pas
    • Tableau de type

      Pour montrer le type de tableau, permettez-moi d'introduire une boucle "minuscule" :
      
          for i from 1 to 4
              Select... time time
              bandwidth'i'$ = Get bandwidth... i
              forhertz'i'$ = Get formant... i
          endfor
          

      On a i qui est un nombre et... (non ce n'est pas une fonction)

      bandwidth'i'$

      Ce qu'il fait est de créer des variables string: bandwidth1$ , bandwidth2$ , bandwidth3$ , bandwidth4$ et leur donner des valeurs. Comme vous pouvez vous attendre, vous ne pouvez pas créer deux tableau dimensionnel de cette façon, vous devez faire quelque chose comme ça : band2D__'i'__'j'$

      http://img214.imageshack.us/img214/3008/scaredkittylolqa2.jpg
    • La chaîne de caractères spéciaux invocation

      outline$ = "'time'@F'i':'forhertznum'Hz,'bandnum'Hz, 'spec''newline$'" outline$ >> 'outfile$'

      Les cordes sont étrangement (au moins) manipulées dans la langue. l' " est utilisé pour appeler la valeur d'une variable à l'intérieur de la mondiale "" chaîne. C'est bizarre . Cela va à l'encontre de toute la convention construite dans de nombreuses langues de bash à PHP passant par la powershell. Et regardez, il a même eu la redirection. Ne soyez pas dupe, ça ne marche pas comme dans votre coquille bien-aimée. Non, vous devez obtenir la valeur de la variable avec l' "

    • Da wonderderderful execution model

      je vais mettre la touche finale à cette wonderderderfulful présentation de vous parler de modèle d'exécution. Donc, comme dans toutes les langues de procédure, vous avez des instructions exécutées de haut en bas, il y a les variables et le praat GUI. C'est-à-dire que vous codez tout sur praat gui, vous invoquez des commandes écrites sur menu/Boutons.

      la fenêtre principale de praat contiennent une liste d'éléments qui peuvent être :

      • fichiers
      • liste des fichiers (créés par une fonction avec un long nom merveilleux)
      • Spectrogrammm
      • Cordes (ne demandez pas)
      Donc, si vous voulez effectuer l'opération sur un fichier donné, vous devez sélectionner le fichier dans la liste programmatically et puis appuyer sur les différents boutons pour prendre quelques actions. Si vous souhaitez passer des paramètres à une action GUI, vous devez suivre la mise en page GUI du formulaire pour votre arguments, par exemple " To Spectrogram... 0.005 5000 0.002 20 Gaussian " est comme cela parce qu'il suit cette disposition:

      http://img7.imageshack.us/img7/5534/tospectrogramm.png

    inutile de dire que mes cauchemars sont remplis de scripts de prière dansant autour de moi et criant" DEBUG MEEEE!!".

    Plus d'informations sur le site praat , sous la rubrique bien nommée "facile langage de script programmable "

  • 79
    répondu Raoul Supercopter 2009-06-07 19:44:05

    Eh bien puisque cette question refuse de mourir et que L'OP m'a poussé à y répondre...

    je humblement vous en proposons pour votre considération Authorware (AW) comme le pire de la langue il est possible de créer. (n. B. Je vais me rappeler ici, ça fait environ 6 ans que j'ai utilisé AW, ce qui signifie Bien sûr qu'il y a un certain nombre de choses horribles dont je ne me souviens même pas)

    l'horreur, l' l'horreur http://img.brothersoft.com/screenshots/softimage/a/adobe_authorware-67096-1.jpeg

    commençons par le fait qu'il s'agit d'un Macromedia produit (-10 points), un langage propriétaire (-50 plus) principalement destiné à la création de logiciels d'e-learning et en outre des logiciels qui pourraient être créés par non-programmeurs et programmeurs semblables mis en œuvre comme un langage emblématique et un texte langue (-100).

    maintenant, si cette dernière déclaration ne vous a pas fait peur, alors vous n'avez pas eu à corriger le code généré par WYSIWYG avant (bonjour Dreamweaver et FrontPage devs!), mais le point saillant est QU'AW avait une bibliothèque d'environ 12 éléments qui pouvaient être entraînés dans un flux. Comme "page" elements, Animations, IFELSE, et GOTO (-100). Bien sûr, retirer des objets du flux a créé un certain nombre de connexions et d'artéfacts cassés que L'IDE avait des niveaux variables de succès composer avec. Naturellement, les "wizards (-10) construits en en sont une source majeure.

    heureusement vous pouvez toujours entrer dans une vue de code, et finalement vous auriez à parce qu'avec un ensemble limité d'éléments iconiques certaines choses n'étaient tout simplement pas possibles autrement. La langue elle - même était basé sur le tuteur (-50) - un candidat pour la pire langue elle-même si seulement elle avait l'ambition et la possibilité d'atteindre le des profondeurs QU'AW s'efforcerait d'atteindre - à propos de quoi wikipedia dit:

    ...la langue TUTOR n'a pas été facile à apprendre. En fait, il a même été suggéré que plusieurs années d'expérience avec la langue serait nécessaire avant les programmeurs pourraient construire des programmes valant Keeping.

    une excellente fondation alors, qui a été construit sur les années avant la montée de l'internet avec exactement rien. Absolument Non forme de la structure de données au-delà d'un tableau (-100), certainement sans sucre (les hommes réels n'utilisent pas des énoncés switch?) (-10), et un grand jet de vinaigre syntaxique ("--"était l'indicateur de commentaire donc aucun opérateur de décrément pour vous!) (-10). La documentation de référence de langue a été fournie en papier ou fichier zip formats (-100), mais au moins vous aviez le soutien du développeur exécuter usegroup et pourrait rapidement établir le la solution à votre problème était d'utiliser les fonctionnalités D'importation DLL ou SWF de AW pour vous permettre de faire le codage réel dans une langue réelle.

    AW a été entraîné par un flux (avec les commandes de PAUSE nécessaires) et a donc tous les problèmes connexes d'un linéaire plutôt que basé sur l'événement système (-50), et malgré les mensonges marketing pure et simple de la documentation il était pas orienté objet (-50) non plus. tous la réutilisation du code a été réalisée grâce à GOTO. Pas de portée, beaucoup de variables globales (-50).

    ce n'est pas directement la faute du langage, mais évidemment aucune intégration de contrôle source n'était possible , et certainement pas de TDD, de génération de documentation ou tout autre outil complémentaire que vous pourriez aimer.

    bien sûr Macromedia rencontré le défi de l'internet tête sur un refus obstiné de s'engager pendant des années, finalement produire la buggy, difficile à utiliser, la sécurité cauchemar qui est l'onde de Choc (-100) essentiellement serialise les versions de bureau des logiciels par le biais d'un nécessaire plugin (-10). Comme HTML rose a fait ainsi AW stagner, toujours persistant avec sa livraison shockwave même face à IEEE SCORM javascript normes.

    finalement après des années de mendicité et de promesses Macromedia a annoncé une nouvelle version radicale de AW en quelques années plus tard, il a annulé le projet. Bien sûr Macromedia sont toujours la vente (bonus maléfique -500).

    si quelque chose d'autre doit être dit, c'est la langue qui permet des espaces dans les noms variables (-10000).

    si vous voulez un jour ressentir la vraie douleur, essayez de lire la notation hongroise Non compacte de quelqu'un d'autre dans un langage qui n'est pas sensible à la casse et qui permet des espaces de noms variables.


    total Annakata Arbitrary Score (AAS): -11300

    Ajustée en fonction de l'expérience personnelle: Exception

    (toutes mes excuses pour la longueur, mais c'était cathartique)

    74
    répondu annakata 2009-06-30 14:56:24

    Seriously: Perl. C'est juste un emmerdement à coder pour les débutants et même pour les semi-professionnels qui travaillent avec perl au quotidien. Je vois constamment mes collègues lutter avec la langue, construire les pires scripts, comme 2000 lignes sans égard à toute norme de codage bien acceptée. C'est le pire bordel que j'ai jamais vu dans la programmation. Maintenant, vous pouvez toujours dire que ces gens sont mauvais dans le codage (malgré le fait que certains d'entre eux ont utilisé perl pour beaucoup de des années, maintenant), mais le langage encourage juste toute cette putain de merde qui me fait hurler quand je dois lire un script par un autre gars.

    68
    répondu buster 2012-01-03 21:46:32

    MS Access Visual Basic pour Applications (VBA) a également été assez mauvais. L'accès était tout à fait mauvais en ce qu'il vous a forcé vers le bas d'un paradigme faible et était trompeusement simple pour commencer, mais un cauchemar pour finir.

    43
    répondu John MacIntyre 2009-06-09 02:11:04

    pas de réponse pour Cobol? :O

    40
    répondu Joril 2009-06-07 15:46:02

    Old-skool Bases avec les numéros de ligne serait mon choix. Lorsque vous n'aviez pas d'espace entre les numéros de ligne pour ajouter de nouvelles lignes, vous avez dû exécuter un utilitaire renuméroter, ce qui vous a fait perdre tous les ancrages mentaux que vous aviez à ce qui était où.

    en conséquence, vous avez fini par presser dans trop d'énoncés sur une seule ligne (séparés par des colons), ou vous avez fait un goto ou gosub ailleurs pour faire le travail que vous ne pouviez pas faire.

    40
    répondu Nosredna 2009-06-07 19:17:42

    oreillons

    j'y ai travaillé pendant quelques années, mais j'ai fait une erreur cérébrale complète depuis. Tout ce dont je me souviens vraiment, c'est qu'il n'y avait pas de documentation (à mon emplacement) et de commandes cryptiques.

    c'était horrible. Horrible!!! HORRIBLE!!!!!

    38
    répondu dna123 2009-06-08 16:54:25

    il n'y a que deux sortes de langues: celles dont tout le monde se plaint et celles que personne n'utilise.

    Bjarne Stroustrup

    37
    répondu Dinah 2009-06-28 18:30:50

    Je n'ai pas encore travaillé avec beaucoup de langues et traite principalement avec les langues de script; de ces VBScript est celui que j'aime le moins. Bien qu'il ait quelques caractéristiques pratiques, certaines choses m'énervent vraiment:

    • les assignations D'objets sont faites en utilisant le Set mot-clé:

      Set foo = Nothing
      

      Omettant Set est l'une des causes les plus fréquentes d'erreurs d'exécution.

    • le traitement structuré des exceptions n'existe pas. Vérification des erreurs est comme ceci:

      On Error Resume Next
      
      ' Do something
      
      If Err.Number <> 0
        ' Handle error
        Err.Clear
      End If
      
      ' And so on
      
    • pour inclure les paramètres de l'appel de procédure entre parenthèses, il faut utiliser le mot-clé Call :

      Call Foo (a, b)
      
    • sa syntaxe anglaise est beaucoup trop verbeuse. (Je suis un fan des accolades.)

    • logique les opérateurs sont en long-circuit. Si vous avez besoin de tester une condition composée où la condition suivante dépend du succès de la précédente, vous devez mettre des conditions dans des énoncés séparés If .

    • absence de constructeurs de classe paramétrés.

    • pour envelopper une déclaration en plusieurs lignes, vous devez utiliser un underscore:

      str = "Hello, " & _
            "world!"
      
    • manque de commentaires multilignes.


    Edit: found this article: the Flangy Guide to Hathing VBScript . L'auteur résume ses plaintes comme "VBS n'est pas Python" :)

    34
    répondu Helen 2009-07-10 14:05:13

    Objectif-C.

    les annotations sont déroutantes, l'utilisation de crochets pour appeler les méthodes ne calcule toujours pas dans mon cerveau, et ce qui est pire est que toutes les fonctions de bibliothèque de C sont appelées en utilisant les opérateurs standard dans C, -> et ., et il semble que la seule entreprise qui Pilote ce langage est Apple.

    j'admets que j'ai seulement utilisé le langage lors de la programmation pour le iPhone( et la recherche dans la programmation pour OS X), mais il se sent comme si C++ était simplement bifurqué, ajouter des annotations et forcer l'implémentation et les fichiers d'en-tête à être séparés serait beaucoup plus logique.

    29
    répondu John Bellone 2009-06-07 16:04:33

    PROGRESS 4GL (apparemment maintenant connu sous le nom de OpenEdge Advanced Business Language ").

    PROGRESS est à la fois un langage et un système de base de données. Toute la langue est conçue pour faciliter l'écriture d'écrans de saisie de données à l'écran vert pourri. (Donc commencez par imaginer comment cela se traduit bien à Windows.) Rien de plus fantaisiste que cela, qu'il s'agisse de jolis écrans, de logique de programme ou de traitement par lots... pas tellement.

    la dernière fois que j'ai utilisé version 7, à la fin des années 90, donc il est vaguement possible que certains de ces éléments soient périmés, mais je ne parierais pas là-dessus.

    • il a été conçu à l'origine pour les écrans de saisie de données en mode texte, donc sur Windows, Toutes les coordonnées de l'écran sont en unités de" caractère", qui sont un nombre bizarre de pixels de large et un nombre différent de pixels de haut. Mais bien sûr, ils sont par défaut à une police proportionnelle , de sorte que le nombre d ' "unités de caractères" ne correspond au nombre réel de caractères qui correspond à un espace donné.
    • Pas de classes ou d'objets.
    • pas de support de langage pour les tableaux ou l'allocation de mémoire dynamique. Si vous voulez quelque chose qui ressemble à un tableau, vous créez une table de base de données temporaire en mémoire, définissez son schéma, puis obtenez un curseur sur elle. (J'ai vu un peu de code d'une version ultérieure, où ils ont en fait construit et expédié un objet primitif orienté système sur ces tables en mémoire. Effrayant.)
    • ISAM accès base de données est construite dans. (Mais pas SQL. Qui en a besoin?) Si vous voulez incrémenter le champ Counter dans l'enregistrement courant dans la table State , vous n'avez qu'à dire State.Counter = State.Counter + 1 . Ce qui n'est pas si mauvais, sauf...
    • quand vous utilisez une table directement en code, puis dans les coulisses, ils créent quelque chose qui ressemble à une variable locale invisible et magique pour maintenir la position actuelle du curseur dans cette table. Ils devinez à quel bloc contenant ce curseur sera scopé. Si vous n'êtes pas prudent, votre curseur disparaîtra lorsque vous sortirez d'un bloc, et se réinitialisera plus tard, sans avertissement. Ou vous commencerez à travailler avec une table et constaterez que vous ne commencez pas au premier enregistrement, parce que vous réutilisez le curseur d'un autre bloc (ou même le vôtre, parce que votre portée a été étendue alors que vous ne vous y attendiez pas).
    • opérations effectuées le ces sauvages deviner étendues. Sommes-nous avoir du plaisir?
    • tout peut être abrégé. Pour certains des mots-clés offensivement long, cela pourrait ne pas sembler si mal au début. Mais si vous avez une variable appelée Index , vous pouvez l'appeler Index ou Ind ou encore I . (Les fautes de frappe peuvent avoir des résultats très intéressants. Et si vous souhaitez accéder à un champ de base de données, non seulement vous pouvez abréger le nom du champ, mais vous n'avez même pas à qualifier le nom de la table; ils devineront la table aussi. pour des résultats vraiment effrayants, combinez cela avec:
    • sauf indication contraire, ils supposent que tout est un accès à une base de données. Si vous accédez à une variable que vous n'avez pas encore déclarée (ou, plus probablement, si vous vous trompez sur le nom de la variable), il n'y a pas d'erreur de compilation: au lieu de cela, il va chercher un champ de base de données avec ce nom... ou un champ qui abrège de ce nom.

    les suppositions sont les pires. Entre les abréviations et le champ par défaut, vous pourriez obtenir des choses désagréables si vous n'étiez pas prudent. (Vous avez oublié de déclarer I comme variable locale avant de l'utiliser comme variable de boucle? Pas de problème, on va juste choisir au hasard une table, prendre son enregistrement actuel, et complètement détruire un champ choisi arbitrairement dont le nom commence par I !)

    Puis ajouter dans le fait que accidentel champ par défaut l'accès pourrait changer la portée qu'il a deviné pour vos tables, cassant ainsi un morceau de code complètement sans rapport. Amusant, oui?

    ils ont aussi un système de rapport intégré dans la langue, mais j'ai apparemment réprimé tous les souvenirs de lui.

    quand J'ai eu un autre travail avec Netscape LiveWire (une tentative ratée de JavaScript côté serveur) et classic ASP (VBScript), j'étais au paradis.

    28
    répondu Joe White 2009-06-07 17:27:04

    la pire langue? BancStar, baisse les mains.

    3 000 variables prédéfinies, toutes numérotées, toutes globales. Pas de déclaration de variable, pas d'initialisation. La moitié d'entre eux, dispersés dans la gamme, réservés à l'utilisation du système, mais vous pouvez les utiliser à vos risques et périls. Une centaine sont remplis automatiquement à la suite de diverses opérations, et aucune liste de ceux qui ce sont. Ils s'insèrent tous dans des octets de 38k, et il n'y a aucune protection quelle qu'elle soit pour le débordement de tampon. Système permettra joyeusement aux utilisateurs de mettre 20 octets dans un champ de dix octets si vous avez déclaré La longueur d'un champ d'entrée incorrectement. Les effets sont pour le moins imprévisibles.

    c'est une langue qui vous permettra de déclarer un gosub calculé ou goto; en raison de ses limites, cela est souvent nécessaire. Des conditions peuvent être déclarés avant ou arrière. Imaginez une instruction" Si " qui termine 20 lignes avant qu'elle ne commence.

    la pile de retour est très peu profonde, (20 Gosubs ou ainsi) et puisque la pression d'un utilisateur de n'importe quelle touche de fonction déclenche un sous-programme différent, vous pouvez dépasser la pile facilement. Les concepteurs ont soigneusement inclus une commande" Gosubs clair " pour atomiser la pile complètement afin de résoudre ce problème et de s'assurer que vous ne sauriez jamais exactement ce que le programme ferait ensuite.

    il y a beaucoup plus. Des dizaines de milliers de lignes de cette horreur lovecraftienne.

    28
    répondu R Ubben 2009-06-08 03:11:13

    Le .Fichiers bat scripting langue sous DOS/Windows. Dieu seul sait à quel point celui-ci n'est pas puissant, surtout si vous le comparez aux langages de shell Unix (qui ne sont pas si puissants non plus, mais bien meilleurs tout de même).

    il suffit d'essayer de concaténer deux cordes ou de faire un pour boucle. Nah.

    23
    répondu Gabriele D'Antona 2009-06-07 19:24:34

    VSE, Le Logiciel Visuel de l'Environnement.

    C'est un langage qu'un de mes profs ( Dr.Henry Ledgard ) a essayé de nous vendre à l'Université. (Je ne me sens pas mal de donner son nom parce que, autant que je peux dire, il est toujours un grand promoteur et serait heureux de la chance de convaincre certaines personnes que c'est la meilleure chose depuis le pain tranché). En le décrivant aux gens, Ma meilleure analogie est que c'est une sorte d'enfant bâtard de FORTRAN et COBOL, avec un extra mauvais jeté dans. Du seulement le dossier VRAIMENT accessible j'ai trouvé avec ce matériel (il y a beaucoup plus là-dedans que je ne vais pas lier spécifiquement ici):

    VSE est construit autour de ce qu'ils appellent Le "Principe de Séparation". L'idée est que les Données et le Comportement doivent être complètement séparés. Imaginons l'exigence de C que toutes les variables / données doivent être déclarées au début de la fonction, sauf maintenant, déplacez cette déclaration dans un fichier séparé que d'autres fonctions peuvent aussi bien utiliser. Lorsque d'autres fonctions l'utilisent, elles utilisent les mêmes données, pas une copie locale de données avec la même mise en page.

    Pourquoi faire les choses de cette façon? Nous apprenons que de les survivants du logiciel que règles de portée Variable sont difficiles. j'inclurais une citation mais, comme la plupart des idiots, il faut une éternité à ces gars pour dire n'importe quoi. Cherchez dans ce PDF le "bourbier de la portée" et vous découvrirez une véritable illumination.

    ils continuent à prétendre que cela le rend en quelque sorte plus adapté aux environnements multi-proc car il modélise plus étroitement l'implémentation matérielle sous-jacente. Riiiight.

    un autre thème de choix qui revient fréquemment:

    INCREMENT DAY COUNT BY 7 (or DAY COUNT = DAY COUNT + 7)
    DECREMENT TOTAL LOSS BY GROUND_LOSS
    ADD 100.3 TO TOTAL LOSS(LINK_POINTER)
    SET AIRCRAFT STATE TO ON_THE_GROUND
    PERCENT BUSY = (TOTAL BUSY CALLS * 100)/TOTAL CALLS
    

    bien que non earthshaking, le style de l'arithmétique reflète ordinaire utilisation, c'est à dire, tout le monde peut lire et comprendre - sans le savoir une programmation langue. En fait, VisiSoft arithmétique est pratiquement identique à FORTRAN, y compris l'arithmétique complexe intégrée. Cela met les programmeurs concernés par leur statut professionnel et les sécurité de l'emploi correspondante facilité.

    Ummm, pas tant que ça, vraiment. Un des points de vente clés que Bill Cave utilise pour essayer de vendre VSE est la démocratisation de la programmation de sorte que les gens d'affaires n'ont pas besoin de se lier à des programmeurs qui utilisent des outils fous et obscurs dans le seul but de la sécurité de l'emploi. Il utilise cette peur irrationnelle pour vendre son outil. (Et ça marche-- le gouvernement fédéral est son plus gros client). J'ai compté 17 utilisations de l'expression "sécurité de l'emploi" dans le document. Exemples:

    • ... et adapté uniquement pour ceux qui désirent un emploi artificiel de sécurité .
    • Plus de faux sécurité de l'emploi ?
    • Est sécurité de l'emploi dépend de s'assurer que l'autre gars peut pas comprendre ce qui a été fait?
    • est sécurité d'emploi dépend du code complexe...?
    • L'une des forces les plus fortes affectant l'acceptation de la nouvelle technologie est la perception de son propre sécurité d'emploi .

    il utilise cette paranoïa pour créer un fossé entre les managers qui tiennent les cordons de la bourse et les techniciens qui ont la connaissance de reconnaître VSE pour la merde qu'il est. C'est comme ça qu'il le comprime dans les entreprises-- "vos techniciens disent que ça craint parce qu'ils ont peur que ça les rende obsolètes!"


    quelques citations supplémentaires de choix la vue d'ensemble de la documentation:

    une Autre conséquence de cette approche est-ce que les données sont mappées en mémoire sur un "Ce que Vous Voyez Est Ce que Vous Obtenez" base , et maintenu tout au long. Cela permet aux utilisateurs de déplacer un complet structure en chaîne de caractères dans un modèle qui décrit chaque personne de terrain. Plusieurs modèles peut être redéfini pour un stockage zone. Contrairement à C et d'autres langues, Les sous-structures peuvent être déplacées sans les problèmes de mauvais alignement dus à normes d'alignement des limites des mots.

    maintenant, je ne sais pas pour vous, mais je sais qu'une approche WYSIWYG à la disposition de la mémoire est au haut de ma liste de priorité quand il s'agit de choix de langue! Fondamentalement, ils ignorent les problèmes d'alignement parce que seuls les vieux langages qui ont été conçus dans les années 60 et 70 se soucient de l'alignement des mots. Ou quelque chose comme ça. Le raisonnement est faux. Il fait donc peu de sens pour moi que j'ai procédé à l'oublier presque immédiatement.

    il n'y a pas de types définis par l'utilisateur dans VSE. décision qui simplifie grandement le langue. Le gain d'une pratique point de vue est également très bien. VSE permet au concepteur et programmeur organiser un programme sur le même les lignes en tant que système physique modélisé. VSE permet aux structures d'être construit dans un facile à lire, logique hiérarchie d'attribut.

    génial! Types définis par l'utilisateur sont boiteux. Pourquoi voudrais-je quelque chose comme un InputMessage objet quand je peux avoir:

    LINKS_IN_USE INTEGER
    INPUT_MESSAGE
       1 ORIGIN             INTEGER
       1 DESTINATION        INTEGER
       1 MESSAGE
          2 MESSAGE_HEADER  CHAR 10
          2 MESSAGE_BODY    CHAR 24
          2 MESSAGE_TRAILER CHAR 10
       1 ARRIVAL_TIME       INTEGER
       1 DURATION           INTEGER
       1 TYPE               CHAR 5
    
    OUTPUT_MESSAGE CHARACTER 50
    

    vous pourriez regarder cela et penser, "Oh, c'est assez joliment formaté, si un peu old-school."De la vieille école qui est juste. Les espaces sont importants-- très significatif. Et redondant! Le 1 doit figurer dans la colonne 3. Le 1 indique qu'il est au premier niveau de la hiérarchie. Le nom du symbole doit figurer dans la colonne 5. Vos hiérarchies sont limitées à une profondeur de 9.

    D'accord, mais est-ce si terrible? Il suffit d'attendre:

    il est bien connu que pour lire texte, utilisation d'un texte conventionnel Haut / Bas le cas est plus lisible. VSE utilise tous les majuscules (sauf pour les commentaires). pourquoi? La littérature en psychologie est basé sur la prose. Programmes, tout simplement, ne sont pas prose. Les programmes sont plus comme les maths, de la comptabilité, de tables. Les polices de programme (habituellement par messagerie) sont presque universellement à espacement fixe, et pour de bon raison-alignement vertical entre lignes de code connexes. programmes en les majuscules sont bien lisibles, et, après un moment, beaucoup mieux dans notre avis

    rien de tel que de faire respecter votre opinion au niveau linguistique! C'est vrai, vous ne pouvez pas utiliser de minuscules dans VSE à moins que ce ne soit dans un commentaire. Garde tes capuchons, ça va rester là un moment.

    les sous-procédures VSE sont appelées processus. Cet échantillon de code contient trois processus:

    PROCESS_MUSIC
        EXECUTE INITIALIZE_THE_SCENE
        EXECUTE PROCESS_PANEL_WIDGET
    
    INITIALIZE_THE_SCENE
        SET TEST_BUTTON PANEL_BUTTON_STATUS TO ON
        MOVE ' ' TO TEST_INPUT PANEL_INPUT_TEXT
        DISPLAY PANEL PANEL_MUSIC
    
    PROCESS_PANEL_WIDGET
        ACCEPT PANEL PANEL_MUSIC
    
    *** CHECK FOR BUTTON CLICK
        IF RTG_PANEL_WIDGET_NAME IS EQUAL TO 'TEST_BUTTON'
           MOVE 'I LIKE THE BEATLES!' TO TEST_INPUT PANEL_INPUT_TEXT.
        DISPLAY PANEL PANEL_MUSIC
    

    tous les capuchons prévus. Après tout, c'est plus facile à lire. Remarque l'espace. Il est important de nouveau. Tous les noms de processus doivent commencer dans la colonne 0. Initial le niveau des instructions doit commencer à la colonne 4. Les niveaux plus profonds doivent être indentés exactement 3 espaces. Ce n'est pas grand chose, cependant, parce que vous n'êtes pas autorisé à faire des choses comme les conditionnels de nid. Tu veux une conditionnelle imbriquée? Eh bien, faites un autre processus et appelez-le. Et notez la syntaxe delicious COBOL-esque!

    vous voulez des boucles? Facile:

    EXECUTE NEXT_CALL
    EXECUTE NEXT_CALL 5 TIMES
    EXECUTE NEXT_CALL TOTAL CALL TIMES
    
    EXECUTE NEXT_CALL    UNTIL NO LINES ARE AVAILABLE
    EXECUTE NEXT_CALL    UNTIL CALLS_ANSWERED ARE EQUAL TO CALLS_WAITING
    EXECUTE READ_MESSAGE UNTIL LEAD_CHARACTER IS A DELIMITER
    

    Ugh.

    23
    répondu Greg D 2017-05-23 12:18:19

    Voici la contribution à ma propre question:

    Origine LabTalk

    mon préféré de tous les temps à cet égard est origine LabTalk . Dans LabTalk la longueur maximale d'un identificateur de variable de chaîne est un caractère. Autrement dit, il n'y a que 26 variables de chaîne de caractères. Pire encore, certains d'entre eux sont utilisés par Origine elle-même, et il n'est pas clair.

    du manuel:

    LabTalk utilise la notation % pour définir une variable de chaîne. Juridique de la chaîne nom de la variable doit être un caractère % suivi d'un seul caractère alphabétique caractère (une lettre de A à Z). Chaîne les noms de variables sont caséinsensible. De toutes les 26 cordes variables qui existent, origine elle-même utilisations 14.

    Portes DXL

    pour moi le deuxième le pire à mon avis est Doors DXL . Les langages de programmation peuvent être divisés en deux groupes: Ceux avec gestion manuelle de la mémoire (par exemple supprimer, gratuit) et ceux avec un collecteur d'ordures. Certaines langues offrent les deux, mais DXL est probablement la seule langue au monde qui prend en charge ni. OK, pour être honnête c'est seulement vrai pour les cordes, mais hey, les cordes ne sont pas exactement le type de données le plus rarement utilisé dans les logiciels d'ingénierie des exigences.

    le la conséquence est que la mémoire utilisée par une chaîne de caractères ne peut jamais être récupérée et PORTES DXL des fuites comme tamis.

    il y a d'innombrables autres bizarreries dans DXL, pour n'en citer que quelques-unes:

    22
    répondu Ludwig Weinzierl 2017-05-23 12:26:24

    La Fusion Froide

    je suppose que c'est bon pour les designers, mais en tant que programmeur, j'ai toujours eu l'impression qu'une main était attachée derrière mon dos.

    21
    répondu Ken Burkhardt 2009-06-10 13:06:38

    les deux langues les plus mauvaises avec lesquelles j'ai travaillé étaient APL, qui est relativement bien connu pour les langues de son âge, et TECO, la langue dans laquelle L'Emacs original a été écrit. Les deux sont remarquables pour leur syntaxe terse et impénétrable.

    APL est un langage de traitement de tableau; il est extrêmement puissant, mais presque impossible à lire, puisque chaque caractère est un opérateur, et beaucoup n'apparaissent pas sur les claviers standard.

    TECO avait une apparence similaire, et pour une raison similaire. La plupart des caractères sont des opérateurs, et ce langage spécial a été consacré à l'édition de fichiers texte. C'était un peu mieux, puisqu'il utilisait le jeu de caractères standard. Et il avait la capacité de définir des fonctions, ce qui a donné vie à emacs--les gens ont écrit des macros, et ne les ont invoquées qu'après un certain temps. Mais comprendre ce qu'un programme a fait ou en écrire un nouveau a été tout un défi.

    20
    répondu PanCrit 2009-06-07 16:35:56
    HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
    KTHXBYE
    

    sérieusement, le pire langage de programmation jamais utilisé est celui des Makefiles. Totalement incompréhensible, les onglets ont une signification syntaxique et même pas un débogueur pour savoir ce qui se passe.

    19
    répondu Tobias 2009-06-07 16:26:19

    Je ne suis pas sûr que vous vouliez inclure les langages de script, mais J'ai vu TCL (ce qui est aussi ennuyeux), mais... le mIRC scripting language m'agace sans fin.

    à cause d'une erreur dans l'analyse, c'est un espace significatif quand il n'est pas censé l'être. Les déclarations conditionnelles seront parfois exécutées quand elles sont censées être sautées à cause de cela. L'ouverture d'une instruction de bloc ne peut pas être faite sur une ligne séparée, etc.

    D'autre part, il est tout simplement plein de désordre, la syntaxe incohérente qui a probablement été conçu de cette façon pour rendre les choses très basique facile, mais en même temps rend tout un peu plus complexe à peine lisible.

    j'ai perdu la plupart de mes scripts de mIRC, ou j'aurais probablement pu trouver quelques bons exemples de l'horrible désordre qu'il vous force à créer: (

    19
    répondu Thorarin 2009-06-07 18:52:34

    Visual Foxpro

    18
    répondu Arnis Lapsa 2009-06-07 14:20:32

    expressions régulières

    c'est une langue écrite seulement, et il est difficile de vérifier si cela fonctionne correctement pour les bonnes entrées.

    18
    répondu oɔɯǝɹ 2009-06-07 19:08:40

    je ne peux pas croire que personne n'a dit ceci:

    LotusScript

    je pense que c'est bien pire que php au moins.

    ne concerne pas le langage lui-même qui suit une syntaxe similaire à Visual Basic, est le fait qu'il semble avoir beaucoup de fonctions pour des choses extrêmement inutilisables que vous ne serez jamais (ou un sur un million de fois) utiliser, mais le manque de soutien pour les choses que vous utiliserez tous les jours.

    Je ne me souviens d'aucun exemple concret mais ils étaient comme:

    " Ok, j'ai un événement pour vérifier si le pointeur de la souris est dans le coin supérieur du formulaire et je n'ai pas un événement de double clic pour le formulaire!!?? WTF??"

    17
    répondu Jorge Córdoba 2009-06-08 11:57:06

    deux fois j'ai dû travailler dans des "langues" où vous glissez-n-drop modules sur la page et les lient ensemble avec des lignes pour montrer le flux de données. (L'un prétendait être un SGBDR, et l'autre un langage d'acquisition de données à usage général et de chiffrement.)

    rien que d'y penser, ça me donne envie d'étrangler quelqu'un. Ou vomir. Ou les deux.

    pire, ni l'un ni l'autre n'a exposé un langage de texte que vous pourriez pirater directement.

    17
    répondu dmckee 2009-06-09 13:32:36

    je me trouve éviter d'avoir à utiliser VBScript/Visual Basic 6 le plus.

    j'utilise principalement C++, javascript, Java pour la plupart des tâches et dabble dans ruby, scala, erlang, python, assembleur, perl quand le besoin se présente.

    comme la plupart des autres polyglottes/programmeurs raisonnablement pensants, je pense fortement que vous devez utiliser le bon outil pour le travail - cela exige que vous compreniez votre domaine et de comprendre vos outils.

    mon problème avec VBscript et VB6 est quand je les utilise pour script windows ou applications de bureau (le bon domaine pour eux) - je me retrouve à lutter avec la langue (ils sont loin d'être le bon outil).

    l'absence de VBScript de structures de données natives faciles à utiliser (telles que les conteneurs associatifs/cartes) et autres bizarreries (telles que l'ensemble pour l'affectation aux objets) est une gêne inutile et frustrante, en particulier pour un langage de script. Contraste il avec Javascript (que j'utilise maintenant pour programmer windows wscript/cscript et faire des scripts d'automatisation activex) qui est beaucoup plus expressif. Bien qu'il y ait certaines choses qui fonctionnent mieux avec vbscript( comme passer des tableaux de va-et-vient à partir D'objets COM est légèrement plus facile, bien qu'il soit plus facile de passer des gestionnaires d'événements dans les composants COM avec jscript), je suis toujours surpris par la quantité de codeurs qui utilisent encore vbscript pour script windows - je parie qu'ils ont écrit le même programme dans les deux langues ils constateront que jscript fonctionne avec vous bien plus que vbscript, à cause des types de données de hachage et des fermetures natives de jscript.

    Vb6 / VBA, bien qu'un peu mieux que vbscript en général, a encore beaucoup de problèmes similaires où (pour leur domaine) ils exigent beaucoup plus chaudière Plaque pour faire des tâches simples que ce que je voudrais et ai vu dans d'autres langues de script.

    17
    répondu Faisal Vali 2011-12-10 16:36:28

    en plus de 25 ans de programmation informatique, de loin la pire chose que j'ai jamais vécue était un dérivé D'oreillons appelé Meditech Magic. C'est bien plus maléfique que PHP ne pourrait jamais espérer l'être.

    il n'utilise même pas ' = ' pour assignation! 100^b assigne une valeur de 100 à b et est lu comme "100 va à b". Fondamentalement, ce langage inventé sa propre syntaxe de haut en bas. Donc peu importe le nombre de langages de programmation que vous connaissez, la magie sera un mystère complet pour vous.

    voici 100 bouteilles de bière sur le Mur écrit dans cette abomination d'une langue:

    BEERv1.1,
    100^b,T("")^#,DO{b'<1 NN(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall")^#,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer!")^#,
                              N("You take one down, pass it around,")^#,b-1^b,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall!")^#},
    END;
    
    16
    répondu 17 of 26 2009-06-09 13:46:00

    TCL. Il ne compile du code que juste avant qu'il n'exécute, il est donc possible que si votre code n'a jamais descendu la branche a pendant les tests, et un jour, dans le champ il descend la branche A, il pourrait avoir une erreur de syntaxe!

    16
    répondu dicroce 2009-06-14 01:23:20