那些优秀程序员身上的共同特质

你是否发现,在我们身边的那些优秀程序员身上总是能找到一些共同的特质,这些特质并非与生俱来,但却逐渐在他们身上留下深深的烙印,这也使得他们变得与众不同,更成为我们心目中的佼佼者。

至少深入理解一门编程语言

学习编程和学驾驶很像,你很容易就能学会驾驶,比如,经过一个月的驾校培训,你就能获得驾照,但要真正成为一名优秀的司机,却必须经过长时间的驾驶实践才行,这将帮助你在头脑中形成一套完整意识体系以应对驾驶中所遇到的不同情况。编程也是一样,当程序员们作出那些优秀的程序设计时,看似自然,但它的背后却是程序设计者们经过长时间编程实践之后所构建起来的编程思维。

优秀的程序员不仅熟练掌握一门编程语言的语法和语义,他们还会

  • 掌握这门语言的使用哲学,包括那些最佳实践、设计模式以及它们背后所蕴含的原则
  • 深入理解语言的特性,每一门语言都有各自的特性,而很多新的特性还会被不断加入到语言的最新版本之中,充分了解这些特性,能够帮助程序员更准确、高效地使用它们
  • 了解语言的局限,任何程序语言都会有其局限性,这会让我们在解决某些问题时产生麻烦,我们需要了解这些限制,并知道如何使用一些方法或技巧去绕过这些限制并解决问题。
  • 理解语言的缺陷,有些语言在设计之初就存在一些先天不足,比如JAVA语言中的日期处理,那些原始数据类型,可能会给你带来一些疑惑,了解这些缺陷,并尽可能在编程中避免涉及这些缺陷,会让你的程序在日后更易于维护。
  • 了解语言的未来,有些编程语言如新生儿般茁壮成长,如Swift、Go,有些则如青壮年般看上去年富力强,比如Java、PHP、Python,而有些则已进入暮年,不再受到关注,比如VB、Pascal。优秀的程序员能很快掌握一门新的编程语言,但只有了解语言的发展方向,才能让你更有信心地去应对未来。

看上去有些“傻”

听起来或许有些可笑,但那些出色的程序员往往容易给人留下“傻”的印象。他们对某些事物的看法可能显得单纯而幼稚,他们的待人接物经常会闹出笑话。但这些并不会阻碍他们成为一名优秀的程序员,因为“傻”——知道自己不够聪明,反而能使他们变得更加强大。

  • 不会停止学习的脚步:认为自己不够聪明才会通过不断学习去提高自己。而一旦你停止了学习的脚步,你将无法得到那些能够让你变得更加优秀的方法和技能。
  • 使得他们在工作中变得更加严谨:他们会花更多时间review自己的代码,进行测试以保证交付的质量。虽然过程可能并不轻松,但他们却总是能交出令人满意的结果,这也让大家对他们充满信任。
  • 帮助他们获得更好的想法:在软件开发领域,那些最优的解决方案,往往需要你通过深入思考并探索尽可能多的可行方案后才能获得。这意味着你必须具有开放的思维,而不是那些聪明人的自以为是。

他们都是现实主义者

相信每个人都有一颗追求完美的心,程序员也不例外。然而在软件开发中完美并不存在,所谓的完美只是想象中的一个瞬间状态,而它是无法达到或者即使达到也极易被摧毁的。任何一段新的代码,一个新的功能中所存在的缺陷都可能将这种完美的状态打破,而为了达到完美所付出的代价更是我们所无法承受的。那些成熟的程序员更加现实,他们关注于如何高效地解决问题,并在此基础上给用户带来好的感受。

优秀的程序员懂得平衡,他们理解时间、人员等资源都是受限的,因此他们会选择最简明有效的方法去实现需求或解决问题。而非为了不必要的完善和未知的将来,把一切想得过于完美,反而增加了系统的开发和维护成本。他们不会把代码写得过于复杂,因为他们知道团队中大部分的程序员都处于中等水平,过于复杂的代码会让他们产生困惑。优秀的程序员也深知完成即是价值的道理,他们知道从来没有绝对的对与错,与其长时间的关在会议室里,去讨论或设想产品,倒不如尝试用较小的代价去实现出某一个功能或产品,然后通过用户的实际使用去证明它,然后在反复的迭代中不断完善。他们尊重流程,但会灵活应用。每个公司或团队都会有自己定义的开发、测试、发布流程,优秀的程序员们尊重这些流程,但在某些时候他们也会对流程中阻碍自己效率的部分作适当的裁剪。

优秀的程序员都很现实,这使得他们在不同的环境、团队、项目中都能快速获得成功。他们所开发出的系统往往处于“较好”的状态之下,它并不完美,但却非常稳定。

从自己的失败中学习

