1.首先仔细分析问题
2.接着好好想想如何解决这个问题
3.收集整理所有需求。
花点时间将最终产品要实现的目标写下来,并且明确哪些是我们的目标用户群。如果这一步能做好的话,将会给后面节约大量的时间,正所谓磨刀不误砍柴工。
4.写一个全面的实施计划(或模型)。
如果是个小项目,这一步出来的可能只是一个基本的流程或者一个简单的等式。
如果是个比较大的项目,这一步有助于我们将它切割成几个模块,然后再按下面的问题思考:
各个模块需要执行什么任务
模块之间如何传递数据
如何调用模块中的数据
虽然比起直接入手去写代码,收集和规划需求又枯燥又无趣,但是如果这一点没有做好,后面的调试工作就会特别繁琐。如果我们能花点时间,设计出一个正确的程序流程和结构,那么我们其实在写第一行代码之前就相当于已经成功了一半。
5.注释我们的代码。
如果你认为你的代码可能需要做个解释,那就去注释它。每个函数都应该提前一两行就先描述一下它的参数和返回结果。比起告诉你what,注释应该说明的是why。还有记得在更新代码的时候也要更新注释。
6.使用统一的命名规则定义变量。
这将有助于我们追踪各个类型的变量,并且对每个变量的用途一目了然。这一条的好处可不仅仅是方便我们打X = A+ B * C这么简单,它会让我们的代码更便于调试和维护。目前普遍受欢迎的一种命名方法是匈牙利命名法,它采用的是类型前缀于变量的做法。例如,对于整体变量,我们可以使用intRowCounter,字符串就是strUserName。无论你的命名规则是什么都没关系,只要保持一贯,并能简单描述变量就行。
7.格式化编辑代码,代码结构可视化。
例如,碰到条件语句(if、else等)和循环语句(for、while等)缩进代码。还有,可以在变量名和运算符号之间加个空格,运算符号指的是“+”、“-”、“*”、“/”,以及“=”(举例,myVariable = 2 + 2)。这不但让你的代码更直观更优雅,还能使得我们的程序流程更加一目了然。
8.全面测试。
首先通过输入我们期望的值来测试每个模块能否独立运作。然后试着输入一些可能但是很少见的值,继续测试。这基本上能暴露所有隐藏的bug。测试也有所谓的技巧,通过练习和实践,我们谁都可以逐步建立起适合自己的技能。测试应包含下列情况:
极端值:正值用0和大于预期的最大值;文本用空字符串,参数用null。
无意义的值。虽然用户不大可能会输入乱码,但是我们自己无论如何先测试一下为好。
不正确的值。在除法中输入0,或者在预期是正数以及开平方根的情况下输个负数。当输入类型是一个字符串的时候,输入非数字,然后看看是否会被解析为数字值。
9.练习、练习、还是练习。
编程也会随着时代的前行而不断进步。所以总有新的东西需要我们学习,——甚至更加有用、更加重要——当然,也总有一些内容值得我们温故而知新。
10.减少需求改变的风险。
在现实的工作环境中,需求总是在不断变化的。然而,如果前期我们对需求收集得非常全面,一开始的实施计划就很有针对性,那么后期因需求改变导致的计划不周和双方产生误会的可能性就会小得多。
我们可以在开始写代码之前,通过展示需求文档和实施计划,以提高进程的清晰度。这将有助于确保我们的计划是真正按照客户的要求去完成的。
如果将项目比作是一系列的里程碑,那么一次只要完成一个就可以了。记住,在任何特定的时刻需要考虑的东西越少,那么我们想得就越详尽越完美。
11.由易到难,从简入繁。
如果你的软件复杂,那么我建议你最好先从简单的模块入手。例如,有这样一个项目:请设计一个程序,要求能出现一个跟着鼠标方向走的渐变图形,并且还能根据鼠标滑动速度改变形状。
首先,设计一个正方形,写一段能做到让它跟随鼠标的代码,这样就把运动追踪问题先单独拎出来解决掉了。当然这才是第一步。
接下来,将这个正方形的大小与鼠标的速度相关联,即解决了形状随速度而变的问题。
最后,创建你想要的实际形状,并把这三个组件连接在一起即可。
运用这种方法自然而然地就编写出来了模块化的代码。并且每个组件都有它自己独立的功能。这对代码重用是非常有用的(例如,你完全可以在其他项目中应用第一步骤(用于实现鼠标跟踪)的代码),并让我们的程序更容易调试和维护。
英文原文:How to Improve your Skills as a Programmer