【原创】程序员应有的态度——读一本90年的老书想到的
无聊时,在网上看到的有个网友随口推荐的,书名为《组合语言之艺术》,作者为朱邦复。下下来放在桌面上快1个月了,刚打开翻了几页。90年的书,对计算机书籍来说,似乎有点老,但作者在书中不时都会谈到自己的看法、经验与理解,难能可贵!技术的条条框框谁都懂,也容易学到,个人心得与经验才是真正有价值的东西,需要长时间积累、蒸馏、升华的东西。国产的、市面上的大多数计算机书籍,都是在讲步骤,而不讲背后个人的思考过程,讲其果而不讲因,除非你需要一本“薄”一点的书入门,否则,看这类书倒不如直接去看技术手册或帮助文档,来得更全面、更直接。
今天天气不错,阳光明媚,微风徐徐,恰逢本学期第一次去上了《软件工程》的课,多说几句,说说心里所想,和大家交流进步。如果没有同学对这方面有兴趣,那就当自己和自己交流了。
以前,在写程序时,自己力求质量,追求完美。如果程序中哪一段代码的流程没有在自己脑袋里过一遍,就会放心不下,觉得以后程序一旦出错,需要查错的地方就会太多,因此前期的大意在后期会成为负担与隐患。但是,这样的思考过程简直就是头脑风暴,一时半会一次两次还好,长时间下来,耗费太多脑力。
一方面觉得自己没错,应该这样,但是,另一方面,为什么总又觉得哪里出了偏差,反正是有什么地方不妥?做为一个程序员,该做何选择?于是,秉着寻求前人经验从而能有效改变现状提高效率的想法,一头扎进了书的海洋,大大小小看了N本软件开发方法学(或称之为工程)方面的书。事后,感觉收获的同时也有点遗憾,因为,自己并没有因此而找到想要的明确的答案。众说纷纭,有观点支持软件开发行为应注重细节,尽量避免前期可以避免的隐患,时刻要注意软件自身复杂度无谓的积累,不要将其一味留给后期测试;也有观点说软件开发过程是一个迭代的过程,前期不要过于关注细节,因为你不可能在一开始就把所有问题都考虑到百分之百全面从而在一开始就将系统设计得很完美,而是在不断的迭代回溯的过程中让其日臻完善(也因此有了现在很流行的一个词或者叫领域:重构)。似乎都很有道理,观点甚至是一致的,只是从不同的方向诠释而已。
有一点是共通的:软件是高度复杂的,当你面对巨量的代码时,已经远远超出了人脑思维能力的范围,所以,软件工程做为一种经验性的学科出现了,它总结了许多前人实践后留下来的宝贵经验、开发方法、开发模式,旨在尽可能的降低其复杂度。即——用恰当的方法、工具将复杂的问题分割简化(比如模块化、面向对象),这是该学科的根本目的。
这些自己尚可以理解,当然也就可以欣然接受,但,问题是,这些观念大多是来自国外作者的书上,也仅仅是书上。现实中,在国内,又是怎么样一种状况呢?到各大论坛或网站上去看看(顺便说句,一打开首页,看到的最多的一般来说是各种“高深”的词语,比如设计模式、某某组件、面向对象、重构等等……外加各种控件商、模块商的广告……),来到技术板块,很少有程序员对关注软件开发过程中的细节提赞成态度,大多说的都是首页中那些新词,新技术,新理念,比如说,某个贴子中某人提出了问题说“最近烦死了,公司项目因为XXX问题一直没有进展,有谁知道如何解决吗”,然后下面是跟贴,路人甲说“嘿,强烈建议你们使用YYY控件,我们公司用了几年了,很不错,而且是破解版的,要的话你留下邮箱”,贴主回“谢谢,我的邮箱是ZZZ@ZZZ.COM。这控件我用过,不过可定制性不能符合要求”,此时,路人乙赶上来就一句“你们公司要自己写一个?”,得,此话就等于投下了一颗定时炸弹,引来潜水者无数,大致都是“别重复造轮子了……一大堆理论(省略)……”,帖子结束。这让我很无语,辩论有个P用,在技术领域这样的问题上“旁征博引”是没有意义的。是的,软件开发正在或已经走向了工业化、模块化,以让生产成本尽可能的低,这没错,但是,我们万万不得盲目追崇(如果是为了达到某个私人目的故意煽动群众的除外!)。在计算机领域,各种新理念层出不穷,一看到某某理论,不加思索就往自己公司的所有项目上套,这是不恰当的。思而不学则怠,学而不思则罔!模块化只是降低复杂度的一个方面,仅此而已,模块自身必须是高度稳定的,因此,其开发过程是应高度注重细节的。话说回来,现在的软件行业竞争相当的激烈,一切都得效率先行,没有效率?不出产品?——淘汰。于是,管它什么细节什么质量,20%的人力物力出80%品质的产品,这样的决策无可厚非。但是,这是你们团队技术带头人或项目经理能说的话,是他们能做出的决策,只是——这不是程序员所应有的态度,程序应该以写出高质量的代码作为对自己的要求,你需要关注的不是整体(在你升上去之前,这还轮不到你),而是你负责的那一部分细节,把它做好。如果你追求卓越,是的,如果有现成的模块、控件且所做项目要求不高,那么,你要会用,如果项目周期很紧且无法增加人手,那么,你可以用“草书”以你的极速敲键盘写出代码,如果没有如果,你所处的公司需要高质量的产品,且所有功能都需本公司实现,那么,你也要有能力高质量地写出来。反过来说,有能力写的一定会用,而且会用得很好。这是一个不一样的境界!
另一方面,即使你是技术带头人,如果你身处有实力的大型企业,忙着为公司赚钱的同时,偶尔也应当想下民族大义,想下中国的软件产业。工业化?发达国家工业化了,咱国家成了最大的组装商,廉价劳动力市场;软件工业化了,难道咱们还要继续做组装,继续当廉价劳动力?!发达国家眼中的软件工业化跟我们眼中的软件工业化,不是一个境界。
上面说得很笼统,云里雾里把简单问题复杂化了,浪费了看到本日志的各位同学的时间,还是概括性的说一下,让大家知道我到底在说什么吧:
我一直觉得作为程序员应注重细节,写出高质量的代码。但是,我这个观点和许多朋友都很对立,谁也说服不了谁。因此,我一直在思考这个问题,想知道,那些优秀成功的程序员,在面对这个问题时,是一种什么样的态度?到底,如何才能出高质量的软件产品?细节 or not 细节?一直以来,我都渴望着有人能指点迷津!今天,看到了这本老书,作者一语中的,摘录如下(作者原文):
-----------------------------------------------------------------------------------
天下英才比比皆是,然而出类拔萃的人却不多。究其因,在学习、思考时,当是原则重于细节,然而在执行的过程中,却是细节重于原则。此外,事物变化的组合无穷无尽,主事者必须能针对目标,随时根据实际状况,逐步处理。
在各种状况中,如若程序员不能掌握当前的重点,则凡事皆如有千头万绪,难以下手。事实上,从成事败事的观点来看,人只有两种,有能力者,是把复杂的事简化;无能力者,经常把简单的事变得复杂无比。而这种能力的差异,就在于能否掌握当前的重点。
对程序的品质及技巧的完美性,应锲而不舍地追求。一般人常把完美当作不必要的奢侈,其实不然,完美是一种永远无法达到的理想。重要的观点是,人只有在追求完美的过程中,才能不断地进步、升华。一个人若没有理想,就与动物无异,一个程序员若没有理想,套句爱因斯坦的名言,不过是只「训练有素」的小狗罢了。
态度来自习惯,习惯则来自于学习及锻炼,有志向上者,应该自我要求,努力学习。等到锻炼久了,习惯成自然,有了良好的态度,终有成为大师的一天。
从事软件工作的人,可以说就是一个艺术家,艺术需要注入心智,需要个人无保留地投入。在这种情形下,环境相当重要,必须事先安排妥当。
环境的物质条件并不重要,但是安静、卫生,却关系着艺术家心理及生理上的平衡。喧哗、吵闹会令人心烦意乱,难以专心。对艺术家而言,不能专心,就毫无创造佳作的可能性。当然,若只把软件开发视作生产线上的生产工作,那就不在话下了。
由于计算机发展日新月异,新观念、技术层出不穷,数据永远难以收集完整。所以消息的流通性非常重要,在一个闭塞的环境里,埋头苦干的结果往往会落在别人的后面而尚不自觉。更何况世界各国从事计算机工作者多不胜数,他山之石可以攻错,消息的流通常可使软件工作者节省大量的心力。
观念由大处着眼,技术由细部着手,是则,理想终将成为事实。
-----------------------------------------------------------------------------------
想像一下,作为学生,我们应该学什么?是应该学会使用某个控件?学会使用某个高级语言?还是?……
不说了,打太多字,难写!写心得不容易,哈哈~~~
这是今天下午写在校内日志里的,贴到CSDN上来,仅代表个人观点,思想可能还比较稚嫩,个人所想,没有说所有的朋友都是这样,只是说现在我感觉国内技术领域比较浮躁!希望各位已经工作的朋友指点指点,一起交流。
我的邮箱是 919531818@qq.com 刘泽围 :)