作为程序员,你不可能总是对的,你或许会错误地选择了某个技术或框架,你或许错误理解了用户提出的需求。但不经过这些失败,你可能永远无法得到那些正确的方法

诚实地面对自己的错误非常重要,这意味着你或者你的同伴能够及时地去修复错误,而这对你、对团队、对项目都是最有益的。而每一次的失败也会成为一次自我提升的良机,造成失败的原因是什么?如何有效地避免失败?通过及时反思,并果断采取措施,那些失败将成为你获得进步的最佳途径。

然而,承认失败往往需要极大的勇气,特别是在一些软件公司,他们营造了一些不良的文化,当产品出现问题时总是对用户掩盖搪塞,并想方设法蒙混过关。这对你个人无益,甚至可能因为延误了问题的最佳解决时机,而导致更惨重的失败。如果你希望变得更加优秀,那你必须具备直面失败的勇气,并学会从每一次失败中获得进步。

很懒却又很高效

那些优秀的程序员有时看上去很懒,他们会在上班时间做那些与工作毫无关系的事情,比如在纸上随意地乱涂乱画,长时间坐在那里发呆,甚至玩手机。但一旦他们进入编程状态,你又会发现他们变得像打字员般,指尖飞舞,瞬间完成他们的工作。

优秀的程序员非常珍视自己的时间,他们会利用一切手段提高效率:

  • 常年的编程工作使他们都能熟练操作键盘,往往从一个程序员的打字速度上就能判断他是否优秀。
  • 他们能够熟练地使用IDE,他们不依赖菜单,而是使用快捷键来操控代码,从查找文件,文本编辑到格式化代码,文本替换都尽可能使用快捷键,这使得他们的开发工作更加连贯,也更高效。
  • 他们善于使用或发明工具,他们寻找一切能提高效率的工具,必要时他们还自己编写自动化脚本、发明新的工具,从而彻底抛开那些恼人的重复劳动或机械性工作。

编程的过程是一个深入思考的过程,而非简单的不断敲出代码。那些看上去很懒的优秀程序员,他们的思维却可能一刻不停地在运转着,这也是他们总是能够给我们带来惊喜的原因。

善于发现并改造轮子

今天几乎每个程序员都知道不要重复发明轮子的道理,但问题往往是他们无法找到那个需要的轮子,或者他们无法很好地使用他们。

优秀的程序员知道如何找到他们想要的轮子

  • 他们会用几个与待解决问题相关的关键字在互联网上进行搜索。他们不仅使用国内的搜索引擎还会想方设法借助Google、Bing等国外搜索引擎,因为很多解决方法、意见、建议往往会出现在国外的技术论坛中。
  • 他们会利用社交网络进行搜索,因为那里往往包含着最新的信息,相比传统互联网搜索,你往往会得到那些更具时效性的解答。
  • 他们善于提问,互联网上很少有人认识你,所以你完全不必害羞,在Stackoverflow等社群提出你的问题,你很快就会获得热心人的回复。当然对任何回复都保持友好和善意也很重要,否则没人会愿意帮助你。

优秀的程序员善于组合和改造轮子
虽然我们比以往任何时候都更容易得到轮子,但如何用好它们却是另一个学问。我们往往需要一些技巧将几个轮子组合在一起使用,必要时还需要对它们进行一些改造。优秀的程序员往往能通过阅读相关的文档、API以及代码,快速地判断一种技术、框架、工具是否适合自己的需要。并且凭借扎实的技术功力,他们还能基于这些轮子,改造出更强大、更适合自己需要的轮子。

并行工作,有效利用时间

效率可能是优秀程序员与那些普通程序员之间最大的区别,优秀的程序员总能更快、更好地完成布置给他们的任务。这背后当然有技术熟练度方面的原因,但我看到的另一个重要原因是,他们更善于将工作进行切分,并充分利用时间并行地去完成他们。

程序员每天都会参与很多活动,比如参加需求讨论会议,和其他开发者讨论设计方案,大量的阅读学习,当然还有编码。很多时候,我们会按照别人的意愿,去安排自己的工作,但这对我们来说可能并不是最有效的工作方式。工作中充满了选择,你不可能一下子完成所有的事情,在开始之前想一想如何把时间最有效地利用起来对你来说非常重要

优秀的程序员非常善于多线程工作,他们能够如项目经理一般,拆分并安排好自己的每一项工作。如果你长时间做一件事,很容易会觉得疲劳,但把几件事切分成更小的任务后,交错并行地去完成它们,你便能更轻松地完成它们。就像我们在生活中,会利用坐地铁,等公交的时间,拿出手机来获得咨询一样。优秀的程序员能将所有的可支配的时间碎片化,利用这些时间片段,他们阅读、学习、开发、做个人项目......他们并不比任何人有更多的时间,只是他们更会利用时间

具备不错的软技能

