我是程序员,我自豪
Patrick McKenzie 在2011年写了《不要自称程序员》这篇文章,我写的这篇算是一个(相当晚的)回应。我觉得他说的有些还是有道理,假设一个人在职业发展初期能按着他说的做的话,没准还真能有点帮助。但假如是二十岁的我的话,我真怀疑自己能用他说的那些提高自己。
所以下面我主要说说我不能同意的那部分,我建议大家往下看之前先看看 Patrick 的文章,这样就不会错过什么。(译注:《不要自称程序员》这篇译文是摘选翻译,并非全文翻译。)
实际上也不能说是不同意他的观点,更加准确的是:“我们的阅历不同”而已。我们站在不同的职业发展轨迹上,所得到的经验当然不同:Patrick McKenzie 是“bingo card creator”的老板(一个小企业),同时是一个成功的咨询师;而我则是一个“亿”级别公司的架构师。我们的共性是都和”纯写程序“有些偏离了,只是我 们偏离的方向不同。
你想为什么样的公司工作?
Patrick McKenzie 说90%的工作都和实现一个内部差旅报告表一样无聊,根本没有机会写那些能给用户使用的程序。并且你还得接受这个现实。可是真是90%么?Spolsky说可能是80%,不过那也够恐怖的了,Patrick 还解释了为什么做一个内部程序员(in-house programmers)糟透了:
- 没有商业理由去改善那种“勉强够用”的内部软件。“请忘了引以为豪的工艺,否则你就要会制造让人尴尬的垃圾。”
- 在公司里面,工作的内容和公司盈利更紧密,程序员也就更容易获得尊重。除了少数一些纯技术公司,程序员是不可能最终提升为公司的CEO。无论对VIACOM(一个跨国传媒集团)来说网络通畅有多重要,真正到了分工位的时候,内部程序员还是得三个人挤一起桌子坐。
McKensize 和Spolsky 都同意上面的说法,同时Spolsky认为:程序员应应该到一家软件公司工作,那里的文化会使一个程序员茁壮成长。而McKenzie则意见与他相左,他认为程序员应该“走出去”。
所以目前的问题变成了程序员个人的喜好问题:你想到软件公司做白领,还是自己接活。但是别急,80-90%的人都不能得到一份软件公司的工作。这不是你想不想进去工作的问题,而是能不能的问题。
然而这里我就不同意了,即使只有10-20%的程序员能在软件公司找到工作(如果数据是正确的),即使这部分程序员是最棒的那部分McKenzie又说:
“你们经常以一些自己身边的人为根据来预测可能的竞争对手的实力,而这经常让你高估了它们。有很多获得了高级工程师职位的人都不能写好一段fizibuzz的代码”。
所以如果大部分的竞争者实力都不济的情况下,你很可能进入到那前10-20%的行列,就像我毕业时候的大部分毕业生一样。所以我宁愿相信为一个公司工作还是以项目为单位的软件开发是一种个人喜好的选择。那么下面我们就说说McKenzie给在软件公司工作的人的建议。
如何进行自我定位
McKenzie的一个建议是:
“不要将自己定位成一个程序员。这里的程序员和那些身价很高,写着各种看不懂的词句的诗人有差不多的意思。相反,应该将自己定位成能够为雇主增加收入或者减少投入的工程师。”
不错,有时候内部程序员会花很多的时间写出一堆令人看不懂的东西,至少在那些非技术的 MBA 眼里是这样的。
然而对我来说,我很喜欢那种能写出让人看不懂的东西,但是对别人的工作时有意义的程序员。
McKenzie认为软件公司招聘程序员和一般的公司招聘没有什么不同。一个例子是:在Google,一个写后台记账程序的程序员——据说 Google 97% 的账目都使用该程序——现在已经成为一名风险投资人了。也就是说他是通过和“盈利中心”靠的比较近发家致富的,而不是一般意义上的什么技术。
我相信这个例子的主人公是来自NSNA空气动力实验室的Ron Garret博士。你能相信Google雇用他是因为他在该实验室的时候增加了营收或者减少了开支么?(顺便说一下,据说Ron Garret并不喜欢那份写记账程序的工作,他买了一些Google的股票期权之后就辞职了。)
那么那个记账程序里有没有什么特别的技术?Ron Garret说:
”我最终去写了信用卡消费和账户管理系统,这一点也不简单,幸运的是,我在来 Google之前学会计算机安全以及密码学。所以对于这个工作,我恰巧十分在行。在我设计的系统中,即使一个恶意用户得到了root权限,他也不能造成太 大的危害。假设他们还在使用我写的系统的话,我可以非常自负的说,我在那里存得信用卡信息是不可能丢的。“
在我听来,他的技术知识和编程能力才使他成功的写出这样一个”不会被偷“的系统,而这里所谓的”不会被偷“的系统似乎既没有减少了Google的投入,增加Google的产出。
所以如果我要投一份芯片工程师的求职简历,我会强调自己在转换固定函数交换器和可编程处理器中的技术角色,而不是我之前的什么管理岗位。(我认为之后的管理岗位是由于之前的努力的技术工作而来,管理了什么是虚的,真正干得活才是实打实的)。
跳槽
“同事和老板不是朋友,你会花很多时间和同事相处,你也许会和他们中的一些成为好朋友。但是一般情况下,离职之后你会很快忘了他们。
你的老板会做一些你的朋友永远不会做的事情:例如跟你谈降工资,或者加班。你的同事还会殷勤的介绍各种你讨厌的东西。“
确实有一些关于同事并不是朋友的潜规则。但我觉得这个说法和他的根据有点循环论证的意味。同事之所以不能成为朋友,是因为你会离职。但是你为什么会离职呢。
所以我不同意这个潜规则。我在一家公司工作超过12年,很多一部分原因是我跟我的同事非常要好。虽然最终我跳槽了,但那是当工资涨幅远远大于10% 的时候我才会考虑的事情。如果经常因为小的晋升或者工资涨幅而跳槽,那么你不可能熟悉你的同事以及你所要做的工作。你可能对如何找工作非常有见地,也对市 场上需要什么样的人非常敏感,但你并不会特别熟悉你的雇主,你会很快和雇主达成一致,进入工作状态。但是正好比一个消耗品一样,你也会很快消耗完自己的价 值,很快离开。
相反如果你能在一个职位上坚持下去(只要那个职位的环境还算有趣,并且能时不时的提升),你和周围人的关系也就能更加紧密,同时你也能更有远见,从而学到平时不可能学到的东西。
以我为例:我大部分的知识都是来自ASIC的黑客同事们那。他们之所以愿意和我一起工作,是因为长期工作而来的默契。要知道达到融洽无间的工作关系相当难得,需要相当长时间的磨合。
顺便说一句,如果你能够在一个地方工作够长的时间,在雇主眼中你的价值就会自然而然的升高:即使不用跳槽你也能获得相应的提升(职位上或者是薪资 上)。你的薪资会高于那些具有同样经验的新员工,这时已经没有必要更换工作了。这种方式和通过更换大量工作而最终成为咨询师的方法具有异曲同工之妙。
不管哪种方式,你都能成功。我这里没有关于哪种工作方式更有效的统计数据。但是我认为一段时间内固定在一个地方工作更加有趣一些。如果不是这样我不可能收获到现在这么多的挚友。
这世上之事失败的居多,成功的为少。你不能指望一个职业发展计划就能让你获得梦想的职位或者一大笔钱。你需要付出很多努力,除此之外还要付出还有很 多你所不知道的东西。你能确定的只是你的计划给你生活方式带来的改变。而你选择的生活方式又决定了你能认识什么样的人,拥有什么类型的关系-这比是否能够 达成最终的目标更具有可预期性。
McKenzie关于老板的观点我十分赞同。确实有一些老板非常的“周扒皮”还假模假式的和你做朋友。这个时候你就应该正当的捍卫自己的权利了。
如何衡量股权
McKenzie说不要太看重股权,但没有过多阐述。这里我想说说股票期权,比实际的股权还差劲的东西,也是我曾经唯一获得的东西。
和上面提到的一样,我的观点是一切都要从长远出发。在12年中,我的东家价值翻了十倍。可是它目前仍然是一个私有公司-我的期权毫无用处。
从长远看,股票期权更好,或者更糟。
说它更糟,是因为通常在你离职的时候你根本买不起那些股票,或者无法承担投资股票的风险。当一个公司在存活下来,开始进入稳定期,你可能开始厌烦自 己负责的工作,想套现离开。这个时候的股票期权会成为束缚。尤其在进行晋升谈判的时候,你手里的期权会成为公司的筹码–他们知道你无法辞职。
也就是说股票期权成为了一种债务。
相反,如果一个公司进入成熟的阶段,雇员们又会低估他们的股票–已经这么贵了,还可能再涨么?尤其是已经翻了三四倍之后,这种想法更加自然。但你要 知道你获得的不是百分之几的数字,而是实实在在的美元。一个每股100美元的股票涨了20%到了120每股,意味着你一股赚了20美元,而一个每股5美元 的股票即使涨了100%到了15块一股,你也只是每股赚了10美元。所以一个成熟的涨势的公司股票要比那些年轻公司的便宜股票更具有投资价值–你更可能因 此而一夜暴富。
结果是人们总是在公司初期的时候高估,而在随后的时间低估。注意如果你没有打算在一个公司工作超过三年的话,股票期权会成为你的“债务”,因为它会让你更难辞职。
在创业公司工作
McKenzie列出一个许多不到再创业型公司工作的理由。例如工作的满意程度,在大型公司里面你能接触到更多有意思的事情。但是我要说至少有一 点,是大公司和创业公司比不了的。大型公司一般没有什么职位上的空缺,事实上它可能根本不会注意到职位的空缺也不会去解决。通俗点讲就是大公司一个萝卜一 个坑,你进来工作就是到一个坑里面去,公司不会挖新的坑了。相反创业公司几乎无时不在处于缺人手的状态,因此,你可以根据需要自己挖坑,还可以同时占多个 坑。也就是说你可以承担更多的责任。在有些公司,你要和多个人同时竞争才能把事情做成。相反在一个创业公司,你只管做你想做的事情,因为大家自己忙还忙不 过来,根本没有时间和你竞争同一件事。
随着公司变得越来越大,能够做你想做的事情变得越来越难。创业公司里面,程序员都是游牧民族,哪有草就去那里。等到了大公司里面游牧进化成固定城邦,程序员也有了身份证,你想看看其他部门的代码都是需要审批的。
我这里不是建议要到创业公司里面去。相反如果你是一个年龄比较大的程序员,喜欢比较成熟的流程,那么在一个家大公司里面工作可能更适合你。
职业选择对人生幸福感的影响
“每当一天结束之后,你今天是否幸福并不完全取决于你的职业。”
一方面我完全同意这句话。不管工作内容如何,这只是一个工作而已。并且我注意到如果我过分强调工作的重要性之时,我的生产力反而降低了。合理的方式是:回到家就别像白天那么拼命了。
另一方面,我们确实花了一些时间在工作上。这儿的问题是:工作和生活应该如何区分(平衡)呢?这里我不同意在区分开工作和生活的过程中将同事和一般的朋友分开的做法。一旦离开公司就和同事断掉联系完全没有必要。
总结
当我介绍我自己的时候,我常自称为程序员(即使我之前的工作主要负责芯片架构还是管理),因为我靠写程序赚钱,而不是单纯的因为在说到”程序员“这个词的时候感到强烈的自豪。我认为程序员是一个很好的职业,并且对我这样的人来说很合适。
相反的,如果你只是将写程序作为职业起点,从而可以最终转成其他类型的职业(例如管理者),那么你真的不能称作程序员。这种方法对我来说不可理解:你还不如去读一个MBA呢。当然这个路线对有些人也许是适合的,因为有些MBA需要一些业界工作经历之后才会录取你。
所以关键在于选择一个适合自己的路线,并且一直坚持下来,最终你会成功。对于像我所在的公司来说,如果想要获得一个写程序的职位,但却不认同自己是程序员的话,恐怕不会给面试官什么好印象。
最后强调一下McKenzie文章里我十分认同的观点:沟通能力很重要。我推荐你去读一读。