`
xiangqian0505
  • 浏览: 321657 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转发《阿里软件资深架构师谈:开发者的人品问题》

 
阅读更多

程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统的问题。

同样,一些程序员在职业发展中遇到问题时,也总是喜欢怀疑公司不好,怀疑战略有问题,怀疑流程制度不合理,怀疑老板和同事……就是不愿意怀疑自己的人品。

在大大小小的IT企业中,总能看到一些技术并非最顶尖的程序员做成大事的例子,也总看到一些技术牛人被埋没而不能一展才华的现象。我想,除了机遇之外,还有一个很重要的因素,那就是:程序员的人品问题!

当然,这所说的“人品”,依然是调侃的说法,并非指道德问题。其实,人品问题指的是程序员的软实力。如果将程序员的编程技能称为硬实力,那么编程技能之外的东西统统可以称为软实力。不容置疑,编程技能是一个优秀程序员必须具有的硬实力,对程序员的职业发展起着最直接的作用,但程序员的软实力同样不可忽视。

如何修炼自己的人品呢?我想谈谈自己的一些经验和教训。

 

 

程序员相轻

在长期与程序员打交道的过程中,发现大多数程序员和我一样,喜欢以自我为中心,特别是年轻的程序员。也许我的观察可能不完全正确,但从许多程序员的言谈举止中,确实可以感受到我曾经的浮躁心态。

喜欢以自我为中心的人,往往会自以为是,并按自己的思路和想法行事,不太愿意听取别人的想法和意见。同时,这样的人,性格相对内向,喜欢沉浸在自恋和自负的虚幻空间里,其他人的思想都看不上。当两个都很自我的程序员相遇时,他们不是互相倾听和学习对方的优点,而更喜欢找对方的缺点,从而显摆自己的优势。这就是所谓“程序员相轻”现象!

不知道各位程序员是否存在程序员相轻的心态,反正以前的我经常看不起别的程序员,甚至还看不起那些德高望重的老前辈。能被我欣赏的程序员更是寥寥无几。同事编写的代码在我眼里就是小儿科,或者干脆就是垃圾。我认识许多过来的程序员,那些曾经很自我,但现已放下,从而潇洒编程的程序员。他们现在都在一些公司的团队里担当重要角色,但据他们反映,“程序员相轻”的现象在IT企业里是普遍存在的。

现在的软件开发,大都需要团队协同来完成的。团队作战是需要团队每一个程序员相互信任和尊重,将分散的力聚在一起形成合力,从而攻克一个又一个的项目工程。如果一个团队中的程序员相轻现象严重,团队中的成员就会从相互争论演变成相互指责,逐渐失去成员间的相互信任和尊重,内耗日渐严重。最终,团队的力量就四分五裂,大家并不向同一个方向使力,整个团队将变得毫无战斗力。

我想,对于程序员的职业发展来说,要过的第一个坎就是克服“程序员相轻”的心态。只有修正了这一人品问题,才能将自己的思想从狭隘封闭的自我空间中解放出来,才能踏上一条宽广的职业发展之路。那么,克服程序员相轻的心态很难吗?其实不难!很简单:放下自我!

世界上最难战胜的对手就是“自我”,而世界上最重的包袱也是“自我”。因为自我,人必自恋,心必自私,行必自负,荣必自欺,败必自卑。程序员相轻这一最大的人品问题,就是因为太自我。如果敢说“我的人品没问题”,那就得先放下自我。自我放下啦,人品问题也就放下啦。既然这样,我们何不将这沉重的包袱放下,让心灵轻松自由起来的呢?

 

 

沟通交流

大多数程序员是比较含蓄的。比起复杂的人际交往,我们更喜欢单纯的技术工作。因此,在与人交流的时候,程序员会表现出两方面的不适应:一是不善于倾听;二是不善于表达。其实,我以前也是这样。在听别人讲话时喜欢默不作声,而心里总盘算自己的思路。轮到我讲话的时候,却不能有效地表达自己的思想,讲的话很难让人理解。有时候,又喜欢打断别人讲话,将自己的观点强加于人,也不管是否听懂对方的意思,就大加指责,甚至出言不逊。

沟通交流障碍是大多数程序员普遍存在的另一个人品问题。而在团队协作中免不了相互沟通,如果一个程序员在沟通方面存在障碍,是很难融入团队开发工作的。因此,程序员应该努力提升自己的沟通能力,修炼沟通交流方面的人品。当然,提升自己的沟通能力,并不是要求我们练成辩论家的口才,只要能做到有效地倾听和有效地表达就已经足够了。

其实,做到有效的倾听还是比较容易的,特别是当对方的表达能力很强的时候,我们只需要静下心来认真倾听即可。即使不是很容易听懂别人的话,就多问问,请对方再讲讲。反正,一定要先理解别人的意思,才表达自己的意见。或许在你看来别人的想法是错的,不妨先让人家把话说完。没准等人家说完之后,你会发现原来自己错啦;即使自己没错,也能可能理解错了人家这样想的原委。理解是从倾听开始的,认真倾听体现了对人的尊重。设身处地想想,如果是你在发言时,是否希望人家都能认真倾听你的心声,理解你的思想呢?那么,在别人发言时,我们为什么就做不到认真倾听呢?

然而,倾听的目的是为了理解别人的想法。一些人默不作声,貌似在听人家讲话,实际上想着别的事情;而一些人却是不懂装懂,假装点头,让人家误以为听懂了。对于有效的沟通来说,这些现象不但没有好处,反而会带来更多坏处。问题得不到解决,隐患埋藏得更深。因此,倾听就要认真仔细的听,努力从讲述者的思绪去理解问题,真正理解别人的想法。懂就懂,不懂就不懂,千万别不懂装懂。不管你是菜鸟还是大牛,多问问,没人会瞧不起你!

相对来说,做到有效地表达会难些。很多程序员会有这种感觉,让我写代码容易,让我说出来就难。只可惜,代码是写给机器的,沟通交流面对的却是人。因此,提升语言表达能力也是非常重要的,除非你不打算与人打交道。

其实,在语言表达方面还是有一些简单的原则可以借鉴的。首先,要记住,不管怎样讲,要把握得住讲话的逻辑线索;其次,先讲背景,建立起沟通的上下文,再讲具体的细节;然后,在讲解中穿插关键词语的简短解释。相信这样讲解是可以让许多人理解的。这就好像编程,得有完整的逻辑主线,得有上下文,还得有变量定义,等等。

另外,在讲话时尽量少用指代词,就是少用“这个”、“那个”、“它”等词语。不妨直接说出这些指代词背后的真正名词,不过是多说几个字而已,但听者更容易准确地知道你指的什么。比如,你向别人请教时说“这个东西有问题,你知道原因吗”,人家一定会反问“什么东西”。但如果你说“Memcached命中率有问题,你知道什么原因吗”,人家就可以立即开始思考问题的原因啦。尽管在你的头脑里“这个东西”指的就是“Memcached命中率”,但人家并不清楚。这就好像编程时对变量命名一样,相信编程经验丰富的你基本上不用a、b、c这样的通用名字,一定会用bufferSize、totalAmount、lastChild等等让人一眼就能明白的单词。那么,既然你能在编程中可以养成良好的命名习惯,为什么不能在语言表达中也养成良好的命名习惯呢?

程序员如果把沟通交流的人品修炼好了,保证你的职业发展会驶上快车道。

 

协作能力

我以前喜以欢单打独斗。如果我不能掌控全部代码,我宁愿不做;或者动不动就把本该人家写的代码也写一份,搞得别人很没面子。后来我知道,就算我是千里码,日编千行,夜编八百,也很难独自完成现代的大型系统开发。在现代的软件企业里,协作能力也是对程序员人品的重要考验,我们应该努力提高在协作方面的人品。

首先,提高协作能力要善于分清责任和义务。其实,这个很简单,就是根据大家约定的分工做事情,该谁做的就由谁做,该谁担责任的就谁担责任。不要盲目做事,更不要随意插手人家的事情。程序员应该牢记自己的责任,切实履行自己承担的义务。只有这样,才能赢得同事们的尊重和信任。其实,对一个有战斗力的团队来说,不但需要忠实履行义务的成员,更需要敢于承担责任的成员!

其次,就是要随时了解和关心别人在做什么。我以前喜欢闷头做事情,守好自己的一亩三分地,其他的都不闻不问。这对于协作开发来说是非常不好的。在一个协作的团队中,不了解别人在做什么,自己的事情也肯定做不好。分清责任和义务,并不是说可以不了解和关心他人的事情,千万别为了分清责任和义务而走极端。

最后,就是做事要积极和灵活。在这一点上,可以说是仁者见仁,智者见智,修炼起来确实需要些悟性的。做事积极主动相对比较容易,看到团队的问题主动提出来,并从自我做起加以解决;对于没人承担或谁都不愿做的事情,试着去做做;自己取得了成果,主动与大家分享一下;别人的工作有了进展,多多鼓励和支持一下。不过,做事灵活就更不容易把握,这要求既能成事,又不失原则。这种人品只有在摸爬滚打中才能修炼出来,就看大家的悟性啦。

 

职业修养

毋庸置疑,程序员是一种职业。一些人是因为生存而选择了做程序员,一些人是因为兴趣爱好而选择了做程序员。可能大多数程序员和我一样,既是为了生存,也是喜欢编程,所以选择了做程序员。不管怎样,吃了程序员这碗饭,就得对得起程序员这一职业。既然程序员是一种职业,那就有职业化的要求。一名程序员是否具有职业化的修养,可能是企业老板最关注的人品指标。

职业化与专业化有很大不同。我们常常会称赞某人很专业,说的是这个人有某方面的专长。某方面的事情他是专家,他也很愿意去做那些事情。这叫着专业化。

职业化首先要求我们要有专业的技能,除此之外,还要求我们有职业的态度、职业的意识和职业的道德。工作中的事情,并不每一件都是你喜欢和擅长的,但你也得去做。简而言之,专业化就是“将喜欢的事情做得很好”,而职业化就是“将交给你的事情当作喜欢的事情,并将事情做好”!

我承认,和大多数程序员一样,我也想加入核心技术团队,也喜欢做创新性的工作,喜新厌旧,不想干编程中的体力活。但在一个企业里,不可能人人都参加核心技术开发,修建软件大厦总要有一些人会去做施工队,去干搬砖头的体力活。于是,当有工作交代下来的时候,如果不是我喜欢和擅长的,也只好硬着头皮去做,不情愿的牢骚只能暂时憋在心头。当然,既然接了这单子的买卖,也就想尽办法努力去做好,一来是要面子,二来是怕将来留下麻烦。多年下来,也逐渐在一些不喜欢和不擅长的工作中找到快乐和成就感。后来才明白,这就叫职业化。

另外,项目开发团队中最怕出现情绪化的程序员。尤其是在核心开发工作中,情绪化的程序员无疑就是整个项目的定时弹。尽管这样的程序员可能有着极高的专业化造诣,一旦项目客观要求发生变化,与其原来的喜好和理想不符的时候,他们就可能就会产生抵触情绪,甚至干脆撂挑子不干啦。其实,情绪化是不成熟的表现,更是缺乏基本的职业修养。想想自己过去也曾有过类似的表现,如今想来真是可笑啊。

其实,做到职业化也没那么难,只需要乐观的心态和那么一点点牺牲精神。既然工作和纳税一样是无法避免的,我们何不快乐面对工作。既然这件事情总得有人做,牺牲一下又何妨,权当行善嘛。当然,要做就得做好,得有那么一股劲。让我干体力活,我就权当锻炼,即使让我扫地,我也要比别人扫得干净!这样才能在工作中找到快乐和成就感。在职业生涯中,也许会失去某些东西,但也会得到某些东西。

有职业化修养的程序员在企业和团队里是值得信赖和让人放心的,将这样的人放到重要和核心的技术项目中将是项目成功的有力保障。因为,不管项目需求如何变化,不管技术方案如何调整,有职业化修养的程序员都会认真做好需要的每一件事情,这可以有效地保证企业和团队的整体利益和目标。因此,想要你的职业发展一帆风顺,一定要修炼职业化人品!

 

尾声

是否能认识到人品问题,关键看自己,是否打算修炼人品,关键也要看自己,外人是帮不了的。哲学家说,外因对事物发展的影响有限,而内因才是推动事物发展的根本因素。所以,如果程序员自己不愿意修炼自己的人品,无论外人如何苦口婆心都是没用的,反而会让他觉得你讨厌。

人必须要自己经历了一些事情,才会有切身的体会。面对问题,如果开始从自身找原因啦,也就是缘份的开始。当苦苦求索,而不得其解时,也就是机缘到啦。某一天,自己突然想明白啦,或者偶遇高人点化,心中突然豁然开朗,就是顿悟。顿悟之后才发觉原来一切都很简单,以前纯粹是自寻烦恼。程序员不就是那么回事儿嘛!从此,我们就可以轻松潇洒地做程序员啦。

但要记住,程序员还是程序员!别修炼了半天人品,修成了专家,成了辩论家,成了哲学家,成了思想家,就是不会编程啦。如果大家都得道成仙了,谁来干活呢?当然,因为你的道行高,大家希望把你供起来,但千万别自己把自己供起来。真的,程序员修炼人品,不是为了摆脱编程工作,而是为了找到编程的快乐。

有一位大和尚曾对我说:真正的快乐不在于你拥有多少,而在于你付出了多少!如果你将每一件事都当善事来做,心就会快乐。所以我想,行善从编程开始好啦……

 

作者简介:

李战,阿里软件的老顽童,资深架构师。有近20年的软件开发经验,属最老一代程序员之一。早年从硬件设计与开发,后来转向纯软件领域,历经汇编开发时代到今天的云计算开发时代的整个历程。目前在阿里软件从事云计算方面的研究与开发工作。

分享到:
评论

相关推荐

    阿里P8架构师谈:高并发架构解决方案总结

    用户角度:网站打不开服务器雪崩:通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程防止包并发下的数据错乱问题。这里主要讲述的是在并发请求下的数据逻辑处理...

    软件架构师成长之路

    ### 软件架构师成长之路的关键知识点 #### 一、软件架构师的角色与价值 - **定义**:软件架构师通常被视为一个组织中的技术领袖,他们负责制定软件产品的技术路线和技术框架,确保产品的可扩展性和高效性。 - **...

    软件架构师应该知道的97件事.pdf

    软件架构师作为一个专业领域的高级职位,其核心职能包括确保软件系统的稳定性、可扩展性和安全性等。根据提供的文件内容,软件架构师应该了解的知识和技能是多维度的。以下是对文件内容中提到的关键知识点的详细阐述...

    软件架构师职业解读

    软件架构师的成长路径通常包括从程序员、资深开发者逐渐发展到技术领导角色。这个过程中,不断学习新技术、积累项目经验、提升沟通和管理能力是非常关键的。 在"软件架构师职业导读"这份资料中,可能会涵盖这些方面...

    踏浪阿里巅峰之路 成为P6前端架构师的终极征程 80G深度探索31模块最新前沿技术潮流

    P6前端架构师之路: 您将跟随我们的专业导师,走进阿里P6前端架构师的独特之路,解锁成功的关键。 终极征程: 本课程旨在提供一场全面而深度的征程,助您攀登技术的巅峰,实现个人职业的新高度。 深度探索: 我们...

    5本架构师必读电子书.rar

    《RabbitMQ——高效部署分布式消息队列》这本书主要涵盖了分布式系统中消息队列的核心概念和技术,特别是关于...学习并掌握这些内容,将有助于你成为一名优秀的架构师,能够设计和构建高性能、高可用的软件系统。

    企业级IT架构分享 云计算架构师成长之路 Hadoop开发者第四期 共97页.pdf

    ### 企业级IT架构分享——云计算架构师成长之路与Hadoop开发者第四期解析 #### 一、概述 本文档“企业级IT架构分享 云计算架构师成长之路 Hadoop开发者第四期 共97页.pdf”主要围绕云计算架构设计以及Hadoop技术的...

    面向模式的软件体系结构(全)

    总之,“面向模式的软件体系结构”系列是软件工程师和架构师的重要参考资料,它提供了丰富的模式理论和实践经验,有助于提升软件设计的质量和效率。无论是在团队协作中建立共同的设计语言,还是在解决特定技术问题时...

    架构师技能图谱(全)

    【架构师技能图谱(全)】是一份全面概述了软件开发领域中各类架构师所需技能的资源。它涵盖了从Java架构师到iOS开发者,再到Android开发者以及数据库工程师DBA等多个角色的关键技术栈。这份图谱旨在帮助专业人士...

    架构师考试各年试题整理

    自己整理的各年的架构师考试的试题,花了不少时间,希望对大家有帮助,希望大家多给好评,呵呵

    软件开发(开发者必看)

    2. 设计:在明确了需求后,开发者需要设计软件架构,包括系统架构、模块划分、接口设计等。这一阶段可能涉及数据结构设计、算法选择以及用户界面(UI)设计。良好的设计是保证软件可维护性和扩展性的关键。 3. 编码...

    开发进阶(软件架构师)

    《开发进阶(软件架构师)》是一本旨在引导程序员逐步成长为软件架构师的专业书籍。它深入探讨了软件开发过程中的关键概念和技术,为读者提供了一个全面的学习路径,以提升其在软件工程领域的专业素养。 面向对象的...

    软件架构:组织原则与模式

    "软件架构:组织原则与模式"这一主题深入探讨了如何构建高效、灵活且可重用的软件系统。以下将详细阐述这个话题中的核心知识点: 1. **软件架构**:软件架构是指软件系统的高级结构,包括主要组件、组件间的相互...

    阿里云计算技术和阿里IoT为广电行业带来的智能化创新——访阿里云计算有限公司资深解决方案架构师孟方.pdf

    阿里云计算技术和阿里IoT为广电行业带来的智能化创新——访阿里云计算有限公司资深解决方案架构师孟方.pdf

    Android-Architecture-knowledge-2-:阿里P7移动架构师学习路线

    Android架构知识-2-阿里P7移动架构师学习路线 Android开发者技术交流群领取最新Android架构进阶教学视频+ BATJ面试专题PDF +学习笔记入口:点击链接加入群聊【Android Framework高级技术】: ://jq.qq....

    2009系统架构师大会PPT:岑文初:淘宝开放平台架构设计与实践

    淘宝开放平台(Taobao Open Platform,简称TOP)在2009年的系统架构师大会上由岑文初(放翁)进行了详细介绍。该平台旨在为外部开发者提供一系列工具和服务,帮助他们构建基于淘宝生态的应用和服务。淘宝作为一个...

    企业级IT架构分享 云计算架构师成长之路 Hadoop开发者入门专刊 共69页.pdf

    企业级IT架构分享 云计算架构师成长之路 Hadoop开发者入门专刊 共69页.pdf

    2021年下半年系统架构设计师下午真题及答案解析.pdf

    本文档为2021年下半年系统架构设计师下午真题及答案解析,内容主要围绕着一个机器学习应用开发平台的设计与实施展开,提出了一个具体的项目需求和架构设计方案,并针对这些设计要求了进行了评估。文档中提及的需求...

    系统架构师视频教程

    系统架构师是一个至关重要的角色,他们负责设计、规划和实施软件系统的整体结构,确保系统的高效、稳定、可扩展和安全。本视频教程针对那些希望通过学习成为系统架构师或者提升自己在该领域技能的人群,提供了丰富的...

Global site tag (gtag.js) - Google Analytics