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

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

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

Facebook“也”对服务器进行浸泡冷却 日本最大电脑商:Windows 8表现并不好 日均新增415个应用,Windows 8应用总数突破35000 百度推出图像搜索引擎“百度识图” 可基于图像实现全网人脸搜索 解决专利纠纷 RIM向诺基亚预付6500万 巨头的得意与失落:2012移动游戏十大收购案 Mozilla或许将发布iOS平台浏览器Junior Mozilla:Facebook手机将采用Firefox OS Anonymous2013年将放慢脚步,McAfee预测遭质疑 一周消息树:Facebook公布2012年Hackathon大赛顶级“黑客作品” HTML+CSS+JS 开发 Firefox OS 应用编程实战 前端开发工程师如何在2013年里提升自己 Java受Objective-C影响很大 而不是C++ Instagram回击报告指责:用户仍保持增长态势 回顾:2012年科技行业十大败笔 苹果地图入选 Amazon CEO Jeff Bezos:好年景,大挑战 2012年度盘点:移动互联网大事件回顾 详解Amazon Redshift 移动周报:再见,2012!你好,2013! 英特尔或在2月宣布其电视计划:提供分类频道 Prismatic:用机器学习分析用户兴趣只需10秒钟 谷歌布局亚太地区数据中心建设 服务响应速度有望提升30% 2013年移动互联网行业技术趋势前瞻 老骥伏枥志在千里:回顾微软这一年 2013或将崛起 水落石出:在与谷歌苹果竞购创业公司中微软胜出 用扁平化的界面设计吸引用户 2012年12月份全球主流浏览器市场份额排行榜 冲榜不一定要刷榜:增加游戏曝光度的7大杀手锏 科技vs政治:FTC对Google的反垄断调查结束背后 威胁百度:奇虎360确认将与谷歌达成合作关系 Facebook更新Messenger应用 推免费网络电话服务 关于sqlserver时间格式问题 公司准备上一套外贸管理系统,谁能帮我推荐一下!!! 基础问题 全文检索不能检索中文问题 谁有标准C函数库? 高分求救:关于crystal 连接oracle,不能运行 A调用B,怎样能够获得A所在的线程? frReport出错,解决即给分。 谁有标准C函数库? WIN2000和WINXP关于网上邻居的问题 如何将判断一个graphi字段里是否有内容,如果有,就删除!! 请问深圳市区内哪里较全面的计算机类的书店? javac不能编译Servlet,请问在Tomcat 下还有别的方法吗? 很有意义的问题!! [[[[[[[[[推举几个SEX站点.给欧研究研究.]]]]]]]] 怎么实现!? 字段长度int(2) 这个2到底是什么意思? 那里有Microsoft DirectX SDK FOR DELPHI的下载 学生管理系统登录问题(ADO数据库的问题) *.dat文件用什么软件打开!! 哪有jsp写的论坛源程序 大家给个思路了!!! 如何传递两个参数!在线等! 小弟在开发一个软件时踫到了许多问题,想请各位大侠帮助!! 请问:如何从VARIANT类型的数组中取数据? TOMCAT+SQLSERVER连接池配置问题~高分请教 这个问题让我有点晕!——安装与部署项目! 空调有坏了!!!! 安装论坛过程中遇到的问题!!!!!! 关于使用TC35Modem发送短信的问题,用超级终端可以,用N多个程序连接端口都不行。 "native code outside the VM"是什么错误呀 win2000 VPN方式的网络的实现。 datagrid控件的数据绑定问题. 请高手教我如何搭redflag linux下JAVA开发环境,急,另给分 如何删除一个字符串的前10个字符? 资料档案库是用来干嘛的? 用EJB做后台的参数传递。高分请教! 在ASP中对数据库操作是否可以用事务提交啊? TOMCAT+SQLSERVER连接池配置问题~~高分请教~ 请教!!!如何在IntraWeb控制IE? 如何远程对局域网内的某一台计算机(假设其计算机名为comm1)实施关机操作? 为什么连不上CVS服务器? 如何用ASP读取XML中节点的属性值? 如何使用jspsmartupload 一个简单问题请进来look一下 我所知道的论坛常用语,自己以为算得上的可以往上加啊! 如何自画窗体或者PANEL,让小图象在上面排列,然后再根据顺序,一次改变小图象呢? asp.net 上传图片问题? xml中怎么取得这个值呀? 请大家给介绍一本学VC++.NET的书!谢谢 黑色浦淘干有什么作用 我是高三生加减乘除老算错,一对答案本身全做完了,结果都是计算错误,或者是抄错了,我该怎么办啊? 几何的角度加减乘除,是怎样运作的,我老是算错,教下方法 年三十能看到月食吗 英语翻译一定要正确的答案!急 设函数y=f(x)由方程y=xe^y确定,求dy/dx 为什么 y'=e^y+xe^y*y'后面xe^y*y'什么意思,怎么来的 小强是班上最勇敢的小朋友 设函数y=f(x)由方程y=1+xe^xy确定,求y=f(x)以(0,1)为切点的切线方程 请问 :烧红的铁块比温室下的铁块内能多吗 如果质量一样. 烧红的铁块在冷却的过程中,它具有的内能( ) 任何物质都会向外界发生辐射,这就是电磁波.频率越高,能量越高.如铁块烧红.铁块为什么会烧红?如果把铁块继续升温呢?再一直升温下去呢?和太阳颜色相比,你想到了什么?由此能不能推出质量 杭州一处小区楼顶菜园改造成空中小花园杭州到广西快速铁路明年底打通 6.5美国科幻战舰下水 是革命性武器还是奢中方敦促日本说明扩军真实意图 安倍言波兰曝光美国驻华沙使馆内的窃听设备(朴槿惠为韩国职棒开球 因穿日本品牌球汤姆·希德勒斯顿 我很想演骑马的牛仔美最新型隐身驱逐舰下水泰国前总理面临谋杀指控奥巴马考虑终止 监听盟国领导人白宫曾叫停监听默克尔?与欧洲一体化道路史上最大老鼠仓两年赚约十倍公务员“身价”为何受关注基因测序叫停也尴尬?李世石两连胜下一篇索契冬奥会闭幕即时录音自在冲绳替业主强行提价记者探访工程扬尘控制情况:中心城区“
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