程序人生 ’ 目录下的文章存档

10个对开发项目有害的编程习惯

避免这些常见的编码习惯,会让我们的工作更轻松、软件更安全且更易于扩展。

帕雷托法则明确指出,20%的因导致80%的果。又称为80-20法则,它适用于几乎每一个需要人作为劳动主体的相关领域。

在软件开发领域,这个法则可以概括为,大多数的问题都是由少数不良编码习惯造成的。改变这些习惯,你会更有效率。

下面讲讲最要不得的10条编码习惯:

b1

 

1.拼写错误

让我特别讶异的是,为什么大家明知这个习惯百害而无一利,竟然还是任其在代码中肆虐横行,以致于经常出现拼写错误的变量名和函数名。更加悲剧的是,错误的拼写常常隐蔽得很好,很难发现。

至于解决方法,可以在一个良好的集成开发环境(IDE)上写代码,或者干脆用程序员专用的文本编辑器,这些都可以显著减少拼写错误。还可以选择特定的变量名和函数名,一方面容易拼写,另一方面即便写错了也能轻易发现。尽量避免使用很容易拼错的单词,例如“receive”,很容易拼写成“recieve”。

2.未按规定格式写代码

缩进和格式化,能让我们的代码一目了然、易于理解,有什么错误也能一览无余。而且也方便别人理解和维护。
阅读全文

程序员的十大烦恼

每个程序员都有自己烦恼的事。不论这事指的是范围蠕变(scope creep),还是 指匈牙利变量命名 (Hungarian notation),还是有臭味的同事,我们都明白,这是我们有我们行业里的特定的烦恼。 下面要说的就是十大让程序员们烦恼的事情,这是我从最 近的在StackOverflow上的一个调查里整理出来的,并且掺杂了一些我个人的经验:

10. 注释 — 只解释了“how”却没有解释“why”

入门级的编程课程通常会教育学生们写代码前先写注释、而且要尽量多注释。 这种教育的出发点是“多注释肯定比少注释好、少注释肯定比没注释好”。 可不幸的是,很多的程序员把这当成了一种任务,对每一行代码都注释一下。 这就是为什么会经常看到像Jeff Atwood在他的博客文章Coding Without Comments提到的代码:

1 	r = n / 2; // 让 r 等于 n 除以 2
2 	
3 	// 当 r - (n/r) 大于 t 时进行循环
4 	while ( abs( r - (n/r) ) > t ) {
5 	 r = 0.5 * ( r + (n/r) ); // 设置 r 等于 r + (n/r) 的一半
6 	}

经过这样的注释,你否明白了这段代码是干什么的?的确,我也没明白。 问题就在于,虽然有大量的注释,可它们只是描述了代码是干什么了,却没有说明代码为什么要这样写。

现在,请看一下我们采用另外一种方式对同一段代码进行的注释:

1 	// 使用牛顿-Raphson算法求n的平方根近似值
2 	r = n / 2;
3 	
4 	while ( abs( r - (n/r) ) > t ) {
5 	 r = 0.5 * ( r + (n/r) );
6 	}

这就好多了!也许我们还是不能完全明白这段代码的作用,但至少是有了一点方向了。
阅读全文

你需要立刻突破的十大编程禁忌

original

 

程序员在编程的时候难免会犯错误,但如果不从错误中吸取教训,那么习惯成自然,你会经常犯错的。从错误中不断的学习,锻炼好的行为习惯有助于事业上的稳定。这就是我们如何将小麦从糟糠中区别出来以及如何避免编程禁忌的绝佳经验。此外,最重要的就是可以为客户带来更好的用户体验。

1. 不提升非技术技能

我们认为非技术技能是项目成功的主要因素。这些非技术技能也可以称之为“软技能”,总体上来说,它已经被公司证明为能够驾驭企业和客户之间的长期商业关系,因此也能决定公司的成长发展路径。一些关键的软技能指标包括:

b1

 

a.纪律——这是最重要的特征之一,缺乏纪律,最终会让这个开发团队在开发能力上“缺乏自信”。解决这一问题的矫正方法就是每天制定详细的to-do清单:兑现你的承诺、完成你开始做的事情、避免多重任务,因为这些往往会让你的生活产生混乱。
阅读全文

笑谈 关于程序员懒惰之极的确凿证据

程序员很懒是出了名的,但很多书里都说程序员的懒是一种美德,但懒是应该有节制的,应该分场合。比如下面的这些懒惰的行为,相信没有人会欣赏他们的这种表现。

