软件史上关键的次优决策
纵观软件开发的历史,有时会发生一些人(通常是未知的,可能是无意的)做出了当时看似微不足道的短期决定,却改变了编程世界。 我想到了哪些此类事件?我们的行业为减轻痛苦采取了哪些应对措施?
插图(我能想到的最大的一个):当 IBM 设计最初的 PC 时,决定通过选择具有 8 位可寻址内存的半脑死亡 8088 来节省几美元的制造成本,而不是其中之一16 位选项(8086、680n 等),注定了我们需要 20 年的地址偏移计算。
(作为回应,许多 Unix 平台开发职业开始了。)
天平的另一端有人决定在键盘的左端放置一个巨大的 Shift Lock 键,而不是 Ctrl 键。
Throughout the history of software development, it sometimes happens that some person (usually unknown, probably unwittingly) made what, at the time, seemed a trivial, short-term decision that changed the world of programming. What events of this nature come to mind, and what have been our industry's response to mitigate the pain?
Illustration (the biggest one I can think of): When IBM designed the original PC, and decided to save a couple dollars in manufacturing costs by choosing the half-brain-dead 8088 with 8-bit-addressable memory, instead of one of the 16-bit options (8086, 680n, etc.), dooming us to 20 years of address offset calculations.
(In response, a lot of careers in unix platform development were begun.)
Somewhere toward the other end of the scale lies the decision someone made to have a monster Shift Lock key at the left end of the keyboard, instead of a Ctrl key.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
Paul Allen 决定在 MS DOS 中使用 / 字符作为命令行选项。
Paul Allen deciding to use the / character for command line options in MS DOS.
只为年份字段分配 2 位数字。
缓解措施是在字段溢出之前花费大量金钱和时间来扩展它们并修复代码。
Allocating only 2 digits for the year field.
And the mitigation was to spend huge amounts of money and time just before the fields overflowed to extend them and fix the code.
年仅 42 岁的阿兰·图灵就结束了他的职业生涯。
Ending Alan Turing's career when he was only 42.
Microsoft 决定使用反斜杠而不是正斜杠作为路径分隔符。 并且无法虚拟化驱动器号。
Microsoft deciding to use backslash rather than forwardslash as the path delimiter. And failing to virtualize the drive letter.
实际上8088& 8086 具有相同的内存模型和相同的地址位数 (20)。 唯一的区别是外部数据总线的宽度,8088 和 8088 为 8 位。 8086 为 16 位。
我想说,不同操作系统(\n - UNIX、\r\n - DOS、\r - Mac)使用不一致的行结尾是一个糟糕的决定。 最终,Apple 做出了让步,将 \n 设置为 OS-X 的默认值,但 Microsoft 却顽固地坚持 \r\n。 即使在 Vista 中,记事本也无法正确显示使用 \n 作为行结尾的文本文件。
此问题的最佳示例是 FTP 的 ASCII 模式,它只是将 /r 添加到从 UNIX 服务器传输到 Windows 客户端的文件中的每个 /n,即使该文件最初包含 /r/n。
Actually the 8088 & 8086 have same memory model and same number of address bits (20). Only difference is width of external data bus which is 8 bit for 8088 & 16 bit for 8086.
I would say that use of inconsistent line endings by different operating systems (\n - UNIX, \r\n - DOS, \r - Mac) was a bad decision. Eventually Apple relented by making \n default for OS-X but Microsoft is stubbornly sticking to \r\n. Even in Vista, Notepad can not properly display a text file using \n as line ending.
Best example of this problem is the ASCII mode of FTP which just adds /r to each /n in a file transferred from a UNIX server to Windows client even though the file originally contained /r/n.
C 的设计中有很多次优决策(运算符优先级、愚蠢的 case 语句等),这些决策嵌入到许多语言(C、C++、Java、Objective-C,也许还有 C#)的大量软件中。 - 不熟悉那个)。
我相信丹尼斯·里奇说过,他很快就重新考虑了优先顺序,但不会改变它。 世界上有整整三个安装和数十万行源代码。
There were a lot of suboptimal decisions in the design of C (operator precedence, the silly case statement, etc.), that are embedded in a whole lot of software in many languages (C, C++, Java, Objective-C, maybe C# - not familiar with that one).
I believe Dennis Ritchie remarked that he rethought precedence fairly soon, but wasn't going to change it. Not with a whole three installations and hundreds of thousands of lines of source code in the world.
决定 HTML 应用于标记超文本文档以外的任何用途。
Deciding that HTML should be used for anything other than marking up hypertext documents.
Microsoft 决定使用“C:\Program Files”作为 Windows 中安装程序的标准文件夹名称。 由于带有嵌入空格的冗长位置,突然间从命令提示符开始工作变得更加复杂。 您不能只输入:
任何时候目录名称中有空格,您都必须将整个目录用引号括起来,如下所示:
为什么他们不能将其命名为 c:\programs 或类似的名称?
Microsoft's decision to use "C:\Program Files" as the standard folder name where programs should be installed in Windows. Suddenly working from a command prompt became much more complicated because of that wordy location with an embedded space. You couldn't just type:
Anytime you have a space in a directory name, you have to encase the entire thing in quotes, like this:
Why couldn't they have just called it c:\programs or something like that?
苹果公司驱逐了史蒂夫·乔布斯(这是第一次),由一系列糖水推销员和毫无灵感、缺乏灵感的精算师领导。
Apple ousting Steve Jobs (the first time) to be led by a succession of sugar-water salemen and uninspired and uninspiring bean counters.
Gary Kildall 没有与 IBM 达成协议,将 CP/M 86 授权给他们,因此他们不会使用 MS-DOS。
Gary Kildall not making a deal with IBM to license CP/M 86 to them, so they wouldn't use MS-DOS.
HTML 作为浏览器显示语言。
HTML 最初被设计为一种内容标记语言,其目标是描述文档的内容,而不对该文档应如何显示做出太多判断。 这很棒,只是外观对于大多数网页来说非常重要,对于 Web 应用程序尤其重要。
因此,从那时起,我们一直在使用 CSS、XHTML、Javascript、Flash、Silverlight 和 Ajax 来修补 HTML,以便提供一致的跨浏览器显示渲染、动态内容以及 Web 应用程序所需的客户端智能。
您有多少次希望浏览器控制语言一开始就做好了?
HTML as a browser display language.
HTML was originally designed a content markup language, whose goal was to describe the contents of a document without making too many judgments about how that document should be displayed. Which was great except that appearance is very important for most web pages and especially important for web applications.
So, we've been patching HTML ever since with CSS, XHTML, Javascript, Flash, Silverlight and Ajax all in order to provide consistent cross-browser display rendering, dynamic content and the client-side intelligence that web applications demand.
How many times have you wished that browser control languages had been done right in the first place?
Microsoft 决定不在 MS-DOS 中添加类似 *NIX 的执行/不执行文件权限和安全性。 我想说,如果每个可执行文件在系统上执行(更不用说造成严重破坏)之前都需要标记为可执行文件,那么我们今天拥有的百分之九十的 Windows 病毒(和间谍软件)都将被消除。
仅这一决定就引发了防病毒行业的诞生。
Microsoft's decision not to add *NIX-like execute/noexecute file permissions and security in MS-DOS. I'd say that ninety percent of the windows viruses (and spyware) that we have today would be eliminated if every executable file needed to be marked as executable before it can even execute (and much less wreak havoc) on a system.
That one decision alone gave rise to the birth of the Antivirus industry.
使用 4 个字节作为 time_t 和互联网协议的时间戳。
这还没有影响到我们——再给它一点时间。
Using 4 bytes for time_t and in the internet protocols' timestamps.
This has not bitten us yet - give it a bit more time.
像银行这样的重要网站仍然使用“安全问题”作为忘记密码的人的二级安全措施。 问问莎拉·佩林,当每个人都可以在维基百科上查找你母亲的娘家姓氏时,这有多有效。 或者更好的是,找到 Bruce Schneier 撰写的有关此问题的博客文章。
Important web sites like banks still using "security questions" as secondary security for people who forget their passwords. Ask Sarah Palin how well that works when everybody can look up your mother's maiden name on Wikipedia. Or better yet, find the blog post that Bruce Schneier wrote about it.
EBCDIC,IBM 大型机的“标准”字符集。 整理顺序是“疯狂的”(字母表中的字母不连续)。
EBCDIC, the IBM "standard" character set for mainframes. The collation sequence was "insane" (the letters of the alphabet are not contiguous).
Lisp 使用“CAR”和“CDR”名称来代替这些基本功能的合理名称。
Lisp's use of the names "CAR" and "CDR" instead of something reasonable for those basic functions.
空引用 - 十亿美元的错误。
Null References - a billion dollar mistake.
Netscape 决定从头开始重写浏览器。 这可以说是导致 Internet Explorer 抢占 Netscape 4.0 和 Netscape 6.0 浏览器市场份额的因素之一。
Netscape's decision to rewrite their browser from scratch. This is arguably one of the factors that contributed to Internet Explorer running away with browser market share between Netscape 4.0 and Netscape 6.0.
DOS 的 8Dot3 文件名,而 Windows 采用文件扩展名来确定要启动的应用程序。
DOS's 8Dot3 file names, and Windows' adoption of using the file extension to determine what application to launch.
在计算机上使用 qwerty 键盘而不是 dvorak。
Using the qwerty keyboard on computers instead of dvorak.
认为密码是控制访问的好方法。
Thinking that a password would be a neat way to control access.
每个语言设计者都使自己的语法变得不同,而唯一的原因是“只是为了不同”。 我想到的是 S 和 R,其中注释以 # 开头,_ 是赋值运算符。
Every language designer who has made their syntax different when the only reason was "just to be different". I'm thinking of S and R, where comments start with #, and _ is an assignment operator.
微软从原始 Mac 复制了快捷键,但使用 Ctrl 而不是 Command 键来进行撤消、剪切、复制、粘贴等(Z、X、C、V 等),并在快捷键中添加了一个几乎毫无价值的 Windows 键。与小指的众多 Ctrl 键功能相比,拇指位置几乎没有任何作用。 (现代 Mac 有一个有用的 Ctrl 键(用于终端命令)、拇指位置的 Command 键(用于程序或系统快捷方式)以及用于输入奇怪字符的 Alt(选项)键。)
(参见这篇文章。)
Microsoft copying the shortcut keys from the original Mac but using Ctrl instead of a Command key for Undo, Cut, Copy, Paste, etc. (Z, X, C, V, etc.), and adding a near worthless Windows key in the thumb position that does almost nothing compared to the pinky's numerous Ctrl key duties. (Modern Macs get a useful Ctrl key (for terminal commands), and a Command key in the thumb position (for program or system shortcuts) and an Alt (Option) key for typing weird characters.)
(See this article.)
空终止字符串
Null-terminated strings
7 位文本。 然后用代码页“修复”这个问题。 编码问题有一天会杀了我。
7-bits for text. And then "fixing" this with code pages. Encoding issues will kill me some day.
确定互联网协议中多字节数字的“网络顺序”将会很高先排序字节。
(当时网络的异构性意味着这是一个掷硬币的决定。三十年后,英特尔衍生的处理器完全主导了市场,似乎优先考虑低位字节是一个更好的选择)。
Deciding that "network order" for multi-byte numbers in the Internet Protocol would be high order byte first.
(At the time the heterogenous nature of the net meant this was a coin toss decision. Thirty years later, Intel-derived processors so completely dominate the marketplace it seems lower-order-byte first would have been a better choice).
Netscape 决定在其浏览器中支持 Java。
Netscape's decision to support Java in their browser.
Microsoft 决定将 Windows NT 基于 DEC VMS 而不是 Unix。
Microsoft's decision to base Window NT on DEC VMS instead of Unix.
术语“转换后备缓冲区”(应该按照“页面高速缓存”或“地址高速缓存”的方式来命名)。
The term Translation Lookaside Buffer (which should be called something along the lines of Page Cache or Address Cache).
使用 Caps Lock 键而不是 Shift Lock 键,实际上它是 Caps Reverse 键,但带有 Shift Lock 它本来是可控的。
Having a key for Caps Lock instead of for Shift Lock, in effect it's a Caps Reverse key, but with Shift Lock it could have been controllable.