// 译注:英文原文发布今年年初,所以开头提到了”新年“,请不要惊讶~ 程序员总是有很多的决定,不是吗?如果你的新年待办事项还是空白的话,那么可以考虑使用下面这些程序员的想法。即使是最聪明的人,也还有成长空间。以下内容摘录自 Kevlin Henney 的《程序员应该知道的97件事》。 1.在怪罪其他东西之前先检查自己的代码 质疑一下你自己和他人的预设情况。来自不同供应商的工具,可能内置有不同的预设,也有可能相同的供应商提供不同的工具。 当有人想你报告一个你无法重复的问题之时,去看看他们做了些什么。他们可能会做一些你没有想到的事情,或者是按照不同的顺序来做那件事。 我 的原则是,如果我遇到一个我无法避免的bug时,我会首先考虑是编译器的错误,然后我就会去检查堆栈是否被破坏了。这可以通过跟踪代码来实现,可以有效地 移除问题。多线程问题是另一个绞尽脑汁也不容易找到的错误来源,通常还伴随着机器的错误。当一个系统使用多线程的时候,所有的简单的代码的错误都会成倍地 增长。不能依靠调试和单元测试去发现这样的兼容性问题,所以简单的设计是最重要的。 总之,在你怪罪你的编译器之前,请记住福尔摩斯的忠告:“当你把所有的不可能都排除了,那么剩下的东西,无论他有多么的不可能,都必定是真相。”Dirk Gently也说了类似的话。 ——Allan Kelly 2.持续学习 我们生活在一个有趣的时代。随着全球化的发展,你要知道有大量的人都能胜任你的工作。你需要不断地学习,以维持竞争力。否则,你会成为一个落伍的人,永远做着相同的工作,直到你不再被需要,或者这个工作被廉价外包给其他人的那一天。 因此,你打算做些什么呢?有些大方的老板会提供训练来拓宽你的技能。而其他的公司并不会给你空闲的时间和金钱去做任何的训练。所以为了工作的稳定,你需要为自己的教育负责。 这里是一些让你持续学习的方法清单。其中许多都能够随便在网上找到:
如果你有《黑客帝国》里的尼奥那样的能力就好了,能够直接下载我们需要的东西到大脑里面去。但是我们并没有,所以必须花费一定的时间去学习。你不必每时每刻都在学习。一点点时间足以,比如一周一次,有总比没有好。我们总得有一些工作之外的生活。 科技发展如此迅速,我们不要被甩在后面了。 ——Clint Shank 3.不要害怕破坏某些东西 每一个具有行业经验的人无疑曾在一个充满不稳定性的项目中工作过。这个系统是很难重构的, 通常改变一个地方就会触及到另一个不相关的地方。每当要添加一个模块的时候,程序员的目标都是尽量少改动,在每一个版本中都是小心翼翼的。这就和把建造摩 天大楼当做搭积木一样,容易造成灾难。修改对的时候是非常伤脑筋的,因为系统已经生病了。它需要一个医生,否则状况就会越来越差。虽然你已经知道了你系统 发生了什么错误,但是你还是害怕“打破鸡蛋去煮你的煎蛋卷”。一个熟练的医生知道,为了做手术就必须开刀,而且她也知道开刀只是暂时的,而且很快就会愈 合。对于最初的疼痛来说,做手术是非常有价值的,患者通常都会获得比做手术前更好的状态。 不 要去担心你的代码。当你在做事的时候如果暂时被打断,谁会去担心呢?对改变的恐惧会让你的项目将进入这样的状态。花一些时间去重构项目会让你节约很多的时 间。还有一个额外的好处就是一个团队面对这个损坏的系统的处理经验会让你们明白该怎样才能让它正常工作。要学会运用这些知识,而不是抵触他们。每个人都不 应该把时间花在自己所讨厌的东西上。重新定义内部接口,重组模块,重构、复制、粘贴代码,并通过减少依赖来简化设计。你可以通过消除极端情况来减少代码的 复杂度,他们通常会产生不当的耦合性。慢慢地将旧架构过渡到新的架构,边改边测试。试图在一个可能产生很多问题的大项目上进行一次大的重构,这些问题可能 慧然你在中途就放弃之前所作的所有的努力。 作 为一个医生,是不应该害怕切除患病的部位,以留出愈合的空间。态度是会传染的,并且会激励其他人去对那些一直拖延着的项目进行修改。去列出一个团队都感觉 良好的项目的清单。虽然这些任务可能不会产生明显的效果,但你得去说服管理层,他们就会减少开支,加速对新版本的开发。永远不要停止关心代码的总体“健康 度”。 ——Mike Lewis |