西门子S7-200模块CPU224XPCN模块控制器
eX是一个典型的程序吗?你认为Knuth是一个典型的程序员吗?你信任Knuth本人吗?上面这些因素可能会影响你对研究的看法,比如:Knuth的15种分类是否全面,是否典型,在数十年之后是否仍然会在工作中发生。假如你认为Knuth无法代表其他的程序员,那么要是换成别人来做这个研究,结果会有怎样的不同呢?比如说,我们可以假设Knuth和很多的学界人士一样,是个心不在焉的教授。也许这可以解释为什么有那么多的分类都和遗忘什么事情或者缺乏远见有关了(比如分类包括了被忘记的功能、模块之间的不匹配以及意料之外的情况等)。也许一个更加自律的人或者一个只关注代码的人就不会有那么多问题。这些干扰因素并不能否定研究的结果,在你将这些结果推广应用之前,还是应该仔细考虑它们的影响。
你是否信任Knuth的研究的执行?Knuth有没有严格按照自己描述的方法来执行实验,以及如果他没有的话,这些偏差又会对研究结果造成什么影响?Knuth使用了日记研究法,这种方法在今天常用于调查人在长时间内的经历和感受,而无需直接对其进行观察。要想用好日记研究法,有一个关键点就是不能告诉参与者你的实验想要找出什么结果,以免这些暗示让他们产生偏见,影响了他们写什么和如何写。在这份研究中,Knuth既是研究员,又是参与者。他希望能得到什么样的结果?是不是在写日记之前他在脑海中就已经分好了类?他是在TeX的开发过程中为这些错误分类,还是在TeX开发完成后来回顾分类的?Knuth并没有在研究报告中介绍这些细节,这些细节却可能大大地改变我们对研究结果的解读。
日记研究也有其局限性。比如说,这种研究有可能会造成海森堡式的问题,即观察的流程可能会强迫写日记的人不断地对记下来的问题进行反省,以至于*后连记录的性质也变了。这意味着由于K
记录各种错误,他可能会认真地思考造成这些错误的原因,*后有意识地避免了各种错误,*后就无法观察到所有结果。日记研究还有一个难题,就是参与者很难长时间地坚持。比如说,Knuth有段时间曾暂停了他的实验,说道:“我没有记录实证研究,用广为认可并且经过验证的方法以证明某种断言真实性的正式研究方法,正逐渐在软件工程中取得进展。令人欣慰的是,人们终于承认了实证研究在软件工程科学中的重要地位。我们也在科学文献中看到越来越多的实证研究和相关实验,它们能够证明或者否定某些方法、技术和工具的有效性。软件工程与其他学科有几点不同之处。软件是人类智力与创造力的产物,而不是机械地“制造”出来的。软件开发的流程也不同于制造的流程。换而言之,软件流程并不是一种简单的重复劳动。这是该学科不同于其他学科的关键之处,也极大地影响了我们对它的解读。我们时时刻刻都需要关注环境变量所带来的影响。由于软件工程是基于“人”的学科,研究的结果总会有差异,我们也无法控制甚至不能确认所有的环境变量。在探索如何为人们修改和调整流程的过程中,我们需要不断进行实验。我相信我们有必要关注非正式的探索性研究,并从中得到关于软件开发的指导意见。在适当的时候,将这些意见与正式的实证研究相结合来验证我们的理论,这些理论会加入整个理论体系并*终使软件工程更加明了。我认为软件工程学科的研究是探索并逐步进化的。软件工程研究遵循科学方法,但由于其特性,真实实验并不总是可行而有效的。
在我看来,软件工程研究是一门实验室科学,是一门内容广泛的大学科。实验室的规模之大,使得我们必须使用更具探索性的方法来进行研究。只通过分析是无法理解这门学科的。唯有通过在软件工程的实践中
种关系的产生和变化,以及各种技术的限制,我们才能知道如何通过配置流程优化软件开发。
我们需要利用一切实践机会探索各种理念,比如对可行性进行测试,看看人们是否可以应用这些理念,理解应用它们所需要的技术,并测试它们与其他概念的相互关系。基于这些信息,我们可以调整研究环境中每一个理念,使人们可以在实践中轻松使用。甚至在建立模型之前,我们就需要在实践中试用我们的理念并且改良它们。那么,什么是个性?平时我们总是能谈到个性。“她有着成为律师的完美个性”或“他的个性真的有问题”。的的策略来解决它,那我们认为这个任务是稳定的。而不稳定的任务,则是用不同的方法来解决的。当确,一位大型软件开发公司的人事经理曾表示,如果有机会试用一种科学验证过的测试来度量编程能力的话,预测编程职员工的编程技能,你想要用尽可能少的时间。测试任务需要比在正常工作中遇到的任务小很多。快的程序员,学习是通过反思实践完成的,但一旦她有了程序员,她不希望他们反思,她不希望他们学习。我把这称为不思考的、被时间所困的人事经理的悖论。
事实上,这位人力资源经理并不是完全不思考的。她知道智力起一定作用。也许她已经阅读了这章所引用的一些文献。但她或许没有读到智力有益于获取知识,而不是预测已知的技能。智力不仅仅指智商(智商只是智力的一方面)。阅读科技文献时很容易遗失细节,这不会是第一次。软件工程里有这样一个传说:Royce在他的文章[70]中反对瀑布模型,但业界未能翻到下一页,在那里他说道,前一页的模型是不被推荐。这样一知半解的例子在从业者和研究者中一定还有很多。当在基于证据做出决定时,请先更全面地了解你的证据。