Date: 06 Jul 2013
在读研究生的期间参与了导师的一些项目,在这些项目中我的主要工作就是编程。这个过程中充满了经验与教训,现在毕业了,是个不错的机会把这些经验和教训都写下来,以便在以后的编程过程中参考。
总的来说,在学校里编程感觉并不是很爽,有的时候甚至有一种「进坑」的感觉。造成这种感觉有环境原因也有我自身的原因。
之前看过一篇文章:大学里做不出好软件 。在这篇文章中作者列举了若干大学里做不出好软件的原因。在这些原因中有一些就是造成我在学校里编程感觉不好的原因:
大部分的教授很少编程。老师们不编程,当然也不会去强调诸如:代码审查和单元测试之类的编程方法,那么软件的开发过程和结果就可想而知。
学生缺乏经验。对于编程来说经验是十分重要的。在《UNIX编程艺术》这本书中就说「在大多数工程领域中,就一个专业人员的素养组成来说,有些不成文的行业素养具有与标准手册及教科书同等重要的地位(并随着专业人员经验的日积月累,这些经验常常会比书本更重要)。资深工程师门在工作中会积累大量的隐形知识,他们用类似禅宗‘教外别传’的方式,通过言传身教传授给后辈。」在学校里,在一起编程的都是学生,所受到的「言传身教」也不会有多少。
大多数的学院里的研究者是为自己写软件。在学校里写的程序基本上是:写好程序,使用它,然后忘了它。文档和维护什么的基本上是没有的。
作为没有经验的程序员的一员,现在就来总结一下我在学校里编程所得到的经验教训:
批判性的思考。在学校编程时,一般都会根据老师提出的技术方案来做,有的时候当觉得老师提出方案能够完成功能时,便会去执行了,而不会对这种方案进行批判性的思考,例如:这种方案可能会存在的不足、还会不会有更好的方案等等。盲从真的会导致项目中的「深坑」。这一经验的可用范围绝对不限于编程,在做很多事情的时候都用的上。
多思考,少编码。在读研究生期间看了不少“程序员10大编程经验”之类的文章,在这些文章中我最有感触的一点就是「多思考,少编码」,而这一点也是我比较缺少的。我通常面对一个需求时,在很快想到了实现方法之后一般就会很快的去写程序了,而对实现方法和代码实现上思考较少,这常常会导致了程序可读性不高、可扩展性不强这些缺点,这些缺点会让后期的代码维护变得困难。
框架、新技术和新工具的使用。在这里不想讨论框架和设计模式的好坏问题,只是想说说对框架使用的一些感受,我觉得应该使用一些相对成熟或者是有强大社区支持的框架,特别是在开发项目的人力和时间资源有限的情况下。否则框架的使用并不会对开发产生好的影响,相反会使开发者陷入对框架本身的研究而没有时间和精力去对软件项目进行设计与开发。新的工具和技术总是会对技术人员产生诱惑,除了他们带来的各种激动人心的「新特性」之外,他们至少可让使用他们的程序员看起来很「酷」。但是盲目的使用新技术和新工具会带来相对较高的开发成本,甚至到后来会发现在项目中几乎没有用到几个「新特性」。
重构。首先我绝对相信「重构」会对项目产生好的影响,但是我对「屠夫式」的重构感到害怕。所谓的「屠夫式」重构就是把项目的原代码一次性全部「推倒」进行重构。对这种重构感到害怕的原因有二:一、把全部代码一次性重写一遍工作量实在太大而且枯燥。二、一次性的重构很难保证这种重构对每个功能和模块都有效,因为不可能在一次的思考或计划中对所有模块和功能的实现都考虑完全,一旦这一点做不到那么重构的效果就大大折扣了。