大道名同,至简为一。
正如这本书名所写的那样,大道至简。
小说里不也是经常写到,某某大侠武功修炼到了极致,招式随意,看似简单却更加有威力,此之谓大道至简。
编程同样如此,同一项任务,有些人会用很多代码去写,而有些人则可以用更少的代码去写,同样可以解决问题,越是简洁,才越接近大道。
学习过面向过程的C与面向对象的C++,才知道C++更加的简洁,更加方便。试想着当我们面对一项庞大的工程时,面向对象的设计会比面向过程简单不少,会使这项工程完成的更加有效率,这也是为什么文章开头一再强调简洁的原因了。
愚公移山走的是他的繁琐道,而李冰却是简洁道。为什么我们的社会不断地发展进步,因为人们懒,人们希望可以用更加简洁的方式方法生活,希望活的更加滋润,不用去思考那么多繁琐的事情,不用去出那么多的力,于是,一批又一批的人们为这个懒惰的欲望去不断地创新,接着社会就发展了。
我们学的是软件工程专业,这是一个要求动手能力,创新能力都要发达的专业,这是一个懒惰并且勤劳的人才能存活的一个专业,如果只是一味地按部就班的完成任务,那只能说他是一个天生就应该被奴役的奴隶。编程也好,做其他事也好,都有着一个互通的道理,那就是大道至简,结果固然重要,但过程也不能忽视,如何能让过程变得更加简洁,更加快速的反应也是一大关键所在。
当然了,想要完成一项工程,需要的并不仅仅是方法的简洁,还有团队的协作与组织。
团队协作是毋庸置疑的,没有相互之间的协作,那也就是一盘散沙,这样的团队或许还不如一个人单独去做。
我没有说管理,而是组织,因为团队并不需要管理。一个管理人员要做的是观察员工是如何做的,发现规律,在其中加以引导,不是去命令般的管理,让员工心生怨念。所以并不提倡一个管理人员就真正做管理者,但如果管理人员只是与员工一样进行开发,那么他就只能是一个员工,而不是管理人员了,所以他还需要脱离开发团队,做一个旁观者,发现其中的问题,同时也对员工进行明确分工,去发现每个员工的价值,做管理也就是做伯乐。
我们学习C、C++等编程语言干什么,可能很多人会说是为了之后找工作,赚钱。对,我也是这么想的,但是,我们是赚谁的钱,是用户,那么我们所做的软件就应该使用方便,通俗易懂。这其中就涉及到了沟通,调研人员与客户进行沟通时,不能用调研人员明白而客户不懂的编程语言去交流,而是用调研人员与客户都熟知的方法去沟通,比如用汉语。一个项目里各个角色之间也存在着沟通问题,设计人员看不懂分析报告,开发人员不懂设计方案,测试人员不明白开发结果。要学会沟通,人与人之间的沟通,人与机器之间的沟通。
编程的真正目的是结果,是实现。“项目要求这样做”或“客户的本意是那样的”才是我们真正要做的,也就是真正要达到的目的。工程只是一种实现的途径,原来没有什么编程语言,但最初做开发的前辈还是达到了自己的目的,编出了程序。我们现在只不过是拥有了更加方便的工具去协助我们达到目的,这看重的不是过程,而是结果。
工具是为了更好的达到目的,过程理论中,如果懂得了所谓的模型都演化自那个简单的瀑布模型,本质的东西都能理解透彻,那无论工具存在与否,一切架子都是信手拈来。越是简单的东西,往往越是接近于本质。
程序=算法+结构,这其中没有涉及到语言,因为语言只是工具,我们学习各种语言只不过是掌握了各式各样的工具,掌握更多的工具并不足以让我们自豪,运用这些工具去达成自己的目的才是王道。
过程伴随工程而出现,它把工程分为一个个环节,环节中需要角色,角色间需要沟通。一个软件的好与坏除了取决于它本身要达成的那个目的,还有就是团队之间的配合与沟通,各个角色之间的相互协作是否紧密,也关系着项目成功与否。而各个角色的分配与协作又需要管理人员的组织,站在组织者的角度去分析每个环节,对于每个员工的能力分配不同的角色,并确保角色间的相互配合。一个好的项目经理并不是一个不犯错的人,而是一个以尽可能少的错误来获取成功的人。
考虑到现实生活与理论可能会存在很大的出入,所以要在方式方法上灵活的变通,,例如虽然语言只是工具,但是不同语言的适用性也不同,IBM敏锐的发现了java作为平台中立的语言特性,以及它在大型应用工程方面的成功表现,作为遏制Micorsoft平台优势的唯一途径。不仅是在语言问题上有出入,也要考虑商业因素,商业因素也影响着软件工程的发展。项目经理还要考虑成本与利益。
软件工程不是死板的刻画与模仿,要学会灵活运用,无论是开发人员还是管理人员都要根据实际情况灵活变通,做软件需要头脑,知律而变、创新都是毋庸置疑的,学会语言并不是万能的,但不学会语言是万万不能的。语言是工具,智慧生物与野兽的区别是能否制作与使用工具,不学会语言也就是不会使用工具,那也就不能说他是一名程序员。我们编程看重的是结果,而不是过程,一个程序运行的速度,正确率,适用性,这些结果都是用来评价一个程序的好坏。而作为一个管理人员更加需要的是管理能力,即便他的开发技术不太好,管理人员要注重每个环节的细节,总体的成本与利益,市场需要,角色的安排,各角色间的相互配合,各方面的沟通等等。
我们需要的是思想不是思考,思考只是对于表面形式的解析,而思想是对事物本质的剖析。就像毛主席思想,只有对本质的剖析才能说是思想。