你曾经使用过的最糟糕的编程语言是什么?

时间:2009-06-07 14:08:40

标签: programming-languages

  

如果你有一个有趣的故事   分享,请发表答案,但是   不要滥用这个问题进行抨击   一种语言。


我们是程序员,我们的主要工具是我们使用的编程语言。

虽然有很多关于最好的讨论,但我想听听你的故事 您曾经使用过的最糟糕的编程语言,我想确切地知道是什么让您烦恼。

我想收集这些故事,部分是为了避免在设计语言(特别是DSL)时常见的陷阱,部分是为了避免未来的古怪语言。


这个问题不主观。如果某种语言仅支持单个字符标识符(请参阅my own answer),则以无争议的方式表示


修改

有些人担心这个问题会吸引巨魔。 趟过你所有的答案都有一点清楚。 绝大多数答案都是恰当,有用且写得很好的。

更新2009-07-01 19:15 GMT

语言概述现已完成,涵盖了来自102个答案的 103种不同语言。 我决定对什么算作编程语言而言是松懈的 什么合理的。感谢您David对此提出的意见。

以下是目前涵盖的所有编程语言 (字母顺序,与答案相关联,新条目以粗体显示):

ABAPall 20th century languagesall drag and drop languagesall proprietary languagesAPFAPL (1)AS400AuthorwareAutohotkeyBancaStarBASICBourne ShellBrainfuckC++Centura Team DeveloperCobol (1)Cold FusionColdfusionCRM114Crystal SyntaxCSSDataflex 2.3DB/c DXdbase IIDCLDelphi IDEDoors DXLDOS batch (1)Excel Macro languageFileMakerFOCUSForthFORTRANFORTRAN 77HTMLIllustra web bladeInformix 4th Generation LanguageInformix Universal Server web bladeINTERCALJavaJavaScript (1)JCL (1)karolLabTalkLabviewLingoLISPLogoLOLCODELotusScriptm4Magic IIMakefilesMapBasicMaxScriptMeditech MagicMELmIRC ScriptMS AccessMUMPSOberonobject extensions to CObjective-COPS5OzPerl (1)PHPPL/SQLPowerDynamoPROGRESS 4GLprovaPS-FOCUSPythonRegular ExpressionsRPGRPG IISchemeScriptMakersendmail.confSmalltalkSmalltalk SNOBOLSpeedScriptSybase PowerBuilderSymbian C++System RPLTCLTECOThe Visual Software EnvironmentTiny praatTransCADtroffuBasicVB6 (1)VBScript (1)VDF4VimscriptVisual Basic (1)Visual C++Visual FoxproVSEWebspeedXSLT

已删除涵盖80386汇编程序,VB6和VBScript的答案。

100 个答案:

答案 0 :(得分:212)

PHP(无特定顺序)

  • 函数名称和参数顺序不一致
    • 因为有很多函数,每个函数似乎都使用不同的命名约定和参数顺序。 “让我们看看......是foo_bar还是foobar或fooBar ......它是needle, haystack还是haystack, needle?” PHP字符串函数就是一个很好的例子。其中一半使用str_foo,另一半使用strfoo
  • 非标准日期格式字符
    • j为例
      • UNIX中(顺便说一句,这是其他人用作日期字符串格式的指南)%j返回一年中带有前导零的日期。
      • 在PHP中,date函数j返回月份中没有前导零的日期。
  • 仍然不支持Apache 2.0 MPM
    • It's not recommended.
    • 为什么不支持此功能? “当你通过没有完全独立的执行线程,完全独立的内存段和每个请求的强沙盒来使底层框架变得更复杂时,就会在PHP的系统中引入粘土脚。” Link所以...它不被支持'因为它让事情变得更难?因为只有那些容易做的事情值得做对吗? (公平地说,正如Emil H指出的那样,这通常归因于错误的第三方库不是线程安全的,而PHP的核心是。)
  • 没有原生Unicode支持
    • Native Unicode support is slated for PHP6
    • 我很高兴我们没有生活在一个全球环境中,过去我们可能需要和其他语言的人交谈,哦18 years哦等等。(公平地说,所有在这个时代不使用Unicode的事实真的让我很烦恼。我的观点是我不应该这样做任何使Unicode发生的额外工作。这不仅仅是 PHP问题。)

我还有其他语言的牛肉。这些只是一些。 杰夫阿特伍德有一个old post关于PHP糟透了的原因。他还说没关系。我不同意,但我们确实存在。

答案 1 :(得分:101)

XSLT。

  • 首先,XSLT令人费解。这个比喻与我所知道的其他任何东西完全不同。
  • 这个东西是由一个如此深刻的尖括号设计的委员会设计的,它是一个奇异的弗兰肯斯坦。
  • 指定输出格式所需的奇怪咒语。
  • 内置的隐形规则。
  • 奇怪的闩上东西,就像脚本一样。
  • 对XPath的依赖。
  • 直到最近,工具支持一直很小。在早期调试XSLT是在完全黑暗中导航的练习。这些工具改变了这一点,但仍然是XSLT在我的名单之上。

XSLT很奇怪,大多数人都会忽略它。如果你必须使用它,你需要一个XSLT萨满来为你提供神奇的咒语。

答案 2 :(得分:96)

DOS批处理文件。不确定这是否有资格作为编程语言。 并不是说你无法解决问题,而是习惯了bash ......

只是我的两分钱。

答案 3 :(得分:92)

不确定它是否是真正的语言,但我讨厌Makefiles。

Makefile在空格和TAB之间有明显的差异,所以即使两条线看起来相同,它们也不会运行相同的。

Make还依赖于许多语言的复杂隐式规则集,这些规则很难学习,但经常被make文件覆盖。

Makefile系统通常分布在许多目录中的许多文件中。 几乎没有范围或抽象,将make文件更改为几个目录可能会阻止我的源代码构建。然而,错误消息总是一个compliation错误,而不是关于make或makefile的有意义的错误。

我使用makefile的任何环境都成功拥有一名全职的Make专家。所有这些都可以减少编译几分钟?

答案 4 :(得分:79)

我见过的更糟糕的语言来自工具praat,这是一个很好的音频分析工具。在您使用脚本语言之前,它做得非常好。 叹息坏记忆。

