软件史上的关键次优决策

时间:2008-12-18 18:00:02

标签: history

纵观软件开发的历史,有时会发生一些人(通常是未知的,可能是在不知不觉中)做出的东西,当时似乎是一个微不足道的短期决定,改变了编程世界。我想到了这种性质的事件,以及我们行业对减轻痛苦的反应是什么?

插图(我能想到的最大的一个):当IBM设计原始PC时,决定通过选择具有8位可寻址内存的半脑死亡8088来节省几美元的制造成本,而不是16位选项之一(8086,680n等)让我们接受了20年的地址偏移计算。

(作为回应,unix平台开发中的许多职业都已经开始。)

在规模另一端的某个地方,有人决定让键盘左端有一个怪物Shift Lock键,而不是Ctrl键。

34 个答案:

答案 0 :(得分:30)

Paul Allen决定在MS DOS中使用/字符作为命令行选项。

答案 1 :(得分:28)

仅为年份字段分配2位数字。

缓解是在字段溢出之前花费大量的金钱和时间来扩展它们并修复代码。

答案 2 :(得分:23)

结束了Alan Turing的职业生涯,当时他只有42岁。

答案 3 :(得分:17)

Microsoft决定使用反斜杠而不是forwardslash作为路径分隔符。并且无法虚拟化驱动器号。

答案 4 :(得分:13)

实际上是8088& 8086具有相同的存储器模型和相同数量的地址位(20)。唯一的区别是外部数据总线的宽度,对于8088和888是8位。 16位为8086。

我会说不同的操作系统(\ n - UNIX,\ r \ n - DOS,\ r \ n-Mac)使用不一致的行结尾是一个错误的决定。最终苹果公司通过制作OS-X的默认值而让步,但微软却顽固地坚持\ r \ n。即使在Vista中,记事本也无法使用\ n作为行结尾正确显示文本文件。

此问题的最佳示例是FTP的 ASCII 模式,它只是将/ UNIX中的每个/ n添加到从UNIX服务器传输到Windows客户端的文件中,即使该文件最初包含/ r / ñ

答案 5 :(得分:9)

在C(操作符优先级,愚蠢的case语句等)的设计中有许多次优决策,它们被嵌入到许多语言的许多软件中(C,C ++,Java,Objective-C) ,也许C# - 不熟悉那个。)

我相信Dennis Ritchie说他很快就会重新考虑优先权,但不会改变它。世界上没有全部三个安装和数十万行源代码。

答案 6 :(得分:8)

确定HTML应该用于标记超文本文档以外的任何内容。

答案 7 :(得分:7)

Microsoft决定使用“C:\ Program Files”作为应在Windows中安装程序的标准文件夹名称。由于带有嵌入空间的冗长位置,突然在命令提示符下工作变得更加复杂。你不能只输入:

cd \program files\MyCompany\MyProgram

每当你在目录名中有空格时,你必须用引号括住整个东西,如:

cd "\program files\MyCompany\MyProgram"

为什么他们不能简单地称它为c:\ program或类似的东西?

答案 8 :(得分:6)

苹果推翻史蒂夫·乔布斯(第一次)由一连串的糖水销售人员以及没有灵感和缺乏激情的豆类柜台领导。

答案 9 :(得分:6)

Microsoft决定不在MS-DOS中添加类似* NIX的执行/无执行文件权限和安全性。我想说,如果每个可执行文件都需要被标记为可执行文件才能在系统上执行(并且不会造成严重破坏),那么今天我们拥有的90%的Windows病毒(和间谍软件)都将被淘汰。

仅此一项决定就促成了反病毒行业的诞生。

答案 10 :(得分:6)

Gary Kildall未与IBM达成协议,向他们授权CP / M 86,因此他们不会使用MS-DOS。

答案 11 :(得分:6)

HTML作为浏览器显示语言。

HTML最初设计的是一种内容标记语言,其目的是描述文档的内容,而不会对如何显示该文档做出太多判断。除了外观对于大多数网页非常重要并且对于Web应用程序尤其重要之外,这很棒。

