说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

编程语言中一些令人抓狂的规则

HTML文档下载 WORD文档下载 PDF文档下载
许多年前在编程语言设计和操作系统上的选择可能当时看起来无关紧要。但是,这些远古的决定至今仍然继续困扰着软件开发者。下面所介绍的就是一些在编程语言和操作系统里的那些让开发者头疼的过时的选择。

众所周知,软件开发者每天都要做各种各样的决定:如何最好的实现功能、如何修复bug、如何提升应用程序的性能等等。但是他们同样是在别人的劳动成果下面继续做自己的决定的,比如说:他们使用的是别人开发出来的编程语言和操作系统以及各种开发工具。一些语言开发和系统设计行业里的前辈以前所作出的决定在那个时候可能是很有意义的,不过在现在看来可能是多此一举。

举例而言,在2009年的时候,互联网创始人蒂姆·伯纳斯-李就承认,互联网网址中http:后面的两条斜线//其实并无必要,他为这带来的不便致歉。蒂姆以幽默的环保角度道歉说:真不知道这两条斜线浪费了多少时间、打印墨水和纸张。


除此之外,对于每天都要写代码的软件开发者来说,前辈们当时做出的令后人觉得蛋疼的决定还远不止这些。接下来就介绍一下在编程语言和操作系统里的那些让开发者头疼的过时的选择。

1. Unix隐藏dot文件(“.” 文件)

早期的Unix操作系统就这样设计过:当通过ls命令把目录内容列出来的时候,任何以 . 开始的文件或目录会在默认情况下被隐藏起来。


从目录列表里隐藏当前(.)或者是隐藏根目录(. .)的方法将所有带 . 的文件有效地隐藏起来了。从那时起,点文件经常性的会被忽视掉,同时也成为一种提供恶意文件的简单方法。

“在之前的40年里,因为这一个小小的走捷径而导致多少bug的出现?浪费了多少CPU循环?出现了多少人为失误?所以我们应该记住:下次如果你还想在代码里抄近路的话,一定要想想之前的教训。”——Rob Pike

2. JavaScript使用+字符串连接

大约在20年前,当Netscape首先开发JavaScript的时候,他决定大量使用+操作符来连接字符串,主要是用在数字加法运算和字符串连接这两方面上。


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

“当我第一次学习JavaScript的时候,真的把我害惨了,因为前后不一致的的输入行为使得很难在最后的检查过程中发现bug。”——Chris Dutrow

3. Microsoft选择反斜杠作为路径分隔符

在1983年的时候,微软发布了MS-DOS 2.0,它包括了一个目录层次结构,就像Unix。但是和Unix有所不同,Unix使用正斜杠(/)来分割目录路径,微软使用了反斜杠(\),原因是,正斜杠已经被用于表示命令行选项,所以微软选择了反斜杠。


反斜杠在Unix和其他的例如Perl 和 C语言中主要是用来区分后后面紧跟着的字符,所以这给程序员带来的痛苦就是要经常在正斜杠和反斜杠之间来来回回的兜圈子,以免出错。

“回想起来,我觉得这是一个可怕的决定,但是换成是我的话,当时可能会做出同样的举动。”——Dave Lindbergh

4. Python使用缩进表示块

绝大多数编程语言使用明确的分隔符,例如用大括号来表示语句的分组,而 Python却不是这样的,它使用前导空白(空格和制表符)来表示哪一个块属于哪一行代码。


事实上,只有那些经验丰富的Python程序员比较倾向于使用这个功能,而对于那些新手或者是不常使用它的程序员来说,别提有多恼怒了,尤其是剪切代码、粘贴代码、改变平台,或者是重构代码的时候。

“在两个平台之间转换的过程中,你会发现这真是编程语言里的极品功能啊!”——Joe Zitzelberger

5. Tony Hoare发明了空引用

在1965的时候,英国著名计算机科学家Tony Hoare将空引用概念引入到ALGOL W语言里,以确保所有使用的引用内容都是安全的。一直到现在,这一发明都存在于大部分编程语言里。


