程序员怎么快速写出优秀软件?
轻云软件库9月9日消息,作为一名程序员,我希望本身能写出优秀的软件,但要写出好的软件并不容易,这需求良好的编程习气,一流的技术程度和丰厚的理论经历。作为北大青鸟的教师,不断从事ACCP课程的教学任务。经过多年的开发经历和教学经历,以及在先生中发现的成绩,我如今谈谈软件开发,希望能协助先生写出优秀的软件,成为优秀的软件工程师。
1.你需求的是最好的。对公鸡来说,麦粒比钻石好。
需求的就是最好的。关于公鸡来说,钻石对他们来说没有任何价值,不能吃,不能用。关于人们来说,钻石例如十分有用,由于我们需求它们。
那么什么样的软件才是最好的软件呢?需求的才是最好的,契合用户需求的软件才是最好的软件。我们开发软件,一定要以用户为中心,为用户设计软件。不要从本身的角度去设计软件,更不要去改动用户的需求。
有的同窗在考试的时分改试题的标题,不依照标题的要求去做,这是十分错误的。我通知他们,试题是用户的需求。不按试题要求做,就不能得分。做多了就拿不到加分了。异样,用户让你开发一个软件。你不按他的要求开发,他就不给你钱。假如你开发了多余的功用,他不会给你更多的钱。我们在开发软件的时分,一定要依据用户的要求来开发,我们需求的就是最好的。
软件开发必需以用户为中心,而不是以自我为中心。你是在为用户开发软件,软件是卖给用户的,而不是你本身。所以你以为好的不一定是好的,只要用户以为好的软件。在一次辩论会上,一个先生的界面用了亮色作为背景。我觉得不适宜,就问:“你项目里的背风光合理吗?”他说:“我觉得很美”。很分明,这种软件一定是失败的,他不是站在用户的角度看成绩。异样,在辩论会上,有同窗解说项目时,假如是可视化项目,那就是一个菜单接一个菜单,假如是Web程序,那就是一个网页接一个网页。假如站在设计师的角度去解释,只要你本身能了解,也例如只要你本身情愿听。我们应该从用户的角度来解释这个项目。比方我要解释一个网上书店,先翻开首页,然后按类别阅读。阅读后,我例如要搜索书籍,参加购物车,登录,注册,下单,等等。用户怎样用,我们就怎样说,让用户更容易了解。
2.进步软件的可读性。
很多程序员都晓得假如软件不可读。然后你就不能协作开发了,由于他人看不懂你的代码。异样的,软件是不可读的,过一段工夫你例如就看不懂本身的代码了。此类代码例如会变成一次性代码,永远无法修正或再次运用。
如何进步软件的可读性?有经历的程序员会通知你:运用标准的命名,合理的层次构造,完好的文档和正文。这个我就不通知你了,由于测试软件可读性的规范不只仅是这些。那么我通知你,要让你的软件可读,你应该这样做:把你的代码交给你班里一切的同窗和教师阅读。假如他们能了解,那么你的代码可读性很强。假如连教师都看不懂,那么你的代码可读性就很差。异样,作为一名程序员,你要有良好的沟通才能和言语表达才能。那么如何训练本身的表达才能,晓得本身的表达才能能否过关呢?同窗遇到成绩,给同窗解释一下。假如他能看懂,阐明你的表达才能不错。假如大家都听不懂,那你的沟通和表达一定有成绩。把本身的代码给他人看,一方面可以测试本身的代码能否可读,另一方面也可以协助其他同窗。异样,假如先生有成绩,我们可以协助他们解释。一方面可以进步和检验本身的表达才能,也可以协助其他同窗学习知识。记住:协助他人就是协助本身。一天早晨,一个盲人提着灯笼。一个过路人看见了盲人,对他说:“你是个盲人。你拿着灯笼干什么?你看不见。”瞎子说:“我提灯笼是为了照亮他人,让他们看清楚,这样他们才不会打我。”协助他人就是协助本身!世界级软件巨匠(设计形式之父、JUnit设计师、Eclipse架构师)Eric Gamma说得好:“我们每团体都需求他人的关怀和协助,每团体也需求关怀和协助他人。”
3.良好的可重用性和灵敏性。
运用面向对象的开发技术可以很好地支持可重用性和灵敏性。封装和承继用于重用,多态用于灵敏性。
复用很重要,可以开发大规模的使用。我们随处可见复用技术。封装就是把可变的东西和不可变的东西隔分开来,让不可变的东西可以重用。承继显然是重用基类代码。框架也重用,用户控件重用,母版页重用,三层构造也重用。重用不是复制。复用就是反复调用,复制就是四处复制代码。重用是好的,复制是坏的。
用户的需求常常变化,那么如何进步软件的特性(即灵敏性)来应对变化。多态性用于完成灵敏性。让我给你一个接口的例子。Java和C#都有接口。为什么要用接口?为什么要用接口作为办法的参数?电脑里都能看到USB接口,那为什么还要用USB接口呢?由于运用USB接口后,可以衔接一切运用USB接口的设备。几个小时前可以接打印机,今天可以接鼠标,后天可以接挪动硬盘,然后后天可以接数码相机,只需都是USB接口。所以接口可以依据你的变化顺应你需求的设备。程序中的界面完全一样。如何能依据用户的变化疾速呼应?这就要求我们的软件要灵敏编写。我们如今听到的矫捷软件开发也是如此。什么是矫捷?在环境变化的状况下疾速反响,这叫矫捷。
因而,我们应该深入了解面向对象的思想,进步程序的可重用性和灵敏性。
4.高强度测试,确保软件的强健性。
很多人不注重软件测试,以为测试是糜费工夫。那我通知你,在软件开发中,简直每团体都会参与测试,但不是每团体都会写代码。一个系统剖析师最理解软件功用,他可以做系统测试。一个软件设计师最理解模块之间的关系,他会做集成测试。一个程序员最理解本身的代码,他可以做单元测试(或许模块测试)。测试人员也会做专门的测试。假如不做好测试,软件的运用就会呈现成绩,当前他人例如再也不会用你的软件了。测试是保证软件质量的最关键要素。关于测试,要留意以下两点:(1)尽早做测试。越早测试,越早发现成绩,越容易处理成绩。(2)尽例如多做测试。测试用例越多,发现的成绩越多,运用中的成绩越少,软件的质量就越高。
假如软件没有失掉无效的测试,你将得不就任何荣誉,也没有人欣赏你的努力。你失掉的最多的是疲劳。
为什么软件应该是强健的?关于一团体来说,你一定不想长得很胖,由于这样做不方便,效率也不高。太胖是由于有多余的肉,关于程序来说,是多余的糜费代码。显然,过多的糜费代码会影响程序的执行效率。异样一团体,瘦得什么都干不了,还例如常常生病。没有公司想要这样的人。至于程序,代码太少完成不了功用,例如由于没有异常处置而无法正常运转。没有人情愿运用这样的软件。我们需求的是一个十分健壮、高效、不生病、身体看起来均衡的人。至于代码,执行效率高,没有错误,可读性好。
5.学习如何处理成绩,而不只仅是知识自身。
很多先生靠记忆学习编程,这是十分错误的。一团体一年内会遗忘80%的知识。我可以通知你,我的记忆力很差,但我记得的东西不会随便遗忘。由于我懂记忆。而且关于每一项技术,我都会深化理解,所以记忆深入。
好,举个例子,看我怎样了解。先生在学习Java的时分,我会问先生= =数等于地址还是等于值。大局部同窗答复的是同一个地址,局部同窗答复的是同一个值。我说,“全错了”。显然,他们不明白。值类型变量存储数值,援用类型变量存储对象的地址。那么两个值类型变量的比拟一定是比拟值相等。你说3 = 5比拟地址相等吗?由于援用变量存储的是对象的地址,所以相等比拟当然是地址相等。
先生学习自加运算符++时,早晨有一节自习课。班长给先生做指点,问一切先生,5++是多少?一切先生都说等于6。还好我听到了。置信他们都晓得++的意思是给本身加一,也能区分变量和常量,只是不晓得什么时分一同用。但是假如你通知他们,他们都会明白,而且会了解的很深。我对先生说:“5++不对。不能这么用。自加是为了改动本身的价值。5是常量,常量的值不能改动。这不是自相矛盾吗?因而,自加和自减运算符只能用于变量”。
6.遇到成绩并不可怕。关键在于你能不能处理它们。
很多同窗去面试,回来后通知我面试单位给了我一个方案或许一个小项目,让我过两天给他看看。这不是开卷考试吗?我通知他,假如我是面试官,我也会这么做。由于我看重的不是你记住了多少知识,而是你能处理多少成绩。由于每团体都会遇到成绩,教师也会。遇到成绩并不可怕。我们可以看书,在网上查阅材料,问问他人。只需成绩处理了,就很好了。