程序员的自我修养
上QQ阅读APP看书,第一时间看更新

二、那些程序员们后知后觉的职涯经验

在那些流行的博客平台上,你每天都能看到很多关于职场的文章,而这些文章的作者大多是各个行业的所谓职场达人。但我却发现,程序员作为一个很大的职业群体,却极少有人写这类文章。回想自己的职业生涯,在担任程序员或架构师的十年时间里,很少会去思考或总结那些职场经验,或许大多数年轻程序员也和当年的我一样一门心思只关注于技术,而对这些所谓的职场法则后知后觉吧!

这几年,当我开始从事IT管理工作后,反而有了更多时间,回顾自己,以及从身边更多年轻程序员的身上看到并体会到一些东西。我觉得让更多程序员能够尽早明白这些,或许对他们未来的职业生涯发展会有所帮助。

1.你的薪酬与工作量无关

这第一条或许就会让你感觉有些沮丧,但仔细想想这是不是一个普遍的事实呢?当你大学毕业后进入一家公司,每天非常努力地工作,还时常加班,而同一个团队中的一些老员工看上去却一点也不忙,更可气的是,他们的工资可能还比你高出几倍。此时,你的内心是否会有些许不平衡,甚至心生不满呢?

你的薪酬其实取决于很多因素,技术能力、经验资历、工作量等,但最本质的却是,你对公司是否重要,换句话说你是否容易被取代。公司很容易找到一个和你差不多的应届毕业生,而那些对公司产品非常熟悉,并且起到关键作用的老员工,要想替代他们,公司所需要付出的代价及需要承担的风险就会高得多。

所以,不妨摆正心态,正确认识到自己在公司中的位置,努力修炼内功,让自己变得越来越重要,相信你的薪资也会随之提升的。

2.尽可能持续做一件事

既然你对于公司的价值来自于你的不可替代性,那又该如何有效提升它呢?我的建议是尽可能持续做一件事。这既是指技术上的积累,也是指你能完整或较长时间参与同一个项目或开发一个产品。虽然,有时候你所做的工作并非你个人所能决定,但你仍需要有意识地去主动把握那些能让你持续积累技术或项目经验的机会。

经常有年轻程序员朋友向我诉说他们所遇到的一些困惑,比如,觉得自己在工作中用到的技术太旧了,询问是否应该转向其他技术甚至转行;或是对公司里做的项目不感兴趣,觉得没有前途,是否应该跳槽,等等。我当然会鼓励他们去学习更多不同的东西,但同时我也会提醒他们,技术深度及完整项目经验的重要性,如果你总是在跟随那些新出现的技术和框架,那你很难在某一项技术上达到理想的深度;同样,在一个公司里,如果你总是在更换项目,那你也很难提升自己的价值。参与10个项目,不如完整参与一个项目。持续做一件事是要你把每一件事做透、做好,而不是蜻蜓点水,浅尝辄止。

3.唯一不变的就是变化本身

在这十几年的工作时间里,我唯一看到不变的恰恰是变化本身。我们使用的技术在变,软件领域的实践方法在变,我们所做的项目在变,公司的组织架构在变,我们自己的职位和角色在变,当然还有我们的老板也如走马灯般换来换去。

作为程序员,我们又应该如何应对这些变化呢?我想说,你很难去改变所处的环境,或是阻挡那些变化的大趋势。你所能做的恰恰是培养自己持续学习的能力。在我之前的文章里,曾多次提到过10000小时定律——要成为一个领域的专家一定要花费10000小时以上的时间,而对于程序员来说,所谓的100小时定律同样重要——花100小时学习或修炼一门新的技术,往往就能超过一般人很多。你需要提升自己快速学习的能力,当你学得越多,往往就能够学得越快,因为知识之间总是存在关联性。慢慢地,你会发现自己能够非常从容地面对那些不断出现的变化,甚至可以提前预判趋势,当机会来临时,总能成为那个有准备的人。

4.你的声誉非常重要

声誉对于一名程序员来说非常重要。我看到的那些优秀的程序员都有一个共同点,那就是他们在团队和公司内部都有着良好的声誉,而这反过来帮助他们在职业生涯取得一个又一个迭代式的发展。反观那些缺乏声誉的程序员,他们往往会进入到一系列的恶性循环之中,很难在公司中获得发展,最终往往只能选择离开。

声誉本身与很多方面有关,但对于年轻程序员或是刚刚毕业的菜鸟来说,除了那些经常挂在嘴边的诚实守信、踏实肯干等之外,有一点特别重要,那便是严谨。因为它往往是判断一名程序员是否具备优秀潜质的重要因素。严谨的程序员对于分配给自己的任务会认真理解,对于自己的产出会仔细检查,这些都能大大减少工作中的出错概率,给团队或公司中的其他人留下良好的印象。你可能需要很长的时间来建立自己的声誉,而一次因不够严谨所导致的错误,就可能让你彻底失去它。养成严谨的习惯,将使你终身受益。

5.理解沟通的意义

刚成为一名程序员时,我认为技术就是一切,只要能够快速开发出高质量的程序,我就会有一种满足感。因此,我很排斥与用户沟通,对那些需求的讨论也很是敷衍,一心想着尽快进入开发阶段。而这样做的结果往往适得其反,用户并不认可我对系统的设计,我也时常被要求返工,这使得我的工作效率变得很低,心情也因此一度非常低落。