1、躺着编程。另外一个也是躺在床上工作的职业是妓女。

a1
阅读全文

8种极品程序员,你属于哪一种?

Who-are-you-really1

 

在日常工作里肯定会发现很多有趣的事情,极品程序员所做的事就是很有意思的。事实上,现在所讨论的极品程序员主要是从他们的判断力、行为举止、个人态度和匪夷所思的工作方式上来判断的,有的时候这些程序员一味的只是追求文档上的内容,而不擅于用分析方式来解决问题。

几乎每一个软件开发者多多少少都会出现头脑短路的现象,也就是说,下面所列举的各种极品程序员类型,总有一款是属于你的。

1. 钟爱型程序员:万般宠爱集于一种技术

这种类型的程序员所遇到的致命错误就是:只钟爱一种技术,对别的技术不来电。其实这不是什么值得表扬的优点。因为这种程序员看上去就像是“天生注定爱上这种框架的程序员”,对于自己喜欢的技术可以说是放不开、丢不掉。甚至在生活里也是一个打破砂锅问到底的人。

a1

 

不管问题是什么,他的回答总是跟他的性格类型脱不了关系:

  • “嘿,我们需要在Rails框架里实现一个内容管理系统,但是我们应该用哪一个数据库呢?”——Mongo数据库
  • “多用户博客呢?”——Mongo数据库
  • “关键业务一致性系统呢?”——Mongo数据库
  • “库存管理系统?”——Mongo数据库
  • “电子病历系统?”——Mongo数据库
  • “分布式数据仓库?”——Mongo数据库

钟爱型的程序员在任何软件开发项目里都会找出各种各样的理由,也不管这些理由是否具有实际意义。但是,一旦你试图反驳他的观点或者是想法的时候,他们在感情上是无法接受的,即使你和他的关系特别好也是没有用的。如果他知道自己的想法错了,也不会告诉任何,而是更愿意在最后一秒的关键时刻偷偷的使用别人的正确方案。

2. 匠心型程序员:保守主义者,不到万不得已不做修复

匠心型的程序员的目标是至高无上的:不考虑成本,尽一切可能保护系统的正常运行和系统的完整性。除此之外,这类程序员信奉一个很简单的哲理,这个简单的哲理也就是引领他们在软件开发和管理实践中的一个基本准则:只要还能将就使用,不到万不得已千万不要去修复。

a2

 

不管什么样的软件,只要是在奥术师的保护下,就一直是使用那个平台、那个部署程序、那个数据库还有那个永远不会改变的操作系统。但是你不必担心,因为匠师会一直盯着这些看上去老旧的组件,也许他不能赢得每一场战斗,但是他一定会为了每一场战斗而凶猛拼杀。
阅读全文

感悟:谈谈编程中的哲学,数学,基础,理论,思考与经验

做为一个新人,我是无上尊崇理论的,很遗憾,我却看到不少人对理论和书本嗤之以鼻。
今天在一个web群里,突然又有人问到,md5(a)=b,那么已知b,那么如何解密出a.针对这个问题,却掀起了轩然大波,这本来是一个很没有讨论价值的东西,遗憾的是,很多人还对此争论个不休,却鲜见明白人。

首先,MD5不是一个加密函数,这点我还看到很多人在争论,吵个喋喋不休。说是加密函数的理由是他们在做网站中一直用MD5加密的,如果它不是加密函数那是什么。那么,我用我刷牙的杯子舀水洗菜,那是否可以断然说我的口水杯就是炊具呢?很简单的逻辑,其实,逻辑上的混乱是基础的不扎实。稍微学过信息安全学的人,都知道在信息安全领域,存在各种安全算法,如非对称加密,信息摘要等。这些概念都是很清晰的,都是有定论的,是没有任何争论的价值和必要的。

