注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

A1Pass的风清月朗居

追随技术的巅峰,突破欲望的枷锁!我,是技术与精神的享乐者!

 
 
 

日志

 
 

黑客应该怎样编程  

2011-06-01 22:06:45|  分类: 思绪燃星火——技 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
题记:大多数情况下,程序首先是写给人看的,附带着可以在机器上运行。


知识共享许可协议此作品使用共同创作授权协议 by A1Pass is licensed under a Creative Commons 署名-非商业性使用-相同方式共享 2.5 中国大陆 License(基于www.hackav.com上的作品创作)。


       最近看了硅谷黑客创业之父Paul Graham先生的文集,被其独到的想法所折服,但是反过来回想一下自己走过的路,似乎也的确正按照这样的一个方向在前行着,只不过是自己没有意识到而已。

       前几天由于一个项目问题,使得我注意到了优美的代码对于一个高效的团队来说是多么重要,而Paul Graham先生的一句话点破了所有我心中的疑问,既“黑客就是画家”,画家只想着怎样创作优美的作品,其他的都不在乎,黑客们也是如此。

       有关于软件工程问题是一只困扰着我的苍蝇,每当我试图打死一只就会冒出来更多,网络上以及身边的人给了我很多指导,但是并没有对我起到实质性的帮助,直到现在我才明白,项目控制与软件工程只适用于程序员,但并不适用于黑客们。

       黑客们打算用心写的程序大多是自己都认为比较难以实现的巧妙玩意,这些带有研发性质的工作是无法使用软件工程中的思想对其进行有效控制的,因为这些工作往往只是在最初有一个比较宽泛的目标,恐怕就连作者本人都不确定自己的作品完成后究竟是什么样的,这个过程就像是画家作画的过程一样。微软在开发NT内核时就是一个典型的例子,原本计划最多18个月即可完成的项目,在大卫.卡特勒这位伟大的项目管理者的带领下却花了超过60个月的时间。幸好比尔.盖茨这位商业奇才帮助微软渡过了这危险的5年时间,从而才诞生了经典的Windows XP乃至于现在Windows 7。

       用Paul Graham先生的话说“我写代码时会先按照自己的思路来写,不管有没有错误,在写完一个基本的框架后在开始调试,这就像绘画时的‘打草稿’,我不想正襟危坐,把一个盛满各种变量类型的茶杯小心翼翼的放在腿上,并且为了一丝不苟的与编译器大婶交谈而努力的挑选词语,确保变量类型准确,以使得自己显得礼貌又周到”。

       这略带调侃的话似乎恰恰很准确的描述了创作程序(注意:不是写程序)的本质就是随性的、充满灵感与爆发力的,一门好的语言在我们使用它时就犹如利用画笔在作画,大多数情况下我们并不能意识到它的存在,它只是记录我们超级点子的一种方式而已。

       要写出优美的语言的前提就是要写出优美的注释,注释并不是简单的“语法翻译机”自动生成的内容,而是记录作者思绪的一种最为直接有效的方法。我本人在写程序时的习惯就是先写骨架与注释,而并不需要细致的勾勒出具体的东西,因为那些东西都是服务于框架的,没有技术含量的。

       有很多黑客甚至程序员都不愿写注释,认为没有必要,这其实是出于一种“数学家”心态,不管是搞计算机的还是研究物理的都暗地里认为数学家是很聪明的,事实上数学家自己也这么认为。这就不可避免的导致了一场灾难,既所有人都试图把自己的工作弄得看上去象数学,这对于搞物理的科学家来说也许还可以忍受,但是你越向自然科学方向发展,这看上去就越像是灾难。

       干嘛呢?为什么能用逻辑描述明白的东西,非要搞出几个用希腊字母拼凑出的复杂公式呢?如果这样的话其实我们将变量名与函数名都替换成希腊字母的话会产生“更好的效果”,我们写的代码都摇身一变成为数学公式了,这样我们每天可以创造出数百行的数学公式,这是多么“伟大”的一件事情,令人作呕,不是嘛?

       我认为,越是精妙的代码就应该配有越趋于详细的注释才对,如果我们想写出高效的代码,那么必然就要伴随着可读性的下降,他们两个就像是热恋中的情人一样,总是成双成对出现的。这样做并不会表明你是一个水平很低的业余人员,恰恰相反,如果有一天你能仅凭阅读注释就能发现代码中的BUG时,你会佩服死当时的自己的,否则的话此时此刻你还在一边调试着自己写的天书代码,一边诅咒着自己电脑的CPU为什么不按照你的意愿工作,而转念一想,如果真是这样的话那么其它程序也许就都不能正常执行了,于是只好继续自己找问题……

       至此,我认为代码优美与否首先取决于作者精妙的思路,其次是足够清晰明了的注释,最次才是一些语法技巧的运用。这就像一张油画一样,首先它必须是好看的作品,其次它拥有清晰明了的主题,最后参观者才会注意到某一处高光处理时作者所用的巧妙手法。

       不管是写代码亦或是做其它事情,我想本文所述的思想都应该是正确的,人类用几千年的时间来将周围的环境改变的更加简单有效,微软用了5年的时间开发出NT内核从而给我们一个简单的操作环境,高级语言作者花费了数百小时发明了变量名与函数名这个东西之后又发明了注释,我们没有理由不使用它,不是嘛?
A1Pass推荐阅读:
  评论这张
 
阅读(2981)| 评论(14)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018