编程语言中间令人无语的规则

我们都知道,软件开发人员每天都在做各种各样的决策:如何更好地实现功能、如何修复bug、如何改进应用程序性能等等。但是他们也在其他人的工作成果中继续自己的决定,例如:他们使用别人开发的编程语言,操作系统,以及各种各样的开发工具。前几代人在语言开发和系统设计上作出的一些以前的决定可能在当时是很重要的,但现在可能是不必要的。

例如,2009年,互联网的创始人蒂姆·伯纳斯-李(Tim berners- lee)承认互联网在HTTP:在两条对角线的背面,/ /没有必要,他为这一不便道歉。“我不知道他们浪费了多少时间,印刷油墨和纸张,”他在一个幽默的环境道歉中说道。

此外,对于每天编写代码的软件开发人员来说,他们的前辈的决定远远不止这些。让我们来看看一些过时的选择,让开发人员对编程语言和操作系统感到不舒服。

1 .工作Unix隐藏点文件("。“文件)

早期的Unix操作系统的设计是这样做的:当ls命令列出目录内容时,任何开始的文件或目录。默认情况下隐藏文件。

将当前(.)或根目录(.)方法隐藏在目录列表中,以有效地隐藏所有文件。从那以后,点文件常常被忽略,而且是提供恶意文件的一种简单方法。

“在过去的40年里,有多少错误是由这个小捷径引起的?”浪费了多少CPU周期?发生了多少人为错误?因此,我们应该记住,下次你想在代码中走捷径时,你必须考虑上一课。——罗伯•派克

2.JavaScript使用+字符串连接

大约20年前,当Netscape第一次开发JavaScript时,他决定使用+操作符来连接字符串,主要是在数字添加和字符串连接方面。

然而,在最后,由于JavaScript的弱类型,发现+操作符的使用通常会导致数值变量的连接,而不是值的加减。其他编程语言也可以选择不同的连接操作符,或者安排专门的程序员来严格地输入变量以避免混淆。

“当我第一次了解到JavaScript的时候,它真的会伤害我,因为不一致的输入行为使得在最终的检查中很难找到bug。””——克里斯Dutrow

3 .产品微软选择了反斜杠作为路径分隔符

1983年,微软发布了ms -dos 2.0,其中包括一个目录层次结构,如Unix。但是不同于Unix,Unix使用前斜杠(/)来拆分目录路径,微软使用反斜杠(\),原因是一个正斜杠被用来表示命令行选项,所以微软选择了反斜杠。

Unix和其他诸如Perl和C语言的反斜杠主要用于区分字符,在痛苦之后,它给程序员带来的痛苦通常是在斜杠和轴距之间来回切换,以避免错误。

“回想起来,我觉得这是个糟糕的决定,但实际上是我自己做的,也会做同样的事情。””——戴夫·林德伯格

4.Python使用缩进表示块

大多数编程语言都使用显式分隔符,例如,用花括号来表示语句的分组,但是Python不像这样,它使用领先的空白(空格和制表符)来指示哪个块属于哪一行代码。

事实上,只有那些有经验的Python程序员才会使用这个特性,而不是经常使用它给新手或程序员,更不用说如何愤怒,特别是剪切代码,粘贴代码,更改平台,或者是重构代码的时间。

在这两个平台之间的转换过程中,你会发现这是编程语言的终极目标!”——乔Zitzelberger

Tony Hoare发明了空引号

1965年,著名的英国计算机科学家Tony Hoare介绍了空引用ALGOL W语言的概念,以确保所有引用的引用都是安全的。直到现在,大多数编程语言都发现了这一发明。

编译器不会抱怨null指针,但是想要取消可能会导致运行时错误或系统崩溃引用,所以程序员必须尝试做一些防御措施或调试。

“我认为这是一个成本数十亿美元的错误。””——Tony Hoare

6.JavaScript会自动插入分号

JavaScript的分号结束了语句,但是JavaScript会自动插入一个它认为合适的分号。例如,在程序的末尾,或在新行返回语句之后。

在某些情况下,可能会有括号和新的代码块返回,在这种情况下,如果自动插入分号,就会导致语法错误。

这个特性使开发人员的工作变得有些混乱,特别是当你在压缩代码来生产环境的时候。”——迈克•尼尔森

如何表达日期

如何表示日期的问题上产生了许多更有效的选项,如只使用两个数字或数量不代表,可分为完全由四年是一个闰年,或类似Unix系统提供的基本服务是国际标准时间1月1日,公元1970年就是分钟已经过去的秒数time_t表示为一个数据类型。我们叫它们日历时间,日历时间包括时间和日期。

只有用两个数字或数字来表示年份将导致著名的Y2K问题,在闰年的过程中计算也会有很多的bug,所以一些系统将会是Y2K38问题。

在20世纪60年代,内存的价值约为1美元/字节。所以在60年代或80年代用两个数字来表达年份是有意义的。问题是,稳定和准确的软件已经没有时间去设计了。弗雷德- Krampe

本文来自企鹅号 - 北大青鸟上海博浦媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

编程内功心法:如何写代码?

写代码就是学一门语言然后开始撸代码吗?看完了我的《GoF 设计模式》系列文章的同学或者本身已经就是老鸟的同学显然不会这么认为。编程是一项非常严谨的工作!

693130
来自专栏Golang语言社区

(重载)厚土Go学习笔记 | 04. 导入和导出的不同 用math.Pi来举例

菅俊菠,70后IT人,程序员到产品经理/项目经理,先后涉猎教育、企管、煤矿、电商等多个领域的系统开发和团队管理工作。擅长业务分析、团队管理,关注前沿技术,目前注...

8930
来自专栏上善若水

007尝试使用UML图

尝试使用uml图来帮助自己快速的构建稳健的程序 uml对理清自己的思路,应该是很有帮助的了

11620
来自专栏机器之心

比Python还好用的Go语言要出2.0了,你想怎么设计?

在昨天的 Go contributor 年度峰会上,与会者对错误处理和泛型的设计草案有了一个初步的了解。Go 2 的开发项目是去年宣布的,今天谷歌公布了这一语言...

13910
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列15

一、Static Nested Class 和 Inner Class的不同 Nested Class (一般是C++的说法),Inner Class (一般...

34640
来自专栏快乐八哥

JavaScript中this关键字使用

在Web开发中,前端掌握JavaScript,后台掌握PHP成为一个趋势。当然后台掌握C#/Java,当然还有Python,Ruby其中的一种,都是可以的。其实...

24390
来自专栏ThoughtWorks

后现代的系统编程语言-C++ | TW洞见

C++作为一门经典的编程语言,从上世纪八十年代起至今一直被广泛应用在系统开发和高性能计算领域。近几年来随着各种编程语言和范式的兴起,C++的身影渐渐淡出了人们...

45760
来自专栏程序员的知识天地

JavaScript编程趋势:用map和filter替换forEach

当你需要拷贝一个数组的全部或者部分到一个新数组的时候,优先使用map和filter而不是forEach。

13530
来自专栏我是攻城师

图形数据库之Neo4j核心概念介绍(二)

50060
来自专栏技术博客

VS2013中Python学习笔记[环境搭建]

Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

16920

扫码关注云+社区

领取腾讯云代金券