你可能是一个代码高手,但这并不足以使你成为一个优秀的程序员,因为优秀往往是他人对你的评价,而你的老板、客户可能都不擅长或根本不懂编程,他们往往并不会给一个只懂得编程的员工以很高的评价。当然,我们不可能去责备一个程序员过于钻研技术,因为技术发展得太快,他们需要不断学习才能跟上技术的发展脚步。但程序员们仍然不应忽视那些对他们的发展同样重要的软技能。优秀的程序员往往需要具备:

  • 一定的语言表达能力,这样才能向他人准确而清晰地表达你的设计或想法
  • 学会倾听,这样才能获得他人的优秀想法或意见,帮助你取得进步
  • 有足够的信心成为一个领导者,尽管可能只是一个2,3人的团队,但那是一个很好的开始
  • 指导他人的能力,教授方法和思想,而不仅仅局限于技术本身
  • 持续学习的能力,你需要不断进步,否则即使你曾经优秀,也会很难维持
  • 谦逊的态度会让你更像是一个大师
  • 尊重每一个人的同时,你也将会迎得他人的尊重
  • 敢于承担责任,机遇往往就会随之而来

优秀的程序员不仅具备优秀的技术能力,他们也往往拥有这些软技能。在我所看到的所有项目中,很少会因为技术原因导致项目的失败,而大部分的失败往往来自于程序员们软技能方面缺失所导致的团队协作问题。反而是那些被认为水平一般的团队,却经常能依靠着团队成员间的通力协作创造出让人惊讶的成果来。

身边有一些优秀的伙伴

我认为程序员会向着个人化、多样性的方向发展。越来越多的个人程序员和更小的开发团队将会产生,在不同领域内,他们借助技术的进步与工具的发展,能做出以前只有较大规模团队才能开发出的优秀产品来。尽管如此,我仍然相信那些优秀的程序员并不会成为一匹独狼,相反的,他们身边总是会伴随一批同样优秀的伙伴。

回想我们的程序员生涯,当我们还是一个菜鸟时,身边总会出现一些导师,他们可能是你的团队Leader,或负责带你的资深程序员,那时我们那些编程时的错误和缺点总是被无情地暴露在他们面前,经过他们的指正或批评,我们从不断修正自己的错误中获得了成长。随着我们技能的不断增长,在不同时期,因为不同的兴趣,我们身边的伙伴也在不断变化,他们成了团队中与你能力相当的同事,或是你所做业余项目中的志同道合者,又或者是你参与的开源项目中那些不同领域的专家,他们都成为了一名优秀程序员身边不可或缺的优秀伙伴。这让我想到结对编程中关于轮转(Rotate)原则——并非固定两人一组,而是根据任务的不同,不断轮换搭档。任何时候,你都需要那些优秀的伙伴不断带来启发,给予指导,一起去完成不同目标,更重要的还有坦诚地指正你的问题。与优秀者同行,你也将变得更加优秀

对生活充满热情

有很多因素会使一名程序员走向平庸,而最最直接的便是失去对编程热情和兴趣。当一名程序员不再能够感受编程所能带来的乐趣时,编程对他来说,只是一项不得不去完成的工作,而他也将失去继续学习的动力,无法再与优秀沾边了。

我看到的那些优秀的程序员,总是对编程充满着热情,每次完成一个新的功能,解决一个有难度的问题,甚至修复一个不易被发现的缺陷都能让他们兴奋不已,而这些又会成为他们不断去提升技能,学习新技能的动力。他们在不断突破自己的极限中,并从中体会编程所带来的乐趣

同时,优秀的程序员们也懂得生活,他们对那些新鲜事物总是充满好奇,乐于尝试,他们也会有各自不同的兴趣爱好,摄影、写作、旅行,亦或是游戏、追剧,他们总能很好地掌控这些兴趣爱好与他们所热爱的编程之间的关系。他们会每天有规律地完成如阅读、学习、运维自己的个人项目之后,投入到自己的其他兴趣爱好之中,他们很少熬夜,这保证了他们每天都能迎来一个新鲜的开始。他们能够掌控生活,而不是反过来被生活所控制

作者:技匠

来源:51CTO

时间: 2024-09-12 14:34:34

那些优秀程序员身上的共同特质的相关文章

优秀程序员的7大高效习惯,你"中枪"了吗?

Facebook首席执行官马克·扎克伯格(Mark Zuckerberg)有一个"怪癖":几乎每天都穿同样的衣服来上班.因为他觉得这样可以节省很多时间和资源,"我每天的工作为超过十亿人而服务,如果把精力全部浪费在穿衣打扮上,我觉得我的工作没有任何意义." 每个成功者的身上都有或多或少的东西值得我们学习,以下权威机构调查的高效程序员的7大习惯,你占了几条? 一.积极主动 生活中许多事情都是不可控的.你可能正在为签证问题失去一个出国深造的机会而烦恼;你的老板是个暴脾气,

具备这些特性 说明你是个优秀程序员

编程是个很复杂的玩意,但是成就优秀程序员的很多因素和我们在学校中早期学到的相差无几.本文灵感来源于Robert Fulghum的<All I Really Need to Know I Learned in Kindergarten>. 1.分享 尽可能地使用开源,并且如果有能力的话也可以把自己的成果分享给大家.整个社会的智慧结晶肯定比一些大公司自管自闭门造车要好. 2.公平的心态 不要以为你的选择就是唯一能奏效的,试试其他技术.框架.方法和建议,也许其他的选择比你原先的好也未可知.要用开放的

优秀程序员必备的一些素质

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 作为一个合格而优秀的程序员,应该具有哪些素质?其实才工作半年的我,好像远远不够资格来谈论这个话题,不过这半年的成长让我获益匪浅,在程序员这个话题上也可以多多少少说出一点有价值的东西来. 一.对开发工作要有必要的兴趣 兴趣是最好的老师,对某个事物有了一定的兴趣,才会潜下心来学习.研究它,工作同样如此.如果对程序员的工作完全没有兴趣,甚至是抱着厌

优秀程序员无他-善假于物也

运用一门程序设计语言对大多数程序员来说是小菜一碟,但是更上一层楼成为一名专家级的软件开发者,恐怕目前还是大多数人的梦想.<程序员的思维修炼>一书中将程序员分为5个层级:新手,高级新手,胜任者,精通者,专家.根据作者的调查研究结果,在这5个层级中,大多数的程序员属于高级新手.而且居于这个层级的程序员从入行1.2年的到工作10来年都大有人在. 身为一个程序员,如何才能尽快的突破自身的瓶颈,得到快速的提升那?这可真不是三言两语可以说清楚.本人09年毕业投身软件行业,2012年初离开工作了三年的公司A

优秀程序员的十个习惯

--转来和大家一起共勉 在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经过一段时间后,这些人也许能够成为一个 优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作.但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下 面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员. 1. 学无止境 .就算是你有了1

优秀程序员素质培养

踏入程序员这个行业,你就注定要学习一辈子,新技术层出不穷,技术体系更新快速,这是和其他行业最大的区别之一.所以,如果你想在这个行业混出点样子,那么请你随时做好学习的准备,如果你想成为优秀的程序员,那么一定要有正确的学习方式,下面推荐几条程序员的最佳学习方式,希望能帮你事半功倍. 书籍和期刊是必不可少的 无论你是新手菜鸟还是高级程序员,你都离不开书籍,当然我们要有选择的读书,尽量选择一些经典的书籍来看,如果你英文水平比较好,那么读一些老外撰写的书籍是最好不过的了.书籍能让你在繁杂的互联网上总结出一

避免成为优秀程序员

我曾经和我认为优秀的程序员一起工作,但是他们是真正优秀的程序员吗?是什么让他们如此优秀?(或者,他们只是普通的程序员?) 最近读到Mark Pearl博客里一篇名为<Programming, a Subset of Writing>的文章,其中的观点让我十分推崇,尤其是下面这段: 优秀程序员和普通程序员最大的区别在于,优秀的程序员会使用整洁.易于理解的方式进行编程,任何不必要的复杂代码均不会出现.和我工作过的那些真正优秀的程序员总是尊学这样的编程步骤:写代码.重构.进一步重构. 就像日常生活技

成为优秀程序员的十个有效方法

http://www.aliyun.com/zixun/aggregation/7026.html">优秀的程序员是在穿过一条单行道的时候还会往两边看的人. 作为一个IT行业的软件程序员,每天驱使我们日复一日的辛勤工作的,是来自我们对编程的兴趣和激情.但是要让编程变得始终有趣,我们必须学会坚持某些成为优秀程序员的基本原则. 我并不是要写出一些咒语,你照着执行就可以成为一个优秀程序员了.我的目的是想记录下我学习到的和用过的一些有用的经验,它们帮助我获得比较好的结果.对于优秀程序员是没有明确定

可以使你成为更优秀程序员的5个好习惯

我们都希望能够在我们所做的事情中得到成长,在WEB开发领域,我们花费时间最多的就是编写代码.这可能包括HTML, CSS, JavaScript, PHP, Python, ActionScript或者任何其他你构建WEB站点时选用的语言. 这篇文章中,我们将分享一些实际的步骤,使你可以扩充技能,成为一个更优秀的程序员.我们提出五个不同的生活习惯,它们可以使你在你所从事的领域变得更加优秀. 1. 一个时间段内只专注于一种类型的语言 如果你正在设计或开发网站,你将需要同时熟悉多种不同的语言.你可能