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

Lud*_*erl 44 programming-languages

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


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

虽然有很多关于最佳编程的讨论,但我想听听你曾经使用过的最糟糕的编程语言的故事,我想知道你到底是什么烦恼.

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


这个问题不是主观的.如果一种语言只支持单个字符标识符(请参阅我自己的答案),那么这是一个不容争议的方式.


编辑

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

更新2009-07-01 19:15 GMT

语言概述现已完成,涵盖102个答案中的103种不同语言.我决定对什么算作编程语言松懈,包括任何合理的东西.感谢大卫对此的评论.

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

ABAP, 所有20世纪语言, 所有拖放语言, 所有专有语言, APF, APL (1), AS400, Authorware, Autohotkey, BancaStar, BASIC, Bourne Shell, Brainfuck, C++, Centura Team Developer, Cobol (1), Cold Fusion, Coldfusion, CRM114, Crystal语法, CSS, Dataflex 2.3, DB/c DX, dbase II, DCL, Delphi IDE, 门DXL, DOS批处理 (1), Excel宏语言, FileMaker, FOCUS, Forth, FORTRAN, FORTRAN 77, HTML, Illustra Web刀片, Informix第四代语言, Informix Universal Server Web刀片, INTERCAL, Java, JavaScript (1), JCL (1), karol, LabTalk, Labview, Lingo, LISP, Logo, LOLCODE, LotusScript, m4, Magic II, Makefiles, MapBasic, MaxScript, Meditech Magic, MEL, mIRC Script, MS Access, MUMPS, Oberon, C的对象扩展, Objective-C, OPS5, Oz, Perl (1), PHP, PL/SQL, PowerDynamo, PROGRESS 4GL, prova, PS-FOCUS, Python, 正则表达式, RPG, RPG II, Scheme, ScriptMaker, sendmail.conf, Sma lltalk, Smalltalk, SNOBOL, SpeedScript, Sybase PowerBuilder, Symbian C++, System RPL, TCL, TECO, Visual Software Environment, Tiny praat, TransCAD, troff, uBasic, VB6 (1), VBScript (1), VDF4, Vimscript, Visual Basic (1), Visual C++, Visual Foxpro, VSE, Webspeed, XSLT

覆盖80386汇编程序,VB6和VBScript的答案已被删除.

bau*_*ack 212

PHP(没有特别的顺序)

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

我还有其他语言的牛肉.这些只是一些.杰夫阿特伍德有一篇关于PHP糟透了的帖子.他还说没关系.我不同意,但我们有.

  • 我不同意.它使PHP编程变得非常糟糕.而且存在的多个框架会造成巨大的混乱.在这里搜索,看看有多少关于选择正确的PHP框架的结果. (64认同)
  • -1我不喜欢PHP的精神分裂命名惯例,但在一天结束时,那又怎么样?还有,"zillion功能"是不是很糟糕?选择使语言有效.IDE存在,因此我们不必记住函数名称.而且最好花钱买其他东西,比如啤酒. (46认同)
  • @Bob,几乎没有花时间在PHP上我对语言没有意见.说过你对批评的辩护是荒谬的.主要的批评是函数不遵循一致的命名约定,你的回答是"你只是习惯了不一致".这个问题的目的是学习以前语言中的"错误",学习和记忆的任何障碍,没有任何合理的收益应该被认为是一个错误 (41认同)
  • 可悲的是,你的批评是如此真实,但人们仍然使用这种语言. (25认同)
  • 我可以想到很多关于PHP为什么不好的技术论据 - 命名标准,_real_函数,常数行为变化(魔术引号,魔术引号,魔术引号,魔术引号关闭).但从一开始,从技术角度来看,PHP仍然是一种相对称职的语言.它真正的问题是它的用户群 - 刚刚完成第一个教程的14岁孩子,并决定另外推广/打击PHP及其替代品.它为所有不良元素的生长创造了一个回声室.MySQL的情况大致相同,只是规模要差得多. (8认同)
  • PHP的命名不一致性部分地通过其文档的详尽,可用和可访问性得到了缓解. (6认同)
  • 我对PHP的唯一抱怨是它使得可怕的代码易于编写,并且代码很不方便.几乎总有一种更好的语言可供选择......但它太容易了; 你可以在很短的时间内完成很多工作.这有真正的价值.PHP是我不会停止使用的最糟糕的语言.;) (6认同)
  • 我只是想知道它有多少downvotes ... (5认同)
  • @Bill Gates我想指出,我为什么提出技术论证为什么PHP很糟糕.你会注意到我的答案不是"PHP SUX0RS !!!!!! 1111oneoneone"我希望人们投票,因为他们同意我的理由而不是盲目投票,因为它是关于PHP糟透了. (3认同)

Che*_*eso 101

