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

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

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

风雨13载,Windows XP今起正式退役 向Facebook看齐,Twitter收购Android屏幕待机应用开发商Cover 绝对的超现实!Jaunt打造360°全景VR电影 Unite China 2014课程解析:行业解决方案专场免费开放 Manhattan,Twitter规模的实时、多租户分布式数据库 Ceph浅析(中):结构、工作原理及流程 孙元浩:基于Spark引擎的高速内存分析和挖掘工具应用 腾讯私有云背后的团队,品高要做企业云计算的产品经理 撼动企业应用架构的十大技术趋势 Airbnb的管理之道:产品设计的点评策略与技巧 Windows 8.1 Update 1的下载地址和八点须知 《近匠》棱镜:手游渠道SDK平台的技术历程 OpenSSL究竟为何物,为何它的影响力如此之大? Redis大冒险:如何跳出SQL这个坑 【走近院士】张尧学:基于透明计算的云操作系统 微软转型之路:从Build 2014开始 大势所趋 HTML5成Web开发者最关心的技术 从火种到核心,浅析Hadoop大数据用户的演变 搭建高可用的MongoDB集群(上):MongoDB的配置与副本集 软硬件协同创新,共建未来数据中心 优秀Unix管理员的七个习惯 2014Unity亚洲开发者大会倒计时 干货内容日程汇总 TIOBE 2014年4月编程语言排行榜:Perl跌至历史最低点 Hadoop集群环境下网络架构的设计与优化 CloudFoundry架构优化:NATS集群化方案 Dropbox推独立应用,公司估值已达100亿美元 【走近院士】梅宏:云计算时代软件技术发展需求和挑战 云计算战争:OpenStack vs. VMware Cortana与Siri、Google Now的较量:支持功能更多 代码面试最常用的10大算法 “颠覆医疗” 时云医疗推三款硬件产品 please help me 怎么样才可以把系统存储过程的结果写到结果集里? 如何声明和使用自定义对象(如:Tdataset)的事件(beforecancel)?? 一个奇怪的问题? 各位兄弟,谁知道哪里有pb7的下载? 天呐 我提的问题从来没人回答 SQL Server小小问题 请问那里有DELPHI第二张光盘下载! 如何是使用describe来获取datawindow中的带区参数? 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!! 请问C语言中有字符串查找函数吗? 请问如何动态的改变应用程序的图标,一定给分 Query主从表编辑问题,从不丢失! 急急急!!!! 高分求禁止IE的自动谈出的广告,有个软见也行,或者告诉实现方法。请告诉下载的网址。 打印一些清单在delphi中用哪些控件比较好? 如何打印到文件 如何得到WINDOWS的拼音字库 如何在BCB中进行SDK编程? 一个简单关于对话框的问题------->> 用asp将图片插入数据库,到底错在哪?苦恼啊!以前这个也通过了(win2000server+Sql7.0)但...(高分!!!!) 为什么我在Access2000的mdb中只能最多得到一条记录? 男人25岁就大吗? 关于 C 类IP的屏蔽 配置为COM+组件后,CoCreateInstance 失败! 关于C 类 IP的屏蔽 有谁知道本.拉登的QQ,俺找他有事?重奖`~~~~~~~~~~~~~~~~~~~! 有没有人告诉我,HTTP头跟正文中间夹的什么? 请问asp和php能访问webservice吗??? 如何一打开NOTE客户端就执行我的数据库(不能设书签)? true dbgrid控件怎么使一个网格又下拉的列表弹出来 关于计数器的代码 那里有含有K线图的图表控件和像OFFICE的工具栏控件下载? 十万火急!如何在Dialog上显示Menu??(我只能给到27分了) 十万火急!如何在Dialog上显示Menu??(我只能给到27分了)十万火急! 问一下,笔记本上的软驱通用吗? maskedit的问题? delphi中报表的问题 关于常用的几种压缩编码? tomcat启动出错,请问什么原因? 一个小问题。回答就给分? 在JSP页面中,能否嵌入ActiveX控件 增加控件的成员变量对程序有什么影响?会使EXE变大吗? shr 是什么意思? 我想用delphi删除一文件夹下面的全部文件,我可以删除一条记录,但无法自动删除全部,数据,我该如何做??? 77分征收四个Delphi中buttons的bmp图标--顶张、下张、上张、末张! 有谁用C++Builder做过corba SQL Server编程求解!!!!! 请问如何测试C#代码的运行瓶颈以便进行优化 80端口是干什么用的 我快要疯了!有关最简单的mdb数据库连接也出问题 win2000 sever 的问题(高手请进) 花生是不是又称为长生果? 用一根长48厘米的铁丝焊接长一个长方体,已知长,宽,高的比是3:2:1,求这个长方体的表面积和体积. 用8个棱长是1厘米的正方体拼成一个长方体,平成的长方体的表面积最大是多少? 书为什么会被人类称为“长生果”? 棱长是a的两个小正方体拼成一个长方体,长方体的表面积比两个小正方体的表面积之和减少了多少? 用10块棱长为1厘米的正方形体积木堆平成一个长方体,这个长方体的表面积最小是( ) 沿圆柱的直径把圆柱切成两半后,截面是个正方形,表面积增加50平方分米,圆柱的表面积和体积 一个小正方体的棱长是3cm,用3个这样的小正方体拼成一个长方体,长方体的表面积比3个正方体的表面积之和减少多少平方厘米? 育才小学115人去秋游,怎样租车跟省钱?大客车坐40人 每辆1000元 小客车坐25人 每辆650元 请用表格解答表格里的内容是怎样算出来的要说 帮帮忙我把家底都掏出来了 花生的英文名是什么? 有一桶水,用同样大小的瓶子去装,如果灌满8瓶后,桶内还剩七分之六,如果灌满7瓶后,桶内还剩2分之49.这桶水有多少千克 有一桶水,用同样大小的瓶子去装.如果灌满后还有七分之一,如果灌满7瓶后还剩6升,这桶水原有多少升? 英语翻译做包装的英文 有一桶水,用同样大小的瓶去装,如果灌满8瓶后,桶内还剩6/7,如果灌满7瓶后,桶 花生出芽能吃吗?昨天买的花生今天就出芽了还能吃吗? 史努比所在的书的英文名是什么?是叫花生还是叫Snoopy?我想买英文原版的, 实验小学组织春游活动,共有230名师生参加.现在要去公交公司租车,公交公司提供了一下2种车型(数学高手来大巴车:限坐52人,每辆车每天租金250元.中巴车:限坐34人,每辆车每天租金200元.1) 有一桶水,用同样大小的瓶子去装.如果灌满8瓶后还剩七分之一,如果灌满七瓶后还剩6升,这桶水原有多少升要有过程 有机花生是啥意思? 实验小学师生共198人去春游,有两种车供选.大客车:限乘55人 中巴车:限乘35人大客车租金400元/辆,中巴车租金280元/辆.请设计一个最省钱的租车方案,并算一算租金是多少钱.(要算式+答案) 把3个完全一样的正方体平成一个长方体,这个长方体的表面积是350cm2,其中每个正方体的表面积是多少 某书店以“20元办会员卡8折优惠”的方式进行促销,你认为在什么情况下办会员卡和算 一个圆柱,底面半径是3分米,侧面展开是正方形.这个圆柱的表面积是()平方厘米?体积是()立方厘米.把它截成2段,表面积增加了()平方厘米 实验小学六年级的同学们乘大客车去春游,如果每辆车坐60人,则有15人不能上车,如果每辆车多坐5人,恰好多出一辆车,一共有几辆车?一共有多少个学生? 一桶油,第一次用去5分之2,第2次比第1次多2千克,桶里还剩下3千克.这桶油原来有多少千克? 一个圆柱的表面积比侧面积大12.56dm的平方,高是3dm,这个圆柱的体积是多少立方厘米? 三个同样大的正方体拼成一个长方体后,表面积减少了114cm²,这个长方体的表面积是多少平方厘米?要详细的介绍每一步求什么 土豆,芋头这些淀粉类的吃多了会导致长胖啊? 一个长方体的棱长之和是36厘米,长、宽、高的比是5:3:1,这个长方体的表面积是( ),体积是( )谢谢了! 芋头可以和莲藕一起吃吗?我想把芋头,莲藕排骨一起熬汤不知道可不可以?希望有人可以替我解答下~!谢谢咯~!~! 用果实、茎和根给油莎果、南瓜、芋头、红薯、莲藕、萝卜、姜和土豆分类 一个长方体的长、宽、高的比是3:2:1,它的棱长总和是48厘米 ,求此长方体的表面积 藕、洋葱、番薯、胡萝卜、芹菜等植物中,供我们食用的部分分别属于植物的哪一种营养器官?为什么? 已知圆柱底的半径是3dm,高是10dm,求表面积 小客车每辆600元,限乘12人;大客车每辆1300元,限乘30人.共有师生73人,怎样租车最省钱?租金共多少元2门票问题太.信息;门票每人40元,团体票价格如下表.算一算:购票至少需多少元?人数30--50 51-- 莲藕的食用部分是什么 一个圆柱的高是10dm,底面积的半径是3dm,它的表面积是多少 一个圆柱底面直径是20分米,高是6分米,沿着底面直径把圆柱切成两半,这个圆柱的表面积增加了多少? 下列各项中,除哪种植物外,我们食用的部分是植物的茎A藕B马铃薯C甘薯D甘蔗 圆柱底面积半径3dm 求表面积? 落花生名字的由来 下面是一个长方体的展开图,求围成的长方体的表面积和体积.(单位:厘米) 一个长方体的棱之和是36厘米.已知长是4厘米,宽是3厘米.求这个长方体的表面积. 落花生的名字由来 下面是一个展开图求围成长方体的表面积和体积长是7厘米、宽是5厘米、高是3厘米 把一个长10dm,底面半径3dm的圆柱锯成四段小圆柱,表面积增加了多少 《落花生 》名字的来历 求下面长方体的表面积和体积,长2分之1,宽5分之1,高5分之1,要算式,递等式 一个长方体的棱长之和是36厘米.已知长是4厘米,宽是3厘米,求这个长方体的表面积急1 课文《落花生》名字由来五年级语文《落花生》名字的由来. 下图是一个长方体的表面展开图,根据条件,求出这个长方体的表面积和体积. 一个长方体的棱长和是36厘米,已知长是4厘米,宽是3厘米.求这个长方体的表面积.(快!) 一桶水,把水加到原来的2倍,连桶重10千克,要时把水加到原来的4倍,连桶重18千克,桶里原有多少水? 用两个完全一样的长方体平成一个大长方体,这个长方体的表面积最小是多少平方厘米?长方体的长6厘米,宽2厘米, 某书店以“50元办理会员卡,享受七五折优惠“,你认为在什么情况下办理会员卡消费合算 用一根长48厘米的铁丝焊接成一个长方体,已知长、宽、高的比是1:2:3,长方体的表面积是多少?体积是多少 把两个表面积是30平方厘米的正方体,平成一个长方体,这个长方体的表面积是多少?我急用.快 某书吧的会员卡100元一张,会员的消费打八折,那么当消费达到多少元以上时买会员卡比较划算.A.100 B.300 C.500 D.600 将一根长48厘米的铁丝焊成一个长方体,已知长宽高得比是3;2;1,这个长方体的表面积是多少平方厘米 用三个长5厘米,宽3厘米,高2厘米的长方体平成一个表面积最大的长方体,这个长方体的表面积是多少
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn