【译】如何成为一个优秀的开发者

*前言:原作者George Fekete是一个拥有10年客户端和服务端的web开发者,擅长PHP、JavaScript,致力于各种中大型的web应用,Primal Skill的创始人,CTO。
本文根据How to be a Good Developer翻译而来。*



作为一个苦逼的程序员,你需要在这个随时变化的行业中不断的提升身自己,学习并且实践,成为一个成功的开发者,才能在这巨大压力的竞争中找到自己的立足之地。

那么问题来了,什么是我们所说的成功的开发者,他们是了解各种语言和工具的博学者?还是把编码实践当作艺术的艺术家?

从这篇文章,你将会了解怎样运用“编程礼仪”而成为更好的开发者,甚至可以将这些知识传道授业于他人。

如何成为职业人才?

不管你做什么样的工作,你都要从职业化开始做起。而作为职业化人才最重要的是要有自己鲜明的个性和特征。

无论在什么领域里,一个职业的开发者往往都会受到大家的尊敬。让我们来见证你如何成为其中的一员。

  • 不要成为自私鬼

我曾在一个大团队里工作过,当我在这个团队中实践我的“编程礼仪”时,最早学习到的就是团队必须要和协作紧密相连。

在一个团队中,你的大部分时间应该用在相互为师相互学习上,一个团队必须要在压力和利益共享并存的环境中生存。

如果你不愿意共享你的工作和知识,你会发现你的傲慢和自私将会使你在这样的工作环境中举步维艰。

  • 要有责任心

没有专业人才不需要对他们的工作负有责任心。
责任是留给上级的,只需要完成指定的工作,当吹响5点的号角你就可以忘掉一切的工作烦恼。

对于一个职业的开发者来说这是万万不可的。有一天当你的bug给公司带来巨大的损失,你还笑得出来么?

这个问题同样也是要靠公司的管理方法来解决。每个公司应该激励程序员更多的去为他们的行为负责而不是仅仅只是写几行代码就完事。

如果你的bug很不幸的影响到产品的服务,那么毫无疑问尽你所能去弥补它,甚至会花你整晚的时间。这也正是把你和吊油瓶区分开来的点,也是能够给你带来更加丰厚的薪水的前提。

  • 良药苦口

世上没有完美无缺的东西,软件也是一样。在我们工作的时候总是不可避免的会犯一些愚蠢的错误。

而我们处理别人批评的态度充分反应了我们如何看待开发者工作。

从所有的批评中我们都可以吸取教训并学到东西,那是提升你自己的最好途径,特别是来自于比你经验和能力都强的人的批评。

对工作抱有热情
作为职业人员是一个没有停止键的工作,学习不能仅仅只在朝九晚五之间。

持续的学习、实践和提升自己是一项投资,同时也是你自的责任,而不是你老板的。

不仅仅是工作,在生活中也是如此¬——话说你总不能要挟你的老板挤时间来看最新版segmentfault的说明吧(放轻松,伙计!)

也许你会说我哪有这么多的时间?当然你没有!但你需要思考。如果你想要认真做好你的工作,首先你得重视你的工作。

仅仅在工作前后抽出半个小时时间,那意味着一周会有5个小时额外时间,那就是你会多出超过一半的一个工作日时间,时间永远都是挤出来的。

怎样写一手好代码?

  • 阅读源代码

你不去训练阅读能力,你就不可能做到一目十行。同理,程序员的工作就是能够写出一手好代码,但如你果不知道什么才是好的代码不去训练那也全是白搭。

大多数的程序员只是盲目的使用第三方的库而不会去碰源代码。对于一般工作这是可行的,但是如果要去弄懂那个库是如何运作,是需要去深挖和理解它的源代码的,如果可以,跑一跑tests(如果它有的话)。

阅读代码同时也可以帮助你快速的找到其他开发者的错误,这可以对你的review或repair有很大程度的帮助。

  • 学习新技术

对待新的技术,永远保持开放学习的心态,然后想想这个新技术如何帮你成为一个更好的程序员。

保持对新事物的好奇,不要因为你觉得它们没有潜力反而错过真正趋势。每件事都是有周期的,而不变的是你保持开放心态后所获得的知识财富。

一个好的开发者即使有15~20年的实践经验,他们也不会停止学习。

  • 慢工出细活

慢下来是意味着花多一些的时间去评估你所需要解决的问题。速度在这个时候并不是你要去争取的。

我曾经遇到过一些新手领到任务后就想着以最快的速度去完成,然后交付代码,结果就是代码里出现很多的 bug,他们不得不花更多的时间去解决这些问题,其实当初他们只需要停下来,好好思考一下这个问题的痛点,就能花费更少的时间和精力。

高级开发者都是又懒又慢的,这似乎成了每个人的爱好,因为一个好的程序员不会想重复的做一个工作的。

对于高级的开发者来说,他们只花三分之一的时间来写代码去完成任务,剩下的时间他们会思考怎么用最好的方法去完成它。

  • 测试你的代码

这不是一个TDD或者TDD辩论,但是要记住,任何性质的测试对于提交高质量的代码是非常重要的。

不测试怎么知道是否会有问题出现?你知道你几个月前在特定的代码库做了什么?

通过测试,你能清楚的了解到代码实际是怎么运作的。这就像是书的目录一样,指导开发者如何去做。你可以知道从哪入手和做什么。

写测试的时候一开始你会觉得很困难,但事实证明在如果你长期这样做会有很好的益处。

  • 了解你用的工具包

知道你可以用什么样的工具来帮助你解决问题。大多数的工具选择,到最后其实都归结为偏好,但记住,一个好的工具是可以帮到你很多的。

想想你在编译器上花了多久的时间,它是一个完整的IDE或者仅仅只是一个语法高亮的文本编辑器。

同时,你需要决定是否使用特定的库,是否值得用PHP框架?有哪些优缺点?在项目中使用一个笨重的CMS是否可行?

这些都是你需要在动键盘之前需要仔细考虑的问题。

如何不走歪路?

  • 对抗倦怠

一遍又一遍的敲打代码,这种循环往复的生活其实是一件很枯燥的事,大多的开发者在他们的职业生涯中会碰到对职业感到怠倦的时刻。

这种情况会伴随着长时间的工作而产生叫做imposter syndrome(冒充者综合征),这是由于开发者由于想让自己变得更优秀而不停的增加工作的强度和时间。但过多的工作却不一定更好。

治疗这种病症最好的良药就是走出这个循环,去做一些其他的事,来一场说走就走的旅行,去做你最喜欢的事。给自己放几天假,哪怕只是几天。

另一种方法,也是一种越来越受欢迎的对抗怠倦的方法,就是去找个组员和你一起合作写代码。社交是一种很高效的解决方式。

  • 代码维护

保持稳定的状态也意味着要保证一个清爽的代码库。不仅仅为他人,也是为你自己。没有测试和文档的代码就像是个俄罗斯轮盘。

试想一下,如果你将来几个月后需要重新审视一下一些特性怎么办?你将会花费更多的时间去弄清楚你究竟在做什么而不是任务本身。

我见过客户接近开发者无数次的重构他们的项目,就是因为之前的团队放弃了这个项目,而几乎所有的新团队都认为这个项目需要重头开始写。

发生这种情况是因为之前的团队没能维护一个干净、稳定的代码库。实践需要很多的时间,可以阅读下这篇文章18 Critical Oversights in Web Development ,这篇文章主要讲了如何维护代码的纯净,以及其他实用的实践。

  • 关于估计

估计对于许多程序员和管理者是一个很敏感的话题,这也是必须的。我能确定每个人都听过类似的例子,经理常常会问开发者完成任务所需要时间,而且他们需要清楚的答案。但一般被评估的任务都会花掉两倍初步估计的时间。

而大多数人并没有意识到,所谓的估计仅仅也只是猜测而不是承诺。作为一个更优秀的开发者你永远需要知道估计从来就不是承诺,一旦你承诺某件事,这就意味着你需要为此负责。

估计不曾是也不会成为承诺,这是估计的内在本质。人们往往都会害怕估计完成给定任务时间,如果你的上司要求你这么做,你就必须要告诉他这并不是承诺,你也不能保证100%按时完成这件事。

无论如何你可以做出猜测,但别做出承诺。

如何成为一代宗师?

  • 沟通

沟通是一件必不可少的事,有一些项目或者公司夭折就是因为团队成员缺乏沟通。

沟通需简单直接,去掉中间者。要知道在你沟通线上每多个“节点”都会造成几乎指数级增长的困难和曲解。

企业往往会因为这个遭受很大的困难,这也是为什么它前进如此缓慢,每一个决定都需要进过十几人,这也是敏捷型团队能脱颖而出的地方。

保证沟通的简洁意味着你可以比其他人更快的行动起来,你能更清晰的明白你要做什么,这将成为你的个人优势。所以朋友放下你的架子,不要害怕去直接提要求或问问题。

  • 合作

除了成为一个优秀的沟通者你也需要成为一个好的合作者,承认吧,程序员对社交方面并不是太在行。

你要合作的不仅仅是其他的开发者,还需要你的上司,也许还需要和你的客户。

合作可以让你知道目前的危机是什么以便更好的去完成你的工作,并扮演一个好的团队成员。

如果你发现很难与他人高效率的合作,去试试结对编程的方法吧。结对编程的本质就是合作。

这篇文章可以教你如何很好的利用他人的代码

  • 知识诅咒

维基百科给我们这样定义:知识诅咒是一种认知偏见,导致知情方要从无知方的角度考虑问题就会变得非常的困难。

一般来说,高级开发者要向初级开发者以简单的方式来阐述问题非常的困难。这是因为他们已经非常熟悉手上的问题和解决的方法,但是当他们试着去给其他人解释的时候,他们往往会无功而返,因为这个解释仅仅只是他们脑中知识的总结。

简单的说,但你知道某件事的时候,你很难不去了解它。要解决这个问题,你得用简单易懂甚至有趣的方式来阐述一个问题,因为你的思想状态和被受着的思想状态是不对等的。

  • 了解你的领域

如果你自认为是编程领域里的专家,那么你就要擅长它。你需要全面的了解你所从事的领域,不要害怕说“不”,直到你真正理解它。

很简单,成为一个专家的过程就是对其他人说“不”过程,因为你要捍卫你的真理,并在你的同行面前建立你的威信,因为大部分时候你都是对的。
并不是你有了CS的学位证书就意味着你了解你的领域,这仅仅只说明你拥有相关的知识和实践经验。除了一般编程和计算机工程你还需要去提高其他的技能。

作为一个专家,你是要找到一个问题最佳解决方案,编写代码只是完成的手段而已。

  • 理解你从事的业务

如果不了解你业务上的问题和你的代码需要解决的是什么,你永远都不可能创造一个优秀的软件。

对你的业务充满兴趣是必要的,因为这些都会反映你的工作状态上。如果没有明确的目标和具体的问题,你的代码也只是一推垃圾,这就是编写代码应该首先做的事情。

你需要知道用什么功能去实现需求,特别是如何去实现,你必须清晰的认识需求的商业价值。

如果你觉得你的专业知识和业务的目标不是一致的,那么帮你自己一个忙,拒绝这份工作。珍惜你的时间,因为它是无价的。

  • 编码实践

要持续的提高自己,首先你必须知道你目前是在什么水平。

通过代码实践,和不断寻找更好问题解决方法是一种提升技能的非常好的方式。

你可以通过这几个例子来尝试代码实践 Project Euler, CodeKata or Topcoder.

TopCoder甚至为寻找最佳的编程解决方案设立了专门的奖项。

总结

编程相比于其他的技能更是一种社交技能,要成为一个好的程序员,如果你你发现自己很内向,首先要改变自己的性格,然后再去掌握编程原理。

要在游戏中领先一步,你需要不断的提高自己,不断的去学习。要实现专业化,你需要去了解你的业务和真正需要解决的问题。

代码只是整个解决方案的副产品,他只是宏图中的一小笔。解决问题的思路,合作的技能以及去解决问题所掌握的工具都是你成为一个受尊敬的专业人才的关键。


个人补充

  • 好的团队文化

我不是一个典型的程序员,但我在一个典型的技术型公司云巴工作。
云巴是一个小团队的公司,却能在短短几年的时间内能够做到物联网通信的领先水平,离不开团队的精英式的文化和管理方式。
没有固定工作时间,在有效的时间内做最有效的事,以输出的结果为导向。
以问题解决方法和思路为大,出现一个问题,团队都会开交流会,每个组员都要交换思路和提出建设性方法。
如有成员学习到新的技术或者有个很好的思路,团队也会组织学习交流会。
每个程序员都想成为一个受人瞩目的大牛,而我认为这光靠个人的一腔热血是不够的,这需要整个团队一起进步。熟话说一方水土养一方人,我想把这个道理放在团队和个人的关系中同样适用。

时间: 2024-10-10 21:34:55

【译】如何成为一个优秀的开发者的相关文章

成为一个优秀的软件开发工程师应该具备的能力

很多人都希望成为一个优秀的软件开发工程师,那么,成为一个优秀的软件开发工程师应该具备哪些能力呢? 下面是我个人的见解,有不同想法的欢迎提出讨论. 在学习之初,我们往往强调的是开发技术,对于软件开发者而言,这是最初级也是最简单的要求. 我们想要把我们学到的知识运用到工作生活中,就需要了解行业知识了. 遇到问题如何解决就需要我们的思维能力了. 只有把这三者有效的结合起来,我们才可能成为一个优秀的软件开发工程师.

如何成为一个优秀的程序员(大部分写的都非常不错)——要勤快,不停的学习;争论是无意义的,不如把两种都学了,会更有收获。

