程序员分类,你是哪一类?——读《编程匠艺》

在这个数据的世界里,充斥着各种各样的程序员。在我大程序员帝国中,你是哪一种?


一 代码猴子 

   软件工厂里面居住着许多不能适应社会的仁,我们把他们叫做代码猴子。

1 卖力工作的程序员

    手脚勤快,编写代码边思考。作为一个满怀激情、天生的程序员,他们会在心里一有想法就马上开始编写代码。他们不会退后一步先做些思考。因此,虽然卖力工作的程序员有着非常好的技术能力,但是他们所编写的代码从来没有显示出他们真正的能力。

   卖力的程序员常常会因为时髦而去试着使用新的功能或语言习惯。他们这种尝试新东西的渴望,意味着他们甚至会在不恰当的情况下应用技术。

优点

    就代码数量而言,卖力工作的程序员们费城多产。他们会编写大量的代码。他们学习新东西,而且对编程抱有特别的热情——甚至会激情万丈。卖力工作的程序员们热爱他们的工作,并且发自内心的希望写出优秀的代码。

缺点

    由于过于热情,卖力工作的程序员特别性急,而在急着打开代码编辑器之前不先进行一番思考。他确实编写了大量的代码,但是因为写得太快nzhexie代码都有缺陷——卖力工作的程序员会在调试上花费大量的时间。事前进行一些思考就可以避免许多愚蠢的错误,以及在消除粗心的缺陷上所花费的大量时间。

    不幸的是,卖力工作的程序员是个糟糕的调试者。就像急着开始编码一样,他们也会急着进行调试。他们不会有条不紊的工作,所以他们会花费大量的时间在黑暗中寻找缺陷。

    他们在时间估计这方面也很差劲。当事情进展得比较顺利时,他们会做出合理的情况估计,但是却从来不能按照计划进行。他们所用的时间总是会比预期的长。

如果你是其中一员该怎么办

    不要丢掉你的热情——这是程序员最后的特点之一。因为你的乐趣在看程序正常运行,在于站在一旁欣赏代码的美,所以应该想一些实用的办法来做到这一点。编写单元测试,将其作为开发的一部分,会是一个不错的主意。不过所有的建议可以汇集成一句话:“停下来,想一想。”不要着急!制定一些对你有所帮助的个人原则,甚至做一些简单的事。例如,在一张字条上写下“三思而后行”,然后贴在你的显示器上。

如何跟他们打交道

    在表现良好时,他们事编程伙伴的最佳人选。关键是要把他们的精力引导到高效的编程上,而不是用在不经考虑的胡乱编写上。在进行结对编程时,他们是良好的编程伙伴。

    问问一位卖力工作的程序员,看看他们每天都在做什么,他们的计划是什么。多关注他的设计,这会鼓励他真正得进行思考!如果依赖一位卖力的工作程序员的工作,那么要尽早向他要一个版本,并还要求看看他的单元测试。

    一位卖力工作的程序员会从恰当的管理中受益,以帮助他自律。确保他谨慎地按照项目计划安排他的时间(你不必自己来安排他的时间)。

 

2 平凡程序员

   他们所编写的代码很可靠,但没有创意。在交给他一项任务之后,他会诚心诚意地完成它,并时刻准备着接受下一项任务。由于总是在干粗活,所以这些家伙被称之为“平凡程序员”(也许不公平);

    他们的性格恬静。由于害怕好工作的压力,他们只能参加一些乏味的项目。他们把自己定位于维护程序员,在具有开拓精神的人去开发替代产品的时候,他们却在维护着旧的代码库的运行。

    如果给与一定的时间和指导,初级的就会学习并进步,但是只能分到到风险的工作。年长的可能已经停滞不前了,并且以这种身份退休。他们很乐意这么做。

优点

    给他们一项工作,他们就会完成它——做的还不错,并且很准时。他们很可靠,而且通常在时间紧迫的情况下付出更多的努力。与卖力工作的程序员不同,他们能很好的估计时间。他们有条不紊,面面俱到。

