多年前的编程语言设计和操作系统设计的选择在当时可能显得微不足道。但这些古老的决定至今仍困扰着软件开发人员。程序员使用其他人开发的编程语言、操作系统和各种开发工具。语言开发和系统设计行业的前辈们之前做出的一些决定在当时可能是有道理的,但现在看来可能是多余的。例如,2009年,互联网创始人TimBerners-Lee承认互联网URL中http:后的两个斜杠//实际上是不必要的,并为此带来的不便表示歉意。Tim以幽默的环保角度道歉:“我不知道那两次斜杠浪费了多少时间、印刷油??墨和纸张。另外,对于每天写代码的软件开发人员来说,前人当时做出的决定是远不止这些,接下来介绍一下让开发者头疼的编程语言和操作系统的过时选择1.Unix隐藏点文件早期的Unix操作系统是这样设计的:当目录的内容通过ls命令列出,任何以.开头的文件或目录都会默认隐藏。从那时起,dotfiles就经常被忽视,成为恶意文件隐藏的简单方式。引用“在过去的40年里,有多少bug是因为这一条小捷径而被创造出来的吗?浪费了多少CPU周期?发生了多少人为错误?所以我们应该记住:下次如果你想写如果你偷工减料,你必须考虑以前的教训。”-RobPike2.JavaScript使用“+”连接字符串大约20年前Netscape首次开发JavaScript时,他决定拼接字符串主要用在数字加法和字符串拼接两个方面。但是最后结合JavaScript的弱类型,发现使用+运算符通常会导致数值变量的拼接,而不是加法和减法。其他编程语言也选择不同的连接运算符,或安排专门的程序员严格键入变量以防止混淆。引用“当我第一次学习JavaScript时,它真的杀死了我,因为不一致的键入行为使它很难在最终检查期间发现错误。”——ChrisDutrow3.微软选择反斜杠作为路径分隔符。1983年,微软发布了MS-DOS2.0,其中包括一个目录层次结构,就像Unix一样。但与Unix不同的是,Unix使用正斜杠(/)来分隔目录路径,微软使用反斜杠(\),原因是已经用正斜杠表示命令行选项,所以微软选择了反斜杠。反斜杠用于Unix和Perl、C等其他语言,主要用来区分紧跟在后面的字符,所以这给程序员带来的痛苦是经常仔细地在正斜杠和反斜杠之间来回检查,以免弄错。引用“回想起来,我认为这是一个可怕的决定,但我当时可能会做出同样的举动。》——DaveLindbergh4.Python使用缩进来表示块。大多数编程语言使用显式分隔符,例如花括号来表示语句的分组,但是Python不是这样的,它使用前导空白(空格和制表符))来指示哪个块属于哪一行代码。实际上,只有那些经验丰富的Python程序员才倾向于使用此功能,而对于那些使用它的新手或不经常使用它的程序员来说,别提有多烦人了,尤其是在切割代码时,粘贴代码,换平台,重构代码。引用“在两个平台转换的过程中,你会发现这真的是编程语言的极致特性!》——JoeZitzelberger#p#5.TonyHoare发明了空引用1965年,英国著名计算机科学家TonyHoare将空引用的概念引入ALGOLW语言中,以确保使用的所有引用都是安全的。直到现在,这项发明大多数编程语言中都存在。编译器不会抱怨空指针,但是如果你想解引用一个可能导致运行时错误或系统崩溃的引用,程序员必须以某种方式做一些防御措施或调试工作。引用“我认为它是一个耗资数十亿美元的错误。》——TonyHoare6.JavaScript自动插入分号在JavaScript中,分号表示语句的结束,但JavaScript会在它认为合适的地方自动插入分号。例如,在程序的末尾,或者在一个语句中return语句紧跟在新行之后。在某些情况下,返回后可能会有花括号和新的代码块。在这种情况下,如果自动插入分号,可能会导致语法错误。引用“此功能确实会使开发人员的生活有点混乱,尤其是当您为生产环境压缩代码时。”-MikeNelson选择方案更高效,比如只用两位或更少的数字来表示年份,能被四整除的年份是闰年,或者Unix系统提供的基本时间服务是国际标准time1970AD自1月1日00:00:00以来经过的分钟和秒数,此秒数由数据类型time_t表示。我们称之为日历时间,日历时间包括时间和日期。只使用两位或更少的数字来表示年份会导致众所周知的Y2K问题,在计算闰年的过程中也存在很多错误,一些系统仍然存在Y2K38问题。引用“在1960年代,内存的价值约为1美元/字节。因此,在60年代或80年代,使用2位数字来表示年份是合理的。问题是稳定和准确的软件比其预期的设计寿命更长。“-弗雷德克兰普-决策-仍然困扰着今天的开发人员
