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

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

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

MySQL到NoSQL:数据的重思和查询方式的转换 程序员心髓:移动应用API设计10大技巧 Netflix公布个性化和推荐系统架构,3种类型作业通实时 从SendCloud到搜狐云 扎克伯格的败笔?Facebook Home可能无家可归 走进eico design,仰视设计师 乔布斯顾问承认苹果的命名糟透了 罗永浩:一百万年薪!招聘软件研发总监 开源的:helios移动应用后端服务框架 IE11将支持WebGL 或将OpenGL映射到DirectX 基于云端的3D渲染和协作平台Lagoa:仅需一个浏览器 大数据提速,IBM 推面向Hadoop的PureData大数据机 游戏开发者的盛宴:2013 CocoaChina春季开发者大会强势启动 开放还是关闭API?CIO做决策前应考虑的六个建议 Python 2.7.4发布,更快的IO模块 如何拒绝沦为服务的商品,并收回对数据的绝对掌控 最阴险的代码?尽在“邪恶”的Underhanded C Facebook Home出阴招:Social皮,Android心 国内最火的五款HTML5前端开发框架 TIOBE 2013年4月编程语言排行榜:Objective-C四年来排名首次下滑 MeeGo复活!Sailfish OS智能手机 SDK发布 10亿美金!传闻谷歌要收购WhatsApp 从打造国内最大的OpenStack公有云开始 展望HBase的未来 你的数据库安全吗?CryptDB数据库软件可查询加密的SQL数据库 收藏!斯坦福Andrew Ng教授“机器学习”26篇教程全译 美国云计算价格战爆发 王寒:12岁儿童,该怎样开始iOS开发? 陈昊芝:腾讯!让我说你什么好? Top Paid与Top Grossing定价策略的差异 Android版百度云推送正式发布 sql7.0如何升级到sql2000并且数据不变 DBGrid顯示的范圍如何定? 请教:在VC++中编程时,为何有的文件能出现类成员提示,有的文件编辑时不出现提示,有的只出现该类的,却没有其基类的类成员提示? 一个很好拿的高分 我写了一个拨号网络记时的工具,可以设定时间自动断线,提供源码.... 怎么读取外部数据源中的某个表中的某列的数据类型? 如何注册一个DCOM,让它跑在别的机子上? 关于用Win32 API画 BMP 图片问题 !急急急急急急急急急急 !!! Delphi 6 的 lib path 丢失!! help?谁知道Tab Control 控件的用法,12分的感谢!!!! 请问:如何在一般用户环境下启动管理员程序? 我想捕获网卡收到的数据包,该怎么搞? vb中调用sql server和ORACLE数据库的问题 北京的朋友,有谁知道这东西那里有卖的?? 想在c#和java中选一个,给点意见.客观点. 如何得到在另外一个窗口中所选择的结果 dcc32如何使用? 大哥,大姐们,这到题没分给,但我真的想知道答案 求对VSS或者Team Source开发的例子 科鼎校园网V2.3测试版网上演示 关于 WINDOWPLACEMENT Structure 关于用DELPHI联接ACCESS数据库怎样使用insert命令的问题(很急很急)加分多多!!! 学c#要那些知识前提。 请问新建怎么做? 为什么在excel表中可以看到的数字,用data连接后,在text和dbgrid中却看不到。(只显示出了其中的一部分) 简单问题,关于toolbar CTime类型变量的值存到数据库中datetime类型的小问题! vc怎样打开access数据库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !求助,我的机子不能启动了。。。 XML中华网有好多的C#资料哦! 比较问题一道,关于 == 版主请进 ~ CrystalReport的一个奇怪的问题,Help! 唉,终于解决不了了,如何在运行时,改变LISTBOX的风格。MSDN说不能解决 AnsiString与TStrings之间的区别与联系,急! 有谁知道下载cobol的编译器,能在window下用的 各位兄弟、姐妹,谁能给我一个超星的账号阿!!谢谢了 再请教 Delphi的EXE 请问关于数组的问题 机器的速度太快,玩不了挖金子,有什么办法? web应用中使用Window ActiveX OCX技术存在问题 请教灰色凹下直线问题 jbuilder编译的问题 有关网络视频会议系统的开发模型问题??? 如何实现在DW中取数据? 如何注册一个DCOM,让它跑在别的机子上? 关于条码阅读器输入数据的控件 如何注册一个DCOM,让它跑在别的机子上? 开机后,总是弹出了一个窗口? 闲着没事,贴个歌词,先~~~ 同一经纬度地区,高处不胜寒的原因A气压低B到达的太阳辐射少C气压高D大气的逆辐射少 初一思想品德,爱因斯坦有一个著名的公式:W=X+Y+Z,他说,w代表成功,x代表艰苦的劳动,y代正确的方法,z代表不浪费时间,这个公式让你对学习有什么新认识? 为什么沿电场线方向电势逐渐降低如果一个负电荷沿电场线运动而负电荷受电场力又是与电场方向相反,那么负电荷做负功电势能增强,因而电势应该增强呀 同一经纬度的地区,“高处不胜寒”的原因是 用英语介绍一下爱因斯坦.(200词以内)明天急用. 7.如果某种植物的基因型为AABb,去雄后授以aabb植株的花粉,其胚乳可能的基因型是BA.AAaBBb、AAabbb、AAaBbb B.AAaBBb、AAabbb C.AaBb、Aabb D.AaaBbb、Aaabbb4.将某植物细胞放在大于细胞液浓度的甘油 科学改变着我们的生活资料 青藏高原为什么太阳辐射多气温却低 电场线,电场强度,电势.电势沿电场线的方向降落最快.而电势沿电场强度的方向也是降落最快.但是电场强度方向不一定等于电场线方向.上面三句话都正确,但我不明白三句话的联系的关键,而 青藏高原为什么太阳辐射强热量低 青藏高原东南部太阳辐射较青藏高原高还是低,为什么? 沿电场线方向电势降低,电场强度也逐渐变小.这句话怎么错了求解释. 爱因斯坦写下这样一个公式:A=x+y+z A是成功,x是正确的方向,y是艰苦努力 谈谈你看到公式后的感想. 氢氧化铁胶体中除了氢氧化铁胶粒外还有什么成分?什么离子? 一高位槽向喷头供应液体,液体密度为1050kg/m3.为了达到所要求的喷洒条件,喷头入口处要维持40kPa(表压)的压力.液体在管路内的速度为2.2m/s,管长30m,管径为4mm.管路上有一阻力系数为0.75的弯头 爱因斯坦说的公式a等于x加y加z这四个字母的含义 lmoL氢氧化铁胶体中带多少胶粒?多于1mol还是少于?有这么一段文字 在胶体中存在的微粒准确地说是胶团,胶体就是由胶团组成的.胶团是由胶核、吸附层、扩散层构成的.胶核又是由许多分子或 电话给我们生活带来了哪些便利 爱因斯坦在谈成功秘诀的时候写下了一个公式:A=x+y+z,其中A代表成功,x,y,z分别代表? 发泡剂AC与ADC有何区别如题 等势面上各点电势相同,电场强度大小也相同?错在哪? 爱因斯坦的小故事里的一题请谈一谈你对爱因斯坦写下的公式 A=X+Y+Z 的理解 AC发泡剂属于危险品吗?我是做货代的,想知道AC发泡剂是不是属于危险品,是不是要拿拿个MSDS去向船公司申请的 全国高中生物竞赛请问它的判分标准是什么?是不是给了几分就选几个答案?如果没选全?给分吗?再说一下答题技巧 科技让我们的生活带来了怎样的变化,科技给我们带来的什么困难 有几道流体力学的题需解答第1题 一条管路由1断面向2断面输送液体,中间无能量输入,则1断面上总比能E1和2断面上总比能E2之间的关系应满足A、 E1E2C、 E1=E2第2题 理想流体流线的伯努利方程表 AC,DC,ADC这三种发泡剂有什么区别 对流层大气的热量大部分来自什么辐射? 流体力学习题求解答已知一不可压缩流体的空间流动的分速度Vx=x*x+y*y+x+y+z,Vy=y*y+2yz,试用连续方程推出Vz的表达式 发泡剂能承受多高的温度?供热管道的保温层是发泡剂做的吧? 科学技术的发展,有助于改进人们的生活.怎么修改病句? 爱因斯坦所说的公式A=x+y+z中,A、X、Y、Z分别代表什么(英语) 2008年生物竞赛联赛题第21题的解释关于在淡水中生存的动物的内个. 科学技术进步与否是国家富强的标志 修改病句 爱因斯坦谈成功秘诀时说的公式:A=+Y+Z,Z为什么代表少说空话? 太阳辐射量与日照时数区别 胶体中的胶粒为何会带电? 为什么青藏高原的年太阳辐射总量比四川盆地多 山东日照什么时候最冷!气温是多少! 我们的生活在科学技术日新月异.修改病句 青藏高原,四川盆地,和长江中下游平原那个获得太阳辐射最少,为什么 温度与地区有什么关系 当今时代,科学技术已经推动生产力发展的巨大动力.修改病句 为什么胶体粒子会有选择性的吸附溶液的离子? 内蒙古高原的日照时数和太阳辐射量 生物学各级竞赛介绍本人浙江省高一新手,求大神介绍下各级竞赛的区别(这几天考的预赛之后还有什么?),以及奖项的含金量, 爱因斯坦成功的秘诀是什么,爱迪生成功的秘诀是什么 现代的信息传递的方式为我们的生活带来了哪些便利 爪机不能追问 汗 好像五月中下旬就考试了 现在在看黑皮 还有一本普通生物学吧 主要就是问一下现在开始看还有希望拿奖吗 没戏我就专心搞理化(貌似有点太不专一了哈) 省二三就可以 省一 为什么我国年太阳辐射总量最多的地区是青藏高原;最少的地区是四川盆地? 信息技术给我们带来哪些便利?我要例子. 生物竞赛实验笔试题考什么啊?我说的是实验题怎么考,不是考试大纲,请估计出题目形式。 高中化学常见胶体的胶粒哪些带正电,那些带负电? 现代信息技术有哪些? “高处不胜寒”是因为高处获得的太阳辐射小.为什么是问,为什么不对. 爱因斯坦是把成功的秘诀归结为A=x+y+z吗?其中A代表事业的成功,X表示艰苦的劳动,Y代表正确的方法,Z代表少说废话, 电势降低的方向不一定是电场线的方向 高处不胜寒与太阳辐射,地面辐射存在什么关系?1.为什么在对流层大气中,随着高度的增加,而温度递减?2.青藏高原海拔高,不是应该离太阳更近,对太阳辐射的削弱作用较弱吗?为什么海拔高会造 青藏高原太阳辐射总量丰富的原因是什么? 1.在自然状态下,ABC三种不同的树木分布同一大片的土地上,三者的个体数量几乎相等,走在这片土地上,时常可以看见A,看到B机会很少,但可在一定的距离下见到C.判断下列正确的是 三种的族群密
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