缺点

    虽然他们很细心并且有条理,但是他们的思维局限性很强。他们缺乏设计的眼光和直觉。代码猴子会无条件的遵循现有的代码设计约定,而不会提出任何可能存在的问题。由于他们不能对设计负责,所以他们也不会为出现的任何问题承担责任,而且也往往不会主动调查和修正这些问题。

    教他们学习新的东西是件很困难的事,他们就是不感兴趣。

如果你是其中一员该怎么办

    你是否想探索新的领域,并拓展你的职责范围?如果是,那么就开始通过个人的项目来锻炼来强化你的技能吧。找一些书,并从中学习新的技术。

    用于承担更多的责任,并自荐参加设计工作。在当前的工作中采取主动的态度,尽早确定可能失败的地方,并找出避免的方案。

如何跟他们打交道

    即使你拥有更强的技能,或担任更重的责任,也不要看不起平凡的程序员。鼓励他们,赞扬他们的代码,并教给他们改善工作的技巧。

    在编写代码的时候,要考虑周到一些,尽可能地使他们的工作更加轻松。

 

3 权威

     这就是传说中神秘的天才:程序界的圣贤。权威通常很安静和谦虚,也许甚至有些怪。他编写的代码很出色,但是却无法与凡人很好的沟通。

    权威会独自做最基础的工作:框架,体系结构和内核等。他拥有同时的尊重(有时甚至市敬畏);

    权威市万能的,他无所不知,无所不晓。在任何技术讨论场合,他都如圣人般地出场,并给出他的专家意见。

优点

    权威是经验丰富的魔术师。他们了解所有的现代技术,也清楚哪些旧技术更好。(所有哪些非常棒的技术最初就是有权威发明的。)他们拥有一笔经验的财富,并且能编写成熟的,可维护的代码。

缺点

    能够良好地沟通的权威为数不多。他们并不总是一言不发,但是他们的思维跳跃得太快,超出了常人的水平,所以要想跟上他们的思路相当困难。与权威对话会让你觉得自己很愚蠢,或者感动困惑,或者既觉得自己愚蠢又感到困惑。

如果你是其中一员该怎么办

    试着走出理想世界,并生活在显示世界种。不要期望每个人都能像你那么敏捷,或者按你的方式思考问题。为了简单地把问题解释清楚,需要运用很多的技巧。要在这方面多家练习。

如何跟他们打交道

    如果你遇到一位权威,那么就向他学习吧。尽量多地吸取知识(不仅仅是技术上的知识)。要想成为一名权威,需要具备特定的气质和个性,需要知识而不是傲慢。认真得观察这一点。

 

4 半权威

     半权威自认为是一个天才。其实他不是。他说的话听起来似乎有道理,实际上不多是一堆垃圾。

    这类仁可能是代码猴子中最危险的一种。在造成损失之前,很难发现谁是半权威。管理人员相信他是天才,因为他看上去似乎很可信,并且充满自信。

    半权威通常会比真正的权威更张扬。他很傲慢,并且自以为是。他委任自己做权威人士。(从另一方面来讲,权威应该是背同行们公认的专家。)

优点

    半权威很容易被认为没有任何优点,不过他最大的财富就是他的自信。相信自己的能力非常重要,而且能够承诺编写高质量的代码也很重要。但是。。。。。。

缺点

    半权威最大的缺点也是自信。他高估了自己的能力,而他的决策会危及项目的成功。他是一个巨大的障碍。

如果你是其中一员该怎么办

     现在对你的技术做一个中肯的评价。不要高估自己的。有抱负当然很好,但是不要把自己说成是那个你并不是的角色。

     你也许并不是故意这样做的,所以要客观地对待你能做和不能做的事情。要多关注你的软件的质量,而不是你看上去有多重要或者多聪明。

如何跟他们打交道

     一定要非常、非常地小心。

    一旦你认出了半权威,这场战斗你就赢了一半。他造成的大部分损失,都将在你没有发现他的时候已经发生了。要密切关注半权威的行为:你必须过滤他所说的废话,抓住他的缺陷设计,并检查他糟糕的代码。

 

