我是一个倾向于遵守规则的人。我的大多数的规则都是为我自己设置的,不过他们也可以推而广之。
制定规则帮助我更好的工作,因为有了规则,大多数的问题都与现有了决定方案,而不是一直在做决定。
我今天要不要去健身房?我的规则规定周三应该去健身房,今天又是周三,所以我应该去健身房。这都是预先决定好了的。
我的这些准则都是为我自己设定的,不过总的来说,其他程序员遵守这些准则也是有百利而无一害。这些准则更多的来说不算的上是“规则”,而更应该称作“指导方针”。
1. 技术是通向解决方案的桥梁,但是技术不是解决方案
我们可以被最新的技术所吸引,例如angularjs的依赖注入,例如最炫酷的编程语言,例如最炫酷的操作系统。但是他们都不是解决问题的具体方案,他们只不过是我们手中帮助解决问题的简单工具。
我们要小心,不要被人引入语言圣战,也不要轻易地就说“PHP是最好的语言”,他们只不过是解决问题的工具而已。
2. 聪明的代码和清晰的代码不可兼得
在编写代码事,我们应当将尽力的编写容易读的代码,毕竟我们的代码是要给人看的,顺便给机器执行。
容易理解的代码的价值比含义不清的代码的价值要大得多,无论那些所谓的“聪明的代码”到底有多聪明。
不确切的说,但是大多数情况下,清晰的代码和聪明的代码不可兼得。
当我们做一些自以为聪明的事情的时候尤其要牢记这点。当然能做到代码既清晰易懂又有精妙的实现方式是再好不过的了。
3. 只有在有必要写代码的时候才写代码
这个看起来有点矛盾,因为程序员的工作就是写代码。当然,确实有点矛盾。
我们的工作包括写代码,但是我们应当尽可能的通过尽量少的代码解决问题。这并不意味着用$p
取代$pw
或者$password
、也不意味着用function f()
取代function func_get_args()
,只应该表示我们应该尽量只写必须要、实现功能的代码。
经常的情况是我们会为了应付各种不同的情况而添加很多的代码来实现整个系统的“鲁棒性”和“灵活性”,但是更多的情况下是我们想了那么多的将来的可能,但是其实将来未必就有那么多的可能性。而且代码未必会有那么好的效果,大多数情况下,尤其是维护的时候,那些多余的代码会非常讨厌。
简而言之,不要过度设计,也不要写不必要的代码。孔子删《诗》、《书》,好的软件工程师只保留必要的代码,其余的全部删掉。
4. 注释未必都是好的
我并不喜欢写代码注释,我的同事Bob Martin的意见是:”当你写注释的时候,你应该对自己的表达能力感到失望、同时对自己小学没有学好语文感到深深的愧疚。“(本句出自上面那本《程序员的职业素养》,原话是“Every time you write a comment, you should grimace and feel the failure of your ability of expression.”)
我写这一段的目的并不是想说注释是没必要的,而是很多时候都可以避免注释一些一看就懂的东西、也没必要留下长篇大段的注释,而应该把有限的时间交给无限的代码事业。
只有那些无法从变量名或者函数名中得知意义、无法清晰地在代码中表达出来的东西才有必要写注释。例如,因为下层架构中的某些特性或者BUG,注释有必要记录代码中故意规避这些BUG的手段。
注释有时候并不仅仅是邪恶的,因为他们确实有用,但是有时候注释也不一定是正确的。例如:最新的代码和过期的注释便会将你引入歧途。(原文的含义基本在说不要写注释,而且态度是”我就不写注释,不服来打我啊“。)
5. 写代码之前要明确目的
这条是显而易见的,但是很多人都做不到。很多时候坐下来写代码,有时候完全不知道自己的目的到底是要做什么,例如 X-Y problem。
我承认我也经常忘记自己要做什么,所以这条对我来说非常重要。
在这里Practicing test driven development (TDD) 有很大的用处,但是有时候它的帮助也不大。所以尽量明确自己的目标和必须要实现的功能之后再去写代码。
6. 在提交代码之前测试代码
不要等到同行评审或者其他测试的时候才发现你的代码的错误,这是在浪费时间。
在提交你的代码之前,花几分钟测试一下。当然你不会可能在测试之前发现所有的问题,但是仍旧能发现很多我们通常都会犯的错误。很多开发者认为这是测试的工作,其实这是每个人的工作。毕竟你也要浪费时间修复代码。
7. 学到老活到老
每个人都会不断地忘掉原来的东西,相对于原来的状态,如果你没有不断的学习,那么你就是在退步。况且,学习新东西耗费的时间并不长。每天尝试花十五分钟去读本书,我的就是这样做的。
每天学点东西会极大地提升你将来的可能性。除此之外,现如今的技术变化如此之快,如果不去学习新的技术,你会很快被时代所抛弃。
Node.js发展的这么快,谁知道明天是不是HTML也被移植到server-side了。
8. 快乐编程
成为一名程序员的原因可能不是因为收入。没有工作比医生或者律师收入更高,何以琛江景房什么的,但是你成为程序员的原因可能就是因为你喜欢写代码。
所以,坚持下去,不要把自己的爱好变成负担。
也许你忘了你的初心,但是下一个项目开始前记住,你的爱好本来就是写代码,甚至还有人愿意为你的爱好付钱呢。
9. 你不太能学会所有的东西
学得越多,知道的越多,知道的越多,不知道的越多,不知道的越多,知道的越少,为什么学来着。
我们确实不太可能学会所有的东西,所以也不要奢求自己学会全部的东西。有些人可能会忘记这一点,于是他们什么都学,PHP,JS,JSP,SHELL,嵌入式,前端,后台,单片机,你知道的,你不知道的,他们都想学。
在不知道的时候就应当问别人他们的方法、经验,这并不是一件坏事,学道有先后,术业有专攻,如是而已。
大多数情况下,我们只需要在一个方面成为专家,但不需要在所有方面成为专家。我们可以深入了解某些相关的东西,但是没必要去刻意精通他们。这会省下很多的时间。
例如调试PHP,我们可以学strace,学gdb调试php,去看PHP源码,但是我们没必要去”精通“汇编,没必要去了解操作系统的底层实现。
参考资料:学会学习
10. 最佳的情况是看情况
PHP是最好的语言吗?
JSON是最好的数据交换格式吗?
我们应该在前端使用AngularJS, Ember 或 Backbone 吗?
我们应该在后端使用Rails,Node 或 Java 吗?
我们应该选用哪种编程语言进行开发?
我们需要开发移动版吗?
我们需要使用Fackbook认证登录吗?
所有的回答都应该是”看情况“。
11. 永远要努力简单
所有的问题都有解决方案,但是最优雅的方案往往是最简单的。
简单并不是容易,达到简单通常需要做很多的工作。把事情搞定很容易,但是达到返璞归真的境界就比较困难了。
所有的人都能用复杂的方式解决问题,但是想让问题的解决方案变得简单、可靠,就需要很大的努力了。
你有没有什么对自己设定的规则?
好啦好啦= =
这段是原作者求关注求回复的= =
大家可以去看一下原文
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。