改变源于我对沟通意义的重新认识。其实,我们所开发的所有功能都是为了解决某些问题,或为用户提供特定的工具。当我们没有对问题有深入理解的时候,我们很难写出正确的程序来,因此我们需要向用户虚心求教,去真正理解他们所希望解决的问题。同样,如果我们已经是某一方面的专家,我们也有责任去引导最终用户接受我们提出的专业方案或设计。我想这才是我们需要更好地与用户或其他关联方沟通的目的吧。

6.你的右脑将是你成功的关键

谈到那些我们眼中非常成功的技术大牛、IT高管,都会出人意料地将一些非技术能力作为自己获得成功的关键。比如,编写文档或做PPT的能力、演讲的能力、说服他人的能力,等等。我虽然并不完全赞同最优秀的程序员不写代码这种观点,但我确信你的右脑将会是决定你能否成功的关键。

我所能感受到的最近一次较大的提升,恰恰来自于自学设计。并不是说我的设计能力达到了很高的程度,而是当我学会以一个设计者的视角去分析和解决问题时,我的思路就得到了很好的扩展,这使得我既可以用左脑来想出那些技术方案,也可以用右脑来为用户提供更人性化和具备良好用户体验的设计方案。

你可能会问,作为一名程序员,我该如何锻炼我的右脑呢?是不是一定要学习设计或者一门乐器之类呢?完全不需要,在工作中你就可以找到很多途径来提升你运用右脑的能力。比如,在你编写一个文档或PPT时,除了内容之外,能否再多考虑一下字体和排版,让人读起来更加舒服呢?在你与用户讨论需求时,能否尝试着从程序员思维转换到用户的角度来看待问题呢?在团队内部开会时,是否能提前做些准备,多争取在大家面前进行讲演的机会呢?当你持续这么去做以后,你会发现自己在各个方面都会变得越来越好,这其中也包括了你的编程能力。因为,这些技能总是在你看不见的地方互相作用和促进的。

7.不要轻易说简单或不可能

初入职场的年轻程序员往往不注意自己的表达,这当然是一种率真的表现,但有时候却可能会给你减分。记得那还是2008年,公司通过校招吸收了一批应届毕业生,其中有10个被分配到了我所在的部门。其中有一个男孩学东西很快,性格也很开朗,因此显得特别突出,我们也都认为他是这一批应届生中天资最好的。在一次部门会议上,部门领导有意识地询问每一个人,对于一些系统改造的建议和看法,而这个男孩在回答时多次用到了“××××很简单”,“××××不可能实现”,这样的表达。虽然我们都知道他没有任何恶意,但很明显他的这些看上去有些草率的回答是不恰当的,这也使他在部门领导那里的印象分打了一个大大的折扣,导致了后面的一些不必要的麻烦。

我举上面这个例子并不是希望大家变得非常世故,而是提醒年轻程序员们不应该轻易做出那些过于绝对的判断,应尽可能去使用科学的方法进行分析和论证,然后用不易被人误解的方式进行有效的表达,这样你提出的观点才能让大家感到信服。

8.你不应该总是单打独斗

很多程序员会诉苦说他们遇到的产品经理、PM、设计师、用户甚至是其他程序员有多么地烂,与他们一起工作简直像是与一群蚊子在一个房间里搏斗一般,让人感到抓狂,他们更希望能够一个人安安心心地编程。当你是一名初级程序员时,你的工作可能会比较单纯——编程。然而,随着你能力和职位的提升,你会被赋予团队中更加重要的角色,比如,架构师、团队负责人、项目经理,等等。

如果你真的希望做出一些具有影响力的东西,那么光靠个人是很难实现的。你需要和团队中不同角色的人进行合作,有时候你需要说服别人,有时候你则会被别人说服。在这期间,你可能会因为被否定,而受到挫折,这种感受容易让程序员们产生挫败感,但这却是你成长的机会。不要总是单打独斗,要学会在团队中协作,并尽可能让优秀的人围绕在你身边,这将扩展你的能力范围,让你变得更加强大。

9.你的能力显而易见

我在前一家公司担任架构师时,经常参与公司的人员招聘和年底的人员技能考核。关于如何招到一名优秀的程序员,在后面的文章中会谈到,而对于个人能力的评判,我想说你的能力是显而易见的,而这完全来源于你自身的努力。

那些优秀的程序员无时无刻不在体现他们的能力,从轻松地解决技术难题,到会议上提出被一致认可的解决方案,以及他们写出的那些优雅且完善的代码,这些都让他们显得与众不同,仿佛是天生的优秀程序员。但我想说,他们其实都是那些努力并使用了正确方法的人。程序员的能力来自于大量的编码实践,以及持续学习的能力和勤于思考的习惯。任何自作聪明,不懂装懂,以及投机取巧在明眼人看来都只会是东施效颦,显得如此微不足道。

以上这些是我今天感受到并记录下来的东西,你可能觉得有些内容让你有所启发,而对另一些内容则不以为然。但我相信在阅读的过程中,你一定经过了思考并得到了自己的答案,坚信那些你所坚信的东西,你会变得越来越好。