5 傲慢的天才

     这类仁是各种权威中数量非常重要的一支。作为杀手级程序员,他速度快,效率高,并且能编写高质量的代码。虽然不能完全算是权威,但是他们很受关注。不过,由于他太清楚自己的技术能力了,所以他会很骄傲,显示出很强的优越感,并且时常觉得屈就。

    天才非常爱与人争辩,因为他们通常是正确的,并总是需要让自己正确的观点压倒其他人错误的意见。他已经习惯这样做了。最让人懊恼的是,在大多数情况下他都是正确的,因此和他争辩你注定要败下阵来。如果你是正确的,他将不会停下地说下去,直到争论内容转到对他有利的一面。

优点

     天才拥有相当强的技术能力。他可以提供强大的技术领导力,如果得到团队中每个仁的支持,他将是团队的催化剂。

缺点

    天才不喜欢被证明犯了错,并且认为他肯定永远都是对的。他觉得有义务承担起权威的责任。天才什么都知道。他从来不会说“我不知道”,不愿意遭受被冷落的耻辱。

如果你是其中一员该怎么办

    不是每个人都能得到像神一样受人崇拜的地位,但是有许多优秀的程序员确实值得尊重。要明白这一点。谦虚地待人处事,尊重别人的意见。

    寻找那些可能更有阅历的人,然后向他们学习。千万不要自欺欺人,掩饰自己经验的不足——对于你知道什么,不知道什么,一定要诚实。

如何跟他们打交道

    一定要向天才表达敬意,还要向他周围的其他程序员表达敬意。避免与他惊醒毫无建设性的争论。但是如果你有理有据,就要坚持你的观点。不要被他吓倒。与一位天才讨论技术问题,可以使你成为一名更好的程序员,知识要先学会如何不带情绪地进行讨论。如果你知道自己是正确的,那么可以寻求支持者,一起与他辩论。

    一定要留心,不要让自己变得傲慢无礼,也不要争强好胜。

 

6 牛仔

    牛仔是一种很糟糕的程序员,他会故意逃避艰苦的工作。他将到处找捷径。有些人将这类家伙错误地归类为“黑客”。从这个词的一般意义上来讲,他并不是黑客。“黑客”是编程高手们用来骄傲地形容英雄般的程序员的词语。

    牛仔会一头扎进代码里,做最小的工作来解决直接的问题。他并不关心这是否是一个非常好的解决方案,是否会损害代码的结构,或是否能满足未来的需求。

    牛仔急于完成每个任务,并转到去做下一个。如果他多少对程序有些了解,他就会把这叫做敏捷开发。这实际上只不过是懒惰。

 优点

     牛仔的代码可以运行,但并不是很优雅。牛仔们喜欢新的东西,但是很少进行深入的研究(这听起来像是一项艰苦的工作)。

缺点

    你将花费大量的时间,在牛仔身后做清理工作。他的身后可不是一个令人愉快的地方。牛仔的代码总是会需要在以后进行修复、重新编写或重新调整。他们只会运用有限的技术,并且没有任何真正的工程技能。

如果你是其中一员该怎么办

    学会如何以正确的感觉来快速编写代码。为你的工作而骄傲,在它上面多花些时间。承认你的缺点,并试着去改变。

如何跟他们打交道

    永远不要走进牛仔的房间;如果必须要和他们的代码打交道,那么将是一个DIY的灾难!要明白他们并不是居心不良,而是有点儿懒。要组织对他们的代码进行审查。让他们结对编程。(一个牛仔也许可以与一位卖力工作的程序员很好的协同工作;如果你想看刺激的争吵,那么就让他和规划者配对吧。)

 

7 规划者

    规划者对他们要做的事做太多的思考,以至于他在开始编写任何代码之前,项目早就过期了。

    这是真的,你必须先进行规划,并建立一个统一的设计,但是这个家伙会在自己周围编一个密不透风的茧,并在他们完成之前拒绝与外界进行任何接触。与此同时,他在周围的世界却不断地改变着。

    规划者受过良好的教育,进行大量的学习和阅读。Process Weenie是一种常见的规划者类型:他非常了解“正确的开发过程”,但是在满足截止日期或者完成任务方面非常差。(Process Weenie最终会成为中层管理人员,然后会被开除)。