因此,我们一直在使用CSS,XHTML,Javascript,Flash,Silverlight和Ajax修补HTML,以便提供一致的跨浏览器显示呈现,动态内容和Web应用程序所需的客户端智能。

您有多少次希望首先完成浏览器控制语言?

答案 12 :(得分:5)

EBCDIC,IBM大型机的“标准”字符集。整理顺序是“疯狂”(字母表的字母不连续)。

答案 13 :(得分:5)

像银行这样的重要网站仍然使用“安全问题”作为忘记密码的人的次要安全措施。问莎拉佩林,当每个人都可以在维基百科上查找你母亲的婚前姓名时,它的效果如何。或者更好的是,找到Bruce Schneier写的关于它的博客文章。

答案 14 :(得分:5)

为time_t和互联网协议的时间戳使用4个字节。

这还没有让我们陷入困境 - 给它一点时间。

答案 15 :(得分:4)

Lisp使用名称“CAR”和“CDR”而不是那些基本功能合理的东西。

答案 16 :(得分:4)

DOS的8Dot3文件名,以及Windows采用文件扩展名来确定要启动的应用程序。

答案 17 :(得分:4)

Netscape的decision to rewrite their browser from scratch。这可能是导致Internet Explorer在Netscape 4.0和Netscape 6.0之间失去浏览器市场份额的因素之一。

答案 18 :(得分:4)

空引用 - billion dollar mistake

答案 19 :(得分:3)

认为密码是控制访问的一种巧妙方式。

答案 20 :(得分:3)

在计算机上使用qwerty键盘而不是dvorak。

答案 21 :(得分:2)

每个语言设计师的语法都不同,唯一的原因是“只是为了与众不同”。我正在考虑S和R,其中注释以#开头,而_是赋值运算符。

答案 22 :(得分:2)

Microsoft从原始Mac复制快捷键,但使用Ctrl而不是Command键来撤消,剪切,复制,粘贴等(Z,X,C,V等),并添加一个近乎无用的Windows拇指位置的键,与小指的众多Ctrl键功能相比几乎没有任何作用。 (Modern Macs获得一个有用的Ctrl键(用于终端命令),一个拇指位置的Command键(用于程序或系统快捷键)和一个用于键入奇怪字符的Alt(Option)键。) (见this article。)

答案 23 :(得分:2)

7位文本。然后用代码页“修复”它。编码问题有一天会让我失望。

答案 24 :(得分:2)

以空字符结尾的字符串

答案 25 :(得分:1)

Netscape决定在浏览器中支持Java。

答案 26 :(得分:1)

确定Internet协议中多字节数字的“network order”首先是高位字节。

(当时网络的异质性意味着这是一个抛硬币的决定。三十年后,英特尔衍生的处理器完全占据市场主导地位,看起来低位字节首先是更好的选择)。

答案 27 :(得分:1)

微软决定将Windows NT基于DEC VMS而不是Unix。

答案 28 :(得分:0)

在现代语言上不强制使用类似Smalltalk的一元,二元和关键字方法。它可能是自函数发明以来发明的最佳自我记录功能。

答案 29 :(得分:0)

拥有Caps Lock的密钥而不是Shift Lock,实际上它是一个Caps Reverse密钥,但Shift Lock可以控制它。

答案 30 :(得分:0)

当Atari创建并发布视频游戏E.T. 1982年的外星人,最终只是用游戏来填补垃圾填埋场......

alt text
(来源:wikimedia.org

答案 31 :(得分:0)

术语Translation Lookaside Buffer(应该按照页面缓存或地址缓存的方式调用)。

答案 32 :(得分:-1)

这些天我们已经有了有用的图书馆覆盖的内容,但是Netscape的那些决定cookie-expriation日期应该是人类可读的白痴应该采取措施永远不会见到我。

答案 33 :(得分:-3)

重新安排键盘上的字母以减慢打字效率,重新回到原来的机械打字机时代,并将其转移到数字计算机上。

The History of Qwerty