在看这份FAQ之前,你必须先读完ESR的<如何成为一名黑客>(本文末尾附有中译版),该文所讲过的道理我不再重复.该文用很大的篇幅讲什么是黑客文化,虽然态度和信仰的确是成功的最关键因素,但是你肯定会想,做不做黑客跟我没关系,我只是想学个一技之长,找个好工作而已,对吧?那么肯定更希望获得一些具体的可操作的指导.     1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:    问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等:     

一个资深iOS开发者对于React Native的看法

一个资深iOS开发者对于React Native的看法 当我第一次尝试ReactNative的时候,我觉得这只是网页开发者涉足原生移动应用领域的歪门邪道. 我认为一个js开发者可以使用javascript来构建iPhone应用确实是一件很酷的事情,但是我很快放弃了自己去使用它的念头.毕竟我因为爱好而从事ios原生开发多年,并且目前为止已经很熟悉这一套开发专业工具. 我已经创造了一些我引以为傲的iOS应用——一些使用Object-C和Xcode构建的应用,通常人们都是这么做的.这两样工具是苹果公司

成为一个优秀程序员的11条小贴士

我是一个充满了激情的程序员,所以我觉得我很了解程序员.在这个领域耕耘了这么多年,我和许多非常聪慧的人们接触,他们编写了具有创意的代码,但是当其他人来维护这些代码的时候,他们就很抓狂了! 能够激励程序员的最重要的一点就是他们的激情.我们对于编写良好的程序富有激情,所以我们整合了一个有11条小贴士的清单来帮助您成为一个优秀的程序员.无论您是刚开始学习程序设计还是一个有经验的开发者,有一些东西是您在参考手册上找不到的.备注:我们不说是伟大的.但,绝对是很好的,也就是说好到足够让一些程序员依赖或者使用它

成为优秀移动开发者的心得

话说,距第一款移动应用程序问世至今,移动开发者的需求已经有很大改变. 随着市场和技术的成熟,手机的运行速度已经变得更快,移动市场中应用海量涌现,移动平台也是不断变化.那么开发者该如何面对变化中的移动应用市场呢?开发者需要具备哪些特征才能脱颖而出呢?以下是一些建议: 移动互联网IT培训(Android IOS WinPhone HTML5) 相关课程链接:http://www.ibeifeng.com/mobile17.html咨询QQ2110053820 1.遵守平台规范,使UI和源码更智能.早

推荐一个优秀的国产源代码托管服务

不知道这里有人写过没有,我就抄着无知者无罪的想法和大家分享一下吧. 由于Github在国内不稳定,前几天开始寻找其他代码托管服务,有幸发现了一个由国人开发的产品Coding.Net . 一进去就被酷炫的设计吸引了,抱着尝试的态度马上申请了账号. 这个网站似乎刚上线不久,还处于测试阶段,因此所有服务和功能都是免费的!每一个账号可以建立1000个项目(包括公开的和私有的),而且没有容量限制(至少我还没发现),只有单个文件不大于50M的限制. Coding.Net使用的是Git仓库,可以使用HTTPS

万众创新:你是一个优秀的程序员吗?

程序员经常为自己的工作和职业而感到自豪,一些软件开发公司甚至觉得优雅的编写代码是一种艺术形式,因为,很多人自称自己为“软件工匠”.但是我相信,写代码只是一个正常的职业,但在很多软件开发的情况下,程序员会抄袭别人的代码,如果每个人都可以看到你写的代码,你觉得还有些代码的必要吗? 所以,在万众创新的大环境下必须要反思:你是一个优秀的程序员吗?你是高于平均水平的软件开发人员?也许你是在排名前20%,甚至最高的10%? 我几乎可以肯定,很多程序员的答案是,高于平均水平.大多数程序员这样的感觉.但是,当然

如何设计一个优秀的电子商务产品详情页

http://c.jinhusns.com/cms/c-3256/?type=xcj 如何设计一个优秀的电子商务产品详情页 电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一.产品详情页面是客户作出“加入购物车”决定的页面,也是搜索引擎的结果页面.和我们一起去探索什么样的伟大元素可以设计出一个成功的产品详细页吧. 电子商务产品详情页设计(E-commerce Website Design) 设计,可用性和搜索引擎营销的工作对于一个电子商务项目是紧密相联的.是时候开始了,让我们

转:如何成为一个优秀的程序员

如何成为一个优秀的程序员 导读:本文是由作者Jason Rudolph发表的一篇博文<Programming Achievements: How to Level Up as a Developer>翻译而来. 文章内容如下: 一个优秀的程序员如何能练就成一个卓越的程序员? 先等等,暂时不谈卓越,先谈谈如何成为一个优秀的程序员. 从第一步到第N步并没有明确的路线图.事实上,第N步到底是什么还不确定.就像逻辑型思维的开发者一样,缺乏明确的目标会让从入门到精通的道路变得异常崎岖. 过去的几年中,我