初学者的小型praat脚本教程

    

  • 函数调用

        我们列出了至少3种不同的函数调用语法:     
              
    • 常规

              string = selected("Strings")         

      这里没什么特别的,你可以为变量字符串分配所选函数的结果。不太可怕......但是。

              
    •         
    • “我正在使用参数”

      调用一些GUI命令         Create Strings as file list... liste 'path$'/'type$'
              

      如您所见,函数名称从“Create”开始,以“...”结束。命令“将字符串创建为文件列表”是在praat上显示在按钮或菜单上的文本(我很害怕检查)。此命令采用2个参数liste和一个表达式。我将更深入地研究表达式'path$'/'type$'

              

      嗯。是的。空间不足。如果引入了空格,那么它将是单独的参数。你可以想象,括号不起作用。在描述的这一点上,我想指出变量名的后缀。我不会在这一段中发展它,我只是在戏弄。

              
    •         
    • “哦,但我想在我的变量中获取GUI命令的结果”

              noliftt = Get number of strings
              是的,我们可以在这里看到一个模式,长而奇怪的函数名称,它必须是一个GUI调用。但是没有'......'所以没有参数。我不想看到解析器的样子。         
    •     
        
  •     
  • 令人难以置信的类型系统

    (AKA Haskell和OCaml,praat来找你)     
              
    • 简单原生类型

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

      那么,那里发生了什么?         现在是时候看一下常规和表达类型了,所以我们得到了:         

                    
      • left $ ::(String,Int) - >串
      •             
      • lenght ::(String) - > INT
      •             
      • windowname $ :: String
      •             
      • line $ :: String
      •         
              如您所见,变量名称和函数名称后缀为其类型或返回类型。如果它们的后缀是'$',那么它返回一个字符串或者是一个字符串。如果没有,那就是一个数字。我可以看到将类型添加到变量的前缀以便于实现,但是为了后缀,没有抱歉,我不能

              
    •         
    • 数组类型

              为了显示数组类型,让我介绍一个'微小'循环:         
      
          for i from 1 to 4
              Select... time time
              bandwidth'i'$ = Get bandwidth... i
              forhertz'i'$ = Get formant... i
          endfor
          
              

              我得到了一个数字和...(不,它不是一个功能)
              bandwidth'i'$
              它的作用是创建字符串变量:bandwidth1$bandwidth2$bandwidth3$bandwidth4$并为它们赋值。正如您所料,您无法以这种方式创建二维数组,您必须执行以下操作:         band2D__'i'__'j'$         

              http://img214.imageshack.us/img214/3008/scaredkittylolqa2.jpg         
    •         
    • 特殊字符串调用

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

                  字符串很奇怪(至少)用语言处理。 ''用于在全局“”字符串中调用变量的值。这是怪异的。它违背了许多语言中构建的所有约定,从bash到PHP通过powershell。看,它甚至得到了重定向。不要被愚弄,它不像你心爱的外壳那样有效。不,您必须使用''获取变量值         

              
    •         
    • Da Wonderderderfulful执行模型

              

      我将通过与您讨论执行模型,对这个奇妙的演示进行最后的介绍。因此,在每个过程语言中,您都可以从上到下执行指令,这里有变量和praat GUI。那就是你在praat gui上编写所有代码,你可以调用菜单/按钮上的命令。

              

      praat的主窗口包含一系列项目,可以是:         

                    
      • 文件
      •             
      • 文件列表(由具有奇妙的长名称的函数创建)
      •             
      • Spectrogramm
      •             
      • 字符串(不要问)
      •         
              因此,如果要对给定文件执行操作,则必须以编程方式选择列表中的文件,然后按下不同的按钮以执行某些操作。如果要将参数传递给GUI操作,则必须遵循表单的GUI布局作为参数,例如“To Spectrogram... 0.005 5000 0.002 20 Gaussian ”就是这样,因为它遵循以下布局:

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

    •     
            

    毋庸置疑,我的噩梦中充满了在我周围跳舞的praat剧本并大喊“DEBUG MEEEE !!”。

    <子> 更多信息,请访问praat网站,名称为“易编程脚本语言”

  • 答案 5 :(得分:74)

    好吧,因为这个问题拒绝死亡,因为OP确实促使我回答......

    我谦卑地提议您考虑 Authorware (AW)作为可能创建的最糟糕的语言。 (n.b。我在这里回忆一下,自从我使用AW以来已经有6年了,这当然意味着有一些我甚至无法记住的可怕事情)

    the horror, the horror http://img.brothersoft.com/screenshots/softimage/a/adobe_authorware-67096-1.jpeg

    让我们先从 Macromedia产品(-10分),专有语言(-50多个)这一事实开始,主要用于创建电子学习软件和此外,非程序员和程序员可以创建的软件作为标志性语言和文本语言(-100)实现。

    现在,如果最后一个语句没有吓到你,那么你之前没有必要修改WYSIWYG生成的代码(你好Dreamweaver和Frontpage devs!),但重点是AW有一个大约12个元素的库可以被拖入流中。像“页面”元素,动画,IFELSE和 GOTO ( - 100)。当然,从流中删除对象会产生任意数量的断开的连接和工件,IDE具有不同程度的成功应对。当然,内置的向导( - 10)是这些内容的主要来源。

    幸运的是,你总是可以进入代码视图,最终你必须这样做,因为有一组有限的标志性元素,否则一些事情是不可能的。语言本身基于TUTOR ( - 50) - 如果只有野心和范围达到AW所追求的深度,那么它就是最差语言的候选者 - 关于哪个维基百科说:

      

    ...... TUTOR语言并不容易   学习。事实上,甚至有人建议   这几年的经验   以前需要这种语言   程序员可以构建值得的程序   保管。

    这是一个很好的基础,它建立在互联网兴起之前的几年里。绝对没有形式的数据结构超出数组( - 100),当然没有糖(真正的男人不使用switch语句?)( - 10),而且很大语法醋的飞溅(“ - ”是注释指示器,所以没有减量运算符!)( - 10)。语言参考文档以纸质或 zip文件格式(-100)提供,但至少您得到了开发人员运行usegroup的支持,并且可以快速建立问题的解决方案是使用DLL或SWF导入AW的功能,使您能够以真实语言进行实际编码。

    AW由一个流驱动(带有必要的PAUSE命令),因此具有线性而不是基于事件的系统(-50)的所有伴随问题,尽管有彻底的营销谎言文档不面向对象( - 50)。 所有代码重用都是通过GOTO实现的。 没有范围,很多全局( - 50)。

    这不是语言的直接错误,但显然没有源控制集成是可能的,当然也没有TDD,文档生成或您可能喜欢的任何其他附加工具。

    当然,Macromedia遇到了互联网负责人的挑战,顽固拒绝参与多年,最终产生了越野车,难以使用,安全噩梦,即Shockwave (-100)通过必需的插件(-10)序列化软件的桌面版本。随着HTML的上升,AW停滞不前,即使面对IEEE SCORM javascript 标准,仍然坚持使用它的冲击波传输。

    最终,经过多年的乞讨和承诺,Macromedia在开发中宣布了一个激进的新版AW,以解决这些问题,并在几年后将开发外包,然后取消了该项目。虽然当然 Macromedia仍在销售(EVIL BONUS -500)。

    如果需要说其他任何内容,这是允许变量名称空格的语言( - 10000)。

    如果您想体验真正的痛苦,请尝试使用不区分大小写且允许使用变量名称空间的语言阅读其他人的未注释匈牙利语符号。


    总Annakata任意分数(AAS): - 11300
    根据个人经验调整:OutOfRangeException

    (道歉,但这是宣泄)

    答案 6 :(得分:68)

    说真的:Perl。 对于初学者甚至是每天与perl一起工作的半专业人士来说,编写代码只是一种痛苦。我可以经常看到我的同事们对语言进行斗争,构建最糟糕的脚本,比如2000行,而不考虑任何公认的编码标准。这是我在编程中见过的最糟糕的混乱。 现在,你总是可以说,那些人在编码方面很糟糕(尽管他们中的一些人现在已经使用了perl很多年了,但是这种语言只是鼓励所有那些让我尖叫的怪物读一些其他人的剧本。

    答案 7 :(得分:43)

    MS Access Visual Basic for Applications(VBA)也非常糟糕。访问是完全不好的,因为它迫使你失去了一个弱的范式,并且看起来很容易上手,但是完成了一场噩梦。

    答案 8 :(得分:40)

    具有行号的Old-skool BASIC将是我的选择。如果行号之间没有空格来添加新行,则必须运行重新编号实用程序,这会导致您失去任何心理锚点。

    结果,你最终在一行中挤出了太多的语句(用冒号分隔),或者你在其他地方做了goto或gosub来完成你无法填补的工作。

    答案 9 :(得分:40)

    没有关于Cobol的答案呢? :o

    答案 10 :(得分:38)

    MUMPS

    我在这里工作了几年,但从那以后我做了一个完整的脑转储。我真正记得的是没有文件(在我的位置)和神秘的命令。

    太可怕了。可怕! HORRIBLE !!!

    答案 11 :(得分:37)

      

    只有两种语言:每个人都抱怨的语言和没人使用的语言。

    Bjarne Stroustrup

    答案 12 :(得分:34)

    我还没有使用过多种语言,主要处理脚本语言;这些 VBScript 是我最不喜欢的。虽然它有一些方便的功能,但有些事情让我很生气:

    • 使用Set关键字进行对象分配:

      Set foo = Nothing
      

      省略Set是导致运行时错误的最常见原因之一。

    • 没有结构化异常处理。错误检查是这样的:

      On Error Resume Next
      
      ' Do something
      
      If Err.Number <> 0
        ' Handle error
        Err.Clear
      End If
      
      ' And so on
      
    • 将过程调用参数括在括号中需要使用Call关键字:

      Call Foo (a, b)
      
    • 它的英语语法太冗长了。 (我是花括号的粉丝。)

    • 逻辑运营商是长期的。如果您需要测试复合条件,其中后续条件依赖于前一条件的成功,则需要将条件放入单独的If语句中。

    • 缺少参数化类构造函数。

    • 要将语句包装成多行,必须使用下划线:

      str = "Hello, " & _
            "world!"
      
    • 缺乏多行评论。


    修改:找到了这篇文章:The Flangy Guide to Hating VBScript。作者总结了他的抱怨,因为“VBS不是Python”:)

    答案 13 :(得分:29)

    目标-C

    注释令人困惑,使用括号调用方法仍然无法在我的大脑中计算,更糟糕的是C中的所有库函数都是使用C中的标准运算符调用的,&gt;而且,似乎推动这种语言的唯一公司是Apple。

    我承认我在为iPhone编程时使用了这种语言(并且正在研究OS X的编程),但感觉好像C ++只是分叉,添加了注释并强制实现和头文件是分开的会更有意义。

    答案 14 :(得分:28)

    最糟糕的语言? BancStar,放下手。

    3,000个预定义变量,全部编号,全局。没有变量声明,没有初始化。其中一半分散在范围内,保留供系统使用,但您可以自担风险使用它们。由于各种操作,会自动填写一百个左右,而不会列出哪些操作。它们都适合38k字节,并且没有任何保护缓冲区溢出。如果您错误地声明了输入字段的长度,系统会高兴地让用户在10字节字段中放入20个字节。至少可以说,这种影响是不可预测的。

    这种语言可以让你声明一个计算出的gosub或goto;由于其局限性,这通常是必要的。条件可以向前或向后声明。想象一下“If”语句在开始之前终止20行。

    返回堆栈非常浅,(20个Gosubs左右)并且由于用户按下任何功能键启动了不同的子程序,因此您可以轻松地超出堆栈。设计师精心设计了一个“Clear Gosubs”命令来完全核对堆栈,以便解决这个问题并确保你永远不知道该程序接下来会做什么。

    还有更多。成千上万的Lovecraftian恐怖线。

    答案 15 :(得分:28)

    PROGRESS 4GL(显然现在称为“OpenEdge Advanced Business Language”)。

    PROGRESS既是语言又是数据库系统。整个语言旨在使编写蹩脚的绿屏数据输入屏幕变得容易。 (首先想象一下这对Windows的转化程度如何。)比这更漂亮的东西,无论是漂亮的屏幕,程序逻辑还是批量处理......都不是那么多。

    我上次使用的是版本7,早在90年代后期,所以有些可能有些过时了,但我不会赌它。

    • 它最初是为文本模式数据输入屏幕设计的,所以在Windows上,所有屏幕坐标都是“字符”单位,这是一些奇怪的像素数和不同数量的像素高。但是当然它们默认为比例字体,因此“字符单元”的数量与适合给定空间的字符的实际数量不对应。
    • 没有类或对象。
    • 对阵列或动态内存分配没有语言支持。如果你想要一个类似于数组的东西,你可以创建一个临时的内存数据库表,定义它的模式,然后在它上面得到一个光标。 (我在稍后的版本中看到了一些代码,他们实际上在这些内存表中构建并运送了一个原始的面向对象系统。可怕。)
    • 内置了ISAM数据库访问。(但不是SQL。谁需要它?)如果要增加Counter表中当前记录中的State字段,只需说{{ 1}}。哪个不是那么糟糕,除了......
    • 当您在代码中直接使用表格时,在幕后,他们会创建类似于不可见的魔术局部变量的东西,以保存该表格中的当前光标位置。他们猜测,其中包含此光标将作为范围的块。如果你不小心,当你退出一个块时你的光标会消失,并在稍后重置,没有任何警告。或者你将开始使用一个表并发现你没有从第一个记录开始,因为你正在重复使用其他一些块(甚至是你自己的块)的光标,因为当你没想到你的范围扩大了它)。
    • 交易对这些猜测范围进行操作。我们玩得开心吗?
    • 一切都可以缩写。对于一些攻击性较长的关键字,这一开始可能并不那么糟糕。但是,如果您有一个名为State.Counter = State.Counter + 1的变量,则可以将其称为IndexIndex,甚至可以称为Ind。 (错别字可以有非常有趣的结果。)如果你想访问数据库字段,你不仅可以缩写字段名称,而且甚至不必用表名来限定它; 他们也会在桌子上猜测。对于真正令人恐惧的结果,请将其与:
    • 结合起来
    • 除非另有说明,否则他们假设所有都是数据库访问权限。如果您访问尚未声明的变量(或者,更可能的话,如果您输入错误的变量名称),则没有编译器错误:相反,它会查找具有该名称的数据库字段...或缩写的字段那个名字。

    猜测是最糟糕的。在缩写和默认字段之间,如果你不小心,你可能会得到一些讨厌的东西。 (忘记将I声明为局部变量,然后再将其用作循环变量?没问题,我们只需随机选择一个表,获取当前记录,并完全删除任意选择的字段,其名称以I!)

    然后添加一个事实,即偶然的默认字段访问可能会改变它为表格猜测的范围,从而打破一些完全不相关的代码片段。好玩,是吗?

    他们还有一个语言内置的报告系统,但我显然压抑了它的所有记忆。

    当我找到另一份使用Netscape LiveWire(服务器端JavaScript命运多变的尝试)和经典ASP(VBScript)的工作时,我就在天堂。

    答案 16 :(得分:23)

    答案 17 :(得分:23)

    DOS / Windows上的.bat files scripting language。上帝只知道这个人有多么强大,特别是如果你将它与Unix shell语言进行比较(它们也不是那么强大,但仍然更好)。

    尝试连接两个字符串或进行for循环。全息

    答案 18 :(得分:22)

    以下是对我自己的问题的贡献:

    Origin LabTalk

    我在这方面的最爱是Origin LabTalk。 在LabTalk中,字符串变量标识符的最大长度为一个字符。 也就是说,根本只有26个字符串变量。更糟糕的是,其中一些被Origin本身使用,目前尚不清楚哪些。

    从手册:

      

    LabTalk使用%表示法来定义   一个字符串变量。合法的字符串   变量名必须是%字符   然后是单个字母   字符(从A到Z的字母)。   字符串变量名称是   不区分大小写。所有26个字符串   存在的变量,Origin本身   使用14。

    门DXL

    对我而言,我认为第二差是Doors DXL。 编程语言可以分为两组: 具有手动内存管理(例如删除,免费)和具有垃圾收集器的那些。 有些语言提供这两种语言,但DXL可能是世界上唯一的语言 也不支持。好吧,说实话,这只适用于字符串,但是,嘿,字符串并不完全正确 需求工程软件中最少使用的数据类型。

    结果是字符串使用的内存永远无法回收 DOORS DXL像筛子一样泄漏。

    DXL中还有无数其他怪癖,仅举几例:

    答案 19 :(得分:21)

    冷融合

    我想这对设计师来说很好,但作为程序员,我总觉得一只手被绑在背后。

    答案 20 :(得分:20)

    与我合作过的最糟糕的两种语言是APL,它与其年龄的语言相比众所周知,而TECO是原始Emacs编写的语言。两者都因其简洁,难以理解的语法而着名。

    APL是一种数组处理语言;它非常强大,但几乎不可能阅读,因为每个角色都是操作员,而且许多角色都没有出现在标准键盘上。

    TECO有类似的外观,出于类似的原因。大多数字符都是运算符,这种特殊目的语言专门用于编辑文本文件。它好一点,因为它使用了标准字符集。它确实具有定义函数的能力,这就是为emacs赋予生命的东西 - 人们写了宏,并且只在一段时间后才调用它们。但是弄清楚一个程序做了什么或写了一个新程序是一个很大的挑战。

    答案 21 :(得分:19)

    HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
    KTHXBYE
    

    说真的,最糟糕的编程语言是Makefiles。选项卡完全不可理解,它们具有语法意义,甚至不是调试器来查找正在发生的事情。

    答案 22 :(得分:19)

    我不确定你是否打算包含脚本语言,但我看过TCL(这也很烦人),但是...... mIRC脚本语言让我感到厌烦。

    由于解析中的一些疏忽,当它不应该是空白时,它是空白的。条件语句有时会因为这个而被跳过。打开块语句不能在单独的行等上完成。

    除此之外,它只是充满了混乱,不一致的语法,可能是为了使基本的东西变得容易,但同时使任何更复杂的东西几乎不可读。

    我丢失了大部分的mIRC脚本,或者我可能已经找到了一些很好的例子,说明它迫使你创造了一个可怕的混乱:(

    答案 23 :(得分:18)

    正则表达式

    这是一种只写语言,很难验证它是否适用于正确的输入。

    答案 24 :(得分:17)

    我无法相信没有人说过这一句:

    <强>的LotusScript

    我认为至少比php差得多。

    不是语言本身遵循类似于Visual Basic的语法,事实上它似乎有很多功能用于极其无用的东西,你永远不会(或百万次使用),但缺乏支持你每天都会使用的东西。

    我不记得任何具体的例子,但他们就像:

    “好的,我有一个事件来检查鼠标指针是否在表单的上角,我没有表单的双击事件!! ?? WTF ??”

    答案 25 :(得分:17)

    两次我不得不在'语言'中工作,在那里你将模块拖放到页面上并用线条将它们链接在一起以显示数据流。 (一个声称是RDBM,另一个是通用数据采集和数字处理语言。)

    只是想到它会让我扼杀某人。或者呕吐。或两者兼而有之。

    更糟糕的是,它们都没有暴露出你可以直接破解的文本语言。

    答案 26 :(得分:17)

    Visual Foxpro

    答案 27 :(得分:17)

    我发现自己避免使用 VBScript / Visual Basic 6

    我主要使用C ++,javascript,Java来处理大多数任务,并在需要时使用ruby,scala,erlang,python,汇编程序,perl。

    我和大多数其他有理智的polyglots /程序员一样,强烈认为你必须使用正确的工具来完成工作 - 这需要你了解你的领域并理解你的工具。

    我对VBscript和VB6的问题是当我使用它们来编写窗口或办公应用程序(适合它们的域)时 - 我发现自己在使用该语言时遇到困难(它们不能成为正确的工具)。

    VBScript缺乏易于使用的本机数据结构(例如关联容器/映射)和其他怪癖(例如用于分配给对象的设置)是一种不必要且令人沮丧的烦恼,特别是对于脚本语言。将它与Javascript(我现在用于编写wscript / cscript窗口并执行activex自动化脚本)进行对比,这更具表现力。虽然有一些事情可以更好地与vbscript一起工作(例如从COM对象来回传递数组稍微容易一些,虽然使用jscript将事件处理程序传递到COM组件更容易),但我仍然对编码器的数量感到惊讶仍然使用vbscript编写脚本窗口 - 我敢打赌,如果他们用两种语言编写相同的程序,他们会发现jscript与vbscript相比更多,因为jscript的本机哈希数据类型和闭包。

    Vb6 / VBA虽然比一般的vbscript好一点,但仍有许多类似的问题(对于他们的域名),他们需要更多的锅炉板来完成比我想要和在其他脚本语言中看到的简单任务。

    答案 28 :(得分:16)

    TCL。它只是在执行代码之前编译代码,所以如果你的代码在测试时从未进入分支A,有可能在某一天,在字段中它下降到分支A,它可能有一个语法错误!

    答案 29 :(得分:16)

    在25年以上的计算机编程中,到目前为止,我遇到的最糟糕的事情是MUMPS的衍生物,称为Meditech Magic。它比PHP希望的更加邪恶。

    甚至不使用'='进行分配! 100 ^ b为b赋值100,读作“100转到b”。基本上,这种语言从上到下发明了自己的语法。所以无论你知道多少种编程语言,Magic对你来说都是一个完全的谜。

    这是用一种语言可憎写的墙上的100瓶啤酒:

    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;
    

    答案 30 :(得分:14)

    标志......该死的乌龟永远不会去我想要的地方。

    答案 31 :(得分:14)

    troff

    告诉你我多大了。你可以在里面做一些非常甜蜜的事情,但它很粗糙。那些认为Perl不可读的人应该检查一下。

    我的意思是:

    .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
    

    不管你信不信,在这么多年之后,我一直坚持编程。

    答案 32 :(得分:13)

    我真的不喜欢Visual Basic,甚至是.NET版本。坦率地说,我发现语言的核心方式是冗长的。

    例如:

    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
    

    但在C#中:

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

    显然许多其他语言如F#,Python等都不那么冗长。老实说,由于这个原因,我使用VB的时间比其他语言长两倍。

    我知道这是一个非常浅薄的答案,部分原因是它没有解决一些语言问题(比如PHP过度使用全局函数)。但是从人文主义的“体验导向”的角度来看,VB只会让我脾气暴躁。

    答案 33 :(得分:12)

    Bourne Shell

    我曾经为电信公司运行发票系统。这意味着手动运行一系列命令,每个命令都可以收集,准备,计算,格式化并最终打印发票。这通常是以批量形式完成的,因此我被告知要为哪些客户编号开具发票,我会批量生产。

    这很无聊。所以我开始自动化它。不幸的是,服务器上允许的唯一语言是......没有。完全没有。所以我必须在shell脚本中编写所有内容。这是一种真正荒谬而奇异的语言。没有什么比这更有意义了。这是不一致和过度稀疏,所以两个相似的事情可能做完全不同的事情,因为一个?来自一个稍微不同的地方。使用反引号作为语言的一部分只是纯粹的邪恶。它们甚至与某些字体中的单引号看起来不同!

    我的编程经历更糟糕。更糟糕的是。但那些一直涉及维护其他人的奇怪代码。但这必须是我用过的最糟糕的语言。比DOS批处理文件差?哦,是的。 DOS批处理文件的主要问题是它们是原始的。你必须找到聪明的方法让它真正做一些有用的事情。但语法本身并没有那么糟糕。它只是没有足够的内置功能。比Visual Basic更糟糕?哦,是的,毫无疑问,虽然我承认我在MS Access中为这个Bourne Shell系统编写了一个UI,这几乎是可怕的,但差不多。他们通过Sybase进行了沟通,因此我需要学习Sybase SQL,这也非常可怕。但仍然不像sh-scripting那么可怕。

    所以Bourne Shell为我赢得了巨大的价格。只是,随着VB接近它,但它仍然获胜。

    答案 34 :(得分:11)

    在Unix中,m4脚本和sendmail.conf

    答案 35 :(得分:10)

    <强> CSS

    对于基本造型来说,OK和选择器非常酷,但是对于盒子模型,浮动和清理有一点点虐待狂。

    破解语言以使其完成基本的操作,例如将一个框移到另一个框下面,这些都是在一天之内完成的。

    在这里,我们生活在未来,只是让基本的设计元素工作,如圆角或阴影,是徒劳的。

    “可重用性”的概念几乎以Ctrl-C Ctrl-V结束。即使是经验丰富的CSS编写者也很少会碰到别人的样式表 - 这意味着基本的布局经常在世界各地反复重写。

    当然它不应该采取一切措施 - 任何希望它能为世界提供一些真正有用的东西,在语言的事实上的'平台'上残酷地冲破了岩石 - Internet资源管理器

    答案 36 :(得分:10)

    对我来说,最糟糕的体验是我对语言的看法是Perl。有人要求我支持一些perl脚本,这些脚本已被其他人“支持”,这些人在被要求支持后几个月就立即离开了公司。虽然语言可能没问题,但它允许代码变得不可读并且几乎不能很快地支持(除非只有1个人接触过它们)。这是一堆乱七八糟的正则表达式,伪对象,单字母变量和函数名称。它很快让我完全用python和scrap perl重写它(就是那个或我退出)。 python版本更加实用和可支持,10年后它仍在使用中,据我所知,没有人可以再次在该公司使用Perl。

    答案 37 :(得分:10)

    FORTRAN 77

    公平地说,也许在1977年这是一个非常好的语言,但到了1999年,我不得不维持一个FORTRAN 77计划,这个计划最初是由我的顾问在1970年代的某个时候担任研究生时开始的。 ,(打孔卡,orignally)。该程序被“增强”黑客攻击,被各种能力的人堵塞了二十多年。最古老的代码是ALLCAPS,充满了GOTO语句,全局变量以及参数多于我手指的函数。最初Fortran中的变量名称限制为6个字符,但为了节省字节,大多数变量都被赋予了“A”,“B”,“AA”,“II”等描述性名称。

    当然,我的大部分经验都与编写程序的方式有关,但语言并没有真正鼓励良好的编程风格:

    • 隐式输入取决于变量名的第一个字母(例如,以'I'开头'N'的名称是整数,否则默认为REAL)
    • 固定语句布局(来自穿孔卡的保留:第0列表示注释行,如果它有'C',第1-5列中的标签,第6列中的连续字符,第7-72列中的语句)
    • 声明标签(数字标签)
    • 关键词是全部大写

    幸运的是,我看了FORTRAN已有10年了,我忘记了更多我记忆中的烦恼。

    答案 38 :(得分:9)

    JCL - IBM大型机的作业控制语言......不是一种编程语言,更像是批处理文件。

    这是基于通常在作业开始时放置的穿孔卡,即相同的语法,不同的介质。 71列限制以及这些卡花钱的事实意味着冗长是COBOL来源最好的罪。这种态度延续到了非纸质对手JCL。

    我刚刚想出了在使用它的过程中如何更改主卡中的作业队列和参数。维基百科提供了以下很好的例子:

    //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
    

    正。

    值得一提的是,Cincom Mantis是一个“应用程序生成器”(读作:基于文本的表单设计器),由类似COBOL的4GL“驱动”。螳螂语是帮助我决定获得学位的语言 - 屁股中几个CICS的最后一个......

    编辑在其他地方提及DCL等...... Datatrieve我也记得。这些确实很糟糕,但仍然更喜欢VMS的东西到任何大型机。

    答案 39 :(得分:9)

    我要投票给ColdFusion。它试图成为一种很酷的脚本语言,但是用类似html的标签来完成让我疯狂 - 因为我不得不处理它已经有一段时间了,但是我记得变量声明可能是一只熊,它是在两个不同的环境中容易有略微不同版本的服务器,这两个环境的代码在两者上的工作方式都不同。

    如果你想用它做任何令人印象深刻的事情,它基本上涉及用Java创建一个对象并弄清楚如何将它与coldfusion的服务器链接,这样你就可以将它作为标记调用。我正在使用PHP,尽管PHP存在问题,但ColdFusion肯定更糟。

    答案 40 :(得分:9)

    对我来说,它必须是FileMaker

    ScriptMaker

    此屏幕截图显示了最近命名的“ScriptMaker”,它在FileMaker 9中有许多改进,例如用于复制和粘贴的Ctrl + C Ctrl + V快捷方式,以及非模态对话框,因此您可以在以下位置编辑多个脚本一旦。

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

    使用此对话框编辑单个脚本。脚本“步骤”(如左图所示)被添加到左侧列表中(通过双击),并上下移动(使用“设置Web查看器”左侧的小blob)。一次只能移动一行,并且只有在FileMaker Pro的高级版本中才能进行注释以暂时禁用脚本步骤。

    构建脚本有效地破坏了您的手腕,因为您每小时在键盘和鼠标之间交换数千次输入小配置框并重新排列代码行。

    脚本在技术上是一个过程,可以传递 ONE 参数。是的,只有一个。如果您需要多个分隔符,则必须使用某些分隔符有效地组合您的参数,将其传递给脚本,然后将参数拆分出来。在脚本完全具有参数之前(在FM7 IIRC之前),使用全局变量来传递数据是正常的。

    这个guy将他的大部分仇恨包含在骗局FileMaker 11中预览。

    答案 41 :(得分:8)

    有时候,IT部门会困扰我为什么软件公司会开发自己的脚本语言来与他们的软件进行交互,而不是构建一个可以与您选择的脚本语言交互的强大API。我的投票是TransCAD的脚本语言。

    答案 42 :(得分:8)

    我鄙视像C#和AppleScript这样的专有语言,其存在的唯一理由是将开发人员与商业平台或产品联系起来。这不是一个技术问题,但是当这些语言在学校教授时,这是一个社会问题。我有一个只安装了Linux的朋友,他在第一年的CompSci中被教授C#。是的,有单声道,但自然它总是在追赶功能和稳定性。

    答案 43 :(得分:8)

    我与之合作的最糟糕的语言是“karol,机器人” - 这是德语中的一种编程语言。除了在屏幕上移动机器人xD

    之外什么都不做

    答案 44 :(得分:7)

    Symbian C ++ 好吧,它不是C ++。它正在学习一种全新的语言,并且效果不佳。

    答案 45 :(得分:7)

    我在其他地方给出了相同的答案,但我认为它应该在这里得到它的位置:

    在90年代末期,我不得不在Informix Universal Server Web刀片(又名Illustra web刀片)中编写多个网站

    对于那些对这个可恶环境一无所知的人,它迫使你使用我遇到过的最离奇的语言。正如Joel Spolsky描述的那样

      

    当它运行时,它被证明具有我见过的唯一的编程语言,如果你可以想象的话,它不是图灵等价的。

    此处更多信息http://philip.greenspun.com/wtr/illustra-tips.html

    一个'简单'if条件的例子:

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

    我希望我能找到完整的api文件,因为事后回想一下,这将是热闹/难以置信/悲惨的。

    它的可怕性质的一个例子是它没有循环这一事实。任何形式的。可以通过创建查询并遍历其行来破解循环功能,但这是错误的,这让我感到恶心。

    编辑:我设法找到了完整的代码示例。看哪:

    <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不知道如何着色,quelle惊喜

    答案 46 :(得分:7)

    METLIFE ENGLISH LANGUAGE (MEL)

    我为一家公司工作,该公司编写了自动查找和修复Cobol和PL / I中的Y2K问题的工具。 MetLife用他们用MEL编写的200万行代码向我们询问,MEL是他们在50年代末或60年代初期开发的一种语言。 MEL是一种帮助激发Cobol的语言,其程序代码对任何现代Cobol程序员来说都相当熟悉。

    我们有一个强大的开发人员在编写一名翻译人员来破解MEL程序并纠正确定的日期。他实际上在几周内就进行了一次演示,他认为只需要3-4周的工作就能完成它的制作。很好,我们想,并决定承担这项工作。

    不幸的是,他并没有真正研究MEL的Cobol DATA DIVISION的非常原始的等价物(声明在哪里)。事实证明,每个MEL程序都提供了每个输入或输出文件的自己的视图,并且它只声明了它感兴趣的那些字段。对于变量的输入文件,可能有30或40个不同的视图记录看起来像。谈论盲人和大象!

    一个异常聪明且有动力的家伙然后接管并制定了识别哪个记录定义描述了哪个文件的语义,这个过程因许多文件中的变体记录的存在而变得更加困难。然后,他编写了算法,将每组备用记录定义统一到一个公共记录定义中,然后将旧模拟的霍尼韦尔数据类型中的所有内容映射到新的IBM大型机类型中。花了两年时间才完成所有工作。

    答案 47 :(得分:7)

    我很惊讶没人提到Sybase PowerBuilder

    • 令人困惑的语法
    • 混淆对象模型
    • 缺乏原生正则表达式支持
    • 难以使用IDE(尤其是工具调色板)

    答案 48 :(得分:6)

    RPG II ??任何人吗?

    对于一个长期过期的语言的简短介绍,这是最差的检查this Wiki description之一。

    从好的方面来说,你可以编写醉酒或清醒的程序而且没有太大的区别

    答案 49 :(得分:6)

    我认为 MaxScript ,3d studio MAX附带的脚本语言,我从来没有看到过它的语法逻辑

    答案 50 :(得分:6)

    有人提到Autohotkey中使用的脚本语言吗? 我曾经使用过最糟糕的语言。

    答案 51 :(得分:6)

    CRM114。一种专门用于与非常强大的贝叶斯过滤器连接的语言,可用于垃圾邮件过滤和类似任务。

    去年我被客户要求使用它,在查看之后,使用了Codeproject.com上的一些简单的贝叶斯代码。后来,我在CRM114原作者的某个论坛上发布了一条消息,为此道歉。

    主要问题是拉丁语派生的语法。作者承认他当时正在学习拉丁语,因此将其整合到他的项目中。因此,它获得了奇怪的运算符顺序和参数约定。这也导致使用'alius'这个词(拉丁语为'otherwise'或'else),你可以在其他任何语言中使用'else'。

    很难让它做任何事情。

    答案 52 :(得分:5)

    首先,一些注意事项:我倾向于传授能够很好地满足其预期目的的语言,但是被企业界所愚弄,比他们的设计师所做的更多。出于这个原因,我给VB和它的VB-office变体传递了一个。对于快速原型设计,VB很难被击败。当人们试图将它用于企业级工作时,它失败了。 Perl也是如此,它是一个很棒的脚本实用程序,它在当天以某种方式被提升为CGI语言 du jour

    但这种语言即使按照自己的条件也无法满足期望?对我来说,这不是竞赛: JavaScript ,原因有三个:

    1. 缺乏体面的调试功能(Firebug有帮助,但还不够),
    2. 只要出现错误就会停止它的方式,强制程序员添加警报(“在functionX中”),以确保你将其设置为functionX,并且
    3. 其令人愤慨的错误消息。
    4. 如果我被允许选择一个框架,它同样也是一个简单的选择: JSF和IceFaces

    答案 53 :(得分:5)

    旧的Excel宏语言在excel表中存储变量真的很令人沮丧。 VBA也很糟糕。

    答案 54 :(得分:5)

    还没人提到Vimscript?

    我的Vim之旅就像Coraline进入门的另一边。起初很酷,我的手指很开心,但后来我不想用VIMScript取代我的眼睛。

    答案 55 :(得分:5)

    90年代中期,我在一家小型管理咨询公司工作,使用名为MapInfo的GIS产品,该产品的脚本语言很弱,名为 MapBasic

    我不记得具体细节,但基本上当时有对象*只能在硬编码时实例化(而不是用变量实例化)。这是一个彻头彻尾的痛苦,它似乎做了你需要做的一切,直到你真正尝试实施。实施要么不可能,要么非常重要。

    我当时是个新手并且有很多困难a)预测可以做什么和不可做什么,以及b)向我的非编程经理解释原因。这令人沮丧。

    在某些领域有很多语言和工具都很薄弱,但在处理Map Basic之后,甚至Visual Basic 3.0也感到了解放!

    * - 我不记得它是全部物体还是仅存在某些物体。

    答案 56 :(得分:5)

    如果我们问自己这个问题X年下线(X = 10或20或?),我们都会在合唱中说“20世纪的所有语言都吸”了。这将是我们以一种截然不同的方式做事的范式转变......虽然我无法想象如何!

    答案 57 :(得分:5)

    <强> ABAP

    它用于为SAP编写应用程序。这很糟糕。

    答案 58 :(得分:4)

    天哪,你的意思是没有人使用PL/SQL?来自地狱的Oracle的产生被解释,并且存在于Oracle服务器的上下文中。所有输出都被假脱机,直到程序完成。它可以显示的输出量有绝对限制。 调试几乎是不可能的。嘎......我觉得我只是想着它。

    答案 59 :(得分:4)

    Lingo,用于Shockwave Flash(或其他任何东西)。相当可怕,基本的东西,有点太动态类型系统。编辑很糟糕,调试器很糟糕。 Arghh!

    我不得不承担我不得不承担的应用程序是由scriptkiddies编写的,它使用变量的类型来控制流程。 (如果它是一个字符串,我们处于模式A,所以它意味着X,如果它是一个int,我们处于模式B,所以它意味着Y)。 $£€£@£$#“¤#”!!

    我喜欢Python,我想在那里可以做出同样可怕的事情,但社区和工具更加精细和严谨。

    答案 60 :(得分:4)

    LabVIEW(甚至被认为是一种语言?)

    太可怕了。 如果你想扩大这个术语,那HTML也很糟糕,就像XML一样。

    答案 61 :(得分:4)

    Webspeed和SpeedScript ..太可怕了,没有解释:)。

    答案 62 :(得分:4)

    一个半生不熟的面向对象的C扩展。在嵌入式系统中,仍然有很多仅C项目。因此,不时有人认为他的面向对象的解决方案就是将这个项目变成现状所需的一切......在某个地方留下了大量的维护混乱。

    通常,这个人从谦虚和崇高的目标开始,但每次都只是远离他。他交给了一个认为这很棒的程序员。在C中的OOP,如何整洁,然后屠杀他不了解的已经悲惨的代码。很快它就无法修复了。我见过的最糟糕的一个没有驱动程序可以编译而不包括将要使用它的对象的所有头文件以及该组件用户的头文件,直到最高级别。

    如果未按预期使用,任何编程语言都将成为怪物。

    答案 63 :(得分:4)

    系统RPL ,由HP 48,49和50图表科学计算器使用。在我看来,有时候编译器实际上已经为处理器生成了更高级的语言来执行。

    答案 64 :(得分:4)

    对于我的高级设计,我们编写了佳能相机,使用CHDK生成深度图。大多数代码都是用C语言编写的,但你必须使用这种名为uBasic的荒谬语言与它进行交互。基本上,它没有用适当的解析器实现,因此变量只能是1个字母,它非常慢,如果你犯了错误,相机就会关闭。

    答案 65 :(得分:4)

    我打算对Java抱怨和呻吟,但显然它并不是那么糟糕,这本来就是拖钓,而且,我只记得更糟糕的事情:

    魔术II。

    它几乎没有资格作为一种语言。实际上,它可以更准确地描述为具有数据驱动编程模型的SQL前数据库系统。它基于精明的观察,你几乎所有用数据库表做的事情都涉及在开始迭代数据之前做一些事情,然后迭代数据,然后在你完成之后做一些事情。

    “编程”魔术涉及填写描述程序生命的三个阶段的表格中的字段。它还有一个文本模式的屏幕设计师,与这整个混乱相关。受过训练的魔术用户可以以相当快的速度淘汰报告和数据输入屏幕,这使管理层感到高兴。

    对我来说问题是该语言具有非常小的抽象设施。您可以定义可以从其他例程调用的例程。而已。除了数据库表之外没有数据结构,没有内存数组(不过你可以定义新表!)

    没有哈希表,无法以任何有意义的方式组织变量(语言确实支持)。没有名单。没有。当然,没有类似于对象模型的类或任何东西,但老实说 - 我可以没有它。我做到了。

    更糟糕的是,“程序”中的点点滴滴隐藏在你必须放大的字段中才能看到 - 某些表达式等等。所以你永远不能只读取代码屏幕并知道什么它做了。

    这件事情将数据驱动编程带到了它的终极,悲伤的顶点。这是一种痴迷,体现在编程工具中。我很高兴把那块可怜的垃圾放在我身后。

    最近,我遇到了一位在我使用Magic时与我一起工作的前同事。我已经差不多20年了,但是她很高兴告诉我她是如何负责维护我的一个项目的,并且当她在那里找到一个递归程序时她宣布失败。她从未见过有人在Magic中实现递归。从来没有人。这是一个未知领域。我认为没有人意识到这个工具能够递归。

    该项目必须在匆忙之前重写,然后才会导致某人的大脑爆炸。

    答案 66 :(得分:4)

    它的VB6 NOOOOOOOOOOOOOOOOOO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 你最终在1984年结束时像温斯顿史密斯一样......

    答案 67 :(得分:4)

    PC-FOCUS

    我在仓库库存+管理系统上工作,后台子系统在PC-FOCUS中实现。

    关于这种语言需要说的是,编程手册中有一个标题为“变通方法”的100页以上章节。

    答案 68 :(得分:4)

    FOCUS,被吹捧为'4GL'(第四代语言)。有些系统可以使用像SQL一样的FOCUS,进行数据库查询,其结果包含在BASIC或其他一些过程语言中,但我在80年代在波音公司工作的系统并没有那样。有点像经营企业的非常差的擅长。那是我讨厌的唯一编程工作。

    答案 69 :(得分:3)

    任何语言都可能是右手中最差的。不正确的团队合作使情况变得更糟。我的意思是,如果用自己的脚射击不够有趣,你可以尝试射击一些同事的脚。到目前为止,我见过的最好的语言是C ++。你可以用它来伤害同事。

    答案 70 :(得分:3)

    奥伯伦。

    在大学的第一年,每个人都必须在Oberon开设课程。我认为这个想法是为了确保没有人有一个良好的开端。该语言与Oberon OS / GUI有关,这太可怕了!我不确定是否有任何改变,但这绝对是我有史以来最糟糕的编程经验。

    答案 71 :(得分:3)

    就我遇到的语言而言,我会投票支持COBOL和Scheme。

    COBOL是商业专业人士永远不应该编写编程语言的明确证据(这是来自商业专业毕业生 - 独联体)。你不应该写半连贯的小说,并把它编成一些东西。我知道它在40年前有用,但是有人将它移植到COBOL.NET,因为大声哭泣。

    第二名是Scheme,它只有一个变量类型:链表。如果你是一个美国出生的火星人,试图学习如何思考它就像试图学习如何像北极熊一样思考。它与其他一切完全不同。

    就我专业使用的语言而言,VBScript都是下载的。这就像VB只会更糟。我曾尝试在VBScript中实现MD5算法。我必须要做的第一件事就是实现疯狂的位移操作。我没有重新发明轮子,而是寻找实施方案。我发现的那个,我没跟你开玩笑,遵循以下算法:

    1. 将您的号码转换为十六进制
    2. 将十六进制转换为字符串,例如0x08 - &gt; “08”
    3. 使用巨型选择案例语句,将每个数字转换为1和0的字符串,例如“8” - &gt; “00001000”
    4. 现在你有一个1s和0s的巨大字符串,根据需要移动它们
    5. 这是一团糟。 这是我找到的最好的一个。

      (警告:这是我记得最好的算法。它是在6年前。:))

    答案 72 :(得分:3)

    APF。 你是幸运的,从来没有听说过这个噩梦。 这是IBM大型机分层数据库/事务监视器IMS系统的一个昂贵的附加功能。 从哪里开始。

    不支持数组。如果您有十个项目的数组,那么您可以编写ITEM1,ITEM2等代码,并编写十行代码来处理每个项目。

    您的代码存储在数据库中并在运行时进行了interprated。对你的代码被分解并存储在几个记录中的东西的内部结构做。覆盖别人的代码是非常容易的。

    你们中的一些代码与事务相关联(IMS代表服务)但是你们中的一些代码与数据库记录相关联 - 如果你在每次有人访问记录时都运行了错误的程序。< / p>

    没有调试器,“编译器”只对运行时应用的大多数错误进行了基本语法检查,其中有四个错误消息。

    其中一条错误消息是'INVALID DATA TYPE' - 全部,没有变量名,没有行号,没有线索。

    简直太可怕了。

    答案 73 :(得分:3)

    RPG

    在这里不谈论角色扮演游戏,伙计们。我在大学学习了COBOL,以及RPG IV。如果有任何语言让我想用叉子挖出我的眼球,那就是RPG。它几乎是“基于列”的代码,因为你不只是从左到右编写代码,你必须确保你在正确的列中。这背后的原因是该语言最初是为打卡开发而创建的。

      

    我无法写入文件!真是太棒了!

         

    嗯嗯,   假的,你忘了一个大写字母F in   第68栏。

    答案 74 :(得分:3)

    SNOBOL有一些简洁的功能,字符串处理能力比Perl更广泛。它还有一种语句:<base string> <match string> = <replacement string> :S(<label>) :F(<label>),其中大部分组件都可以省略。控制结构是通过跳转到一个标签或另一个标签(如果存在)来完成的,具体取决于是否可以在基本字符串中找到匹配字符串。字符串可以包含各种函数和子字符串,因此合理的SNOBOL字符串可以包含您喜欢的编程语言标准背面提到的所有语法树。

    在其中编写一个解析器是微不足道的(尽管它不一定非常有效),但算术或循环之类的东西都是痛苦的。

    答案 75 :(得分:3)

    Dataflex 2.3和VDF4。

    VDF 4是让我远离Dataflex的原因。

    他们所做的最愚蠢的事情之一是使用Windows消息进行第三个鼠标按钮在IDE和编译器之间进行通信。除非你有一个3键鼠标,否则它工作正常。

    答案 76 :(得分:3)

    在FireBug存在之前使用Javascript并使用记事本对其进行编码。

    这是我生命中最可怕的代码,JS是区分大小写的,我有很多头疼的问题。 IE以一种可靠的方式检测错误...

    答案 77 :(得分:3)

    毫无疑问,这是SmallTalk。但仅限于技术性:实际的语言很好,但我们用于课堂的IDE是VisualWorks,这对于我曾经历过的任何事情来说都是最糟糕的IDE。以下是一些恐怖案例:

    - 你无法保存图像(这是整个项目包装在一个文件中),除非每一段代码在语法和语义上完全正确 - 经常崩溃,用户界面设计非常糟糕。按钮将被拉出窗户等。 - 有一次,在我做了大约2-3个小时的新工作之后,VisualWorks冻结了我,遗憾的是没有保存。幸运的是(我想),保存按钮仍然有用。所以,松了一口气,我保存了我的项目。但是,由于VisualWorks方法将项目保存为图像,当我重新打开文件时,它保存我的项目处于冻结状态。我最终不得不回到我的代码的早期版本,并且失去了几个小时的工作。

    可怕的IDE设计的最糟糕的症状: - 只有一步撤消。而不仅仅是这样。听到这个。如果删除一行代码,将光标移动到其他位置,然后单击“撤消”,它将粘贴当前光标所在的代码行,而不是最初行的位置。 WTF是那个?我认为fotain'LOTUS 1-2-3有更好的撤销功能!

    P.S。我知道我不是在谈论语言,但由于这代表了我使用该语言的经验,我觉得我仍然可以在这个帖子中合理地给出答案。 :)

    答案 78 :(得分:3)

    我用过的最糟糕的语言绝对是Oz。尝试创建多范式编程语言失败了。正如您可以想象的那样,它最终会变得模糊不清并且语法非常复杂。您有不同的分隔符来标记您正在以功能方式或以命令方式工作。我总是找到一些奇怪的定义类和功能性非副作用方法部分。

    答案 79 :(得分:2)

    CodeGear Delphi

    它真的不是我不喜欢的语言,而是IDE:CodeGear RAD Studio for Delphi。这很容易就是我用过的最糟糕,最快,最快速的IDE。我和其他Delphi程序员每天都会经常丢失小时的开发时间,因为IDE会崩溃或冻结。

    安装CodeRush后,应用程序几乎无法使用。即使没有用户输入,它也会以5-15分钟的间隔定期崩溃。更糟糕的是,神秘的错误是由基本的调试触发的,比如命中一个断点(通常情况下,调试器会遇到一个断点,只是在一个简单的线路上冻结它,就像一个变量赋值。没什么了可以做的就是让它继续下去)。如果你单独离开程序,它会保持稳定长达半小时,然后再抛出某种内存异常。

    因此,在我们花费数千美元购买CodeGear RAD Studio许可证之后,没有人想要使用它。当我离开公司时,我们所有的Delphi项目都用VIM编码。

    答案 80 :(得分:2)

    哦,来吧。在3页中,没有提及Forth?严重?

    当然,像APL一样,它很强大,它有它的位置。但是像APL一样,它在“只写语言”类别中争夺第一名。我仍然诅咒那些在80年代后期强迫我这样做的物理学教授因为他确信它将接管软件世界。

    我衷心地对宇宙中以反向波兰符号处理现实的5个人感到遗憾。或者我应该说“道歉+”?

    答案 81 :(得分:2)

    JCL(工作控制语言)必须是我曾经触及过的最糟糕的事情

    答案 82 :(得分:2)

    “Visual C ++”....如此多的遗留代码交织在一起....无处不在。

    让我爱上了Obj-C。

    答案 83 :(得分:2)

    Smalltalk中。

    我必须在大学学习。讨厌语言的各个方面。也许我们的教授只是在语言实现方面做出了愚蠢的选择,但基本上它的工作原理如下:

    • 您无法浏览任何源代码。只有一个类树,您可以在其中创建和编辑方法实现。没有办法保存代码,除了切断它们到记事本。您可以保存会话,但这些是二进制转储。

    • 整个环境都是用Smalltalk编写的,男孩 - 是慢的。每次按键时都可以看到整个屏幕重新绘制。编辑器(由于缺少加载/保存源代码而必须使用)缺少基本的编辑功能,如插入/覆盖模式。

    • 语言是纯粹的,因为不可能提前终止循环。所有使编程简单有效的内容都被禁止使用。

    • 一切都是对象。覆盖布尔值的比较运算符,整个系统崩溃。

    答案 84 :(得分:2)

    OPS5。即使考虑它现在也让我公开哭泣。

    答案 85 :(得分:2)

    对我来说,答案是Crystal语法,Crystal Reports使用的类似BASIC的语言。试图完成除了比较之外的任何事情都是困难的,最坏的情况是不可能的。当然,他们做得非常好:

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

    但以下内容根本不起作用:

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

    即使语言确实有NOT运算符。

    答案 86 :(得分:2)

    <强> PowerDynamo的

    Sybase的产品将webapp代码与您的数据一起存储在数据库中。没有变量范围,strlen()函数本质上是一个随机数生成器。

    答案 87 :(得分:2)

    也许是FORTRAN ....我仍然喜欢它。

    答案 88 :(得分:2)

    我也忘了提及prova,是的,它是一种混合语言。它是一个基于java构建的prolog实现,这意味着它很慢。他们通过调用java函数的能力来销售它,可悲的是你在执行它时会失去回溯。总而言之,你失去了两种语言的优势。我仍然不明白为什么作者没有在java中选择prolog的实现,所以你可以从java调用prolog代码而不是构建自己的解释器。

    答案 89 :(得分:2)

    我的投票是基于DATABUS的DB / C DX。我相信你们中的大多数人从来没有听说过,那些......我很抱歉......

    答案 90 :(得分:2)

    最糟糕的编程语言? - Brainfuck

    我自己没有使用它,但我会称之为最糟糕的。它通常被用作挑战,但不是用于生产(更像是:我本周末很无聊,让我们看看我是否可以重新编写tic tac toe)。在wiki上查看它的Hello World程序。

    答案 91 :(得分:2)

    dBase II(那是2,而不是3):幸运的是我没有经常使用它,它已经超过二十年了,所以除了痛苦之外我不记得太多了! IIRC,它在变量名(和其他地方?)中自由使用特殊字符使得几乎不可能阅读,并且它缺乏流量控制。似乎3得到了更多的使用(当我使用2时已经做了,但我的雇主太便宜而无法升级),但我不知道它是否更好。

    答案 92 :(得分:1)

    没有人提到过DCL ???

    答案 93 :(得分:1)

    我很惊讶没有人提到 INTERCAL :编译器语言没有代词可用的缩写词。它没有goto语句。它来自声明!

    好吧,说真的,我的两个候选人都是VB,我必须使用HTML,PHP和Javascript的组合。

    VB因为它有5种不同的循环结构。因为,虽然这样做,并且在我明白的时候做。但是你真的还需要直到做到直到???真的?

    HTML / PHP / Javascript不是因为任何语言的任何特定功能,而是因为您可以以非常混乱的方式散布它们。打开一个HTML标签,在那里有一些Javascript,在中间,启动PHP if,关闭javascript和HTML标签,然后关闭PHP,再关闭HTML和JS ....结束看起来像(([]] [)])

    这似乎只是糟糕的代码,但我还没有找到另一种方法来做我们正在做的事情。

    答案 94 :(得分:1)

    没人说AS400 ????

    我在大学就读过,这绝对是最糟糕的......

    答案 95 :(得分:1)

    I4GL(Informix第四代语言)。

    谢天谢地,它已经死了。这种语言不难看或写,但实施缺陷使它几乎无用。

    首先,它实际上是两种语言 - 解释(更灵活,更慢)和编译(几乎无用,实际上在你的一生中完成运行的语言)。当然是专有的。

    早期版本缺少一些算术运算符,因此您必须将临时数据推送到数据库并使用SQL进行数学运算。

    它应该具有多用户功能,但是由于后端(Informix Turbo,请记住?)缺少正确的锁定,而不是在锁定的行上等待90秒,然后返回有用的错误,你会得到一个具有不可用的非错误返回值的即时返回。由于I4GL在没有后端的情况下毫无用处,我认为这是语言运行时的一个缺陷。

    我曾经在I4GL循环中将所有以前程序员的Unions攻击成一系列较小的选择。原因是,工会不会在你的一生中完成。当然,项目经理已经删除了索引唯一约束,因为它们使插入过程崩溃了很多。

    答案 96 :(得分:0)

    当然,我没有 使用不同语言的经验,但我必须说Python。虽然它自己的语言还可以,我只是讨厌“”!=“\ t”等缩进。尽管“自动”范围结束的想法很好,但这只会导致太多的错误/时间花费200次空间来使用其他人的代码:(

    答案 97 :(得分:0)

    我的答案相当边缘,但我认为值得记录下来:

    HTML

    无论如何不是一种特别强大的语言,但考虑到不仅仅是熟悉它的人数,并将自己归类为程序员,我认为它应符合条件。

    许多针对PHP等语言的焦虑(在这个线索中)都源于HTML的局限性。考虑一下它的一些低点:它鼓励内容和表现的混合,它是冗长和重复的,规范仍然存在模糊的区域,并且,据说,实现传统上遭受缺乏对规范的一致性。客户端和服务器端语言的宏大生态系统很大程度上归功于直接HTML是一种痛苦。

    是的,有一些不好的古怪语言,但是将一种共同语言推到极限之外是我书中的一个更大的罪恶。

    答案 98 :(得分:-1)

    Visual Basic。我根本无法理解其神秘的语法,因为它不遵循任何编程约定。作为一个习惯于C / C ++语法的人,我可能会偏袒。但这并没有破坏VB是我曾经使用过的最糟糕的语言这一事实​​。

    答案 99 :(得分:-5)

    <强> LISP

    也许语言没有任何问题,但它超出了我的范围。