对于什么高质量程序可谓是仁者见仁,智者见智,今天也说说我理解的高质量代码。以下人物和场景均为假想,请勿对号入坐。
1. 正确、稳定运行。
2. 架构清晰、可扩展性强。
3. 可读性强,有必要的注释,代码风格保持一致。
这三条必须按其顺序排列,第一条看似简单,其实非常的难。
就以一小公司GS为例,公司初创,要为一套仪器紧急开发程序,为了控制成本,直接外包出去,当外包人员开发出代码v1.0时,能基本正常运行了。王老板看过演示,觉得不错,为了早点实现盈利,这套代码立刻投入生成。
代码最基本的特点就是能够正确运行,以达到人们想要的结果,所以“正确”排在第一位。不管是驱动代码、用户空间代码还是app代码,在掌握基本业务逻辑之后,编写正确不算困难。
产品出了不久,被客户投诉,说在处理某些问题时,仪器重启了,,,要求赶快解决。王老板顿时头大,还好外包公司承诺三个月类免费维护,感觉电话联系那边。但外包公司说,你们有源码,可以自己解决。王老板心想,能解决还找你?经过不少于10个电话和5封Email,终于在拖拉了两周后,外包公司说解决了,程序进入了一个异常分支,会引起重启,并将补丁发了过来。王老板长舒一口气,感觉对外边的仪器进行了升级。
正常的代码不难,难就难在稳定运行,即能处理各种特殊情况。这就需要程序开发人员对逻辑分析吃得很透,在发现有逻辑错误时,能快速定位,加以解决。
有了第一条作为基础,其实你的代码就可以用于实际的软件产品了。又过了几个月,有客户反映到,希望增加几个功能,这用起来很不方便。王老板想了下,是啊,客户是上帝,但现在如果又让外包公司来做,肯定要被狠宰一笔。想想心里很不是滋味,如果当初不是这么急,肯定不会找这些外包公司,钱一但收到,再让帮个忙简直跟装孙子一样。唉,没办法,要不招几个程序员吧,反正现在公司有余钱,自己的员工,做起事来也放心。
于是在各大招聘网站高调喊出,来来来,c程序开发工程师这里看过来,月薪3456,各种补贴,绩效奖金等。。。
没想到过了几天,还真有几个人来面试,王老板心里顿时有了一种成就感,嗯,不错,来投靠我王老板是你们的运气。但是看了看对面坐的应聘者A,背一双肩黑包,头发略长,还有点油,穿了件白色圆领T恤,胸前还映上一串外文,裤子是一条7分旧的牛仔,搭配一双不知名的波鞋。心里大喜,很有程序员的风范,于是问到:“毕业没问题吧”?
A说,“有点恼火,还有好几科有补考,但我的技术是没问题的,要不这样,拿不到毕业证,你就给我3k吧!!”
“嗯”,王老板看着A很有当年自己的风范,心里一笑,“OK,下周就来上班,没问题吧?”
“绝对没问题。”
A进入公司,意气风发,想要大干一场,主管说你就负责公司核心业务的代码维护和开发。不懂的可以问题工程师B。A说好,立即请教B开发环境和代码下载,B却面露点难色,“我也刚来不久,还不太清楚,不过环境倒是没问题”。
A终于把代码拉到自己的PC上,然后听产品经理讲了需求,就开始hack了,这在以前学校是经常做的,应该不困难。但是当A打开代码后,感觉有点傻眼。上千个.c和.h文件,甚至不知道从哪个文件开始看。长出一口气之后,开始从makefile看起,头昏脑涨,看了好几天后,发现还是无从下手,于是向主管报怨,这代码太垃圾了,没法修改。
王老板自己也去看了下,确实恼火,就不要为难自己员工了。没办法只好花高价请专家进行重构,专家说重新弄一套框架吧,至于新增的功能,可能要等上几周了。王老板说能快就快点,外边客户催得紧,但一看专家脸色不对,马上又陪笑到,“时间可以放宽,但必须保证质量”,F你去和客户解释解释。
软件架构清晰,具有很强的扩展性。可以在以后的业务扩展、修改上节省人力和时间成本。
当架构问题清楚了,A也从中学到不少东西,现在只需要简单修改几处,新的功能就可以正常使用了。于是A迅速的复制、粘贴,很快就完成了这个功能。然后git push到库上,并告知CI可以出版本了。版本出来后,验了下功能,不错,还凑合。
又过了不久,测试发现A实现的功能出现了一个bug,A赶紧看了看,暂时查不出原因。没办法,只有向B求助了。B好歹工作过两年,有些经验,B直接打开code review网页,开始查看A提交的代码。然后眉头一紧,心里暗想这shit代码也拿得出手?一会儿TAB,一会空格,版面乱糟糟的,有时两行代码间空了3、4行。再一看,函数名f1、f2…变量名num1,here…本想直接爆粗口,但良好的职业修养抑制住了这股冲动。
便说道:“我认为你代码格式和命名上有些问题,导致帮你debug很费劲,要不你先修改一下。”
A疑惑,“在学校就是这样的啊,能跑通,没太大问题。”但没说出口,而是反问道:“怎么改。”
B说,“这样吧,我直接给你改了,顺便帮你debug,以后就照着这样做。”
可读性强,有必要的注释,代码风格保持一致。这样别人在最短时间内可以给你最大的支持,同时有助于找出错误。
A看了改版本后的代码,觉得是比自己写得漂亮些。不禁想起了读书写的作文,明明自己写的不错,就是字有些难看,但就是拿不了高分。再一想,日记之类的自己看写得潦草了无所谓,只要能认识。而试卷、作业这是需要给别人看的,必须要注意书写规范,搞不好,做对的也被阅卷老师改错了。好像是这么回事。
A把这段时间的经历仔细想了想,嗯,写程序其实不难,难的是写出高质量的程序。这难度有点大,但是有信心能做到。随后吟颂出:路曼曼其修远兮,吾将上下而求索。