优点

    他们确实会设计。他们也确实在思考。他们不会乱编写出没有经过深思熟虑的代码。

缺点 

    当规划者开始认真的工作的时候,就会出现“过度设计”的危险。他们很容易会创建出非常复杂的系统。规划者是“分析瘫痪”的主要原因——他们的开发集中于方法和建模,而不是圆形设计和解决方案的创建。规划者喜欢创建无数的文档,并且每隔一二小时就召开一次会议。

    他们把大量的时间花在思考上,而没有足够的时间来做事。他们懂得很多,但是这些知识不能从理论升华为实践。

如果你是其中一员该怎么办    

    预先创建细致的设计是很重要,但是可以考虑使用渐进的开发和原型设计方法,让你的设计得到验证。有时你会无法诉诸于设计,除非你真正开始实现它。只有那时你才能懂得所有的问题。

    试着在规划和行动之间建立一个更好的平衡。安慰你自己说话很长的时间进行设计,总比编写糟糕的代码要好——后者校正起来要难得多。 

如何跟他们打交道

    在时间上超前一些,同意关于规划者工作的所有关键点和截止时间。插入一个“设计完成”关键点;规划者会很高兴地看到这被当作一项重要的任务,而且会倍受鼓舞地按时完成他的设计工作。这通常就足以促使规划者立即投入行动。

    避免规划者开会。你会花一个小时的时间,来讨论如何决定会议的议程。

 

8 老前辈

     这类老家伙是老牌的资深的程序员。做好,听他回忆过去的那些美好时光,那时他使用的是打孔机,以及内存少到无法保留整数的加法运算结果的机器。

    老前辈要么对他仍在充实最喜爱的工作而感到非常幸福,要么对错过了无数次升职机会而十分痛苦。他们阅历丰富,知道所有的答案,并且不想再学习新的技术(他会告诉你已经没有什么新技术可学了;我们只不过是老瓶装新酒而已)。他们不愿意学习新的语言:“我不需要C++。有汇编语言就足够了,谢谢你们。”

    老前辈不会乐于遭受愚弄。他有些怪癖,而且很容易发怒。

优点

    他们已经编了很多年的程序,因此有着相当丰富的经验和智慧。老前辈拥有成熟的爱你吗方法。他已经知道哪些因素会造成优秀的代码或糟糕的代码,也知道如何避免常见的缺陷。

缺点

    老前辈不愿学习新技术。因为受够了那些名不副实的时髦理念,他对新事物的反应迟缓,而且会抵制改变。

    他们没有什么耐心,这要归功于多年公司环境的折磨。对于无数紧急的最后期限和不切实际的管理人员,他已经厌烦透了。

如果你是其中一员该怎么办

    不要对更年轻、更有激情的程序员太过苛求。你曾经和他们一样,而你的代码也曾经不是那么好,对吗?

如何跟这类人打交道

    他们根本不知道现在的时光有多宝贵,你们这些年轻的程序员!不要与老前辈混在一起,否则你就会知道他如何在软件工厂中生存了这么长的时间。要明智地选择你与他们之间的战斗。对他表示尊重,但是要把他们当作一位同时,而不是奉若神明。

    了解老前辈的动力所在。搞明白他编程是因为热爱这一行,还是他的职业生涯已穷途末路。

 

9 狂热者

     狂热者是经受了洗脑的皈依者,他盲目的认为所有大公司的东西都是最优秀的。十几岁的女孩子会崇拜摇滚歌星,而程序员则由他们的偶像。狂热者满怀激情,把自己当作义务的技术传道者。他会试着在所有分配给他的任务中都是用大公司的产品。

    狂热者追随大公司的产品,排斥任何其他的方法,并且很少知道其他可选的产品:“大公司产品线上当前不完美的任何东西,都肯定会在下一个版本中得到修正,我们必须立即进行升级。”

优点

    他对公司的产品极为熟悉,而且会基于这些产品做出真正优秀的设计。这种技术使他们有效率,但不一定是他的最高效率——其他不熟悉的方法也许更加有效。

