英文原文:7 Ways to be a Better Programmer in 2014
// 译注:英文原文发布今年年初,所以开头提到了”新年“,请不要惊讶~
程序员总是有很多的决定,不是吗?如果你的新年待办事项还是空白的话,那么可以考虑使用下面这些程序员的想法。即使是最聪明的人,也还有成长空间。以下内容摘录自 Kevlin Henney 的《程序员应该知道的 97 件事》。
1. 在怪罪其他东西之前先检查自己的代码
我的原则是,如果我遇到一个我无法避免的 bug 时,我会首先考虑是编译器的错误,然后我就会去检查堆栈是否被破坏了。这可以通过跟踪代码来实现,可以有效地移除问题。多线程问题是另一个绞尽脑汁也不容 易找到的错误来源,通常还伴随着机器的错误。当一个系统使用多线程的时候,所有的简单的代码的错误都会成倍地增长。不能依靠调试和单元测试去发现这样的兼 容性问题,所以简单的设计是最重要的。
总之,在你怪罪你的编译器之前,请记住福尔摩斯的忠告:“当你把所有的不可能都排除了,那么剩下的东西,无论他有多么的不可能,都必定是真相。”Dirk Gently 也说了类似的话。
2. 持续学习
随着全球化的发展,你要知道有大量的人都能胜任你的工作。你需要不断地学习,以维持竞争力。否则,你会成为一个落伍的人,永远做着相同的工作,直到你不再被需要,或者这个工作被廉价外包给其他人的那一天。
这里是一些让你持续学习的方法清单。其中许多都能够随便在网上找到:
- 阅读书籍、杂志、博客、Twitter 和其他网站。如果你想对一个目标进行更深入的研究,考虑添加一个邮件列表或新闻组
- 如果你真想专注于某一种技术,那就动起手来——写一些代码
- 成为行业的顶尖人物可能会妨碍你的学习,你得尽量与导师合作。虽然你可以从任何人那里学到东西,但是从那些比你更聪明或更有经验的人那里你能够学得更多。如果你不能找到一个导师,那就继续去找
- 使用虚拟的导师。在网上找一些作者或者开发人员,他们写的东西你都会喜欢并且都会看的。订阅他们的博客
- 了解你所使用的框架和库。知道了他们是如何工作的,你使用起来就更得心应手。如果他们是开源的,你就很幸运了。使用调试器来单步执行,去观察他们内部是如何运作的。你将会看到那些真正聪明的人所编写和审阅的代码
- 当你做错了或者是在修复 bug,或者是碰到一个问题的时候,尝试去深入了解到底发生了什么。有可能其他人也遇到了同样的问题,并且把 2 他发布在了网上。Google 这时候就非常有用了
- 学习一样东西的一个好方法就是去传授和谈论它。当人们想要听你讲解并且想问你问题的时候,你就会更加积极地去学习。在工作中使用 lunch-’ n’-learn 方法,可以是一个用户组或者是一个本地的协会
- 加入或者创办一个研究小组(社区的模式)或本地用户组,可以研究你们感兴趣的语言,技术或者是法律
- 多去参加会议。如果你不能去,很多的会议都会把内容免费发布到网上的
- 想要长期通勤?听一下博客吧
- 你是否曾经在一个代码库上运行一个静态分析工具或者在你的 IDE 里看到一些警告?弄明白他们报告的是什么,为什么要报告
- 遵循高效程序员的建议,每年学习一门新的语言。至少学习一门新的技术或者是一个新的工具。弄一个分支出来添加上你的想法,以便你能够在你目前的知识库里使用
- 并不是你应该学的每一样东西都必须跟技术有关。学习你工作领域的一些东西,能够让你更加了解需求,并且能够给帮助你解决一些商业问题。学习如何提高工作效率,学习怎样更高效低工作是一个不错的选择
- 返回学校
如果你有《黑客帝国》里的尼奥那样的能力就好了,能够直接下载我们需要的东西到大脑里面去。但是我们并没有,所以必须花费一定的时间去学习。你不必每时每刻都在学习。一点点时间足以,比如一周一次,有总比没有好。我们总得有一些工作之外的生活。
科技发展如此迅速,我们不要被甩在后面了。
——Clint Shank
3. 不要害怕破坏某些东西(大刀阔斧的改变)
作为一个医生,是不应该害怕切除患病的部位,以留出愈合的空间。态度是会传染的,并且会激励其他人去对那些一直拖延着的项目进行修改。去列出一个团 队都感觉良好的项目的清单。虽然这些任务可能不会产生明显的效果,但你得去说服管理层,他们就会减少开支,加速对新版本的开发。永远不要停止关心代码的总 体“健康度”。
——Mike Lewis
4. 做专业的程序员
个专业的程序员最重要的特征就是个人责任感。专业的程序员会对自己的生涯、自己的估计、自己的日程安排、自己的错误以及自己的作品负责。一个专业的程序员是不会把这些责任推给其他人的。
如果你是一个专业人员,那么你就会对自己的工作负责。你有责任阅读和学习。你有责任追赶业界及技术的潮流。而很多程序员都认为这是他们上司的工 作。对不起,这是大错特错的。你认为医生也会那样做吗?你认为律师也是那样的吗?不是的,他们会利用自己的时间和金钱去学习。他们花费大量的下班时间去阅 读期刊和做出计划。他们会时刻更新自己,我们也必须这样做。你和雇主之间的关系只是为了履行合同。总之:你的雇主承诺给你工资,你就得承诺去把这份工作做 好。
专业的程序员会对他们编写的代码负责。如果他们不清楚代码是否会正常的工作,就绝不会轻易放出代码。试 想一下,如果打算放出一个不确定的代码, 你还有可能是一个专业的程序员吗?专业的程序员都不希望 QA 来发现他们的错误,因为他们如果不经严格测试是不会放出代码的。当然,QA 也许会找到一些问题,因为没有什么是完美的嘛。但是作为专业人士,重要的是我们的态度,我们决不能让 QA 找到什么问题。
专业人士都是团队合作。他们会对整个团队的未来负责,这并不是他们个人的工作。他们互相帮助,彼此教导,互相学习,甚至包括别人需要的任何时候。当一个队友倒下,其他人都会去关心,因为他们知道他们都有互相需要的时候。
专业的人士是不会容忍一大串 bug 列表的。一个巨大的 bug 清单是非常粗心的。一个在问题跟踪数据库里有成百上千问题的系统是粗心酿成的悲剧。事实上,在大多数的项目中,如果非常依赖问题跟踪系统,那么他们肯定总 是粗心大意的。只有非常大的系统才可能会又这么长的 bug 清单,这个时候需要的是自动化的管理。
专业人士不会把事情弄得一团糟,他们会对自己的工作引以为豪。他们保持代码的整洁,结构的良好,而且便于阅读。他们跟随着默认的标准而且做出了 很好的实践。他们永远不会趋之若鹜。假 设你能够在医生给你做开放式心脏手术的时候灵魂出窍。这个医生有一个最后期限(只是字面意义上的)。他必须在心肺循 环功能损失过量血细胞之前完成。你觉得他该怎么做?你是想要他们像典型的软件开发人员那样匆忙而且混乱吗?或者想要他们说“我待会儿再回来解决”?还是你 要他们小心地遵循着纪律,抓紧时间,相信他自己的做法是目前可以采取的最好的方法。你是想要一片混乱还是专业精神呢?
专业人员得有责任感。他们会对自己的事业负责。他们会对代码的正常运行负责。他们对自己工作的质量负责。即使最后期限迫在眉睫,他们也不会放弃自己的原则。事实上,当压力越来越大的时候,专业人员甚至会对这些原则要求得更紧,因为他们认为这是对的。
——Robert C. Martin (Uncle Bob)
5. 利用代码分析工具
比如针对C的 SPlint,针对 Python 的 Pylint,都是可配置的,也就是说,你可以通过一个配置文件选择这个工具在命令行或者是 IDe 里要发出什么错误和警告。SPlint 甚至会让你在注释里注释你的代码,以给别人更多关于程序运行的提示。
C#推荐的分析工具是----resharper,在编码中,它就会将错误提示给我们。
所以,不要把测试放在质量保证工作的最后,利用好分析工具,不要害怕把自己的错误展示出来
6. 和你的朋友一起使用 Ubuntu 哲学
在祖鲁语中,Ubuntu 的哲学被概括为“Umuntu ngumuntu ngabantu”,可以大致翻译为“A person is a person through (other) persons.”(人与人之间是互相联系的。我会变得更好因为是你,通过你的行为让我变得更好。在另一方面,当我做自己的事做得糟糕的时候你也会在你所做的事情上变糟。 对于开发者来说,我们可以这样理解“A developer is a developer throuth (other) developers.”(开发者与开发者之间是相互联系的),也可以说“Code is code through (other) code.”(代码与代码之间是相互联系的)
我写的代码的质量会影响到你写的代码的质量。如果我的代码质量很差会怎样呢?即使你写了很整洁的代码,但由于你会使用我的代码,所以你的代码也会降低到和 我的代码质量差不多的地步。你可以使用很多模式和技术去降低损失,但是损失已经造成了。我建议你去做一些必须做的事之外的一些事情,这是因为当我在做自己 的事情的时候我并不会去考虑你。
和你的朋友一起使用 Ubuntu 哲学将会帮助你的团队守住你们的价值观,增强你们的原则。如果有其他人在任何情况下接触到你的代码,都会变成一个更加优秀的开发者。(和高手在一起,你也会变高手!)
7. 你必须关心你的代码
不用福尔摩斯我们就会知道好的程序员才能写出好的代码。糟糕的程序员嘛…就不会。他们会产生我们必须清理的垃圾。你想写出好的东西,是不是?那你其实就是想去做一个好的程序员。
禅宗是有关个人的。对于一群人来说,Ubuntu 也是一种禅宗。我们几乎不会看到只为自己而写的代码。
代码的铺就都得有一个良好的计划。要想成为一个优秀的程序员,你就必须做出很好的计划,并且真正关心起代码——培养积极的观点,养成良好的态度。伟大的代码是由工匠大师精心打造的,绝不是由满湖的程序员或自称编码大师的程序员在不经意间就完成的。
——Pete Goodliffe
祝大家在 2014 年一切顺利!