其实,询问如何MD5从密文还原到明文的,这就已经不是有没有学过信息安全的事,而是有没有用哲学和数学的逻辑思维来思考的问题了,一个人的悟性就往往体现在这里我们都知道,MD5的结果是128位(不是16位,也不是32位,这个问题不该再争论了。),它可以表现为一个长度为16位或者32,甚或24位的16字符串。但是基本的形式是长度为16的字符串。好了,假如说MD5可以还原的话,我们就可以把它看做一个压缩函数。那恭喜你,你的硬盘可以装下10亿部高清电影了,因为我可以把一个1G多的高清电影MD5“加密成”只有16个字节的“密文”,我要看电影,那我只要把这16个字节还原了就可以了。这么看来,这个世界真是美妙。但这是不可能的,所以MD5还原时不可能的,就这么简单的逻辑。
很快,又有人提出反驳意见,说到04年王小云教授的报告,甚至还截图网上的报告,报告中清晰地写着王小云破解了MD5,以此来反驳我。并以数学不是绝对的来反驳我的数学分析。也有人提到只要计算机的性能足够,就可以做到破解密码。在这里,首先我们要明白,其一,媒体总喜欢故意夸大说辞来吸引眼球;其二,破解的定义,什么是破解,什么能叫做破解。我们学习,万万不能涉浅不涉深。至于王小云教授的破解到底是怎么回事,我也不想再细说,这又是一个长篇大论了。可以了解下强无碰撞和弱无碰撞,有限集的概念。至于破解网站,那都是暴力字典比对。

阅读全文

95后有多牛?18岁进 Facebook 当全职工程师

Facebook 在物色和吸纳人才方面一贯口碑不错,比如,创业公司就能向它学习如何招到优秀的产品设计师——它家的实习项目也很厉害,总能网罗到天才程序猿,这不,一位刚高中毕业、8 月 24 日满 18 岁的小哥 Michael Sayman 就加入了 Facebook,担任全职工程师——他也是 Facebook 最年轻员工之一。

ddd

 

小哥笑起来很甜美吧,是不是还有点眼熟?没错,Sayman 此番加入马扎哥其实是再续前缘——他之前写了一个火火火火火的 iPhone App,用的还是 Facebook 的开发者工具,随后他引起了 Facebook 的关注。后者特地请他飞到总部和马扎哥碰了碰——一碰,就碰出了个总部实习机会。

Sayman 显然实习得很嗨,他在自己的 Facebook 主页上写道:“在 Facebook 的暑期实习简直爽。不过,当当当当,Facebook 还请我去当全职工程师。嗯,我在这的生涯刚刚起航。” 这条帖子的内容也受到了 Facebook 的认可。

对于这种有点才华有点狂有时简单有时 naive 的 95 后,我只想说一句:带带我。

 

文章来自:36kr

 

程序员漫画组图:编程异闻录

关于等号

这是码农的暗号。千万别说它是“等号”,它叫“赋值”。

a1

 

 

关于二进制

这个世界应该是二进制的。
阅读全文

惹毛程序员的十件事

程序员是一个比较特殊的群体,他们因为长期和电脑打交道所养成的性格和脾气也是比较相近的。当然,既然是人,当然是会有性格的,也是会有脾气的。下面,让我来看看十件能把程序惹毛了的事情。一方面我们可以看看程序员的共性,另一方面我们也可以看看程序员的缺点。无论怎么样,我都希望他们对你的日常工作都是一种帮助。

第十位 程序注释

程序注释本来是一些比较好的习惯,当程序员老手带新手的时候,总是会告诉新手,一定要写程序注释。于是,新手们当然会听从老手的吩咐。只不过,他们可能对程序注释有些误解,于是,我们经常在程序中看到一些如下的注释:

每当看到这样的注释——只注释是什么,而不注释为什么,相信你一定会被惹火,这是谁写的程序注释啊?不找来骂一顿看来是不会解气了。程序注释应该是告诉别人你的意图和想法,而不是告诉别人程序的语法,这是为了程序的易读性和可维护性,这样的为了注释而注释的注释,分明不是在注释,而是在挑衅,惹毛别人当然毋庸置疑。

1 r = n/2;  //r是n的一半
2 
3 //循环,仅当r- n/r不大于t
4 while ((r-n/r) <=t){
5     //… …
6     r = 0.5 * (r-n/r); // 设置r变量
7 }

第九位 打断

正当程序沉浸于编程算法的思考,或是灵感突现正在书写程序的时候,但却遭到别人的打断,那是一件非常痛苦的事情,如果被持续打断,那可能会让人一下子就烦躁起来。打断别人的人在这种情况下是非常不礼貌的。被打断的人就像函数调用一下,当其返回时,需要重新恢复断点时的现场,当然,人不是电脑,恢复现场通常是一个很痛苦的过程,极端的情况下可能需要从头开始寻找思绪,然后一点一点地回到断点。