缺点

    作为一名狂热者,他既不客观,也不实际。他会错过那些更好的非大公司的设计。更糟糕的是,他会不停地吹捧大公司的产品。

如果你是其中一员该怎么办

    没有人会期望你厌倦他所钟爱的大公司。了解它的技术,并了解如何部署这些技术,是很有价值的。但是不要成为技术的盲从者。要接纳不同的方法和新的思维方式。不要用高人一等的眼光来看待他们,也不要有偏见。

如何与这类人打交道

    不要陷入与狂热者进行哲学探讨的麻烦当中。不要试图解释你所喜欢的技术的优点——他们不会听的。注意:于这种家伙的对话,可能会把你也编程狂热者。他有传染性。

    除非你的项目处在至关重要的设计阶段,在这个阶段,要用一种清洗的没有偏见的眼光来看到问题域,并坚持对所有的实际方法进行全面的评估。记住:他也许是对的。

   如果你遇到了愚蠢的辩论,就用准备充分的、准确的、详细的信息,告诉他你的方法的优点,以及他的方法的缺点。

 

10 单线条程序员

    这是一种典型的家伙,他以技术卫生,呼吸的都是技术。这就是他的全部生命。他也许做梦时想的也是技术。

    单线条程序员具有明显的单向思维。如果让他们把工作都带回家,他回来的时候,就会设计并并编写好的整个系统,修正了所有的bug,并且对如何实现项目和其余部分指定了计划。在你吃饭之前,他就已经完成了所有的工作。

优点

    单线条程序员专心致志,非常坚定。他将确保项目能够正常运行,否则他会拼命地努力。他愿意去做大量的额外工作,而且当截止日期日益临近时,他确实很有用。

缺点

    他期望别人也想他那样的专心投入,一心一意,对那些部这样的仁表示反感。他最大的问题就是忽略一些事情,而且他总是与问题距离太近了。

如果你是其中一员该怎么办

    开始集邮,或者开始做类似的事情,以帮助你换换脑子。文武之道一张一弛。但是也许你对别的什么都不感兴趣。

如何与这类人打交道

    和这些家伙合作会非常棒。他们的热情是有传染性的,如果团队中由他们的加入,项目的推动非常快。但是别让他们接管工作。只要有半点机会,单线程序员就会把你的工作也做了!虽然这听起来很不错,但是以后你将不得不维护陌生的代码。这得不偿失。

    不要去担心他们没有私人生活,也不要被迫把所有的时间都花在项目上+有时最好的设计工具就是好好地睡一觉。

 

11 拖沓者

    拖沓者是一种不远工作的懒散的人。这种人很难发现,因为他已经学会如何让自己看起来很忙碌。他的“设计”是在电脑上玩游戏,他的“研究”是在网络上观看新款的汽车,而他的“实现”则是干私活。拖沓者会主动避免热河任务分配。(噢,我太忙了,没有时间去做那个)

    还有一种跟不容易发现的拖沓者,他只会做自己想做的事,或者做一点他认为应该做的事,而不是他必须做的事。虽然总是在不停地工作,但是他从来也做不完。

    拖沓者知道如何找乐子。他频繁地参加派对,你经常能看到他倒在桌子下面呼呼大睡。他大部分都在喝咖啡,除了午餐时间外,那时你会发现他在酒吧。

    这种家伙实在玩火自焚。总有一天,过多的失败项目会浇灭他的工作热情。

优点

    至少,他知道如何找乐子。

缺点

    拖沓者显然是个负担。很难证明他在偷懒——一些困难的问题确实需要花些时间来解决。某个程序员可能并不懒惰,而只是缺乏快速解决问题的足够技巧。

如果你是其中一员你该怎么办

    需要职业精神,开始在工作中投入精力吧。要不,就学着忍受犯罪感吧。   

