web-dev-qa-db-fra.com

Quel est le pire langage de programmation avec lequel vous ayez travaillé?

Si vous avez une histoire intéressante à partager, veuillez poster une réponse , mais n'abusez pas de cette question pour dénigrer une langue.


Nous sommes des programmeurs et notre principal outil 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 avec lesquels vous avez travaillé et je ' J'aimerais savoir exactement ce qui vous a ennuyé.

Je voudrais collecter ces histoires en partie pour éviter les pièges courants lors de la conception d'une langue (en particulier une DSL) et en partie pour éviter les langues originales à l'avenir en général.


Cette question n'est pas subjective . Si une langue ne prend en charge que des identificateurs à un seul caractère (voir ma propre réponse ) c'est mauvais de manière non discutable .


[~ # ~] modifier [~ # ~]

Certaines personnes ont dit craindre que cette question n'attire les trolls. En parcourant toutes vos réponses, une chose était claire. La grande majorité des réponses est appropriée, utile et bien écrite.

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

L'aperçu des langues est maintenant terminé, couvrant 103 langues différentes à partir de 102 réponses. J'ai décidé d'être laxiste sur ce qui compte comme langage de programmation et j'ai inclus tout ce qui était raisonnable. Merci David pour vos commentaires à ce sujet.

Voici tous les langages de programmation couverts jusqu'à présent (ordre alphabétique, lié à la réponse, nouvelles entrées en gras):

ABAP , toutes les langues du 20e siècle , toutes les langues par glisser-déposer , toutes propriétaires langues , APF , APL (1) , AS4 , Authorware , Autohotkey , BancaStar , BASIQUE , Bourne Shell , Brainfuck , C++ , Développeur de l'équipe Centura , Cobol(1) , Cold Fusion , Coldfusion , CRM114 , Crystal Syntax , CSS , Dataflex 2. , DB/c DX , dbase II , DCL , Delphi IDE , Doors DXL , DOS batch(1) , langage de macro Excel , FileMaker , FOCUS , Forth =, FORTRAN , FORTRAN 77 , [[# # ~] html [~ # ~] , lame Web Illustra , Langage Informix 4e génération , lame Web Informix Universal Server , INTERCAL , Java , JavaScript(1) , JCL (1) , karol , LabTalk , Labview , Lingo , LISP , Logo , LOLCODE , LotusScript , m4 , Magic II , Makefiles , MapBasic , MaxScript , Meditech Magic =, MEL , Script mIRC , MS Access , OREILLONS , Oberon , extensions d'objet à C , Objective-C , OPS5 , Oz , Perl(1) , PHP , PL/SQL =, PowerDynamo , PROGRESS 4GL , prova , PS-FOCUS , Python , Expressions régulières , [~ # ~] rpg [~ # ~] , RPG II , Scheme , ScriptMaker , sendmail.conf , Smalltalk , Smalltalk , SNOBOL , SpeedScript , Sybase PowerBuilder , Symbian C++ =, System RPL , TCL , TECO , L'environnement logiciel visuel , Tiny praat , TransCAD , troff , Basic , - VB6(1) , VBScript(1) , VDF4 , Vimscript , Visual Basic - (1) , Visual C++ , Visual Foxpro , VSE , Webspeed =, XSLT

Les réponses concernant l'assembleur 80386, VB6 et VBScript ont été supprimées.

44
Ludwig Weinzierl

PHP (sans ordre particulier)

  • Noms de fonctions et ordres d'arguments incohérents
    • Parce qu'il existe une multitude de fonctions, dont chacune semble utiliser une convention de dénomination et un ordre d'arguments différents. "Voyons ... est-ce foo_bar ou foobar ou fooBar ... et est-ce aiguille, meule de foin ou meule de foin, aiguille ?" Les fonctions de chaîne PHP en sont un parfait exemple. La moitié d’entre elles utilisent str_foo et l’autre moitié utilisent strfoo .
  • Caractères de format de date non standard
    • Prenez j par exemple
      • In UNIX (qui, soit dit en passant, est ce que tout le monde utilise comme guide pour les formats de chaînes de date) %j renvoie le jour de l'année avec des zéros en tête.
      • Dans la fonction date de PHP 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 cela n'est-il pas pris en charge? "Lorsque vous complexifiez le framework sous-jacent en ne disposant pas de threads d'exécution complètement séparés, de segments de mémoire complètement séparés et d'un bac à sable solide pour chaque requête, des pieds d'argile sont introduits dans le système PHP." Link Alors ... ce n'est pas pris en charge car cela rend les choses plus difficiles? Parce que seules les choses faciles valent le coup? (Pour être juste, comme Emil H l'a souligné, cela est généralement attribué aux mauvaises bibliothèques tierces qui ne sont pas thread-safe, alors que le noyau de PHP l'est). )
  • Pas de support Unicode natif
    • Le support natif Unicode 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 à des gens dans d'autres langues par le passé, oh 18 ans . Oh, attendez (Pour être honnête, le fait que tout n'utilise pas Unicode de nos jours m'agace vraiment. Mon point est que je ne devrais pas avoir à faire de travail supplémentaire pour que Unicode se produise. Ce n'est pas seulement a PHP.)

J'ai d'autres boeuf avec la langue. Ce ne sont que quelques-uns. Jeff Atwood a un ancien article sur pourquoi PHP suce. Il dit aussi que cela n'a pas d'importance. Je ne suis pas d'accord mais nous y sommes.

212
baudtack

XSLT.

  • XSLT est déroutant, 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ément entre parenthèses qu'il se présente comme un bizarre frankenstein.
  • Les incantations étranges nécessaires pour spécifier le format de sortie.
  • Les règles intégrées et invisibles.
  • Les trucs bizarres à boulonner, comme les scripts.
  • La dépendance à XPath.
  • Le support des outils a été assez mince, jusqu'à récemment. Déboguer XSLT au début était un exercice de navigation dans l'obscurité totale. Les outils changent cela, mais XSLT est toujours en tête de liste.

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

101
Cheeso

Fichiers batch DOS. Je ne sais pas si cela peut être qualifié de langage de programmation. Ce n'est pas que vous ne pouvez pas résoudre vos problèmes, mais si vous avez l'habitude de bash...

Juste mes deux cents.

96
bbuser

Je ne sais pas si c'est une vraie langue, mais je déteste les Makefiles.

Les Makefiles ont des différences significatives entre l'espace et TAB, donc même si deux lignes semblent identiques, elles ne s'exécutent pas de la même manière.

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

Un système Makefile est généralement réparti sur de nombreux fichiers, sur de nombreux répertoires. Sans pratiquement aucune portée ou abstraction, une modification d'un fichier make à plusieurs répertoires peut empêcher ma source de se construire. Pourtant, le message d'erreur est invariablement une erreur de complication, pas une erreur significative sur make ou les makefiles.

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

92
abelenky

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

Tiny praat script tutorial for beginners

  • Appel de fonction

    Nous avons répertorié au moins 3 syntaxes d'appel de fonction différentes:
    • Le régulier

      string = selected("Strings")

      Rien de spécial ici, vous affectez à la chaîne variable le résultat de la fonction sélectionnée. Pas vraiment effrayant ... pour le moment.

    • Le "J'appelle une commande GUI avec des paramètres"

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

      Comme vous pouvez le voir, le nom de la fonction commence par "Créer" et se termine par "...". La commande "Créer des chaînes comme liste de fichiers" 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 approfondir l'expression 'path$'/'type$'

      Hmm. Oui. Sans espaces. Si des espaces étaient introduits, ce serait des arguments séparés. Comme vous pouvez l'imaginer, les parenthèses ne fonctionnent pas. À ce stade de la description, je voudrais souligner le suffixe des noms de variables. Je ne vais pas le développer dans ce paragraphe, je ne fais que taquiner.

    • Le "Oh, mais je veux obtenir le résultat de la commande GUI dans ma variable"

      noliftt = Get number of strings
      Oui, nous pouvons voir un modèle ici, un nom de fonction long et étrange, ce doit être un appel GUI. Mais il n'y a pas de "..." donc pas de paramètres. Je ne veux pas voir à quoi ressemble l'analyseur.
  • L'incroyable système de caractères

    (AKA Haskell et OCaml, praat vient à vous)
    • Types indigènes simples

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

      Alors, qu'est-ce qui se passe là-bas? Il est maintenant temps de regarder la convention et les types d'expression, alors voici:

      • left $ :: (String, Int) -> String
      • lenght :: (String) -> Int
      • windowname $ :: String
      • ligne $ :: String
      Comme vous pouvez le voir, les noms de variable et de fonction sont suffixés avec leur type ou type de retour. Si leur suffixe est un "$", alors il renvoie une chaîne ou est une chaîne. S'il n'y a rien, c'est un chiffre. Je peux voir l'intérêt de préfixer le type à une variable pour faciliter l'implémentation, mais au suffixe, non désolé, je ne peux pas
    • Type de tableau

      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
          

      Nous avons eu i qui est un nombre et ... (non ce n'est pas une fonction)
      bandwidth'i'$
      Il crée des variables de chaîne: bandwidth1$, bandwidth2$, bandwidth3$, bandwidth4$ Et leur donne des valeurs. Comme vous pouvez vous y attendre, vous ne pouvez pas créer un tableau bidimensionnel de cette façon, vous devez faire quelque chose comme ça: band2D__'i'__'j'$

      http://img214.imageshack.us/img214/3008/scaredkittylolqa2.jpg
    • L'invocation de chaîne spéciale

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

      Les chaînes sont étrangement (au moins) gérées dans la langue. le '' est utilisé pour appeler la valeur d'une variable à l'intérieur de la chaîne globale "". C'est bizarre . Cela va à l'encontre de toutes les conventions construites dans de nombreux langages de bash à PHP en passant par le powershell. Et regardez, il a même été redirigé. Ne soyez pas dupe, cela ne fonctionne pas comme dans votre Shell bien-aimé. Non, vous devez obtenir la valeur de la variable avec le ''

    • Modèle d'exécution Da Wonderderderfulful

      Je vais mettre la touche finale à cette merveilleuse présentation en vous parlant du modèle d'exécution. Donc, comme dans tous les langages procéduraux, les instructions sont exécutées de haut en bas, il y a les variables et l'interface graphique praat. C'est-à-dire que vous codez tout sur le praat gui, vous invoquez des commandes écrites sur le menu/boutons.

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

      • des dossiers
      • liste des fichiers (créés par une fonction avec un long nom merveilleux)
      • Spectrogramme
      • Cordes (ne demandez pas)
      Donc, si vous souhaitez effectuer une opération sur un fichier donné, vous devez sélectionner le fichier dans la liste par programme, puis appuyer sur les différents boutons pour effectuer certaines actions. Si vous vouliez passer des paramètres à une action GUI, vous devez suivre la disposition GUI du formulaire pour vos arguments, par exemple "To Spectrogram... 0.005 5000 0.002 20 Gaussian" Est comme ça car il suit cette disposition:

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

    Inutile de dire que mes cauchemars sont remplis de scripts praat dansant autour de moi et criant "DEBUG MEEEE !!".

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

  • 79

    Eh bien, puisque cette question refuse de mourir et que le PO m'a poussé à répondre ...

    Je profite humblement de votre considération Authorware (AW) comme le pire langage qu'il soit possible de créer. (n.b. Je me souviens bien ici, cela 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'horreur http://img.brothersoft.com/screenshots/softimage/a/Adobe_authorware-67096-1.jpeg

    Commençons par le fait que c'est un produit Macromedia (-10 points), un langage propriétaire (-50 de plus) principalement destiné à la création de logiciels d'e-learning et en plus de logiciels qui pourraient être créés par non-programmeurs et programmeurs implémenté comme un langage iconique ET un langage texte (-100).

    Maintenant, si cette dernière instruction ne vous a pas effrayé, vous n'avez pas eu à corriger le code généré par WYSIWYG auparavant (bonjour Dreamweaver et Frontpage devs!), Mais le point saillant est qu'AW avait une bibliothèque d'environ 12 éléments qui pourraient être traîné dans un flux. Comme les éléments "Page", les animations, IFELSE et [~ # ~] goto [~ # ~] (-100). Bien sûr, la suppression d'objets du flux a créé un nombre illimité de connexions et d'artefacts avec lesquels les IDE avaient des niveaux de réussite variables). Naturellement, les assistants intégrés (-10) en étaient une source majeure.

    Heureusement, vous pouvez toujours entrer dans une vue de code, et finalement vous devrez le faire car avec un ensemble limité d'éléments emblématiques, certaines choses n'étaient tout simplement pas possibles autrement. Le langage lui-même était basé sur TUTOR (-50) - un candidat pour le pire langage lui-même si seulement il avait l'ambition et la portée d'atteindre les profondeurs qu'AW s'efforcer de - à propos de laquelle wikipedia dit:

    ... la langue TUTOR n'était pas facile à apprendre. En fait, il a même été suggéré que plusieurs années d'expérience avec le langage seraient nécessaires avant que les programmeurs puissent créer des programmes qui méritent d'être conservés.

    Une excellente fondation alors, qui a été construite dans les années précédant l'essor d'Internet avec exactement rien. Absolument aucune forme de structure de données au-delà d'un tableau (-100), certainement pas de sucre (les vrais hommes n'utilisent pas les instructions switch?) (-10), et une grande éclaboussure de vinaigre syntaxique ("-" était l'indicateur de commentaire donc pas d'opérateur de décrémentation pour vous!) (-10). La documentation de référence de la langue a été fournie sous forme papier ou Fichier Zip (-100), mais au moins vous aviez le soutien du groupe d'utilisateurs utilisé par les développeurs et pouviez rapidement établir la solution à votre problème était d'utiliser les fonctionnalités d'import DLL ou SWF d'importation d'AW pour vous permettre de faire le codage réel dans une langue réelle.

    AW était piloté par un flux (avec les commandes PAUSE nécessaires) et a donc tous les problèmes associés d'un système linéaire plutôt qu'événementiel (-50), et malgré les mensonges marketing de la documentation, elle n'était pas orientée objet (-50) non plus. Tous la réutilisation du code a été réalisée via GOTO. Pas de portée, beaucoup de globales (-50).

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

    Bien sûr, Macromedia a relevé le défi de l'Internet avec un refus obstiné de s'engager pendant des années, produisant finalement le buggy, difficile à utiliser, cauchemar de sécurité qui est Shockwave (-100) pour sérialiser essentiellement les versions de bureau du logiciel via un plug-in requis (-10). Au fur et à mesure que le HTML augmentait, AW stagnait, persistant toujours avec sa livraison par ondes de choc même face aux normes IEEE SCORM javascript.

    Finalement, après des années de mendicité et de promesses, Macromedia a annoncé une nouvelle version radicale d'AW en développement pour résoudre ces problèmes, et quelques années plus tard, a délocalisé le développement, puis a annulé le projet. Bien sûr Macromedia le vend toujours (EVIL BONUS -500).

    Si autre chose doit être dit, c'est le langage qui autorise les espaces dans les noms de variables (-10000).

    Si jamais vous voulez ressentir une vraie douleur, essayez de lire la notation hongroise non commentée de quelqu'un d'autre dans une langue qui ne respecte pas la casse et autorise les espaces de noms variables.


    Score total Annakata arbitraire (AAS): -11300
    Ajusté pour l'expérience personnelle: OutOfRangeException

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

    74
    annakata

    Sérieusement: Perl. C'est juste une douleur dans le cul de coder avec pour les débutants et même pour les semi-professionnels qui travaillent quotidiennement avec Perl. Je peux constamment voir mes collègues lutter avec la langue, construire les pires scripts, comme 2000 lignes sans aucun standard de codage bien accepté. C'est le pire gâchis que j'ai jamais vu en programmation. Maintenant, vous pouvez toujours dire que ces gens sont mauvais en codage (malgré le fait que certains d'entre eux utilisent Perl depuis de nombreuses années, maintenant), mais le langage encourage juste toute cette merde flippante qui me fait crier quand j'ai pour lire un script par un autre gars.

    68
    buster

    MS Access Visual Basic pour Applications (VBA) était également assez mauvais. L'accès était mauvais dans la mesure où il vous obligeait à adopter un paradigme faible et était d'une simplicité trompeuse pour commencer, mais un cauchemar pour finir.

    43
    John MacIntyre

    Les BASIC à l'ancienne avec des numéros de ligne seraient mon choix. Lorsque vous n'aviez pas d'espace entre les numéros de ligne pour ajouter de nouvelles lignes, vous deviez exécuter un utilitaire de renumérotation, ce qui vous faisait perdre toutes les ancres mentales que vous aviez à ce qui se trouvait.

    En conséquence, vous avez fini par serrer trop de déclarations sur une seule ligne (séparées par des deux-points), ou vous avez fait un goto ou un gosub ailleurs pour faire le travail que vous ne pouviez pas entasser.

    40
    Nosredna

    Pas encore de réponse sur Cobol? : O

    40
    Joril

    OREILLONS

    J'y ai travaillé pendant quelques années, mais j'ai effectué un vidage cérébral complet depuis lors. Tout ce dont je me souviens vraiment, c'est qu'il n'y avait pas de documentation (chez moi) et de commandes cryptiques.

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

    38
    dna123

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

    Bjarne Stroustrup

    37
    Dinah

    Je n'ai pas encore travaillé avec de nombreux langages et je m'occupe principalement de langages de script; parmi ceux-ci VBScript est celui que j'aime le moins. Bien qu'il ait quelques fonctionnalités pratiques, certaines choses me font vraiment chier:

    • Les affectations d'objets sont effectuées à l'aide du mot clé Set:

      Set foo = Nothing
      

      L'omission de Set est l'une des causes les plus courantes d'erreurs d'exécution.

    • Rien de tel que la gestion structurée des exceptions. La 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
      
    • La mise entre parenthèses des paramètres d'appel de procédure nécessite l'utilisation du mot clé Call:

      Call Foo (a, b)
      
    • Sa syntaxe de type anglais est beaucoup trop verbeuse. (Je suis un fan des accolades frisées.)

    • Les opérateurs logiques sont en circuit long. Si vous devez tester une condition composée où la condition suivante repose sur le succès de la précédente, vous devez placer les conditions dans des instructions If distinctes.

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

    • Pour encapsuler une instruction sur plusieurs lignes, vous devez utiliser un trait de soulignement:

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


    Edit: a trouvé cet article: The Flangy Guide to Hating VBScript . L'auteur résume ses plaintes comme "VBS n'est pas Python" :)

    34
    Helen

    Objectif c.

    Les annotations sont déroutantes, l'utilisation de crochets pour appeler des méthodes ne calcule toujours pas dans mon cerveau, et le pire est que toutes les fonctions de bibliothèque de C sont appelées à l'aide des opérateurs standard en C, -> et., Et il semble que le Apple est la seule entreprise qui gère cette langue.

    J'admets que je n'ai utilisé le langage que lors de la programmation pour l'iPhone (et la recherche dans la programmation pour OS X), mais il semble que le C++ soit simplement bifurqué, en ajoutant des annotations et en forçant la mise en œuvre et les fichiers d'en-tête à se séparer ferait beaucoup plus de sens.

    29
    John Bellone

    PROGRESS 4GL (apparemment maintenant appelé " OpenEdge Advanced Business Language ").

    PROGRESS est à la fois un langage et un système de base de données. L'ensemble du langage est conçu pour faciliter l'écriture d'écrans de saisie de données d'écran vert merdiques. (Alors commencez par imaginer à quel point cela se traduit par Windows.) Rien de plus sophistiqué que cela, que ce soit de jolis écrans, une logique de programme ou un traitement par lots ... pas tant.

    La dernière fois que j'ai utilisé la version 7, à la fin des années 90, il est vaguement possible qu'une partie de ce document soit obsolète, mais je ne parierais pas dessus.

    • Il a été initialement conçu pour les écrans de saisie de données en mode texte, donc sur Windows, toutes les coordonnées d'écran sont en unités de "caractères", qui ont un nombre étrange de pixels de large et un nombre différent de pixels de haut. Mais bien sûr, ils utilisent par défaut une police proportionnelle, donc le nombre d'unités de caractères ne correspond pas au nombre réel de - caractères qui conviendront un espace donné.
    • Pas de classes ou d'objets.
    • Pas de prise en charge linguistique pour les tableaux ou l'allocation dynamique de mémoire. Si vous voulez quelque chose qui ressemble à un tableau, vous créez une table de base de données en mémoire temporaire, définissez son schéma, puis obtenez un curseur dessus. (J'ai vu un peu de code d'une version ultérieure, où ils ont effectivement construit et expédié un système orienté objet primitif au-dessus de ces tables en mémoire. Effrayant.)
    • L'accès à la base de données ISAM est intégré. (Mais pas SQL. Qui en a besoin?) Si vous souhaitez incrémenter le champ Counter dans l'enregistrement en cours dans la table State, vous dites simplement State.Counter = State.Counter + 1. Ce qui n'est pas si mal, sauf ...
    • Lorsque vous utilisez une table directement dans le code, puis en arrière-plan, ils créent quelque chose ressemblant à une variable locale magique invisible pour maintenir la position actuelle du curseur dans cette table. Ils devinez à quel bloc contenant ce curseur sera délimité. Si vous ne faites pas attention, votre curseur disparaîtra lorsque vous quitterez un bloc, et se réinitialisera plus tard, sans avertissement. Ou vous commencerez à travailler avec une table et vous constaterez que vous ne commencez pas au premier enregistrement, car vous réutilisez le curseur d'un autre bloc (ou même le vôtre, car votre portée a été développée lorsque vous ne vous y attendiez pas il).
    • Les transactions opèrent sur ces étendues de devinettes. On s'amuse encore?
    • Tout peut être abrégé. Pour certains des mots clés offensivement longs, cela peut ne pas sembler si mauvais au premier abord. Mais si vous avez une variable nommée Index, vous pouvez vous y référer comme Index ou comme Ind ou même comme I. (Les typos peuvent avoir des résultats très intéressants.) Et si vous voulez 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 besoin de le qualifier avec le nom de la table; ils devineront aussi le tableau. Pour des résultats vraiment effrayants, combinez ceci avec:
    • Sauf indication contraire, ils supposent que tout est un accès à la base de données. Si vous accédez à une variable que vous n'avez pas encore déclarée (ou, plus probablement, si vous tapez mal le nom de la variable), il n'y a pas d'erreur de compilation: à la place, il va chercher un champ de base de données avec ce nom ... ou un champ qui abrège à ce nom.

    La supposition est la pire. Entre les abréviations et le champ par défaut, vous pourriez obtenir des choses désagréables si vous ne faisiez pas attention. (Vous avez oublié de déclarer I en tant que variable locale avant de l'utiliser en tant que variable de boucle? Pas de problème, nous allons simplement choisir au hasard une table, récupérer son enregistrement actuel et supprimer complètement un champ choisi arbitrairement dont le nom commence avec I!)

    Ajoutez ensuite le fait qu'un accès accidentel champ par défaut pourrait modifier la portée qu'il a deviné pour vos tables, brisant ainsi un morceau de code complètement indépendant. Du plaisir, oui?

    Ils ont également un système de rapport intégré dans la langue, mais j'en ai apparemment refoulé tous les souvenirs.

    Quand j'ai obtenu un autre travail avec Netscape LiveWire (une tentative malheureuse de JavaScript côté serveur) et classique ASP (VBScript), j'étais au paradis.

    28
    Joe White

    La pire langue? BancStar, haut la main.

    3000 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 sur toute la plage, sont réservés à l'utilisation du système, mais vous pouvez les utiliser à vos risques et périls. Une centaine sont automatiquement remplis à la suite de diverses opérations, et aucune liste de celles-ci. Ils tiennent tous dans 38k octets, et il n'y a aucune protection pour le débordement de tampon. Le système laissera joyeusement les utilisateurs mettre 20 octets dans un champ de dix octets si vous avez incorrectement déclaré la longueur d'un champ d'entrée. Les effets sont pour le moins imprévisibles.

    C'est un langage qui vous permettra de déclarer un gosub ou goto calculé; en raison de ses limites, cela est souvent nécessaire. Les conditions peuvent être déclarées en avant ou en arrière. Imaginez une instruction "If" qui termine 20 lignes avant de commencer.

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

    Il y a bien plus. Des dizaines de milliers de lignes de cette horreur Lovecraftienne.

    28
    R Ubben

    Le langage de script des fichiers. Bat sous DOS/Windows. Dieu sait seulement à quel point celui-ci est non puissant, surtout si vous le comparez aux langages Unix Shell (qui ne sont pas si puissants non plus, mais bien mieux néanmoins).

    Essayez simplement de concaténer deux chaînes ou de créer une boucle for. Non.

    23

    VSE, l'environnement logiciel visuel.

    C'est une langue qu'un de mes profs ( Dr. Henry Ledgard ) a essayé de nous revendre au lycée. (Je ne me sens pas mal de donner son nom parce que, pour autant que je sache, il est toujours un grand partisan et serait heureux de pouvoir convaincre certains que c'est la meilleure chose depuis le pain tranché). Quand je le décris aux gens, ma meilleure analogie est que c'est une sorte d'enfant bâtard de FORTRAN et COBOL, avec un peu de mal supplémentaire. Du seul 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. Imaginez l'exigence de C selon laquelle toutes les variables/données doivent être déclarées au début de la fonction, sauf maintenant déplacer cette déclaration dans un fichier séparé que d'autres fonctions peuvent également 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 disposition.

    Pourquoi faire les choses de cette façon? Nous apprenons que de The Software Survivors que Les règles de portée variable sont difficiles. J'inclurais une citation mais, comme la plupart des imbéciles, il faut une éternité à ces gars pour dire quoi que ce soit. Cherchez cela PDF pour "Quagmire Of Scope" et vous découvrirez de véritables Lumières.

    Ils continuent en affirmant que cela le rend plus adapté aux environnements multiprocessus 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 qu'il ne soit pas bouleversant, le style de l'arithmétique reflète l'utilisation ordinaire, c'est-à-dire que n'importe qui peut le lire et le comprendre - sans connaître un langage de programmation. En fait, l'arithmétique VisiSoft est pratiquement identique à FORTRAN, y compris l'arithmétique complexe intégrée. Cela met les programmeurs préoccupés par leur statut professionnel et la sécurité d'emploi correspondante mal à l'aise.

    Ummm, pas du tout concerné, vraiment. L'un des principaux arguments de vente que Bill Cave utilise pour essayer de vendre VSE est la démocratisation de la programmation afin que les hommes d'affaires n'aient pas besoin de se mettre en relation avec des programmeurs qui utilisent des outils fous et mystérieux dans le seul but de la sécurité de l'emploi. Il met à profit cette peur irrationnelle pour vendre son outil. (Et cela fonctionne - le gouvernement fédéral est son plus gros client). J'ai compté 17 utilisations de l'expression "sécurité d'emploi" dans le document. Exemples:

    • ... et ne convient qu'à ceux qui souhaitent une sécurité d'emploi artificielle .
    • Plus de fausses sécurité d'emploi ?
    • La sécurité d'emploi dépend-elle de s'assurer que l'autre type ne peut pas comprendre ce qui a été fait?
    • La sécurité d'emploi dépend-elle d'un code complexe ...?
    • L'une des forces les plus fortes affectant l'acceptation des nouvelles technologies est la perception de la sécurité de son emploi .

    Il utilise cette paranoïa pour creuser le fossé entre les gestionnaires qui détiennent les cordons de la bourse et les techniciens qui ont les connaissances nécessaires pour reconnaître VSE pour l'étron qu'il est. C'est ainsi qu'il le presse dans les entreprises - "Vos techniciens disent seulement que ça craint parce qu'ils ont peur que cela les rende obsolètes!"


    Quelques citations de choix supplémentaires dans la documentation de présentation:

    Une autre conséquence de cette approche est que les données sont mappées en mémoire sur la base de "ce que vous voyez est ce que vous obtenez" , et maintenues tout au long. Cela permet aux utilisateurs de déplacer une structure complète sous forme de chaîne de caractères dans un modèle décrivant chaque champ individuel. Plusieurs modèles peuvent être redéfinis pour une zone de stockage donnée. Contrairement à C et à d'autres langages, les sous-structures peuvent être déplacées sans les problèmes de désalignement dus aux normes d'alignement des limites de Word.

    Maintenant, je ne sais pas pour vous, mais je sais qu'une approche WYSIWYG de la disposition de la mémoire est au en haut de ma liste de priorité en ce qui concerne le choix de la langue! Fondamentalement, ils ignorent les problèmes d'alignement car seules les anciennes langues conçues dans les années 60 et 70 se soucient de l'alignement de Word. Ou quelque chose comme ça. Le raisonnement est faux. Cela avait si peu de sens pour moi que j'ai commencé à l'oublier presque immédiatement.

    Il n'y a pas de types définis par l'utilisateur dans VSE. Il s'agit d'une décision de grande portée qui simplifie considérablement la langue. Le gain d'un point de vue pratique est également important. VSE permet au concepteur et au programmeur d'organiser un programme de la même manière qu'un système physique en cours de modélisation. VSE permet de créer des structures dans une hiérarchie d'attributs logiques facile à lire.

    Impressionnant! Les types définis par l'utilisateur sont boiteux. Pourquoi voudrais-je quelque chose comme un objet InputMessage alors que 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 bien formaté, même si c'est un peu old-school." La vieille école a raison. L'espace est significatif - très significatif. Et redondant! Le 1 doit être dans la colonne 3. Le 1 indique que c'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.

    Eh bien, ok, mais est-ce si horrible? Attends:

    Il est bien connu que pour la lecture de texte, l'utilisation de majuscules/minuscules conventionnelles est plus lisible. VSE utilise tous les majuscules (sauf pour les commentaires). Pourquoi? La littérature en psychologie est basée sur la prose. Les programmes ne sont tout simplement pas de la prose. Les programmes sont plus comme les mathématiques, la comptabilité, les tableaux. Les polices de programme (généralement Courier) sont presque universellement à espacement fixe, et pour une bonne raison - alignement vertical entre les lignes de code liées. Les programmes en majuscules sont bien lisibles et, après un certain temps, beaucoup mieux à notre avis

    Rien de tel que de faire valoir votre opinion au niveau linguistique! C'est vrai, vous ne pouvez pas utiliser de minuscules dans VSE sauf si c'est dans un commentaire. Gardez simplement votre CAPSLOCK allumé, il va y rester coincé pendant un moment.

    Les sous-procédures VSE sont appelées processus. Cet exemple 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 caps comme prévu. Après tout, c'est plus facile à lire. Notez l'espace. C'est encore significatif. Tous les noms de processus doivent commencer dans la colonne 0. Le niveau initial d'instructions doit commencer dans la colonne 4. Les niveaux plus profonds doivent être mis en retrait exactement de 3 espaces. Ce n'est pas un gros problème, car vous n'êtes pas autorisé à faire des choses comme les conditions de nid. Vous voulez un conditionnel imbriqué? Eh bien, faites un autre processus et appelez-le. Et notez la syntaxe délicieuse 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
    

    Pouah.

    23
    Greg D

    Voici la contribution à ma propre question:

    LabTalk d'origine

    Mon favori de tous les temps à cet égard est Origin 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. Pire encore, certains d'entre eux sont utilisés par Origin lui-même, et on ne sait pas lesquels.

    Du manuel:

    LabTalk utilise la notation% pour définir une variable de chaîne. Un nom de variable de chaîne légale doit être un caractère% suivi d'un seul caractère alphabétique (une lettre de A à Z). Les noms de variables de chaîne sont sensibles à la casse. De toutes les 26 variables de chaîne existantes, Origin lui-même en utilise 14.

    Portes DXL

    Pour moi, le deuxième pire à mon avis est Portes DXL . Les langages de programmation peuvent être divisés en deux groupes: ceux avec une gestion manuelle de la mémoire (par exemple, supprimer, gratuit) et ceux avec un garbage collector. Certaines langues proposent les deux, mais DXL est probablement la seule langue au monde qui ne prend en charge ni l'un ni l'autre. OK, pour être honnête, cela n'est vrai que pour les chaînes, mais bon, les chaînes ne sont pas exactement le type de données le plus rarement utilisé dans les logiciels d'ingénierie des exigences.

    La conséquence est que la mémoire utilisée par une chaîne ne peut jamais être récupérée et DOORS DXL fuit comme un tamis.

    Il existe d'innombrables autres bizarreries dans DXL, pour n'en nommer que quelques-unes:

    22
    Ludwig Weinzierl

    Fusion froide

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

    21
    Ken Burkhardt

    Les deux pires langues avec lesquelles j'ai travaillé étaient APL, qui est relativement bien connue pour les langues de son âge, et TECO, la langue dans laquelle Emacs original a été écrit. Les deux se distinguent par leur syntaxe laconique et impénétrable.

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

    TECO avait un look 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, car il utilisait le jeu de caractères standard. Et il avait la capacité de définir des fonctions, ce qui donnait vie à emacs - les gens écrivaient des macros et ne les invoquaient qu'après un certain temps. Mais trouver ce qu'un programme a fait ou en écrire un nouveau a été un vrai défi.

    20
    PanCrit
     HAI 
     PEUT-IL AVOIR STDIO? 
     VISIBLE "HAI WORLD!" 
     KTHXBYE 
    

    Sérieusement, le pire langage de programmation de tous les temps est celui de Makefiles. Totalement incompréhensibles, les onglets ont une signification syntaxique et même pas un débogueur pour savoir ce qui se passe.

    19
    Tobias

    Je ne sais pas si vous vouliez inclure des langages de script, mais j'ai vu TCL (qui est aussi ennuyeux), mais ... le langage de script mIRC me dérange sans fin.

    En raison d'une certaine erreur dans l'analyse, les espaces sont importants lorsqu'ils ne sont pas censés l'être. Les instructions conditionnelles seront parfois exécutées lorsqu'elles sont censées être ignorées à cause de cela. L'ouverture d'une instruction de bloc ne peut pas se faire sur une ligne distincte, etc.

    En dehors de cela, il est juste plein de syntaxe désordonnée et incohérente qui a probablement été conçue de cette façon pour rendre les choses très basiques faciles, mais en même temps, tout ce qui est un peu plus complexe est à peine lisible.

    J'ai perdu la plupart de mes scripts mIRC, ou j'aurais probablement trouvé de bons exemples de ce désordre horrible qu'il vous oblige à créer :(

    19
    Thorarin

    Expressions régulières

    C'est une langue d'écriture uniquement, et il est difficile de vérifier si elle fonctionne correctement pour les bonnes entrées.

    18
    oɔɯǝɹ

    Je me retrouve à éviter d'utiliser VBScript/Visual Basic 6 le plus.

    J'utilise principalement C++, javascript, Java pour la plupart des tâches et je travaille en Ruby, scala, erlang, python, assembleur, Perl lorsque le besoin s'en fait sentir.

    Comme la plupart des autres polyglottes/programmeurs raisonnables, je pense fermement que vous devez utiliser le bon outil pour le travail - cela vous oblige à comprendre votre domaine et à comprendre vos outils.

    Mon problème avec VBscript et VB6, c'est quand je les utilise pour scripter des fenêtres ou des applications bureautiques (le bon domaine pour eux) - je me retrouve avec le langage (ils ne sont pas le bon outil).

    Le manque de VBScript de structures de données natives faciles à utiliser (telles que des conteneurs/cartes associatifs) et d'autres bizarreries (telles que définies pour l'affectation aux objets) est une gêne inutile et frustrante, en particulier pour un langage de script. Comparez-le avec Javascript (que j'utilise maintenant pour programmer des fenêtres 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 d'avant en arrière à partir d'objets COM est légèrement plus facile, bien qu'il soit plus facile de passer des gestionnaires d'événements dans des composants COM avec jscript), je suis toujours surpris par la quantité de codeurs qui utilisez toujours vbscript pour les fenêtres de script - Je parie que s'ils ont écrit le même programme dans les deux langues, ils trouveraient que jscript fonctionne bien plus que vbscript, en raison des types de données de hachage natifs et des fermetures de jscript.

    Vb6/VBA, bien qu'un peu mieux que vbscript en général, a encore de nombreux problèmes similaires où (pour leur domaine) ils nécessitent beaucoup plus de plaques de chaudière pour effectuer des tâches simples que ce que j'aimerais et que j'ai vu dans d'autres langages de script.

    17
    Faisal Vali

    Visual Foxpro

    17
    Arnis Lapsa

    Deux fois, j'ai dû travailler dans des "langues" où vous faites glisser des modules sur la page et les liez ensemble avec des lignes pour montrer le flux de données. (L'un prétendait être un RDBM, et l'autre un langage général d'acquisition de données et de calcul de nombres.)

    Le simple fait d'y penser me fait étrangler quelqu'un. Ou vomir. Ou les deux.

    Pire, aucun des deux n'a dévoilé une langue de texte que vous pourriez pirater directement.

    17
    dmckee

    Je ne peux pas croire que personne n'ait dit celui-ci:

    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, c'est le fait qu'il semble avoir beaucoup de fonctions pour des choses extrêmement inutiles que vous n'utiliserez jamais (ou une fois sur un million), mais que vous ne supportez pas les choses 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 d'événement de double clic pour le formulaire !! ?? WTF ??"

    17
    Jorge Córdoba

    TCL. Il ne compile que le code juste avant son exécution, il est donc possible que si votre code ne descende jamais dans la branche A pendant les tests, et qu'un jour, dans le champ, il descende dans la branche A, il pourrait avoir une ERREUR SYNTAXE!

    16
    dicroce

    En plus de 25 ans de programmation informatique, la pire chose que j'ai jamais connue est de loin un dérivé de MUMPS appelé Meditech Magic. C'est bien plus maléfique que PHP pourrait jamais espérer l'être.

    Il n'utilise même pas '=' pour l'affectation! 100 ^ b attribue une valeur de 100 à b et se lit comme "100 va à b". Fondamentalement, ce langage a inventé sa propre syntaxe de haut en bas. Donc, peu importe le nombre de langages de programmation que vous connaissez, Magic sera un mystère complet pour vous.

    Voici 100 bouteilles de bière sur le mur écrites 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
    17 of 26

    Logo ... cette fichue tortue n'irait jamais où je le voulais.

    14
    Spirit of '76

    troff

    Vous dit quel âge j'ai. Vous pourriez faire des choses assez douces, mais c'était rude. Vous qui pensez que Perl est illisible, vous devriez le vérifier.

    Je veux dire:

    .nr *pop-count 0
    .while !'\\n(.z'' \{\
    .   \"@warning automatically terminating diversion \\n(.z
    .   ie d @div-end!\\n(.z .@div-end!\\n(.z
    .   el .*div-end-default
    .   nr *pop-count +1
    .   \" ensure that we don't loop forever
    .   if \\n[*pop-count]>20 .@fatal recovery failed
    .\}
    .while !'\\n[.ev]'0' .ev
    .par@reset-env
    .par@reset
    

    Et croyez-le ou non, après avoir dû faire cela pendant des années, je suis resté avec la programmation.

    14
    xcramps

    Je n'aime vraiment pas Visual Basic, même les versions .NET. Franchement, je trouve le cœur de la langue de façon verbeuse.

    Par exemple:

    If condition1 = condition2 Then
      ...
    Else If condition1 > condition2 Then
      ...
    End If
    
    Public Function SomeFunction(ByVal arg1 As String, ByVal arg2 As Integer) As String
      ...
    End Function
    

    Mais en C #:

    if (condition1 == condition2) {
      ...
    }
    else if (condition1 == condition2) {
      ...
    }
    
    public string SomeFunction(string arg1, int arg2) {
      ...
    }
    

    Et évidemment, beaucoup d'autres langages comme F #, Python, etc. sont beaucoup moins verbeux. Je pense honnêtement que cela me prend deux fois plus de temps pour utiliser VB que les autres langues à cause de cela.

    Je sais que c'est une réponse assez superficielle, en partie parce qu'elle ne répond pas à certains des problèmes de langage (comme l'utilisation excessive des fonctions globales par PHP). Mais d'un point de vue humaniste, 'orienté vers l'expérience', VB me rend simplement grincheux.

    13
    Richard Clayton

    Bourne Shell

    Une fois, je dirigeais un système de facturation pour une entreprise de télécommunications. Cela signifiait exécuter manuellement un tas de commandes qui seraient chacune pour collecter, préparer, calculer, formater et enfin imprimer la facture. Cela se faisait généralement sous forme de lots, de sorte que l'on m'a dit pour quels numéros de client faire des factures et je les ferais tous en lot.

    C'était ennuyeux. J'ai donc commencé à l'automatiser. Malheureusement, la seule langue autorisée sur les serveurs était ... enfin aucune. Du tout. J'ai donc dû tout écrire dans des scripts Shell. Et c'est une langue vraiment absurde et bizarre. Rien n'a vraiment de sens. C'est incohérent et trop clairsemé, donc deux choses similaires peuvent faire des choses complètement différentes parce qu'un? vient dans un endroit légèrement différent. Et utiliser des guillemets dans le cadre d'une langue est simplement un mal pur. Ils ne sont même pas différents des guillemets simples dans certaines polices!

    J'ai eu des expériences de programmation bien pires. Bien pire. Mais cela a toujours impliqué de maintenir un code bizarre pour les autres. Mais ce doit être le pire langage que j'aie jamais utilisé. Pire que les fichiers DOS Batch? Oh oui. Le principal problème des fichiers DOS Batch est qu'ils sont primitifs. Vous devez trouver des moyens intelligents pour que cela fasse réellement quelque chose d'utile. Mais la syntaxe elle-même n'est pas si mauvaise. Il n'a tout simplement pas assez de fonctionnalités intégrées. Pire que Visual Basic? Oh oui, sans aucun doute, bien que j'aie certes écrit une interface utilisateur pour ce système Bourne Shell dans MS Access et c'était presque aussi horrible, mais presque. Et ils ont communiqué via Sybase, donc j'avais besoin d'apprendre Sybase SQL, qui est également assez horrible. Mais pas aussi horrible que le sh-scripting.

    Bourne Shell remporte donc le prix jumbo pour moi. Juste juste, avec VB fermer sur ses talons, mais il gagne toujours.

    12
    Lennart Regebro

    Sous Unix, m4 scripts et sendmail.conf.

    11
    Anton Tykhyy

    CSS

    Pour le style de base, c'est OK, et les sélecteurs sont assez cool, mais il y a quelque chose d'un peu sadique sur le modèle de boîte, les flotteurs et le nettoyage.

    Pirater le langage pour lui faire faire des choses fondamentales, comme déplacer une boîte en dessous d'une autre, c'est tout en un travail de jours.

    Ici, nous vivons dans le futur et faire fonctionner des éléments de conception de base, comme les coins arrondis ou les ombres portées, est un exercice futile.

    Le concept de "réutilisabilité" se termine à peu près par Ctrl-C Ctrl-V. Même un écrivain CSS chevronné touchera rarement la feuille de style de quelqu'un d'autre - ce qui signifie que les mises en page de base sont régulièrement réécrites à plusieurs reprises dans le monde entier.

    Bien sûr, cela ne devrait pas prendre tout le flack - tout espoir qu'il avait d'offrir quelque chose de vraiment utile au monde a été cruellement projeté sur les rochers par la `` plate-forme '' de facto pour la langue - Internet Explorer .

    10
    cbp

    FORTRAN 77

    Pour être honnête, peut-être qu'en 1977, c'était une assez bonne langue, mais au moment de 1999, j'ai dû maintenir un programme FORTRAN 77 qui avait été initialement lancé par mon conseiller lorsqu'il était étudiant diplômé dans les années 1970 (sur cartes perforées, à l'origine). Le programme a été "amélioré" piraté, branché depuis plus de vingt ans par des personnes de diverses capacités. Le code le plus ancien était ALLCAPS, plein à craquer d'instructions GOTO, de variables globales et de fonctions avec plus de paramètres que j'ai de doigts. À l'origine, les noms de variables dans Fortran étaient limités à 6 caractères, mais pour économiser des octets, la plupart des variables ont reçu des noms descriptifs tels que 'A', 'B', 'AA', 'II', etc.

    Certes, une grande partie de mon expérience était liée à la façon dont le programme a été écrit, mais le langage n'encourageait pas vraiment un bon style de programmation:

    • Saisie implicite en fonction de la première lettre du nom de la variable (par exemple, les noms commençant par un `` I '' à `` N '' étaient des entiers, sinon la valeur par défaut était REAL)
    • Correction de la mise en page des instructions (une conservation des cartes perforées: la colonne 0 indiquerait une ligne de commentaire si elle avait un "C", des étiquettes dans les colonnes 1-5, un caractère de continuation dans la colonne 6, des instructions dans les colonnes 7-72)
    • Étiquettes d'instructions (étiquettes numériques à cela)
    • LES MOTS CLÉS ETAIENT TOUS CAPUCHONS

    Heureusement, cela fait 10 ans que je n'ai pas regardé FORTRAN et j'ai oublié plus des ennuis dont je me souviens.

    10
    Peter Tate

    Pour moi, la pire expérience qui a entaché ma vision de la langue a été Perl. On m'a demandé de prendre en charge un tas de scripts Perl qui ont été "pris en charge" par d'autres personnes qui ont rapidement quitté l'entreprise quelques mois après avoir été invité à le soutenir. Bien que la langue soit correcte, elle permet au code de devenir illisible et presque insupportable très rapidement (à moins qu'une seule personne ne les touche). C'était un gâchis d'expressions rationnelles, de pseudo-objets, de variables à une seule lettre et de noms de fonctions. Cela m'a rapidement conduit à tout réécrire en python et à supprimer complètement Perl (c'était ça ou moi qui quittais). La version python était beaucoup plus utilisable et soutenant que 10 ans plus tard, il est toujours utilisé et d'après ce que j'entends, personne n'est autorisé à utiliser à nouveau Perl dans cette entreprise.

    10
    AlexC

    Pour moi, il faudrait que ce soit FileMaker .

    Le ScriptMaker

    Cette capture d'écran montre le "ScriptMaker", récemment nommé, qui comportait de nombreuses améliorations dans FileMaker 9, telles que les raccourcis Ctrl + C Ctrl + V pour copier et coller, et une boîte de dialogue non modale pour que vous puissiez modifier plusieurs scripts à la fois.

    http://images.macnn.com/macnn/reviews/filemaker/9proadvanced-ice_feature1_main.png

    Vous modifiez des scripts individuels à l'aide de cette boîte de dialogue. les "étapes" du script (affichées à gauche) sont ajoutées dans la liste sur le côté gauche (en double-cliquant), et sont déplacées vers le haut et vers le bas (en utilisant le petit blob à gauche de "Set Web Viewer"). Une seule ligne peut être déplacée à la fois, et les commentaires destinés à désactiver temporairement les actions de script ne sont disponibles que dans la version avancée de FileMaker Pro.

    La construction d'un script ruine efficacement vos poignets, car vous échangez entre le clavier et la souris des milliers de fois par heure en tapant des trucs dans les petites boîtes de configuration et en réorganisant vos lignes de code.

    Un script est techniquement une procédure et peut être transmis [~ # ~] un paramètre [~ # ~] . Ouaip, juste un. Si vous en voulez plusieurs, vous devez combiner efficacement vos paramètres à l'aide d'un délimiteur, le transmettre au script, puis diviser les paramètres. Avant que les scripts puissent avoir des paramètres (avant FM7 IIRC), il était normal d'utiliser des globaux pour transmettre des données.

    Ce gars a enveloppé la majeure partie de sa haine dans un aperçu de Hoax FileMaker 11.

    9
    Dale Reidy

    JCL - Job Control Language for IBM Mainframes ... pas tout à fait un langage de programmation, plus un fichier batch.

    Cela était basé sur la carte perforée qui serait normalement placée au début des travaux, c'est-à-dire la même syntaxe, un support différent. La limite de 71 colonnes et le fait que les cartes coûtent de l'argent signifiaient que la verbosité était un péché qu'il valait mieux laisser à la source COBOL. Cette attitude s'est répercutée sur JCL, l'homologue non papier.

    J'ai à peu près compris comment changer la file d'attente des travaux et les paramètres de la carte principale pendant mon temps de travail avec elle. Wikipedia fournit le bel exemple suivant:

    //IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X
    //COPY01   EXEC PGM=IEBGENER
    //SYSPRINT DD SYSOUT=*
    //SYSUT1   DD DSN=OLDFILE,DISP=SHR
    //SYSUT2   DD DSN=NEWFILE,
    //            DISP=(NEW,CATLG,DELETE),
    //            SPACE=(CYL,(40,5),RLSE),
    //            DCB=(LRECL=115,BLKSIZE=1150)
    //SYSIN    DD DUMMY
    

    Précisément.

    Une mention honorable doit être attribuée à Cincom Mantis, un "générateur d'application" (lire: concepteur de formulaires basé sur du texte) "propulsé" par un 4GL de type COBOL. Mantis est le langage qui m'a aidé à décider d'obtenir un diplôme - le dernier de plusieurs CICS dans le cul ...

    edit Mentions de DCL et similaires ailleurs ... Datatrieve Je me souviens aussi. Ceux-ci étaient en effet horribles, mais préféraient toujours les trucs VMS à tout ce qui était mainframe.

    9
    John Barrett

    Je vais voter pour ColdFusion. Il essaie d'être un langage de script cool, mais être fait avec des balises de type html me rendait fou - cela fait un petit moment que je n'ai pas dû y faire face, mais si je me souviens bien, les déclarations de variables pourraient être un ours, et c'était facile d'avoir des versions légèrement différentes du serveur sur deux environnements différents qui auraient du code fonctionnant différemment sur les deux.

    Si vous vouliez faire quelque chose de vraiment impressionnant avec cela, cela impliquait essentiellement de créer un objet dans Java et de trouver comment le lier avec le serveur de Coldfusion afin que vous puissiez l'invoquer comme une balise. I ' Je travaille en PHP, et même si PHP a ses problèmes, ColdFusion était définitivement pire.

    9
    John Fiala

    L'informatique me déroute parfois de savoir pourquoi une société de logiciels développerait son propre langage de script pour s'interfacer avec son logiciel, plutôt que de créer une API puissante qui puisse s'interfacer avec le langage de script de votre choix. Mon vote va au langage de script de TransCAD.

    8
    dassouki

    Je méprise les langages propriétaires comme C # et AppleScript dont la seule raison d'exister est de lier les développeurs à une plate-forme ou un produit commercial. Ce n'est pas exactement un problème technique, mais c'est un problème social lorsque ces langues sont ensuite enseignées dans les écoles. J'ai un ami qui n'a installé que Linux et il apprend le C # en CompSci de 1ère année. Oui, il y a Mono, mais naturellement, il joue toujours sur les fonctionnalités et la stabilité.

    8
    SpliFF

    Le pire langage avec lequel j'ai "travaillé" était "karol, le robot" - qui était un langage de programmation en allemand. Et ne pouvait rien faire de plus que déplacer un robot sur l'écran xD

    8
    knittl

    J'ai donné la même réponse ailleurs, mais je pense qu'elle mérite sa place ici:

    À la fin des années 90, j'ai dû écrire plusieurs sites Web dans le serveur Web Informix Universal Server (également appelé serveur Web Illustra)

    Pour tous ceux qui ne connaissent rien à cet environnement exécrable, cela vous a obligé à utiliser le langage le plus bizarre que j'aie jamais rencontré. Comme l'a décrit Joel Spolsky

    Quand il a fonctionné, il s'est avéré avoir le seul langage de programmation que j'ai jamais vu qui n'était pas équivalent à Turing, si vous pouvez l'imaginer.

    Plus d'informations ici http://philip.greenspun.com/wtr/illustra-tips.html

    Et un exemple d'une condition if 'simple':

    cond=$(OR,$(NXST,$email),$(NXST,$name),$(NXST,$subject))
    

    Je souhaite pouvoir trouver le document complet de l'API, car avec le recul, ce serait hilarant/incroyable/tragique.

    Un exemple de sa nature désastreuse était le fait qu'il n'avait pas de boucles . De toute nature. Il était possible de pirater la fonctionnalité de boucle en créant une requête et en parcourant ses lignes, mais c'est tellement faux que je me sens mal.

    edit: j'ai réussi à trouver un exemple de code complet. Voir:

    <HTML>
    <HEAD><TITLE>WINSTART bug</TITLE></HEAD>
    <BODY>
    <!--- Initialization --->
    <?MIVAR NAME=WINSIZE DEFAULT=4>$WINSIZE<?/MIVAR>
    <?MIVAR NAME=BEGIN DEFAULT=1>$START<?/MIVAR>
    
    <!--- Definition of Ranges ---->
    <?MIVAR NAME=BEGIN>$(IF,$(<,$BEGIN,1),1,$BEGIN)<?/MIVAR>
    <?MIVAR NAME=END>$(+,$BEGIN,$WINSIZE)<?/MIVAR>
    <!--- Execution --->
    <TABLE BORDER>
    <?MISQL WINSTART=$BEGIN WINSIZE=$WINSIZE
        SQL="select tabname from systables where tabname like 'web%' 
            order by tabname;">
        <TR><TD>$1</TD></TR>
    <?/MISQL>
    </TABLE>
    <BR>
    <?MIBLOCK COND="$(>,$BEGIN,1)">
        <?MIVAR>
        <A HREF=$WEB_HOME?MIval=WINWALK&START=$(-,$BEGIN,$WINSIZE)&WINSIZE=$WINSIZE>
        Previous $WINSIZE Rows </A> $(IF,$(<,$MI_ROWCOUNT,$WINSIZE), No More Rows,  )
        <?/MIVAR>
    <?/MIBLOCK>
    <?MIBLOCK COND="$(AND,$(>,$END,$WINSIZE),$(>=,$MI_ROWCOUNT,$WINSIZE))">
        <?MIVAR>
        <A HREF=$WEB_HOME?MIval=WINWALK&START=$END&WINSIZE=$WINSIZE>
        Next $WINSIZE Rows  </A>
        <?/MIVAR>
    <?/MIBLOCK>
    </BODY>
    

    Prettify ne sait pas comment le colorer, quelle surprise

    7
    DanSingerman

    LANGUE ANGLAISE METLIFE (MEL) !

    J'ai travaillé pour une entreprise qui a écrit des outils pour trouver et résoudre automatiquement les problèmes Y2K dans Cobol et PL/I. MetLife nous a approchés avec 2 millions de lignes de code qu'ils avaient écrites en MEL, un langage qu'ils ont développé à la fin des années 50 ou au début des années 60. MEL était un langage qui a aidé à inspirer Cobol, et son code procédural semblerait raisonnablement familier à tout programmeur Cobol moderne.

    Nous avons demandé à un développeur chevronné d'écrire un traducteur pour déchiffrer les programmes MEL et corriger les dates identifiées. Il a en fait lancé une démo dans quelques semaines, et il pensait que 3-4 semaines de travail suffisaient pour le mettre en forme pour la production. Génial, pensons-nous, et avons décidé de reprendre le travail.

    Malheureusement, il n'avait pas vraiment étudié l'équivalent très primitif de MEL de la Cobol DATA DIVISION (où vont les déclarations). Il s'est avéré que chaque programme MEL fournissait sa propre vue de chaque fichier d'entrée ou de sortie, et n'a déclaré que les champs qui l'intéressaient. Il pourrait y avoir 30 ou 40 prises différentes sur ce à quoi ressemblait un fichier d'entrée avec des enregistrements de variantes. Parlez des aveugles et de l'éléphant!

    Un gars exceptionnellement brillant et motivé a ensuite pris le relais et a élaboré la sémantique de l'identification des définitions d'enregistrements décrivant quel fichier, un processus rendu beaucoup plus difficile par la présence d'enregistrements variantes dans de nombreux fichiers. Il a ensuite écrit les algorithmes pour unifier chaque ensemble de définitions d'enregistrements alternatifs en une définition d'enregistrement commune, puis en mappant tout, des anciens types de données Honeywell émulés aux nouveaux types de mainframe IBM. Il a fallu deux années-personnes pour que tout fonctionne.

    7
    Jim Ferrans

    Symbian C++ Eh bien, ce n'est pas du C++. C'est apprendre une toute nouvelle langue et ça ne marche pas très bien.

    7
    Mercurious

    Je suis surpris que personne n'ait mentionné Sybase PowerBuilder

    • Syntaxe déroutante
    • Modèle d'objet déroutant
    • Manque de prise en charge des expressions régulières natives
    • Difficile à utiliser IDE (en particulier la palette d'outils)
    7
    Rad

    RPG II ?? n'importe qui?

    C'était parmi les pires vérifications cette description Wiki pour une brève introduction à une langue qui a vécu longtemps après son expiration par date.

    Du côté positif, vous pourriez écrire des programmes ivres ou sobres et cela ne faisait pas beaucoup de différence

    6
    kloucks

    CRM114. Un langage spécialement conçu pour l'interfaçage avec un filtre bayésien très puissant, utile pour le filtrage du spam et des tâches similaires.

    L'année dernière, un client m'a demandé de l'utiliser et après l'avoir examiné, j'ai utilisé du code bayésien simple à partir de Codeproject.com. Plus tard, j'ai trouvé un message publié sur un forum quelque part de l'auteur original de CRM114, m'excusant pour cela.

    Le problème principal était la grammaire dérivée du latin. L'auteur a admis qu'il avait appris le latin à l'époque et l'a donc intégré à son projet. Ainsi, il obtient d'étranges conventions d'ordre des opérateurs et d'arguments. Cela a également conduit à utiliser le mot "alius" (latin pour "autrement" ou "autrement) où vous utiliseriez" autre "dans n'importe quelle autre langue.

    Très difficile de faire quoi que ce soit.

    6
    Aric TenEyck

    Je pense MaxScript, le langage de script fourni avec 3d studio MAX, je n'ai jamais pu voir de logique dans sa syntaxe

    6
    Viktor Sehr

    Quelqu'un a mentionné le langage de script utilisé dans Autohotkey ?
    Le pire langage que j'aie jamais utilisé.

    6
    Mez

    Au milieu des années 90, j'ai travaillé dans une petite société de conseil en gestion utilisant un produit SIG appelé MapInfo qui avait un langage de script faible appelé MapBasic.

    Je ne me souviens pas des détails, mais fondamentalement à cette époque, il y avait objets * qui ne pouvaient être instanciés que lorsqu'ils étaient codés en dur (par opposition à l'instanciation avec des variables ). C'était une douleur totale en ce sens qu'il semblait faire tout ce que vous deviez faire, jusqu'à ce que vous tentiez réellement de le mettre en œuvre. La mise en œuvre était soit impossible, soit très lourde.

    J'étais novice à ce moment-là et j'ai eu beaucoup de difficulté a) à prédire ce qui pouvait et ne pouvait pas être fait, et b) à expliquer pourquoi à mon directeur hors programmation. C'était quand même frustrant.

    Il y a beaucoup de langages et d'outils qui sont faibles dans certains domaines, mais après avoir traité avec Map Basic, même Visual Basic 3.0 s'est senti libérateur!

    * -Je ne me souviens pas si c'était tous les objets ou seulement certains.

    5
    John MacIntyre

    Tout d'abord, quelques mises en garde: j'ai tendance à donner un laissez-passer aux langues qui remplissent assez bien leur objectif, mais qui sont poussées par le monde de l'entreprise à faire plus que ce que leurs concepteurs voulaient. Pour cette raison, je donne un laissez-passer à VB et ses variantes VB-office. Pour un prototypage rapide, VB était difficile à battre. Il a échoué massivement lorsque les gens essayé de l'utiliser pour le travail au niveau de l'entreprise. Idem pour Perl, qui est un excellent utilitaire de script qui a été en quelque sorte promu en langage CGI du jour dans le jour.

    Mais un langage qui ne répond pas aux attentes, même à ses propres conditions? Pour moi, ce n'est pas un concours: JavaScript, pour trois grandes raisons:

    1. manque de capacités de débogage décentes (Firebug aide, mais ce n'est pas suffisant),
    2. la façon dont il s'arrête simplement en cas d'erreur, forçant le programmeur à ajouter une alerte ("dans functionX") juste pour s'assurer que vous l'avez fait dans functionX, et
    3. ses messages d'erreur exaspérément obscurs.

    Et si on me permettait de choisir un framework, c'est aussi un choix facile: JSF et IceFaces.

    5
    rtperson

    ABAP

    Il est utilisé pour programmer des applications pour SAP. Et c'est mauvais.

    5
    Pascalo

    Personne n'a encore mentionné Vimscript?

    Mon voyage à Vim était comme le voyage de Coraline de l'autre côté de la porte. C'était tellement cool au début et mes doigts étaient contents mais ensuite je ne voulais pas remplacer mes yeux par VIMScript.

    5
    Yoo

    L'ancien macro-langage Excel C'était vraiment frustrant de stocker des variables dans une feuille Excel. VBA était également assez mauvais.

    5
    Kire Haglin

    Si nous nous posons cette question X ans plus tard (X = 10 ou 20 ou?), Nous dirions tous en chœur que "toutes les langues du XXe siècle étaient nulles". Tel serait le changement de paradigme que nous ferions les choses d'une manière très différente ... même si je ne peux pas visualiser comment!

    5
    Sathya

    PC-FOCUS

    J'ai travaillé sur un système d'inventaire + de gestion d'entrepôt où le sous-système de back-office a été implémenté dans PC-FOCUS.

    Tout ce qui doit être dit à propos de ce langage est qu'il y avait un chapitre de plus de 100 pages dans le manuel de programmation intitulé "Contournements".

    4
    Jeff Leonard

    Une extension orientée objet à moitié cuite vers C. Dans les systèmes embarqués, il y a encore beaucoup de projets en C uniquement. Donc, de temps en temps, quelqu'un pense que sa solution orientée objet est tout ce qui est nécessaire pour mettre ce projet en forme ... laissant un gros gâchis de maintenance quelque part sur la ligne.

    Habituellement, la personne commence avec des objectifs modestes et nobles, mais elle s'éloigne de lui à chaque fois. Il passe la main à un autre programmeur qui pense que c'est génial. OOP in C, comme il est net puis détruit le code déjà tragique qu'il ne comprend pas. Bientôt, il est au-delà de toute réparation. Le pire que je n'ai vu aucun pilote ne pourrait compiler sans inclure tous les en-têtes de les objets qui vont l'utiliser ainsi que les fichiers d'en-tête pour cet utilisateur de composant jusqu'au plus haut niveau.

    Tout langage de programmation deviendra un monstre s'il n'est pas utilisé comme prévu.

    4
    Gerhard

    LabVIEW (est-ce même considéré comme une langue?)

    C'était horrible. Si vous souhaitez élargir le terme, HTML est nul, tout comme XML.

    4
    Tim

    Lingo, pour Shockwave Flash (ou quoi que ce soit). Assez horrible, chose basique avec un système de type un peu trop dynamique. L'éditeur était nul, le débogueur était nul. Arghh!

    Cela n'a probablement pas aidé que l'application que je devais prendre sur mes épaules ait été écrite par scriptkiddies, qui utilisait le type d'une variable pour diriger le flux de contrôle. (Si c'est une chaîne, on est en mode A, donc ça veut dire X, si c'est un int, on est en mode B, donc ça veut dire Y). $ £ € £ @ £ $ # "¤ #" !!

    J'aime Python, et je suppose que quelque chose d'aussi horrible aurait pu être fait là-bas, mais la communauté et les outils sont beaucoup plus agréables et rigoureux.

    4
    Macke

    FOCUS, présenté comme un "4GL" (langage de quatrième génération). Certains systèmes pouvaient utiliser FOCUS comme SQL, faire des requêtes db, dont les résultats étaient enveloppés dans BASIC ou dans un autre langage procédural, mais le système sur lequel je travaillais chez Boeing dans les années 80 n'en avait pas. Un peu comme un Excel très pauvre pour diriger une entreprise. C'était le seul travail de programmation que je détestais.

    4
    Jay

    Son VB6 NOOOOOOOOOOOOOOOOOO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Vous vous retrouvez comme Winston Smith à la fin de 1984 ...

    4
    abmv

    System RPL, utilisé par les calculatrices scientifiques graphiques HP 48, 49 et 50. Parfois, il me semblait que le compilateur avait en fait produit un langage de niveau supérieur pour que le processeur puisse l'exécuter.

    4
    Juliano

    Pour ma conception senior, nous avons programmé un appareil photo Canon pour produire des cartes de profondeur en utilisant CHDK . La plupart du code a été écrit en C, mais vous devez vous y connecter avec ce langage ridicule appelé uBasic. Fondamentalement, il n'a pas été implémenté avec un analyseur approprié, et donc les variables ne peuvent être que 1 lettre, c'est incroyablement lent, et si vous faites une erreur, la caméra s'éteint simplement.

    4
    rlbond

    Webspeed et SpeedScript .. Juste terrible, aucune explication :)

    4
    Jason

    Bon Dieu, tu veux dire que personne n'a utilisé PL/SQL ? Le spawn de l'enfer qu'est Oracle est interprété et vit dans le contexte du serveur Oracle. Toutes les sorties sont mises en file d'attente jusqu'à ce que le programme soit terminé. Il y a une limite absolue sur la quantité de sortie qu'il peut afficher. Il est presque impossible de déboguer. Ga ... Je sens que je vais juste y penser.

    4
    EvilTeach

    J'allais râler et gémir à propos de Java, mais évidemment ce n'est pas si mal et cela aurait constitué de la pêche à la traîne, et en plus, je me souvenais juste de quelque chose de bien pire:

    Magic II.

    Il était à peine qualifié de langue. En réalité, il pourrait être décrit plus précisément comme un système de base de données pré-SQL avec un modèle de programmation basé sur les données. Il était basé sur l'observation astucieuse que presque tout ce que vous faites avec les tables de base de données implique de faire quelque chose avant de commencer à itérer sur les données, puis à itérer sur les données, et peut-être à faire quelque chose après avoir terminé.

    "Programmation" Magic consiste à remplir des champs dans des tableaux qui décrivent ces trois phases de la vie d'un programme. Il y avait aussi un concepteur d'écran en mode texte qui était lié à tout ce bordel. Un utilisateur Magic formé pouvait supprimer les rapports et les écrans de saisie de données à un rythme assez rapide, ce qui rendait la direction heureuse.

    Le problème pour moi était que la langue avait des installations d'abstraction très minimes. Vous pouvez définir des routines que vous pouvez appeler à partir d'autres routines. C'est ça. Pas de structures de données autres que les tables de base de données, pas de tableaux en mémoire (vous pouvez cependant définir de nouvelles tables!)

    Pas de tables de hachage, aucun moyen d'organiser les variables (que le langage supportait) de manière significative. Pas de listes. Rien. Bien sûr, pas de classes ou quoi que ce soit ressemblant à un modèle d'objet, mais honnêtement - je pourrais vivre sans ça. Et j'ai fait.

    Pire encore, le "programme" avait des morceaux qui étaient cachés dans des champs dans lesquels vous deviez zoomer pour pouvoir voir - certaines expressions, etc. Vous ne pouviez donc jamais simplement lire un écran de code et savoir ce qu'il faisait.

    Cette chose a pris la programmation basée sur les données à son apogée ultime et triste. C'est une obsession qui se manifeste dans un outil de programmation. J'étais content de mettre ce misérable morceau d'ordure derrière moi.

    Récemment, j'ai rencontré un ancien collègue qui a travaillé avec moi pendant que j'utilisais Magic. Cela fait presque 20 ans que je l'ai fait, mais elle était trop heureuse de me dire comment elle était chargée de maintenir l'un de mes projets et qu'elle a déclaré sa défaite lorsqu'elle a trouvé une procédure récursive quelque part. Elle n'avait jamais vu personne implémenter la récursivité dans Magic. Personne ne l'a jamais fait. C'était un territoire inexploré. Je pense que personne n'a réalisé que l'outil était capable de récursivité.

    Le projet a dû être réécrit à la hâte, avant de faire exploser le cerveau de quelqu'un.

    4
    Ori Pessach

    Dataflex 2.3 et VDF4.

    VDF 4 est ce qui m'a éloigné de Dataflex.

    L'une des choses les plus stupides qu'ils ont faites a été d'utiliser le message Windows pour le troisième bouton de la souris pour communiquer entre le IDE et le compliant. Cela a bien fonctionné sauf si vous aviez une souris à 3 boutons.

    3
    Dion Brown

    SNOBOL avait des fonctionnalités intéressantes et des capacités de traitement des chaînes plus étendues que Perl. Il avait également un type d'instruction: <base string> <match string> = <replacement string> :S(<label>) :F(<label>) où la plupart des composants pouvaient être omis. Les structures de contrôle ont été effectuées en sautant sur une étiquette ou une autre (le cas échéant) selon que la chaîne de correspondance pouvait être trouvée dans la chaîne de base. Les chaînes peuvent inclure des fonctions et des sous-chaînes assorties, donc une chaîne SNOBOL raisonnable peut inclure toutes les arborescences de syntaxe mentionnées à l'arrière de votre standard de langage de programmation préféré.

    Il était trivial d'y écrire un analyseur (même si ce ne serait pas nécessairement efficace du tout), mais quelque chose comme l'arithmétique ou les boucles étaient des douleurs.

    3
    David Thornley

    Certainement le pire langage que j'aie jamais utilisé était Oz . Il s'agit d'une tentative infructueuse de création d'un langage de programmation multiparadigm. Comme vous pouvez l'imaginer, cela finit par être vraiment obscur et avec une syntaxe extrêmement compliquée. Vous avez différents délimiteurs pour marquer que vous travaillez de manière fonctionnelle ou impérative. Je trouve toujours des classes de définition un peu étranges avec des parties de méthode fonctionnelles sans effet secondaire.

    3
    Sambatyon

    Oberon.

    Lors de notre première année à l'université, tout le monde devait suivre un programme à Oberon. Je pense que l'idée était de s'assurer que personne n'avait une longueur d'avance. La langue était liée à l'Oberon OS/GUI qui était horrible! Je ne sais pas si quelque chose a changé, mais c'était définitivement ma pire expérience de programmation jamais.

    3
    Christo

    Javascript avant l'existence de FireBug et le codage à l'aide d'un bloc-notes.

    C'était le code le plus horrible de ma vie, JS était sensible à la casse et j'avais beaucoup de maux de tête. IE détecter les erreurs d'une manière bizarre ...

    3
    Omar Abid

    RPG

    Je ne parle pas des jeux de rôle ici, les gars. J'ai pris COBOL à l'université, ainsi que RPG IV. S'il y a un langage qui me donne envie de creuser mon globe oculaire avec une fourchette, c'est le RPG. C'est à peu près du code "basé sur des colonnes", dans la mesure où vous n'écrivez pas simplement votre code de gauche à droite, vous devez vous assurer que vous êtes dans les bonnes colonnes. Le raisonnement derrière cela est que le langage a été créé à l'origine pour le développement de cartes perforées.

    Je ne peux pas écrire dans un fichier! Que diable!

    Eh bien, factice, vous avez oublié un F majuscule dans la colonne 68.

    3
    Josh Stodola

    En termes de langues que j'ai rencontrées, je voterai pour COBOL et Scheme.

    COBOL était la preuve définitive que les majors d'entreprise ne devraient jamais écrire un langage de programmation (et cela vient d'un diplômé majeur des affaires - CIS). Vous ne devriez pas être en mesure d'écrire des romans semi-cohérents et de le compiler en quelque chose. Je sais qu'il a été utilisé il y a 40 ans, mais quelqu'un l'a porté sur COBOL.NET, pour avoir crié à haute voix.

    La deuxième place serait Scheme, qui avait exactement un type de variable: la liste chaînée. Essayer d'apprendre à y penser, c'est comme essayer d'apprendre à penser comme un ours polaire si vous êtes un martien d'origine américaine. C'est totalement étranger à tout le reste.

    En termes de langues que j'ai utilisées professionnellement, VBScript est haut la main. C'est comme VB seulement pire. J'ai essayé une fois d'implémenter l'algorithme MD5 dans VBScript. La première chose que j'ai eu à faire a été d'implémenter des opérations de changement de bits flippantes. Plutôt que de réinventer la roue, je suis sorti et j'ai cherché une implémentation. Celui que j'ai trouvé, je ne vous plaisante pas, a suivi l'algorithme suivant:

    1. Convertissez votre nombre en hexadécimal
    2. Convertissez votre hex en chaîne, par exemple, 0x08 -> "08"
    3. À l'aide d'un énoncé de cas géant, convertissez chaque chiffre en une chaîne de 1 et de 0, par exemple, "8" -> "00001000"
    4. Maintenant que vous avez une chaîne géante de 1 et de 0, déplacez-les si nécessaire

    C'était un gâchis total. Et c'était le meilleur que j'ai trouvé.

    (Attention: c'est l'algorithme du mieux que je m'en souvienne. C'était il y a 6 ans. :))

    3
    Ari Roth

    Toute langue peut être la pire entre de bonnes mains. Et un travail d'équipe inapproprié aggrave encore la situation. Je veux dire, si ce n'est pas assez amusant de tirer avec son propre pied, vous pouvez toujours essayer de tirer sur des pieds de collègues. Jusqu'à présent, le meilleur langage que j'ai vu pour le faire est le C++. Vous pouvez vraiment blesser le cerveau de vos collègues avec ça.

    3
    akalenuk

    APF. Vous êtes assez chanceux pour n'avoir jamais entendu parler de ce cauchemar. C'était un ajout coûteux à la base de données hiérarchique IBM/moniteur de transactions IMS système. Par où commencer.

    Il n'y avait aucun support pour les tableaux. Si vous aviez un tableau de dix éléments, vous avez codé ITEM1, ITEM2 etc. et écrit dix lignes de code pour traiter chaque élément.

    Votre code a été stocké dans la base de données et interprété au moment de l'exécution. Faites à la structure interne de la chose que votre code a été décomposé et stocké dans plusieurs enregistrements. Il était absurdement facile d'écraser le code d'une autre personne.

    Certains d'entre vous ont été associés à la transaction (IMS parle pour un service) mais certains d'entre vous ont été associés à l'enregistrement de la base de données - si vous vous trompiez, des bits de votre programme s'exécutaient chaque fois que quelqu'un accédait à un enregistrement.

    Pas de débogueur, le "compilateur" ne faisait que vérifier la syntaxe de base de la plupart des erreurs apparues au moment de l'exécution, avec l'un d'entre eux quatre messages d'erreur.

    L'un de ces messages d'erreur était "TYPE DE DONNÉES NON VALIDE" - c'est tout, pas de nom de variable, pas de numéro de ligne, pas d'indice.

    Tout simplement horrible.

    3
    James Anderson

    Sans aucun doute, c'était Smalltalk. Mais seulement sur un plan technique: le langage réel était bien, mais le IDE que nous avons utilisé pour cela pour la classe était VisualWorks, qui est à lui seul le pire IDE pour tout) J'ai jamais vécu. Voici quelques exemples des horreurs:

    -Vous ne pouvez pas enregistrer l'image (qui est votre projet entier enveloppé dans un seul fichier) à moins que chaque bit de code ne soit complètement correct syntaxiquement et sémantiquement -Il se bloque souvent et l'interface utilisateur est horriblement conçue. Les boutons seraient retirés de la fenêtre et autres. -Une fois VisualWorks s'est figé sur moi après avoir fait environ 2-3 heures de travail frais, malheureusement sans enregistrer. Heureusement (je pensais), le bouton d'enregistrement fonctionnait toujours. Alors, avec un soupir de soulagement, j'ai sauvé mon projet. Mais, en raison de la méthode VisualWorks pour enregistrer votre projet en tant qu'image, lorsque j'ai rouvert mon fichier, il enregistré mon projet à l'état gelé. J'ai fini par devoir revenir à une version antérieure de mon code et perdre quelques heures de travail.

    Et le pire symptôme horrible IDE design: -Il n'y a qu'une seule étape d'annulation. Et PAS SEULEMENT CELA. Écoutez ceci. Si vous supprimez une ligne de code, déplacez le curseur ailleurs , puis appuyez sur "Annuler", il collera la ligne de code où se trouve actuellement le curseur, pas là où se trouvait la ligne à l'origine. WTF est-ce? Je pense que Lotus 1-2-3 avait de meilleures capacités d'annulation que cela!

    P.S. Je sais que je ne parle pas de la langue, mais comme cela représentait mon expérience de travail avec la langue, je sentais que je pouvais encore raisonnablement donner ma réponse dans ce fil. :)

    3
    JoeCool

    PowerDynamo

    C'était un produit de Sybase qui stockait le code webapp directement dans la base de données avec vos données. Il n'y avait pas de portée variable et la fonction strlen () était essentiellement un générateur de nombres aléatoires.

    2
    Grant Limberg

    Smalltalk.

    J'ai dû l'apprendre à l'université. J'ai détesté tous les aspects de la langue. Peut-être que nos professeurs ont juste fait un choix stupide sur l'implémentation du langage, mais en gros, cela a fonctionné comme ceci:

    • Il n'y avait aucun code source que vous pouviez parcourir. Il y avait juste un arbre de classe où vous pouviez créer et éditer les implémentations de méthode. Aucun moyen de sauvegarder le code autre que de les couper et les coller dans un bloc-notes. Vous pouvez enregistrer des sessions, mais ce sont des vidages binaires.

    • L'environnement entier a été écrit en Smalltalk, et mon garçon - était-ce lent? Vous pouvez voir tout l'écran repeindre à chaque fois que vous appuyez sur une touche. L'éditeur (que vous deviez utiliser en raison du manque de code source de chargement/enregistrement) manquait de fonctionnalités d'édition de base comme le mode insertion/remplacement.

    • Le langage était pur d'une manière qu'il n'était pas possible de terminer une boucle tôt. Tout ce qui a rendu la programmation facile et efficace est interdit dans le langage.

    • Tout était un objet. Remplacez l'opérateur de comparaison d'un booléen et le système entier s'est écrasé.

    2
    Nils Pipenbrinck

    CodeGear Delphi

    Ce n'est vraiment pas le langage que je n'aimais pas, mais l'IDE: CodeGear RAD Studio for Delphi. C'est de loin le pire, le plus bogué et le plus résistant aux accidents IDE que j'aie jamais utilisé. Moi et les autres programmeurs Delphi perdraient régulièrement heures de temps de développement tous les jours car le IDE plantait ou se figeait.

    Après avoir installé CodeRush, l'application est devenue pratiquement impossible à exécuter. Il s'est écrasé à intervalles réguliers de 5 à 15 minutes, même sans intervention de l'utilisateur. Pire encore, des erreurs mystérieuses ont été déclenchées par le débogage de base , comme le fait d'atteindre un point d'arrêt (de manière routinière, le débogueur atteignait un point d'arrêt et se figeait simplement sur ses traces sur une ligne triviale, comme une affectation de variable. Rien de ce que vous pourriez faire ne le ferait avancer). Si vous laissiez le programme seul, il resterait stable jusqu'à une demi-heure avant de lancer une sorte d'exception de mémoire.

    Donc, après avoir dépensé des milliers de dollars en licences CodeGear RAD Studio, personne ne voulait l'utiliser. Au moment où j'ai quitté l'entreprise, tous nos projets Delphi étaient codés avec VIM à la place.

    2
    Juliet

    "Visual C++" .... Tant de code hérité entrelacé .... partout.

    M'a fait aimer Obj-C.

    2
    Rev316

    J'ai aussi oublié de mentionner prova et oui, c'est un langage mixte. C'est une implémentation de prologue construite au-dessus de Java ce qui signifie qu'elle est sacrément lente. Ils la vendent par sa capacité à appeler les fonctions Java, la partie triste) c'est que vous perdez du recul lorsque vous le faites. Donc, dans l'ensemble, vous perdez les points forts des deux langages. Je ne comprends toujours pas pourquoi les auteurs n'ont pas choisi simplement une implémentation de prolog dans Java, vous pouvez donc appeler prolog code de Java au lieu de construire votre propre interpréteur.

    2
    Sambatyon

    OPS5. Même y penser maintenant me fait pleurer ouvertement.

    2
    Tim Sullivan

    Oh, allez. En 3 pages, aucune mention de Forth ? Sérieusement?

    Bien sûr, comme APL, il est puissant et il a sa place. Mais comme APL, il est en compétition pour la première place dans la catégorie Langue en écriture seule. Je maudis toujours le professeur de physique qui m'a imposé cela à la fin des années 80 parce qu'il était convaincu que cela allait conquérir le monde du logiciel.

    Mes sincères regrets aux 5 personnes de l'univers qui traitent la réalité en notation polonaise inversée. Ou devrais-je dire quelque chose comme "excuses +"?

    2
    Newton Falls

    Mon vote est DB/C DX qui est basé sur le DATABUS. Je suis sûr que la plupart d'entre vous n'en ont jamais entendu parler, et ceux qui ont .... Je suis désolé .....

    2
    Harold

    Pire langage de programmation? - Brainfuck

    Je n'y ai pas travaillé moi-même, mais je dirais que c'est le pire. Il est généralement utilisé comme un défi, pas pour la production (plus comme: je m'ennuie ce week-end, voyons si je peux y réécrire tic tac toe). Découvrez son programme Hello World sur wiki.

    2
    Jack

    JCL (Job Control Language) doit être la pire chose que j'aie jamais touchée

    2
    SQLMenace

    dBase II (c'est 2, pas 3): Heureusement, je ne l'ai pas beaucoup utilisé, et cela fait plus de vingt ans, donc je ne me souviens pas de grand chose à part la douleur! IIRC, son utilisation libérale de caractères spéciaux dans les noms de variables (et d'autres endroits?), Il était presque impossible à lire, et il manquait de contrôle de flux. Il semblait que le 3 était beaucoup plus utilisé (et le faisait déjà lorsque j'en utilisais 2, mais mon employeur était trop bon marché pour la mise à niveau), mais je ne sais pas si c'était plus agréable.

    2
    PTBNL

    peut-être FORTRAN .... J'en ai encore des incubes.

    2
    Lopoc

    Pour moi, la réponse est Crystal Syntax, le langage de type BASIC utilisé par Crystal Reports. Essayer d'accomplir autre chose que de simples comparaisons est difficile au mieux et impossible au pire. Certes, ils font assez bien les tableaux:

    {some_database_field} IN ["firstValue", "secondValue", "thirdValue"]
    

    Mais ce qui suit ne fonctionne pas du tout:

    {some_database_field} NOT IN ["firstValue", "secondValue", "thirdValue"]
    

    Même si la langue a un opérateur NOT.

    2
    Scott

    Personne n'a dit AS400 ????

    J'avais ça à l'université, et c'était définitivement le pire ...

    1
    Sergio

    Je suis surpris que personne n'ait mentionné INTERCAL : le langage du compilateur sans acronyme prononçable. Il n'a pas de déclaration goto. Il vient d'une déclaration!

    Ok, sérieusement cependant, mes deux candidats sont VB, et la combinaison de HTML, PHP et Javascript, je dois travailler avec.

    VB car il a 5 constructions de boucles différentes. car, tout en faisant, et en faisant pendant que je comprends. Mais avez-vous vraiment aussi besoin de faire et de faire jusqu'à ??? Vraiment?

    HTML/PHP/Javascript non pas à cause d'une caractéristique spécifique de l'une des langues, mais parce que vous pouvez les intercaler de manière très très confuse. Ouvrir une balise HTML, avoir du Javascript dedans, et au milieu, commencer un PHP if, fermer les balises javascript et HTML, puis fermer le PHP, et avoir une autre fermeture de la HTML et JS .... Il finit par ressembler à (([)] [)])

    Il peut sembler que ce n'est que du mauvais code, mais je n'ai pas encore trouvé une autre façon de faire ce que nous faisons de cette façon.

    1
    Brian Postow

    I4GL (Langage Informix 4e génération).

    Heureusement, c'est à peu près mort. Le langage n'était pas difficile à regarder ou à écrire, mais les défauts d'implémentation le rendaient presque inutile.

    Tout d'abord, il s'agissait en réalité de deux langues: l'interprétée (plus flexible, lente) et la compilée (presque inutile, celle qui a fini de fonctionner au cours de votre vie). Propriétaire, bien sûr.

    Les premières versions manquaient d'opérateurs arithmétiques, vous avez donc dû pousser des données temporaires dans la base de données et utiliser SQL pour les mathématiques.

    Il était censé avoir des capacités multi-utilisateurs, mais comme le backend (Informix Turbo, vous vous en souvenez?) Manquait de verrouillage approprié, au lieu d'une attente de 90 secondes sur une ligne verrouillée suivie d'un retour d'erreur utile, vous obtiendriez un retour instantané avec une valeur de retour sans erreur non utilisable. Comme I4GL était inutile sans backend, je considère que c'est une faille dans le langage d'exécution.

    Une fois, j'ai eu un travail de piratage de tous les Unions du programmeur précédent en une série de sélections plus petites dans les boucles I4GL. La raison, les syndicats ne se termineraient pas de votre vivant. Bien sûr, le chef de projet avait supprimé les contraintes d'index Unique, car elles faisaient tellement planter les insertions.

    1
    kmarsh

    Personne n'avait mentionné DCL ???

    1
    Artyom

    Ma réponse est assez limite mais je pense que cela vaut la peine de préciser:

    HTML

    Pas un langage particulièrement puissant, mais étant donné le nombre de personnes qui l'ont plus qu'une familiarité passagère et qui se classeraient comme programmeurs, je pense qu'il devrait être qualifié.

    Une grande partie de l'angoisse (même dans ce fil) dirigée vers des langages tels que PHP a ses racines dans les limitations du HTML. Considérez quelques-uns de ses points faibles: il encourage le mélange de contenu et la présentation, elle est verbeuse et répétitive, la spécification a encore des zones d'ambiguïté et, de manière révélatrice, les implémentations ont traditionnellement souffert d'un manque de conformité à la spécification. Le grand écosystème des langages côté client et serveur doit beaucoup au fait que HTML simple est une douleur.

    Oui, il y a de mauvaises langues originales, mais pousser un langage commun au-delà de ses limites est un plus grand mal dans mon livre.

    0
    CurtainDog

    Certes, je n'ai pas ça beaucoup d'expérience avec différents langages, mais je dois dire Python. Même si la langue elle-même est correcte, je déteste juste les retraits ""! = "\ T" etc. Même si l'idée d'une fin de portée "automatique" est bonne, cela conduit simplement à trop d'erreurs/temps passé à appuyer 200 fois sur l'espace pour utiliser le code d'autres personnes :(

    0
    cwap