《优秀《代码大全读书报告》-马松》由会员分享,可在线阅读,更多相关《优秀《代码大全读书报告》-马松(3页珍藏版)》请在金锄头文库上搜索。
1、 内部公开 Internal Use OnlyAll Rights reserved, No Spreading abroad without Permission of ZTE第 1 页代码大全读书报告我开始接触程序是上高中的时候,那个时候的计算机课程是讲 PASCAL。由于高中阶段的唯一目的是考大学,这种“副课”就作为调剂来缓解一下紧张的气氛。上课的内容也很简单,在 DOS 下画个五角星什么的。但是那时候大家的心思都不在学习计算机语言上面,能够完成这样简单任务的人已经被认为是“高手” 。我那时的兴趣完全在打篮球上面,天天抱个篮球满操场窜,同样也认为能画在 DOS 下画出五角星的人是“高手”
2、 ,说不定还是 “黑客” (那时正热播骇客帝国 ) ,加上他们几个平时课间聊的内容,我对他们的敬仰更是如滔滔江水,连绵不绝。紧张而愉快的高中生活很快就结束了,我阴差阳错的上了西电的计算机系。我拿到通知书的时候脑袋里反映出两个词语“PASCAL”和“骇客” 。这是高中毕业的我对计算机的唯一阐释。很快,愉快的本科生活也过去,脑海里计算机的概念也不断的丰富了起来。西电的计算机系的课程比较重,软件硬件都要求学习的比较深入,而我喜欢偷懒,就选了个方向叫软硬结合。从大四开始,就被我的硕士导师叫在实验室里开始做项目,主要是写驱动程序和一些控制程序,后来还写过一些安全方面的程序。毕业的时候,在实验室也写了 3
3、 年多的代码。这次参加中兴的新员工培训,我又看了久违的代码大全 ,心中略有感触,总结自己以往的经验和教训,拿这些来和大家分享。软件的代码,似乎是和程序员这个职业联系在一起的。如果在网上搜索一下“程序员”这个词汇,一定会发现诸多鄙夷这个职业的言论,大多集中在两个方面:第一、程序员年龄大了很悲惨;第二、程序员的工作是“苦力活” 。真的是这样的吗?我认为,这些言论混淆了“coder” 和“programmer”的概念。编码员(coder)的概念来自早期的大型计算机,当时的计算机没有操作系统和编译器,它能够识别的东西只有零一编码。在计算一个复杂问题的时候,科学家们会给出这个问题的算法和程序,然后由编码
4、员根据程序进行编码,并制成程序卡片输入计算机。在这种条件下,编码员的工作方式是机械重复的。然而随着计算机科学的发展整个社会的信息化进程也在不断发展,以前仅用来处理科学计算的计算机技术广泛的应用到社会生活的各个方面,也催生了一个新兴的产业:软件产业。既然有了产业,自然就有在这个产业中的从业人员,他们的中坚力量就是程序员。程序员以创造软件产品为目的,他们所追求的是产品级的软件,代码编写仅仅是软件过程中实现软件设计思想的一个步骤,这个步骤是每一个程序员必须亲身经历的,编码的重要性在于将软件设计转化为实在的软件产品。这时的编码和早期的编码具有很大差别。早期的编码是将编写好 内部公开 Internal
5、Use OnlyAll Rights reserved, No Spreading abroad without Permission of ZTE第 2 页的算法翻译成机器语言,任何编码员将算法编码出的结果完全相同。而现在的程序员大多数情况下使用高级程序设计语言编写代码,这就需要操作系统和编译器的支持,从而使得程序员在编码的时候有很大的弹性空间。他们需要利用操作系统和编译器特性来完成他们的编码工作,不同的人的写出来的代码不会是相同的,这一点是软件产业和其他产业的最大的不同之处。针对这一现象,软件工程这一学科发展了起来,它致力规范化软件产品生产的各个过程,形成软件工厂。然而,软件工厂仍然具有其
6、特殊性,这个特殊性在于其需求的灵活性和生产方式的多样性。这些特性对这个产业的从业人员程序员,有着特殊的需求。想要成为优秀的程序员,不仅仅是完成设计/编码工作,更加需要具备一些特殊的品质。程序员的品质个性是影响软件过程和软件质量的一个重要因素。按照我的排序,责任心是程序员最重要的品质。以一个最简单的例子来说,很多程序员写代码的时候喜欢忽略最重要的两样东西:注释和文档。有些人想急于完成功能后来再加,有些人认为只要代码写的好就可以,为了应付上面的检查,草草的写了注释和详设文档。而当程序功能完成了以后,再也不能说服自己去完善自己的注释和文档。最后这些文档和注释再也没有人能看懂,更坏的情况是文档和注释中
7、甚至还有错误,给文档的读者形成了误导!还有些 C/C+程序员写代码的时候,往往忽视“声明指针时需要赋 NULL”的告诫,因为他们认为编译器会为他们做这个工作,而当编译环境出现变化的时候会导致程序不定期的崩溃,并且这种 bug 非常难以定位。诸如此类问题的发生,绝不是因为程序员本身技术水平不高,问题的根源在于对自己写出的代码的负责程度。程序员的另一个重要品质,是包容与开放的心态。这种心态的直接表现,就是良好的沟通能力。那种靠一个人完成一个软件的时代早已过去了。一个大型软件的开发团队可以有几千人,这种规模的团队里,沟通就成为一个很大的开销。在开发过程中,主要存在这两种沟通方式:和开发团队领导者的沟
8、通、和团队中队员的沟通。和开发团队的领导的及时沟通,具有反馈的作用,通常可以使得设计人员发现设计过程中的缺陷。和团队中队员的沟通,往往可以减少对同一概念误解的可能性,减少联调可能出现的错误。程序员的第三大优秀品质是谦虚与学习。有些偏执的程序员总喜欢批评一项技术,并且对一项技术的缺点嗤之以鼻。比如很多习惯 C/C+的程序员会对 Java 的效率提出各种各样的批评,但是对 Java 的跨平台等优良特性只字不提。这样闭塞的心态对程序员来说是非常忌讳的。一种新技术的出现,必定意味着在某一方面有着这样的需求,优秀的程序员的眼界绝不会仅仅的盯着自己熟悉的一片领域,他们会用谦逊的眼光看待不同的意见和新事物,
9、并不断地思考与总结。有时候,碰到一些同事会问:你 内部公开 Internal Use OnlyAll Rights reserved, No Spreading abroad without Permission of ZTE第 3 页是用什么语言的?我有时会感觉这个问题很难回答。记得大一学习 C 语言的时候整整学了一学期,后面学习 C+又是半学期,之后就再也没有专门开过针对语言的课程了。给我们讲 C+的老师说过:你们学过了 C 和 C+,只要掌握了语言的特性,学习其他语言几天就够了,其实语言并不重要,重要的是思想。当时大家半信半疑,谁也不相信自己有这个本事。直到有一次,我的硕士导师需要我在一
10、周之内用 Perl 集成两个应用系统。被逼无奈,我找来了一本 Perl 的语言参考手册,花了一天时间了解 Perl 的运行环境和交互方式,以及寻找相应的帮助文档;一天时间总结了 Perl 的数据定义方式,和各种控制结构;一天时间学习了正则表达式和进程控制。第四天开始从一个例程向老师的需求修改代码,中间虽然磕磕碰碰,终于在第八天的时候将两个系统缝合了起来。回头想想,之所以能够完成这个任务,还是使用了我们老师讲过的类比找特性的方法。当消除了对语言的畏惧心理之后,善于学习程序员们思考的会是如何的设计系统与优化系统,这就上升到了架构的层次,他们所考虑的也不仅仅是编码问题了。代码大全这本书是我们在学习 C 语言之后的那个假期我们老师推荐给我看的。当时看它,只是觉得它讲的东西很抽象,讲问题的方式脱离了某种语言的束缚。回头看来,正是因为当时一知半解的看了一遍它,才渐渐明白了学习 C+时候老师说的那番话。来到中兴,又一次与它邂逅,读起一些章节,略有感触,特撰此文,与大家共勉。