« 六月微博语录为什么研究生都走光了 »

新手编程常犯的两种错误

最近做一个项目,带着团队里面的两个新人。两个新人在平时的评价都是非常聪明,学东西很快,可是因为项目原因不得已一直在做一些维护项目,只是修复下软件缺陷,从来没有做过新的项目。而这次恰好赶上我工作比较忙,便有了这次机会。

前两天,随着我开始做代码评审,发现项目上的质量问题越来越多,最后导致其中的一位新人昨晚通宵了,因为他做的一个模块被我看了之后需要全部重写。另外一个新人虽然没有通宵,只是因为他的模块在之前看过,结果也是全部重写。这两个新人的错误很有代表性,在这里马克一下,我认为这些是很多新人编程容易犯的错误。

1. 不读懂需求就开始写代码。

在他开始开发模块之前就强调了N遍,一定将需求仔细读熟之后再动手写代码,磨刀不误砍柴工。那究竟怎么读需求?

拿到需求文档后,首先第一遍要粗略(general)看一遍,知道有哪些模块,揣测项目的模块和现实的联系等等。随后第二遍便细读每一个章节,同时旁边备好问题列表(question list, 通常是由一个excel),争取通读一遍下来便可以在问题列表上有价值的问题。此时此刻,问题列表在这里是为了迫使阅读者提问题,能够提出问题的阅读才是高质量的阅读,因为除阅读外一定伴随着思考。通常第三遍,就会拿到客户的反馈再对照需求文档,甚至在需求文档上做更新,做批注。这时候熟悉的人估计已经将大体框架和具体逻辑线了然胸中,新手的话继续读N遍,一直读到放下需求文档可以独自在白板上演示业务逻辑的程度。最后,再开始动手写代码之前,再针对性地看需开发的功能模块细节描述,同时设计出具体的技术方案,比如什么时候数据从db里面取,什么时候从内存中取,用什集合(collection)更适合存数据,在屏幕加载的时候应该做什么东东等等,这些技术方案可以在脑中,在电脑上新建文本文档,不过我最喜欢的还是在白纸上划,个人觉得思考过程更接近本质。然后,就可以写代码了。你会发现这时候写代码就跟着之前的方案写了,好像在做翻译工作,因为非常重要的设计工作已经做完了。

不可否认,很多时候新手在写代码之前无法将设计工作做到很好,因为本身对代码技术就不太熟悉,这个时候不可避免地要边写代码边设计。但我还是建议设计在前,为代码铺路。

如何检测出这样的情况?一般的黑盒测试就够了,配上QA的问询,马上显原型。这个时候QA讨论需求答不上来,黑盒测试发现和需求不一样,很快就可以得出质量的总体印象。

2. 写代码没有任何思考。

这类同学会仔细读懂需求,但是在实现的时候不会考虑任何代码优化,架构设计,总之一句话:实现就好。这种类型在黑盒测试以及配合少数据量的时候一般测不出来,所以QA会觉得“没什么bug”。一旦上白盒测试,代码评审,那马上会让你七窍生烟。爱循环,也爱遍历,不爱重构,也不考虑性能,做完就好。最后代码评审自然就重写了。

对于这类人,最好的办法便是强调在开发前的设计方案。可以先让他把技术实现方案说给高级工程师听,做到前期评审,这样后期也不会有重写的代价了。不过,对于新人,吃一回亏,呛一口水是好事。在出事之前的任何建议都像教条一样,只有在出事后,知道自己的问题,加班熬夜甚至通宵过后,才会留下难以磨灭的印象,第二次就会重视很多。似乎软件工程师都会有加班熬夜的经历?我的办公室 夜日志

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。