软件工程阅读作业——《代码大全》阅读感想
我很早以前就下载了一本《代码大全》的电子书,时不时的看一看。自从这次软件工程课留了阅读作业,我就打算将其系统的看一看。奈何这本书太厚了,我只是挑了挑几个我感兴趣的地方仔细看了看。
我的《代码大全》是93年的第一版,布局和第二版不太一致。这本书一开始讲了一些软件创建的先决条件,即软件工程的几大步骤,随后便开始讲一些编码规范,如各个变量类型、goto的用法等。这些话题都被其他介绍编程语言或者设计模式的书中有所介绍。从第18章开始,这本书开始描述一些脱离了语言本身的方面——有的程序好,而有的程序差,它们的好坏似乎并不取决于算法多么优异、执行的都么有效率,而取决于它们的编写风格和稳定性。这本书的中间部分尝试教给我们比较好的编程风格,包括注释、文档等,也介绍了一些提高软件开发效率的方法,如IDE、测试、调试方法等。这些东西是从学生走向程序员所必需学习的,也是团队工作所必需的。这本书的后半部分则是这本书的重头戏,因为它介绍了真正工程中的一些技术与实践,也是项目经理必需要知道的东西。我们需要跳出代码的世界,去看看真正的世界,接触真正的人,学会如何自我管理、反省自己的过失、沟通、合作,只有掌握了这些技能,才算一个真正的软件开发人员。
在编码规范部分,我对介绍goto语句的部分很感兴趣。看了之后,发现虽然作者希望说goto有利有弊,但是他潜意识里还是反感goto语句的。但是我不这么认为。似乎大家都认为goto多么多么不好,一定不要用,但是我遇到过的会产生不良作用的goto语句很少,更多的是有些不得不使用goto的地方,但是语言不支持。很典型的就是java语言不支持goto。我用java开发过几个项目,几乎都遇到过不知不觉的打上了goto四个字母,结果ide告诉我语法错误的情况。我认为goto语句是必不可少的,而且会导致问题的goto语句其实不容易出现,我们不必为goto付出太大的愤慨之情。“如果程序员知道存在替换方案,并且也愿意为使用 goto 辩解,那么用 goto 也无妨。”
在编码规范部分提及了很多关于模块化的内容,作者认为模块化的软件才是好软件,在后面还提及到将模块细化和可以降低代码的复杂度。对此我不是十分认同。过于复杂的层次结构反而会提高代码的复杂度。面向对象方法是一个很好的发明,但是它并不是万能的,它也有缺点,其中一大缺点就是过度工程化,我们很容易设计出一大堆类来实现一个很小的功能,还能感到很有成就感感觉自己已经成为了一个牛x无比的架构师。这样不仅花费了很多时间去设计架构,而且还让团队中的其他人更加不容易理解架构内容。于是,这个世界上出现了一个叫做“设计模式”的东西,但是它不是万能的,将强制的使用已有的设计模式设计项目反而会造成过度设计,别人的设计往往并不是最适合自己的项目的。解决这一问题的方法只有一个,就是多加练习,有句话说的好,keep it simple stupid,对于软件架构也是一样。
在中间的部分,我十分同意关于注释和文档的部分。注释和文档到底有多重要,问问阅读代码的人就知道了。注释是必需要写的,书中介绍的关于注释的几个原则也十分有用。但是我觉得可以加上一句话,有时候纸笔更加方便一些。对于文档来说,使用类似word、visio之类的软件画出直观的图表,往往不如直接在纸上简单的画出来方便和直观。当然,画画也要能让他人看懂才行。
接下来,我开始看我最感兴趣的一章——个人性格。我们都知道,程序员已经成为了猝死率最高的职业之一。但是仔细想一想,猝死其实并不是由于程序员的生存环境有多恶劣,而是由于个人性格、态度、心理上的作用,使程序员们(自愿的)降低了他们的生活质量,从而导致了悲剧的发生。个人性格有如下几点:聪明与谦虚、好奇心、诚实、交流与合作、创造力和纪律、懒惰。作为一个优秀的程序员,我们需要保持谦虚并对技术有着强烈的好奇心,同时遵守代码规范,不能随心而为,克服懒惰以提高编码效率。只有这样才能尽可能的晚几年猝死。对于猝死,我想说的是,很多的程序员都有着糟糕的生活习惯,而又可以发现,拥有良好的个人性格的人(参见上面的几点),他们往往有着良好的生活习惯。
最后,我还想强调一下沟通的重要性。全书貌似只有在项目管理一章强调了沟通,但是我认为沟通无处不在。沟通可以让双方更加有效的获取所需的知识,可以增进互相之间的感情,可以提升项目成员对项目的共识。当然,沟通的对象也一定要找好,不然反而会事倍功半。
书里的一句话我记忆很深刻:“首先为人编写程序,其次才是计算机”。经过了两年的计算机专业的学习,我们似乎更关注于对计算机内部的了解,更希望如何让程序的构造更加适合计算机的体系结构。但实际上,现在早已不是那个遥远的时代了。程序是要给用户使用的,我们编写的软件的最终目的并不是这个软件自身有多么的优秀,而是这个软件可以为用户提高多少生产力,它的价值也体现于此。这也是这本书的价值所在。这是一本十分好的书,讲解了很多很多的内容,需要花费很多时间去看。