编译器是不会抱怨空指针的,但是想要废弃一个可能会导致运行时错误或系统崩溃的引用的话,那么程序员必须设法做一些防御措施或者是调试工作。

“我认为它是一个导致数十亿美元损失的错误。”——Tony Hoare

6. JavaScript使用分号插入

JavaScript中分号表示语句结束,但JavaScript会自动的在它认为合适的地方插入分号。例如在程序结尾,或者在紧接1个新行的return语句后面。


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

“这一功能着实让开发者的工作出现了一点混乱,尤其是当你为一个生产环境压缩代码的时候。”——Mike Nelson

7. 如何表示日期

在如何表示日期这一问题上已经产生过很多比较有效地选择方案了,例如只使用两个数字或者是更少的数字来表示年份,可以被四整除的年份是闰年,或者是像Unix系统那样提供的基本时间服务是国际标准时间公元1970年1月1日00:00:00以来经过的分秒,这种秒数是以数据类型time_t表示的。我们称它们为日历时间,日历时间包括时间和日期。


只使用两个数字或者是更少的数字来表示年份就会导致众所周知的Y2K问题,计算闰年的过程中也是会出现很多bug,有些系统照样会出现Y2K38 问题。

“在20世纪60年代的时候,内存的价值大约为1美元/字节。所以,在60年代或者是在80年代的时候使用2个数字来表达年份是很合理的。可问题就在于是稳定而精确的软件所运行的时间完全超出了其预期的设计时间。”——Fred Krampe

原文:InfoWorld