XSLT.

  • 首先,XSLT令人费解.这个比喻与我所知道的其他任何东西完全不同.
  • 这个东西是由一个如此深刻的尖括号设计的委员会设计的,它作为一个奇怪的弗兰肯斯坦而出现.
  • 指定输出格式所需的奇怪咒语.
  • 内置的,无形的规则.
  • 奇怪的螺栓固定的东西,像脚本.
  • 对XPath的依赖.
  • 直到最近,工具支持相当渺茫.在早期调试XSLT是在完全黑暗中导航的练习.这些工具改变了这一点,但仍然是XSLT在我的列表中名列前茅.

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

  • XSLT是一种函数式编程语言.我觉得不那么痛苦. (21认同)
  • 我怀着激情憎恨XSLT. (11认同)
  • 3."奇怪的螺栓固定的东西,像脚本".在XSLT中没有这样的东西.4."对XPath的依赖".来吧,这是XSLT最大的优势,使它如此强大.您是否听说XPath不是作为独立语言设计的,必须托管?5."工具支持一直很小,直到最近.在早期调试XSLT是在完全黑暗中导航的练习.这些工具改变了这一点,但仍然是XSLT在我的名单之上".你在这里错过了最先进的技术:Oxygen,VS 2005 +,10岁的XSelerator.和我的*XPathVisualizer从2000年:) (5认同)
  • XSLT非常强大,可以完成一些非常复杂的工作,但是完全没有你知道它是如何工作的.由于频繁的递归,它的处理器很重. (2认同)

bbu*_*ser 96

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

只是我的两分钱.

  • 变量+ if + goto ==图灵完成 (19认同)
  • 微软同意,进入powershell! (4认同)
  • 是的,如果我必须选择一种最大化`installedBaseSize*terribleness`的语言,它将是DOS批处理文件.*当然*你使用`FOR`命令来获取文件的完整路径! (2认同)

abe*_*nky 92

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

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

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

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

我工作过的任何使用makefile的环境都有一个全职的Make专家.而所有这些都可以节省几分钟的编译时间?

  • "任何成功使用makefile的环境都有一个全职的Make专家"请参阅Recursive Make Considered Harmful来解决这个问题.制作密集,但不需要*那么糟糕.可怕的部分是,当有数十个用户时,WS灵敏度被识别为一个错误,并留在*因为*有几十个用户...... (11认同)
  • 一周中的任何一天,我都会对蚂蚁进行制作.使用一个体面的编辑器,这个编辑器具有make-aware,而tab选项主要是一个非问题(例如,emacs在捕获空白问题方面做得不错) (7认同)
  • Martin York:认识到大多数程序员都希望使用PROGRAM,而不是在构建系统上花费大量时间和知识.我们大多数人都希望构建系统"正常工作".毕竟,我们不是要求太多,只是编译并链接一些源文件; 再多一点.大规模超越其目标利基. (5认同)
  • 你认为make是坏的,与automake配对,你有一个恶魔般的全球性的不好,我拒绝尝试调试. (5认同)
  • make是如此成问题,因为有很多工具,其唯一的目的是创建和维护makefile:automake,qmake,cmake,Jam等. (4认同)
  • 我听说automake实际上是一个恶作剧. (3认同)