因此,我看到一些程序员在需要安静不被打扰的时候,要么会选择去一个没人找得到的地方,要么会在自己的桌子上方高挂一个条幅以示众人——“本人正执行内核程序,无法中断,请勿骚扰,谢谢!”,可能正在沉浸于工作的程序被打断是多么大的开销。自然,被打断所惹毛了的人也不在少数了。

第八位  需求变化

这个事情估计不用多说了。只要是是程序员,面对需求变化的时候可能总是很无奈的。一次两次可能还要吧接受,但也顶不住经常变啊。据说敏捷开发中有一套方法论可以让程序员们享受需求的变化,不知道是真是假。不过,今天让你做一个书桌,明天让你把书桌改成餐桌,后天让你把餐桌改成双人床,大后天让你把床改成小木屋,然后把小木屋再改成高楼大厦。哎,是人都会被惹毛了的。那些人只用30分钟的会议就可以作出任何决定,但后面那几十个程序员需要搭上几百个小时的辛苦工作。如果是我,可能我也需要神兽草泥马帮助解解气了。

不过,这也正说明了,程序员并不懂得怎么和用户沟通,而用户也不懂得和程序员沟通,如果一个项目没有一个中间人(如:PM)在其中协调的话,那么整个项目可能就是“鸡同鸭讲”,用户和程序员都会被对方所惹毛了。如果要例举几个用户被惹毛的事情,估计程序员的那种一根筋的只从技术实现上思考问题的方法应该也能排进前5名。

第七位  经理不懂技术

外行领导内行的事例还少吗?领导一句话,无论对不对,都是对的,我们必需照做,那怕是多么愚蠢多么错误的决定,我们也得照做。程序员其实并不怕经理不懂技术,最怕的就是不懂技术的经理装着很懂技术。最可气的是,当你据理力争的挑战领导权威的时候,领导还把你视为异类。哎,想起这样的领导别说是骂人了,打人的冲动都有了。

其实,经理只不过是一个团队的支持者,他应该帮助团队,为团队排忧解难。而不是对团队发号施令。其实管理真的很简单,如果懂的话,就帮着做,如果不懂的话,就相信下属,放手让下属做。最怕的就是又不懂技术,还不信任下属的经理了。哎,这真是程序员的痛啊。

第六位 用户文档

用户文档本来不应该那么的令人害怕。这些文档记录了一切和我们所开发的软件有关的一些话题。因为我们并不知道我们所面对的用户的电脑操作基础是什么样的,所以,在写下这样的文档的时候,我们必需假设这个用户什么也不懂。于是,需要用最清楚,最漂亮的语言写下一个最丰富的文档。那怕一个拷贝粘贴的操作,可能我们都要分成五、六步来完成,那怕是一个配置IP地址的操作,我们也要从开始菜单开始一步一步的描述。对于程序员来说,他们在开发过程中几乎天天都在使用自己开发的软件,到最后,可能都有得有点吐了,但还得从最简单的部份写这些文档,当然容易令他们烦燥,让程序员来完成这样的文档可能效果会非常不好。所以,对于这样的用户文档,应该由专门的文档人员来完成和维护。

第五位  没有文档

正如上一条所说的,程序员本来就不喜欢写文档,而因为技术人员的表达能力和写作能力一般都不是太好,所以,文档写的也很烂。看看开源社区的文档可能就知道了。但是,我们可爱的程序员另一方面最生气的却是因为没有文档。当然,让面说是的用户的文档,这里我们说的是开发方面的文档,比如设计文档,功能规格,维护文档等等。不过,基本上都是一样的。反正,一方面,我们的程序员不喜欢写文档,另一方面,我们的程序又会被抱怨没有文档,文档太少,或者文档看不懂。呵呵。原来在抱怨方面也有递归啊。据说,敏捷开发可以降低程序开发中的文档,据说他们可以把代码写得跟文档和视图似的,不知道是真是假。不过,我听过太多太多的程序员抱怨没文档太少,文档太差了,这个方面要怪还是怪程序员自己。

第四位 部署环境

虽然,程序员们开发的是软件,但是我们并不知道我们的程序会被部署或安装在什么样的环境下,比如,网络上的不同,RAID上的不同,BIOS上的不同,操作系统的不同(WinXP和Win2003),有没有杀毒软件,和其它程序是否兼容,系统中有流氓软件或病毒等等。当然,只要你的软件出现错误,无论是你的程序的问题,还是环境的问题,反正都是你的问题,你都得全部解决。所以,程序员们并不是简单地在编程,很多时候,还要当好一个不错的系统管理员。每当最后确认问题的原因是环境问题的时候,可能程序员都是会心生怨气。

