前端时间看到Kaneboy的随笔, 提到灵感之源的事, 实在是让人看了心里不好受. 前端时间又刚好看完My job went to India, 也觉得是时候整理一下自己的想法了, 于是大家就听linkcd小小胡扯一下吧


关于定位

首先, 请问自己一个问题:我是谁?相信绝大多数人会回答:我是一名_____工程师.(空白处填上.Net/Java/C++等等). 但是请注意, 除了少数从事计算机教育/科研的人之外, 我们绝大数(无论是普通Employee还是Boss, 但本文只针对Employee而谈)都是在为商业机构工作, 所以我们中大多数其实可以算作是商业人员 (Business people). 简单的逻辑关系就是 人->商业人员->IT业职员(软件工程师).

对于Business People, Wikipedia是这样解释的:A business person is a generic term for someone who is employed at a profit-oriented enterprise.

请注意Profit-Oriented这个词: 商业组织的目的就是创造价值并获得利润, 组织中每一个人所作的工作, 都是为这个目的而服务的.

同意? 很好, 我们继续往下看第二个问题: 我们身上甚么能力是我们的雇主最看重的呢? 或者说,甚么东西是考察一名软件工程师是否称职的重要因素呢?

“自然是技术能力的高低, 水平越高, 雇主自然越愿意聘请你. “ 如果你的回答是这样, 那么请回顾第一个问题的结论: 每一名软件工程师首先是一名商业人员, 而每一名商业人员所效力的组织都有着很明确的Goal: Profit!

因此, 你的老板之所以雇用你, 每个月付你的高额的薪水, 只为了一个目的: 让你为他的组织创造profit.于是我们得到第二个问题的答案: 能否为组织创造profit,能创造多大的profit, 是考察一个employee的重要标准.

哦, 当然, 多数时候, 技术能力和创造profit的能力是一致的:技术能力越高, 为组织获取更多profit的几率也越大, 得到老板赏识和提升的机会也就越多.

但是(天哪,我恨这个但是), 也有可能出现技术能力和profit making相矛盾的情况:

最简单的例子, 某DBA, 技术能力很强, 但是缺乏和客户的合作精神, 导致公司损失客户(也就是损失profit), 他的下场自然可想而知. -- 高technical skill但是低profit making.

再来一个夸张的例子: Sale拿到一个project,价值$30k, 该项目可以用实现完美Object Oriented的J2EE实现, 也可以用”ugly”的asp来完成. 现在有2个PM先后看过了项目需求, PM Fred(技术能力最强的PM)建议把项目交给他, 他准备组建一直全是programming guru的”梦之队”, 用3个月完成一个完美的OO实现的系统, 他为此作出的budget是20k. PM Bob技术没那么好, 也不懂啥叫OO Design, 他准备找几个刚毕业的学生来用ASP做这个项目,当然我们已经可以想象Bob团队做出的东西内部肯定难看的要命了, 但好处在于, Bob的预算只需要10k.

假设Fred和Bob做出的系统都release给用户, 由于Fred梦之队的专家们采用了业内最好的技术, 他们的系统压根没有甚么bug, 遇到需求变更也轻松解决, 于是后期维护的费用几乎是0$. 但是Bob就没那么幸运了, 他的系统后期花在bug fixing和变更上的费用是$3k, 同时因为项目交付延期, 造成用户不满, 造成间接损失(公司信誉)$2k.

你看, Fred完成的任务比Bob漂亮多了, 老板肯定会任用Fred, 不是吗?

但是, 等等, 公司老板不是技术出身, 他可不懂Fred用的OO是多么先进, Bob做出的系统内部是多么的不堪入目, 他只能(也只会)注意这样的公式:

Fred team最后的利润是 收入30k - 开发费用20k – 维护0k = 最终利润10k.
Bob team最后的利润是 收入30k – 开发费用10k – 维护费用3k – 间接损失2k = 最终利润15k.

现在, 再猜猜我们亲爱的老板最终会任用Fred还任用Bob呢?

哦, 我知道你现在想说甚么. 当然, 当然, 我们聪明的Fred当然也可以采用Bob的方法, 他最后也能为公司挣到15k(甚至更多). 但是在这个例子里, 我们可以清楚看到最好的technical skill并不能为公司创造最多的profit. Fred要想成功, 他似乎更需要依赖的是财务预算能力和商业决断能力, 而不是懂得多少个Design Pattern.

因此, Technical skill和profit making之间绝对不是等号关系. 事实上, profit making始终是第一原则, Technical skill可能和profit making一致也可能不一致, 但是它自始自终都要服从profit making.

不扯远了, 回到我们自己身上. 那么, 我们这些软件工程师, 要怎样完善自己, 才能在职业道路上走的更顺利呢? 我想我们可以从前面的逻辑关系: 人->商业人员->IT业职员(软件工程师)一个一个来看.

(To be continuing…)