Rao*_*ter 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) - > String
      • 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
          
      Run Code Online (Sandbox Code Playgroud)

      我们得到了我这是一个数字,...(不,它不是一个函数),
      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网站上,名为"易编程脚本语言"的部分


    ann*_*ata 74

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

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

    恐怖,恐怖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的支持,并且可以快速建立问题的解决方案是使用AW的DLL或SWF导入功能来启用你用真实的语言进行实际的编码.

    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

    (为长度道歉,但这是宣泄)

    • 你总是可以通过他们写出语言墓志铭的优雅程度来判断某人有多么伤心 (10认同)
    • 哈哈@变量名中的空格 (9认同)
    • 我真的不喜欢你. (9认同)
    • "WYSIWYG生成的代码",我在思考时感到不寒而栗:-)感谢您的贡献,非常感谢. (6认同)

    bus*_*ter 68

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

    • 问题不在于Perl是坏事,而是使用你的同事让自己陷入严重困境是很容易的.我怀疑他们会用任何语言搞砸自己. (9认同)
    • @Andrei:我将PHP排在Perl之前,因为它至少有一种合理的方式将参数传递给函数 - 我认为必须处理$ _ [n](或重复转换)是疯狂的.当我想将2个数组传递给一个函数时,我终于放弃了使用Perl进行新的开发,并且不得不花费一天的时间阅读和试验我可以轻松完成的工作,并且在大多数其他语言中我会做几秒钟用过的. (7认同)
    • @David:我不同意.我经常努力让其他人理解我的程序,但是当我写了一套3000行的Perl程序套件时,我发现如果我有一段时间不看它,我自己很难维护它.我认为Python非常容易使用,可能比Perl更容易,但是我没有看到我用Perl做的问题......或许多人离开Python for Perl,虽然我知道几个(包括我自己)谁为Python删除了Perl. (5认同)
    • @PTBNL,哇,您在不知道如何使用数组引用的情况下编写了3000个perl线路套件?foo(\ @ bar,\ @baz)? (4认同)
    • @PTBNL,这种风格的厌恶是什么:sub foo {my($ name,$ age,%other)= @_; 在开始之前,你不能查看任何合适的Perl代码.通过粗略访问comp.lang.perl.misc这样的新闻组,可以学到很多东西.或者CPAN.一个写得很好的Perl程序就像一个漂亮女人的曲线. (4认同)

    Joh*_*yre 43

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

    • @ Meta-Knight-别忘了它不是'哪种语言更糟糕',而是'哪种语言最普遍是坏'. (2认同)

    Nos*_*dna 40

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

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

    • 有一个重新编号的实用程序?伙计,当我11岁的时候,这本可以让我得到一些工作.:) (61认同)
    • 嘿......我只是为每个行号使用了100的倍数,为插入新行留下了足够的空间......然后,在BASIC上切割后,我又转向了更好的语言.确实看到VB中保存的语言的其他类似不切实际的方面确实令人震惊!也就是说,我仍然认为老式的BASIC对于初学者来说是一个相当好的语言 - 它简单易用,交互式使用,行号实际上为CPU上的程序计数器提供了合理的抽象 - 从学习BASIC到学习程序集语言运作良好. (19认同)
    • 标准做法是将行数增加10,因此您有空间插入几行.如果你只需要插入一行,你就添加了5.如果你发现以后需要插入另一行,你会添加两到三行,并开始变得紧张...... (7认同)
    • 这里的任何人都记得在Apple电脑上编程BASIC并使用所有精彩的Beagle Bros工具吗? (4认同)
    • 一些BASIC有一个renum命令.对于其他人来说,这个过程可能真的非常糟糕 - 将您的BASIC文件保存为ASCII,在其上运行重新编号工具作为数据,然后将新的ASCII文件重新导入为代码. (3认同)
    • @JustJeff:不,行号是语言的一部分,贯穿始终.Structured Basic是一种全新的语言,与BASIC一样多. (3认同)
    • IIRC,Applesoft BASIC只会考虑变量标识符的前两个字符.如果您尝试使用前两个字符没有差异的变量名称:没有错误,没有警告,只是非常意外的行为! (2认同)

    Jor*_*ril 40

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

    • 可能是因为现在大多数人都足够聪明以避免它;-) (13认同)
    • 实际上COBOL是一种非常好的语言.在进行类型检查之前,它已经创建并标准化了.但它是在程序中内置类型检查和自动类型转换的第一批语言之一,但没有对子程序调用进行类型检查.它仍然是能够正确执行十进制算术的极少数语言之一,它对结构的处理远远超过它的时间.现代COBOL是一种非常简洁的语言,只需添加三个保留字就可以完全实现OO,它支持指针和指针算术. (13认同)
    • COBOL正在忙着成为其他地方一个笑话的妙语...... (12认同)
    • @John Saunders:这里描述的其他语言都很糟糕.COBOL美丽,精致,巴洛克风格可怕. (11认同)
    • COBOL远不及其他一些提到的那么糟糕. (5认同)

    dna*_*123 38

    流行性腮腺炎

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

    那太差了.可怕!可怕!!!

    • 为MUMPS辩护:它的时间太棒了.作为最早的ANSI标准化语言之一,文档非常棒.只有当你使用命令的单字母缩写(每个人都这样做)时,它才是神秘的.例如,您可以改写SET X = 5或SX = 5.持久的多维联合阵列!示例:存储电话号码.SET ^ PHONE("Joe Blow","home")="867-5309"太棒了.内置了类似正则表达式的模式匹配.不要误解我,它有它的弱点,但是有很多方法它仍然没有被打破,甚至40年后. (5认同)
    • 那语言WTF很难.PHP值得一提.人们称之为Perl线路噪音,如果perl是线路噪音,那么代码就是纯粹的bitrot. (2认同)
    • 我很震惊,没有人联系到这个The Daily WTF经典.http://thedailywtf.com/Articles/A_Case_of_the_MUMPS.aspx (2认同)

    Din*_*nah 37

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

    Bjarne Stroustrup

    • +1.不完全回答这个问题,但非常真实和相关.我会说"让这个评论",但随后它将被埋没在密切重新开放的评论中. (4认同)

    Hel*_*len 34

    我还没有使用过多种语言,主要处理脚本语言; 这些VBScript是我最不喜欢的.虽然它有一些方便的功能,但有些东西真让我烦恼:

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

      Set foo = Nothing
      
      Run Code Online (Sandbox Code Playgroud)

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

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

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

      Call Foo (a, b)
      
      Run Code Online (Sandbox Code Playgroud)
    • 它的英语语法太冗长了.(我是花括号的粉丝.)

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

    • 缺乏参数化类构造函数.

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

      str = "Hello, " & _
            "world!"
      
      Run Code Online (Sandbox Code Playgroud)
    • 缺乏多行评论.


    编辑:发现这篇文章:讨厌VBScript的Flangy指南.作者总结了他的抱怨,因为"VBS不是Python":)

    • 错误处理方面是最糟糕的.调试一个基于VBS构建的大型ASP应用程序(当然充满了ON ERROR RESUME NEXT函数)是纯粹的疯狂. (9认同)
    • 我个人发现函数和子函数之间的区别特别成问题.为什么调用subs不需要括号(也不允许它们),但是函数会这样做,并且调用会改变整个子范例.我讨厌它.错误处理也很痛苦(特别是在经典ASP中,退出是不明智的). (3认同)

    Joh*_*one 29

    Objective-C的.

    注释令人困惑,使用括号调用方法仍然无法在我的大脑中计算,更糟糕的是,C中的所有库函数都是使用C, - >和.中的标准运算符调用的,它看起来像是只有推动这种语言的公司才是Apple.

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

    • Objective C是在C++仍然处于起步阶段时创建的(如C with Classes),它们之间并没有任何关系.Obj-C采用Smalltalk方式做OO; C++更接近Simula.语法需要一段时间才能习惯,但是如果你保持开放的心态,语言中也有很多功能(我写了一个我在这里使用的技术:http://metatechnology.blogspot.com/2009/04 /elegant-xml-parsing-with-objective-c.html). (36认同)
    • 我喜欢Objective-C.它是动手硬件C和更高级动态语言的完美结合.语法需要时间,但命名参数非常适合可读性. (11认同)
    • 只是我使用Python越多,我就越喜欢它.我使用Objective-C越多,我就越不喜欢它. (6认同)
    • 我喜欢C,我喜欢动态语言,但我发现很难想象Objective-C.我期待着喜欢它,但我最终发现它很难读懂. (3认同)

    Joe*_*ite 28

    PROGRESS 4GL(显然现在被称为" OpenEdge高级商务语言 ").

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

    我上次使用的是版本7,早在90年代后期,所以有些可能是其中一些已经过时,但我不打赌它.

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

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

    然后添加一个事实,即一个意外的默认字段访问可能会改变它为你的表所猜测的范围,从而破坏了一些完全不相关的代码.好玩,是吗?

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

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


    R U*_*ben 28

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

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

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

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

    还有更多.成千上万的这个Lovecraftian恐怖线.

    • http://www.geocities.com/connorbd/tarpit/bancstar.html我明白你的意思了...他们相信人们的这些可憎之事?! (2认同)

    Gab*_*ona 23

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

    只是尝试连接两个字符串或进行for循环.罗.

    • 连接字符串很简单:%VAR1 %% VAR2%.还有一个for循环:http://www.robvanderwoude.com/ntfor.php.语法很丑陋,但不要声称它显然无法完成. (6认同)
    • 更高的答案重复:http://stackoverflow.com/questions/961942/what-is-the-worst-programming-language-you-ever-worked-with/962463#962463 (6认同)
    • Unix shell编程比.bat/.cmd编程更强大,更无懈可击. (5认同)
    • 大多数人在实际插入命令时会遇到多余的空白.set命令不需要使用等号的空格,因此"set a = foo"清楚地将a设置为"foo".这里并不奇怪,也许是人们认为他们得到的空白不属于那里的一个主要原因. (2认同)

    Gre*_*g D 23

    VSE,可视化软件环境.

    这是我的一位教授(Henry Ledgard博士)试图在本科/研究生学校推销我们的语言.(我觉得给他的名字并不坏,因为据我所知,他仍然是一个很大的支持者,并且欢迎有机会说服一些人,这是自切片面包以来最好的事情).当描述到的人,我的最好的比喻是,它是那种FORTRAN和COBOL的私生子的,向其中投入了一些额外的糟糕.从只有真正访问的文件夹,我用这种材料发现(有一个在那里,我其它更多这里不打算特别链接:

    VSE围绕他们所谓的"分离原则"而建立.这个想法是数据和行为必须完全隔离.想象一下C要求所有变量/数据必须在函数的开头声明,除非现在将该声明移动到其他函数也可以使用的单独文件中.当其他函数使用它时,它们使用相同的数据,而不是具有相同布局的本地数据副本.

    为什么这样做?我们从软件幸存者那里了解到可变范围规则很难. 我会包括一个引用但是,像大多数傻瓜一样,这些家伙永远都要说些什么.搜索PDF为"范围的泥潭",你会发现一些真正的启示.

    他们继续声称这在某种程度上使它更适合多进程环境,因为它更接近地模拟底层硬件实现.Riiiight.

    经常出现的另一个选择主题:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    虽然不是惊天动地,但算术的风格反映了普通用法,即任何人都可以阅读和理解它 - 而不需要了解编程语言.事实上,VisiSoft算法几乎与FORTRAN相同,包括嵌入式复杂算术. 这使程序员关心他们的专业状态和相应的工作安全感到不安.

    嗯,真的没那么关心.其中,比尔洞用来尝试出售VSE的关键卖点是规划的民主化,使业务人员不需要自己契约到谁使用疯狂,神秘的工具,工作保障的唯一目的的程序员.他利用这种非理性的恐惧来销售他的工具.(而且它有效 - 联邦政府是他最大的客户).我在文件中统计了17个"工作保障"一词的用法.例子:

    • ......只适合那些渴望人工安全的人.
    • 更多虚假的工作保障
    • 工作保障是否依赖于确保其他人无法弄清楚做了什么?
    • 工作安全是否依赖于复杂的代码......?
    • 影响接受新技术的最强大力量之一是对一个人的工作保障的看法.

    他利用这种偏执来驱动持有钱包的管理人员和技术人员之间的楔子,他们具备识别VSE的知识.这就是他把它挤进公司的方式 - "你的技术人员只是说它很糟糕,因为他们害怕会让它们过时!"


    概述文档中的一些其他选择引用:

    这种方法的另一个结果是数据在"所见即所得"的基础上被映射到内存中,并在整个过程中得到维护.这允许用户将完整结构作为字符串移动到描述每个单独字段的模板中.可以为给定的存储区域重新定义多个模板.与C和其他语言不同, 子结构可以移动而没有由于字边界对齐标准导致的未对准问题.

    现在,我不知道你,但我知道,一个所见即所得的方式来存储布局在我的优先级列表,当谈到语言的选择!基本上,他们忽略了对齐问题,因为只有在60年代和70年代设计的旧语言关注字对齐.或类似的东西.推理是虚假的.对我来说这没什么意义,我几乎立刻忘了它.

    VSE中没有用户定义的类型. 这是一个影响深远的决定,大大简化了语言.从实际角度来看,收益也很大.VSE允许设计人员和程序员按照与建模的物理系统相同的方式组织程序.VSE允许在易于阅读的逻辑属性层次结构中构建结构.

    真棒!用户定义的类型是蹩脚的.为什么我需要像InputMessage对象一样的东西:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    你可能会看到这一点并想一想,"哦,如果有点老派,那格式很好." 老派是对的.空白是重要的 - 非常重要.多余的!该1"s必须是在第3栏的1显示,它在层次结构的第一层.符号名称必须位于第5列.您的层次结构的深度限制为9.

    嗯,好的,但是那太可怕了吗?等一下:

    众所周知,对于阅读文本,使用传统的大/小写更具可读性.VSE使用全部大写(注释除外).为什么?心理学文献以散文为基础.简单来说,节目不是散文.程序更像是数学,会计,表格.程序字体(通常是Courier)几乎是普遍固定的音调,并且有充分理由 - 相关代码行之间的垂直对齐.大写的程序具有良好的可读性,经过一段时间后,我们认为更好

    没有什么比在语言层面强制执行您的意见了!没错,你不能在VSE中使用任何小写,除非它在评论中.只要保持你的CAPSLOCK,它就会被卡在那里一段时间.

    VSE子过程称为过程.此代码示例包含三个进程:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    所有上限均符合预期.毕竟,这更容易阅读.注意空格.它再次显着.所有进程名称必须从第0列开始.指令的初始级别必须从第4列开始.更深的级别必须缩进3个空格.但这并不是什么大问题,因为你不允许做像巢条件这样的事情.你想要一个嵌套的条件?好吧,只需进行另一个过程并调用它.并注意美味的 COBOL-esque语法!

    你想要循环吗?简单:

    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
    
    Run Code Online (Sandbox Code Playgroud)

    啊.

    • **软件幸存者**的问题在于它假设所有编程任务都像编写企业软件一样简单 - 显然他需要被要求实现他自己的C编译器,操作系统,图形子系统,窗口管理器和Web浏览器. (2认同)

    Lud*_*erl 22

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

    Origin LabTalk

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

    从手册:

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

    门DXL

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

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

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


    Ken*_*rdt 21

    冷融合

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

    • +1.这对设计师来说并不好.或程序员.或dB类型.我见过很多为此工作过的人而且没有人喜欢它.包括我. (5认同)

    Pan*_*rit 20

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

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

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


    Tob*_*ias 19

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

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

    • 那么Python和F#就搞砸了. (10认同)
    • LOLCODE是下一个RoR killa!:d (7认同)
    • 行为取决于*空白*的细节的任何环境都必须位于列表的顶部! (7认同)
    • 天啊.大约两年前,我试图建议一个"有趣"的语法添加(因为语法缺少整个类型的lolcat句子!! 1),并且它被否决了因为(我不是你的意思)这个功能已经存在于不同的语法.我仍然无法认真对待那些"语言"的人. (2认同)

    Tho*_*rin 19

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

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

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

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

    • mIRC脚本是地狱.想象一种编程语言,你必须使用愚蠢的黑客来处理其中有空格的字符串.由于没有字符串文字,因此无法在末尾存储带空格的字符串. (5认同)

    oɔɯ*_*ɯǝɹ 18

    常用表达

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

    • 正则表达式肯定值得进行重型单元测试,但它比混乱更强大. (9认同)
    • 对于从未学会写正则表达式的人来说,它只是一种只写的语言. (6认同)
    • 这不是完整的. (3认同)
    • -1首先是正则表达式_no_编程语言和secound它是_damn_有用的右手,我的意思是,我不需要编写(可怕的)有限状态机只是为了验证一些(可能的恶意)用户输入或解析简单的日志或者什么,它真的很棒. (2认同)

    Arn*_*psa 17

    Visual Foxpro

    • 你能详细说明原因吗? (4认同)
    • 好吧,你可以在Foxpro(用于DOS!)的一行代码中做一些事情,你仍然无法用c#中的5行代码做. (4认同)
    • VFP并不是那么糟糕.学习语法有点困难,但总的来说它对语言来说非常好.羞耻MS不再支持它.现在转换到另一个平台的代码很多. (3认同)
    • 我半同意,一半不同意.VFP试图将DOS产品的事件模型移植到Windows,这是一个史诗般的失败IMO.也就是说,长期以来VFP是我的瑞士军刀,用于执行数据库任务.它是首批允许在多个数据库之间轻松互操作的产品之一. (2认同)
    • VFP糟透了主要是因为它促进了数十亿业余爱好者"我也可以编写一个会计软件包"软件,这个软件基本上是两部分:1)人类已知的最糟糕的无法使用的会计软件包界面,2)令人讨厌的数据库,有4个表,每列150列垃圾 (2认同)
    • 很有趣,因为我的印象是VFP拥有任何lang/platform/environment最忠实的开发者基础之一.重新:"容易使用错误".那么,使语言变得困难有好处吗?提高标准,获得更好的输出? (2认同)

    Fai*_*ali 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好一点,但仍有许多类似的问题(对于他们的域),他们需要更多的锅炉板来完成比我想要和在其他脚本语言中看到的简单任务.


    dmc*_*kee 17

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

    只是想到它会让我扼杀某人.或者呕吐.或两者.

    更糟糕的是,既没有暴露出你可以直接破解的文本语言.


    Jor*_*oba 17

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

    的LotusScript

    我认为至少比php差得多.

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

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

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


    dic*_*oce 16

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

    • 大多数解释性语言都是如此,而不仅仅是Tcl.虽然这是真的,但在实践中,它听起来并不是那么糟糕.当然,我不会将解释性语言用于超关键应用程序,但是对于这种类型语言的绝大多数用途而言,这并不是什么大问题,并且可以通过适当的测试实际上消除. (14认同)
    • 这不符合语言 - 这取决于实施.JavaScript - 可能是世界上最常用的脚本语言 - 根据使用它的浏览器或应用程序以不同的方式进行解析. (3认同)
    • 究竟是什么其他解释语言是真的?我想不出一个.大多数脚本语言在执行脚本之前完全解析脚本. (2认同)

    17 *_* 26 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;
    
    Run Code Online (Sandbox Code Playgroud)


    小智 14

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


    xcr*_*mps 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
    
    Run Code Online (Sandbox Code Playgroud)

    信不信由你,多年来不得不这样做,我一直在编程.


    Ric*_*ton 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
    
    Run Code Online (Sandbox Code Playgroud)

    但是在C#中:

    if (condition1 == condition2) {
      ...
    }
    else if (condition1 == condition2) {
      ...
    }
    
    public string SomeFunction(string arg1, int arg2) {
      ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

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


    Len*_*bro 12

    Bourne Shell

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

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

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

    所以Bourne Shell赢得了我的巨额价格.只是,VB紧跟着它,但它仍然获胜.


    Ant*_*hyy 11

    在Unix,m4脚本和sendmail.conf.


    Ale*_*exC 10

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


    Pet*_*ate 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年了,我忘记了更多我记忆中的烦恼.

    • 上帝是真实的,除非宣布INTEGER - 旧的Fortran笑话. (4认同)

    cbp*_*cbp 10

    CSS

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

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

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

    "可重用性"的概念几乎以Ctrl-C Ctrl-V结束.即使是经验丰富的CSS编写者也很少会碰到其他人的样式表 - 这意味着基本的布局在世界各地都会被一次又一次地重写.

    当然它不应该采取一切措施 - 任何希望它为世界提供真正有用的东西都是通过语言的事实上的"平台" - 在Internet Explorer上残酷地冲破了岩石.

    • @ 17:这是完全错误的.CSS有局限性,但这绝对不是其中之一,你需要学习更多的CSS.@cbp:CSS完成了它的设计目标*特别好*问题是它不允许提升设计师的需求,这几乎完全是CWG和微软的错.与语言本身没什么关系,imho非常接近完美*作为一种语言*. (9认同)
    • @annakata"CSS做了它的设计做得非常好*非常好*"如果这是真的,它的目的是解决错误的问题,我认为可能就是这种情况.我听说人们捍卫CSS作为样式语言,而不是布局语言.好吧,如果你希望我的HTML是语义的,我将需要一种布局语言.我不清楚为什么首先应该在我的布局上强加语义标记的DOM结构.这已经足够糟糕了.但后来只给了我"风格"的力量,而不是"布局"可怕. (4认同)
    • 啊...... cbp:你实际上可以使用CSS为任意元素指定*表格式布局.*某些浏览器*经典地对这部分语言的实现很差并不是语言本身的错误. (2认同)

    Dal*_*idy 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的高级版本中提供用于临时禁用脚本步骤的注释.

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

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

    家伙将他的大部分仇恨都包含在骗局FileMaker 11中.


    Joh*_*ala 9

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

    如果你想用它做任何令人印象深刻的事情,它主要涉及用Java创建一个对象并找出如何将它与coldfusion的服务器连接起来,这样你就可以将它作为标记调用.我正在使用PHP,尽管PHP存在问题,但ColdFusion肯定更糟.


    Joh*_*ett 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
    
    Run Code Online (Sandbox Code Playgroud)

    正是.

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

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


    kni*_*ttl 8

    我与之合作的最糟糕的语言是"karol,机器人" - 这是一种德语编程语言.并且除了在xD屏幕上移动机器人之外什么都不做


    das*_*uki 8

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

    • 我认为当没有免费且易于集成的脚本语言时,这是有道理的 - 维基百科称TransCAD于1985年首次发布,当时就是这种情况. (9认同)

    Spl*_*iFF 8

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

    • C#是一个Ecma(ECMA-334)和ISO(ISO 23270)标准,因为它开始了.Java在2年前仍然是专有的. (49认同)
    • 很好的答案 - 我认为任何商业产品上运行的语言只是试图控制我们的人的一种策略.与所有计算机一样,所有编程语言都应该是自制的.金钱污染了它所触及的一切,并且本身就是邪恶的.这就是我用太阳能电脑用椰子和铀晶体制作的原因.现在不能再说了,我必须把我的生物质燃料搅拌成为我家种茶的热水. (45认同)
    • @Sylvain.C#语言可能是一个标准(如果你不计算它每2年更改一次的事实)但是你不能否认它将开发人员绑定到专有类库(即"Windows"表单)和仅限IDE的预期目标在Windows上工作.您不能否认C#是一种透明的尝试,让学校教授.Net _platform_而不是跨平台的ANSI C/C++.坦率地说,你的评论在技术上是正确的,但有点迂腐,并忽略了这一点.C#不是微软让世界变得更美好的一种方式 - 你知道吗.此外,是的Java很重要.还有Rebol和其他许多人. (25认同)
    • 我个人认为自由软件运动不应该垄断编程. (24认同)
    • @SpliFF:你过得非常偏执.当然,微软没有经营一家慈善机构(想到 - 他们以前的首席执行官这样做了!)但这并没有让他们所有的员工都变得邪恶.C#是由这些人设计的,不是将任何人绑定到任何平台,而是创建一个更好的编程工具.并给他们满分!如果独立工具支持更好,那将是值得称赞的,但C#是一种设计精良,标准化的编程语言. (15认同)
    • 嗯..实际上事后我应该意识到冲锋队会集结来保护帝国. (7认同)
    • @JulianR"和安装Windows也是一种选择"......什么?什么?!您不认为需要2 GB依赖关系的编程语言会被视为有缺陷吗?是的,它是一种语言缺陷,因为除了鼓励.Net集成和购买Microsoft书籍和课程之外,语言没有任何意义.这种语言造成社会伤害,浪费财务和时间压力,使学生和项目偏离更负责任的语言.所以是的......糟糕的语言.糟糕的公司.老故事. (6认同)
    • 在Linux + Mono上运行的Second Life是否算作"重要"和"与微软无关"?https://blogs.secondlife.com/community/features/blog/2008/08/21/mono-launch (5认同)
    • 我其实喜欢Windows Vista.它工作得很好.OS X也是如此.我使用的唯一可靠的Linux系统都有管理员.我更愿意依赖公司支持的软件,tbh. (4认同)
    • 我认为C#作为第一个CompSci语言很糟糕,原因与Java相同.两者都非常冗长,需要大量的样板代码.Python会好很多(它也是免费软件,但不要把我标记为嬉皮士;]) (4认同)
    • 为了清楚起见,我不认为不断变化的.NET api算作开放标准,它绝对是一个微软api.如果c#,无论平台依赖于.NET api,即使它是单声道,单声道的命运,以及用它编写的任何程序,都在很大程度上取决于一家大公司的决策和想法.还有其他语言,其中有多家公司在其中占有一席之地,因此更加安全. (3认同)
    • "我个人认为自由软件运动不应该垄断编程."这是一个矛盾的术语. (3认同)
    • 是的,除了Mono之外别无选择,但当然,这不是一个选项,因为它与C#3不是100%相同(但它是C#2),所以立即取消它作为合理的选择.只是克服你的"自由软件优步alles"态度和安装Windows也是一种选择,对于任何CS学生来说都是免费的(如在啤酒中).此外,您的疑虑不是使用语言(这是指出的开放标准),而是使用专有的.NET框架.所以-1因为没有回答这个问题,因为问题是关于语言. (2认同)
    • 就Mono而言,有许多公司在游戏中有一些皮肤,特别是Novell.请参阅此列表:http://www.mono-project.com/Companies_Using_Mono (2认同)

    Jim*_*ans 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大型机类型.花了两年时间才完成所有工作.


    Mer*_*ous 7

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


    Dan*_*man 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))
    
    Run Code Online (Sandbox Code Playgroud)

    我希望我能找到完整的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>
    
    Run Code Online (Sandbox Code Playgroud)

    Prettify不知道如何着色,quelle惊喜


    Rad*_*Rad 7

    我很惊讶没人提到Sybase PowerBuilder

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


    Mez*_*Mez 6

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

    • +1 @ mez,@ Ben我已经意识到Autohotkey是一种可怕的语言,但却是一个很棒的工具.我的意思是字符串操作会让你发疯.但它提供的在Windows中自动化任何功能的功能是无与伦比的(甚至使用AutoIT).如果只有AutoIT和Autohotkey"重新组合",AutoITs更多结构化语言和AutoHotkeys电源,它将是无与伦比的. (2认同)

    klo*_*cks 6

    RPG II ?? 任何人?

    这是最坏的检查中这个Wiki描述了一个简短的介绍到长期居住过去的日期到期的语言.

    从好的方面来说,你可以编写醉酒或清醒的节目,这并没有太大的区别


    Vik*_*ehr 6

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


    Ari*_*yck 6

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

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

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

    很难让它做任何事情.


    Joh*_*yre 5

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

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

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

    有很多语言和工具在某些方面很弱,但在处理Map Basic之后,甚至Visual Basic 3.0都感到自由了!

    * - 我不记得它是所有对象还是只有某些对象.

    • 我无法想象Visual Basic在使用任何编程语言后会感到解放,哇,它一定真的很糟糕! (5认同)
    • 我经常使用MapBasic.我没有像以前那么多的头发.相比之下,PHP是一种乐趣.对我来说最糟糕的是它似乎并没有很好地适应它的意义:制作地图.我花了很多年时间尝试制作一定比例的布局窗口.而不是缩放到1比1000,它将达到1:1001.但是后来尝试扩展到1:2000会给你1:1999!精氨酸!好吧,至少我的MapInfo地下城文字冒险,"Troglodyte Surveyor的传奇"很顺利:D (2认同)

    rtp*_*son 5

    首先,一些注意事项:我倾向于传授能够很好地满足其预期目的的语言,但是被企业界所挫败为比他们的设计师所做的更多.出于这个原因,我给VB和它的VB-office变体传递了一个.对于快速原型设计,VB很难被击败.当人们试图将它用于企业级工作时,它失败了.同为Perl,这是一个伟大的脚本工具,它以某种方式得到了晋升为CGI语言大谈特谈在当天返回.

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

    1. 缺乏体面的调试功能(Firebug有帮助,但还不够),
    2. 它只是在出现错误时停止的方式,迫使程序员添加警报("在functionX"中),以确保你使它成为functionX,并且
    3. 其令人愤怒的模糊错误消息.

    如果我被允许选择一个框架,它同样是一个简单的选择:JSF和IceFaces.

    • 你在解散JS的同时补充VB?先生,你疯了...... (24认同)
    • -1 @rtperson,你的"三大理由"与Javascript语言本身无关,与它运行的主机有关.如果你有抱怨说,Javascript使用的范围规则,或缺乏"内置"API功能,你可能会有一个观点.对于你的"问题",你应该责怪浏览器和开发环境供应商,而不是Javascript. (4认同)

    Sat*_*hya 5

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

    • 我真的怀疑他们会说C或者lisp吸了.那么,如果给出1990年代的C++,他们确实会说C++很糟糕. (9认同)

    Kir*_*lin 5

    旧的Excel宏语言将变量存储在Excel工作表中真的很令人沮丧.VBA也很糟糕.

    • 你敢侮辱乔尔斯波尔斯基?!;) (2认同)

    小智 5

    ABAP

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


    Yoo*_*Yoo 5

    没人提到Vimscript了吗?

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