第三位 问题报告

“我的软件不工作了”,“程序出错了”,每当我们听到这样的问题报告的时候,程序员总是感到很痛苦,因为这样的问题报告等于什么也没有说,但还要程序员去处理这种错误。没有明确的问题描述,没有说明如何重现问题,在感觉上,当然会显得有点被人质问的感觉,甚至,在某些时候还掺杂着看不起,训斥的语气,当然,程序员基本上都是很有个性的,都是软硬不吃的主儿,所以,每当有这样的语气报告问题的时候,他们一般也会把话给顶回去,当然,后面自己然发生一些不愉快的事情。所以,咱们还是需要一个客服部门来帮助我们的程序员和用户做好沟通。

第二位 程序员自己

惹毛程序员的可能还是程序员自己,程序员是“相轻”的,他们基本上都是持才傲物的,总是觉得自己才是最牛的,在程序员间,他们几乎每天都要吵架,而且一吵就吵得脸红脖子粗。在他们之间,总是被自己惹毛。

  • 技术上的不同见解。比如Linux和Win,VC++和VB,Vi和Emacus,Java和C++,PHP和Ruby等等,等等。什么都要吵。
  • 老手对新手的轻视。总是有一些程序员看不起另一些程序员,说话间都带着一种傲慢和训斥。当新手去问问题的时候,老手们总是爱搭不理。
  • 在技术上不给对方留面子。不知道为什么,程序员总是不给对方留面子,每当听到有人错误理解某个技术的时候,他们总是喜欢当众大声指证,用别人的“错误”来表明自己的“博学”,并证明他人的“无知”。
  • 喜好鄙视。他们喜好鄙视,其实,这个世界上没有一件事是完美的,有好就有不好,要挑毛病太容易了。程序员们特别喜欢鄙视别人,无论是什么的东西,他们总是喜欢看人短而不看人长。经常挂在他们嘴上的口头禅是“太差”、“不行”等等。

程序员,长期和电脑打交道,编写出的代码电脑总是认真的运行,长期养成了程序员们目空一切的性格,却不知,这个世界上很多东西并不是能像电脑一样,只要我们输入正确的指令它就正确地运行这么简单。程序员,什么时候才能变成成熟起来……

第一位 程序员的代码

无论你当时觉得自己的设计和写的代码如何的漂亮和经典,过上一段时间后,再回头看看,你必然会觉得自己的愚蠢。当然,当你需要去维护他人的代码的时候,你一定要在一边维护中一边臭骂别人的代码。是否你还记得当初怎么怎么牛气地和别人讨论自己的设计和自己的代码如何如何完美的?可是,用不了两年,一刚从学校毕业的学生在维护你的代码的过程当中就可以对你的代码指指点点,让你的颜面完全扫地。呵呵。当然,也有的人始终觉得自己的设计和代码就是最好的,不过这是用一种比较静止的眼光来看问题。编程这个世界变化总是很快的的,很多事情,只有当我们做过,我们才熟悉他,熟悉了后才知道什么是更好的方法,这是循序渐进的。所以,当你对事情越来越熟悉的时候,再回头看自己以前做的设计和代码的时候,必然会觉得自己的肤浅和愚蠢,当然看别人的设计和代码时,可能也会开始骂人了。

文章来自:http://www.cnblogs.com/ymind/archive/2012/03/26/2418627.html

 

提高Web程序员积极性的10种方法

和其他行业一样,Web设计工作其实也是比较枯燥乏味的。如果我们总是将我们所有的时间都用在工作上而忽略其他,反而会影响我们的激情和积极性。

a1

而,激情和积极性,是一种能促使我们全神贯注、专心致志工作、面对挑战也不皱一皱眉头的神奇力量。如果你想在这一行干得出色、干得成功,那么激情和积极性绝对必不可少。或者简而言之,这就像是一个反馈循环。

无论你对Web设计这份工作的喜爱程度如何,当然有可能你只是做一天和尚撞一天钟,每天只是随大流例行检查般看看电脑就算完事;又或者你森森地觉得只要不让你搞网站(甚至是看一眼),其他啥事都成。但是又因为有时间限制或者是目标设定,你会觉得你是在被迫工作。
阅读全文