如何写好代码
-
数据结构和核心算法低水平程序员总在考虑代码,高水平程序员总在考虑数据结构及其之间的关系。数据结构考虑清楚了,核心的算法自然就出来了,这就是关于每个类的每个方法如何实现的问题。比如需要实现一个中位数查询方法,如果你前面确定了数据保存的格式是一个列表,那么你可以考虑采用插入排序法;如果数据格式是自平衡二叉排序树(AVL),则只需直接返回根节点就可以了。数据结构决定算法,所以你在考虑数据结构的时候,一定要尽可能地使数据的结构和它的自然属性相匹配,不然后面的实现就会是一场噩梦。
-
功能实现思路确定后,实现过程也需要大量的构思活动。碰到你比较熟悉有经验的领域,你自然可以轻车熟路,但难免会有一些你不太熟悉的技术需要尝试。作为一个程序员,最大的挑战也是最大的乐趣所在,就是不断学习新的技术,没有这样的心态,很快就会落后。
-
那么遇到不熟悉的技术怎么办?光谷校区专业老师建议,先不要急着实现项目中的代码,自己另外维护一个测试项目,在里边边查文档边学习,边做一个小功能,把 所有需要在项目中实现的功能先在测试项目里跑通,然后再写项目里的代码。这样做的好处是把单个技术问题和其他潜在的bug隔离开来,便于快速学习新技术。 否则,你直接在项目里写代码出错以后,要判断问题的源头都要多费好几倍的精力。
-
测试测试很重要,设计测试用例就像开发时设计数据结构一样,也是很关键的。在设计测试用例的时候,要把当时自己设计数据结构的思路全部忘掉,或者找别人来设计测试用例,不然会不由自主地测试那些你已经考虑到了的地方。这样测试是跑通了,用户一用起来可能各种边界条件会到处出问题。有人会推崇TDD的方法,先设计好测试用例,然后在开发过程中确保所有测试通过。从开发质量管理和长期维护的角度来说TDD是很有必要的,但把它摆到驱动开发的高度,就有点本末倒置了。
-
代码可读性。代码的可读性一定要好,要做到一年后甚至几年后你拿到自己写的代码,还能很容易看明白当时的思路和实现。这就涉及到命名和注释的问题。命名就像超市里的商品标签一样,要让看得人一目了然就知道这是个什么东西,注释也是很重要的,它可以用来说明一段代码的作用,算法的设计思想,或者是方法调用的参数格式要求等。所以,在重要或者复杂的地方,都需要详细地写一些注释,便于看代码的人清晰地了解你的思路。