如果跟这类人打交道

    最好不要抱怨拖沓者——你自己也有缺点。他很快就会得到报应的。

    想办法证明你在有效地工作,并证明工作的拖延是拖沓者的错。也许规律地记下你的工作是个好办法。一些明确的截止日子通常就会让拖沓者紧张起来。不要编写属于他的那部分代码,即使是在绝望的情况下。否则,下次他还会期望你这么做。

    不要折磨自己,试着在休息的时候去找些乐子吧。也许你有时应该和他们一起去逛逛酒吧。

 

12 勉强的团队领导

     这是一种组织上的典型:以为开发人员被提拔为团队领导,原因只是因为对他而言在技术上已经没有再升职的余地了。

    你可以很明显地看到,他在这个职位上很不自在。他没有明确的领导技巧,却在竭力维持。他是一位程序员,他愿意编程。这种家伙天生就不是团队的组织者或管理者,而且他的沟通能力很差。

    大多数的程序员的领导能力都很差。真正杰出的软件团队领导没有几个,这需要一套技巧,即包括技术方面的,也包括组织方面。

    勉强的团队领导通常性格温和,而且优柔寡断——他这样怎么能说服别人来做某项工作?他在开发团队和管理层之间两面受气,总是因为质量不高的软件而受到责备。他脸上的痛苦表情越来越多,知道他最终崩溃。

优点

    勉强的团队领导对程序员的境遇有着真切的同情——他也曾经有过这样的经历,而且现在希望重返当年。他往往国语愿意承担起软件交付延迟的责任,以保护程序员们不被管理层挑毛病。就像他不适合很擅长分配工作一样,他也不擅长分配责任。

缺点

    如果团队的领导师徒编写代码,事情会变得很糟糕。他永远不会有充足的时间来足够认真地编写、设计或是测试代码。他很天真地安排自己在一天中既要做编程又要做管理。结果,他一件也做不好,所以这位勉强的团队领导在办公室里呆的时间越来越长,以试图赶上进度。他不能很好地进行组织,不能向管理层解释情况,也不能恰当地管理他的团队成员。

 如果你是其中一员该怎么办

    接受培训,要快。

    如果你在这个职位做得不开心,那么就试着调动一下吧。这不是成人失败,做你憎恨并且不擅长的工作,是对生命的浪费,而且毫无意义。不是每个人都具有管理能力和热情。换到你真正擅长的并且热爱的岗位上去。

    如果你喜欢挑战艰苦的任务,那么就试着在你的公司里解决升职的途径吧。让公司意识到管理职位是高级研发人员的下一个晋升职位。很少有程序员成为得体的管理人员,他们大脑不适合做这项工作。

如何与这类人打交道

   要有同情心,尽一切可能去帮助团队领导。按时向他报告,并尽量按计划完成工作。如果你有可能超出截止日期,要尽早让你的团队领导知晓,以便他可以对此早做准备。

 

二 理想程序员

     从这些混乱的分类中可以看出,我们显然是不同寻常的一类人。这些代码猴子中,我们应该渴望成为哪一种呢?哪种代码猴子的血统能创造出理想的“程序员”呢?

    不幸的是,在显示的世界中,并不存在完美的程序员——这种动物知识一个都是传说。因此,这是一种学术性的问题。不过,找到答案会让我们明白努力的方向。

    传说中理想的程序员具有以下品质:

政治家(Politician)

    他必须很老练,能够应付这些怪异代码猴子的小过失,能够应付越来越多居住在软件工厂中的人——管理人员、测试人员、支持人员、客户、用户,等等、

亲切(Relational) 

    他可以愉快地与别人合作。他为自己的代码划定范围,并且为了大家的共同利益,不惜干脏话累活。他拥有良好的沟通技巧,既善于演讲,也善于聆听。

艺术感(Artistic)   

    他可以设计出优雅的解决方案,并且可以欣赏高品质实现所具有的美感。

技术天才(Technical Genius)

    他编写的代码可靠耐用。他拥有良好的技术能力,并且明白如何以及何时应用它们。

    再看一遍这些品质,它们清楚地描述了我们应该成为怎么样的程序员。如果你还没有意识到怎么做,那么让我把他拼写出来:理想的程序员是prat。对,这就是我们渴望实现的目标。   

 

 

 

你可能感兴趣的:(经验,程序人生)