做一名优秀的开发者可没有说的那么简单
英文原文:How to be a Good Developer
在这个日新月异的行业,对 PHP 开发人员,或其他任何方面的开发人员来说,每天学习和掌握新知识,从而不断地提高自己是十分必要的。成功的开发者都有一个共同点,就是他们会关注很多编程,很专业,并且会将良好的编程习惯作为一种艺术来看待。
本文将为您介绍如何通过编程“规范”成为一个更优秀的开发人员,同时,也许您还可以利用这些信息来帮助别人成为一个更优秀的人。
如何成为一个专业人士?
专业,不管你正在做什么工作,从自身开始要求。专业人员首先要有自己的个性和特点。正如在生活的各个领域,专业的编程人士总是受到推崇,下面让我们来看一下你是如何成为一个专业人士的吧。
不要自我为中心
由于我熟练掌握这门技术,曾经有过在一个大型团队工作的机会。最重要的是我早期所学到的团队活力,就是那种团队间携手并进的协作。
在一个团队,大部分时间你要做的就是互相学习,这种工作环境应该被赞扬和共享。如果你是一个傲慢或者自我的人,而且不想分享你的工作和知识,那么在这种工作环境下工作,你一定会觉得不适应。
要有责任心
非专业人士不需要为他们的工作负责,他们认为那是经理的事。因此一到下午 5 点,就会忘了刚刚分配给他们的工作。
而一个专业的程序员是绝对不能接受这一点的。如果因为你的 bug 造成公司损失数千万美元,你感觉如何?这个问题还要取决于管理层的解决方案,以及公司如何处理。每个公司都应该鼓励开发者为他们自己的行为负责,更重要的是为他们所写的代码负责。
如果你的错误已经危及到了服务器,那么请尽你最大的努力尽快解决它,即使需要你熬夜处理。这将有可能使你摆脱非专业人士的称呼,并且还可能会获得更高的薪水。
接受批评
没有 bug 的软件是不存在的,我们或多或少都会犯一些愚蠢的错误。而重要的是我们如何处理像“作为开发者你是怎么考虑的”这样的批评。任何批评都应该有可取之处,都 值得你去学习,因为那样会让你在自己所处的工作岗位上变得更优秀,尤其是被比你有着更丰富经验的人批评。
有良好的职业道德
成为一名专业人士是不容懈怠的,学习也不只是朝九晚五的事。不断的学习,实践和提高自己是对自己的一种投资,并且这是你自己的责任,而不是你雇主的。
你应该利用工作之外的时间来学习(即是说你不能占用你雇主的时间,来学习最新的 SitePoint 教程。)嘿!很简单的!学习起来吧!
你也许会说没有充足的时间。那么你错了,你当然有!你一定要相信你很聪明。如果你想认真对待你的事业,那么请把它当回事儿,专注些。早上早点起 床,下午下班晚点走,利用这些额外时间,在不影响你的健康和家庭的情况下,来扩展你的优势。下班前的短短半小时,也就意味着你每周会额外多出 5 个小时来学习。
如何写出优质代码?
多看源代码
熟能生巧,代码也一样。如果不经常练习看代码,自然学不会快速阅读。开发人员的工作是写出优秀的代码,但是如果不多看看那些优秀的代码,你可能会有些力不从心。
大多数开发者经常是在还没有接触到源码时,就盲目使用第三方库。当然这也并不是说不可以,但是如果要了解要想深层次理解这个库究竟有多大的帮 助,还需要进行深度挖掘,比如研究源码,源码中的注释,以及进行运行测试等。同时,多看代码还会帮助你快速找到其他开发者的错误,这对你以后做代码审查或 编程都有一定的帮助。
学习新技术
不断的学习会让你成为一个更优秀的程序员。
时时刻刻接受新事物,了解最新动向。一切事物都是变化的,但不变的是留在你大脑中的知识。一个优秀的开发人员从未停止过学习,甚至是花上 15-20 年时间。
放慢速度
放慢速度意味着要在你试图解决的问题上多花些时间,而不是一味追求速度。
我见过一些初级开发人员为了完成任务,很快得就编写出了代码,虽然速度快但导致代码质量不高,bug 频出。然后不得不坐下来,花费更多的时间来解决 bug。中级开发人员的不仅懒惰而且还没速率,而这却关乎着每个人的利益,因为一个好的程序员不希望同一个工作被重复做两遍。对于高级开发人员来说,实际 上编写代码要占用他们整个任务三分之一的时间,而剩下的时间则用来思考更好的问题解决方案。
测试
这虽然不是一个 TDD 或 TDD 辩论,但是请记住,要提交出高质量的代码,任何性质的测试都是十分必要的。
如果你不对一件事进行测试,你怎么知道它是不是可行呢?你知道几个月前你做的代码库是实现什么样的特定功能吗?而通过测试,你才会了解代码实际 是如何运行的。就如同一本书的目录指南,测试是一个开发人员的向导,它指示你应该看哪,寻找什么。首先,测试代码很重要,也不简单,但是从长远来看,以及 无数次的实践证明中,它都是十分有帮助的。
了解你的工具
要清楚了的解什么样的工具,可以有效的帮你来解决问题。其实大多数工具,到最后都只会偏爱于某一个工具,但是要知道,一个好的工具或库可以帮你很多忙。
仔细想下你在编辑器中花费了多少时间,比如一个完全成熟的 IDE,或者只是一个突出显示的语法文本编辑器。此外,你还应该确定该项工作是否值得使用专门的库?是否值得使用 PHP 框架?有哪些优缺点?使用笨拙的 CMS,就能使项目成功吗?在开始写代码前,这些问题都是你应该考虑的。
如何保持跟踪?
克服疲倦期
无止境的不断的敲代码着实令人心生厌烦。一部分在这行待的时间久了的开发人员,在他们职业生涯的某个时刻也经历过疲倦期。
职业倦怠跟工作时长有着密切的联系,也就是所谓的综合症,同时也意味着一个开发人员经常会这样认为,他还不够好,所以为了使自己变得更好,他需要更努力的工作。然而,事实是,做的更多并不意味着更好。
最好的办法是退后一步,避开这个周期,去做一些其他的事情,一些比较有创意的事儿。休个假,哪怕只是一两天。当然也有另一种解决方案,慢慢得克服倦怠期。你可以找一个一起编程的团队成员,与另一个人进行社交互动是非常有效的。
代码维护
持续追踪意味着保持一个干净整齐的代码库,不仅是为了别人,也是为自己。没有测试或文档的代码就像俄罗斯赌盘。
当你回过头来审视自己之前走的路或做的事,你会想到什么?对于任务本身而言,也许你会花更多的时间来弄清楚你真正要做的。
我曾经见过客户与开发人员无数次重构他们的项目,因为之前的团队失去了兴趣或者不再继续工作了。而新团队几乎大部分时间的回应都是,项目必须重 新写。之所以会发生这种情况,是因为之前的团队没有维持一个干净齐整的,坚实的代码库,这种做法需要花费大量的时间。建议大家读下这篇文章:《18 Critical Oversights in Web Development》,其中涉及到了如何使代码保持整洁的方法,还有其他的一些好的办法。
评估
对很多程序员和管理人员来说,评估是一件很敏感的事,而且他们不应该“评估”。我确信每个人都遇到过这种情况,经理询问开发人员某个项目需要花费多长时间的时候,他们期望得到明确的答案,但是实际上做这项项目所花费的时间则是最初评估的一倍。
然而,大多数人没有意识到的是,评估只是猜测而不是承诺。要成为一个更优秀的开发人员,你应该知道估计绝不是承诺,因为一旦你承诺了一些事情,那将意味着你要为它负责。
“评估”也从来没有人会承诺,因为它是一个不确定的性质。对于一个给定的任务,人们讨厌去估算时间,但是如果你的经理一定要你给出一个时间,你完全可以告诉他,你不能承诺能够 100% 按时完成。你可以猜测或者预测所需要的时间,但是不要作任何承诺。
如何成为一个管理者?
沟通
沟通是所有问题的关键。我曾经见过项目和公司由于团队成员沟通不畅,而导致闹矛盾,甚至分解破裂。
忽略所有沟通中的“中间人”,简单直接的沟通是最有效的。因为在沟通过程中,任何一个中间人的信息都有可能是不完全对的,从而容易导致信息被曲解。
企业应该是最深有感受的,这也是它效率慢的原因,因为做出的每一个决定都必须经过十几个人,而这正是小团队的优势所在。简单明了的沟通方式意味着你可以比别人更快得到信息,你可以更清晰明确得理解你的任务,对你来说这是一个优势,所以千万不要害怕去问一些具体的问题。
协作
除了成为一个好的交流者,你还需要一个好的合作者,让我们面对现实吧,程序员其实并不是最社会的人。
你不仅需要和其他开发人员进行合作,还要与你的经理,也许还有你的直接客户进行协作。合作不仅意味着共同协作完成工作,还意味着你要知道其中的利害攸关,这是一种很好的团队协作精神。如果你觉得很难和其他人有效地合作,可以尝试一下结对编程,结对编程的本质就是合作。
知识偏差
维基百科的解释:“知识偏差是一种认知上的偏差,这种偏差导致聪明的人很难从知情人士的角度来正常思考问题。”
基本上,资深开发人员很难解释一个简单的问题,来让初级开发人员理解。这是因为他们都非常熟悉这些问题,并且可以通过自己的技术来解决它,但是当他们尝试去解释给别人的时候,却失败了,因为他们的解释只是他们脑中的一个总结。
简单的说,当你认为知道一些东西的时候,其实你还没有真正了解它。为了打破这点,你需要使用特定的语言。在解释一个简单的细节的时候,你可能会觉得很可笑,但是请继续,因为你的心态并不等于接受者的心态。也许你认为很简单,但是听讲的人可不一定这样认为。
了解你的领域
如果你认为自己是编程专家,然后要做一个在编程领域有所建树的专家。那么请了解并熟知你的领域,不要害怕说不,即使你觉得说多了不合适。
简而言之,作为一个专家,你要敢于说不,因为那意味着你在捍卫你的真理,在你的同龄人当中,你大多数时间都可能是对的。了解你的领域并不意味着 你一定要有一个 CS 学位,而是说你要在你所在的领域中,有一定的经验和实践。你需要提高自己的技能,不仅仅局限于编程,而是在整个计算机领域。作为一个专家也意味着你可以找 到一个问题的最佳编程设计方案,这也是编码的“副作用”。
了解你的业务
在不知道业务的问题,以及他们正在试图解决你的代码的情况下,没有人可以创造出良好的软件。
你需要对你的业务积极主动,并且要有兴趣,因为那将反映出你的工作状态。如果没有清晰的目标和具体的问题,代码会在不经意间变得很混乱,这就是代码如何运作的。你需要严控哪些功能,特别是如何控制,但是对于业务的价值,你必须十分清楚。
如果你觉得你的专业知识和业务目标调整的不是很好,那么请不要接受这份工作。珍惜你的时间,因为它是无价的。
代码套路
要不断完善自己,首先要清楚的知道自己处于什么水平。
对于程序员来说,代码套路是种练习方式,通过实践和寻找更好的不同问题的解决方案,来提高自己的技能。你可以在 Euler、CodeKata 或者 Topcoder 这些项目中试着研究代码套路。Topcoder 甚至为那些找到更好的解决方案的编程人员提供了奖品。
总结
编程体现出的更多的则是社交技巧。要成为一个优秀的程序员,首先你必须独立工作,如果你是一个比较内向的人。然后,熟练掌握编程原理。
你要不断地提升自己,不断地学习。要真正实现职业化,你需要了解你的业务,以及你正在试图解决的代码问题。代码是整个问题解决方案的一个副产 品,只是贡献了一小部分力量。而解决方案的思路,协作技能,以及你解决问题需要使用的工具才是让你成为一个受人尊敬的专业人士的关键。
更多关于成为一名专业人士的要素,或者任何你想添加到这个列表中的要素,大家都可以添加到评论中。