MDCC之移动娱乐游戏峰会:手游金玩奖即将揭晓 开源巨人火狐浏览器:9周岁生日快乐! 感受OpenStack Summit香港大会 渣打科营中心:创建以技术为核心的企业文化 抱怨IT公司人才缺乏?留住现有人才方是正途 专访Esri中国区技术总监:打造新一代WebGIS平台 TIOBE 2013年11月编程语言排行榜:C#、Transact-SQL及VB.NET厚积薄发 透过KitKat,Android或与ChromeOS融合? 利用Spring Data Neo4j搭建推荐系统 七丽借百度SiteApp移动化 分发及变现能力获大幅提升 Go语言4岁了 生日快乐 谷歌发布Web延迟基准测试工具 专访JS-Git创始人Tim Caswell:让Git运行于任一平台 一段代码引发的思考 2013年美国开发者薪资调查报告 MDCC之移动娱乐游戏峰会:金玩奖揭晓最火游戏 算法为王:且看Mac Mini如何超越1636节点的Hadoop 鲍尔默成大善人?微软正式废除员工排名评审制度 工信部软件司副司长陈英为MDCC 2013大会致开场辞 全民移动•重塑世界 2013移动开发者大会盛大开幕 泯灭Web App可用性的七个开发错误 保益互动创始人曹军:听到的世界更精彩,盲人应用背后的故事 Gumi公司CEO国光宏尚: 大公开!日本手游市场攻克方法! Great Hill Partners高管Chuck Goldman & 南京创毅CEO William Wei:超越黑莓——下一代企业移动 高通业务拓展副总裁沈劲:智能手机2.0——以体验为中心 百度副总裁李明远:百度轻应用——长尾APP的最佳选择 中国工程院院士李德毅:大数据时代的认知计算 创新工场联合创始人汪华:2013年中国移动互联网进入深入区 百度副总裁李明远:解答关于百度轻应用的八大疑问 谷歌推出PNaCl,帮助开发者在任何硬件和网站上运行代码 阿里云:双十一350亿交易额的幕后英雄 小女子关于数据库连接的一点看法,请指教 请问如何将一个结构体和listview绑定??绑定后listview是不是相当于一个结构体数组 请问各位兄弟:怎样在 本地机打开XML语言的网页 如何在数据窗口的列名的上方家一行标题, 200分寻找fastReport,有的快进。 关于打印的问题 how are you?????????????????/ 一个小问题,请大家帮帮忙! 如何才能实现左边导航条菜单的样子?(www.csdn.net 左边的) JBuilder7.0+weblogic7.0+jsp+编译时为何出错???? 提取文件信息 配置我感兴趣论坛里面的Dreamweaver写成Dreamwaver 在delphi的form中如何根据登陆用户的权限disable/enable Form中的控件 打印问题 请教各位gg很菜很菜的怪怪问题~~~~~~~~~~~*^-^* 关于函数调用 一个有关文件名的问题 为什么出现这种错误?? javascript高手请进!!! 复杂的表格怎样做成报表(vb和access) 请教问题,高手请进! 关于安装的制作! asp能否调用vc写的dll?急急急急 求教一些菜问题,大家帮帮忙! 高手请进,小弟有难!!! win98 ie怎么不能打开网页? 请教关于使用DataSet的数据更新的问题! 为什么原来运行的好好的程序现在老提示“安装后运行”? 高手进来看看--------JB7.0的字体问题 vc++界面开发简单方法 强烈要求把灌水机的代码给我看看,谢谢! 为什么tomcat编译我的jsp文件后生成的java文件会出现一些乱码??? 如何定义变量???? 怎样把两条sql语句的结果(记录条目)加在一起 我在应用phpMyAdmin是遇到的错误?用过的帮我解决一下,谢谢 改错,请大侠们帮帮小弟 一道acm问题————fire net 怎么才能让Web中嵌入的MediaPlayer播放.asx节目单里的ref=http://.../*.nsc? 我在应用phpMyAdmin下遇到的错误,请用过的帮我解决一下,谢谢 如何利用HtmlInputFile 同时上传多个文件? 怎么才能让Web中嵌入的MediaPlayer播放.asx节目单里的ref=http://.../*.nsc? 怎样判断? 怎么才能让Web中嵌入的MediaPlayer播放.asx节目单里的ref=http://.../*.nsc? aix4+oracle8i+cics当中,同一个事物里面,记录insert之后未commit,可以updata么 怎么才能让Web中嵌入的MediaPlayer播放.asx节目单里的ref=http://.../*.nsc? 去哪里获得ms sqlserver 得java驱动程序? 怎么样让WIN2K在起动时就去掉隐偿的共享 怎么样把数据绑定到DropDownList 有关代理服务器的问题,请大家帮忙解决 word2000连接问题 怎么才能让Web中嵌入的MediaPlayer播放.asx节目单里的ref=http://.../*.nsc? 部分城市难完成房价控制目标 四季度楼大学教授称北京房价会涨到每平方米80西班牙外交部召见美国大使 要求其解释\"鞠躬人\"亮相朝韩边界 寓意鞠躬欧盟称将向叙利亚提供8500万欧元人西班牙称监听行为无法接受 敦促美国提韩国陆军前方哨所士兵中枪身亡 军方展卜拉希米抵达叙利亚开始斡旋叙利亚问题联合特使卜拉希米抵达大马士西班牙称监听行为无法接受 敦促美国提袁隆平:终极目标水稻亩产1200公斤曝福建闽侯抽调教师协助拆迁 官方称已多国对美国监听表达不满要求解释 研究西班牙称遭大规模监控难以接受 促美公尼泊尔政客涉嫌谋杀同党候选人 两印度尼泊尔政客涉嫌谋杀同党候选人 两印度叙利亚问题联合特使卜拉希米抵达大马士浙江一盗销柴油团伙五分钟能使满箱柴油拆东墙补西墙 浙江一男子非法集资14李克强会见德国友人多国对美国监听表达不满要求解释 研究疯狂的舌头叶锐以党代表身份接访群众谁在拖欠农民工工资?免检虽易 维护不易东莞市浙江商会 皮革分会成立菲亚特集团一季度总收入增长12%全国首个新媒体广告产业园文博会获30特斯拉在华开售第三款新车首届中陶展开幕 主打中高端产品行政审批 将有目录可循京东自估246亿美元靠谱吗?美国归来研发团队佛高区创业 抗癌候《归来》亮相戛纳毁誉参半南海成立社会服务联会市民可到应急救灾庇护中心去内容收费让互联网电视走得更远最轻薄4G手机检验检疫部门 出台10项措施 促外新沙码头9年出口25万辆“飞度”“走到现在,已是奇迹”平均停电时间接近伦敦水平
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