程序员,你的路好走吗?(二)

原载:http://blog.csdn.net/netcasper/article/details/79615

有效地贯彻任何一种基本战略,通常都需全力以赴。
——《竞争战略

继第一章提出五力模型之后,波特在第二章提出三种基本战略——总成本领先战略、标歧立异战略(differentiation)、目标集聚战略 [1]

没有想出在软件开发上有什么概念可以与成本相对应的,先不考虑第一个战略。后两个战略很好理解,用中国话说就是“另辟蹊径”和“术业有专攻”。

拿我自己来说吧,刚进入公司的时候什么都不懂,人家在拼命赶进度,我也帮不上忙。先是看看文档,读读教科书,百无聊赖之际机会终于来了,公司希望支持调试优化过的代码,这部分工作理论性不强,多数都是琐碎的技术细节,正好适合我这样初来乍到的人熟悉上手。可以说优化过的代码极难调试,也没有什么成型的解决方案,因此对我们的要求也不高,先把框架搭起来,能实现哪些功能就先做着,最强的要求就是调试选项不能影响优化代码的生成,并且生成的代码必须和不加调试选项时完全一样。就这样,在大家的宽容下,我一边看论文啃教科书熟悉基础理论,一边接任务写代码了解特定实现,半年之后可以独立完成分析、实现,一年之后就开始凭一己之力重写整个支持调试的框架。虽说到目前为止支持的功能有限,效果也不理想,但是对我个人来说,获得的东西实在太多了。毫不夸张地说,现在我完全可以胜任关于优化的任务,实际上,我曾经修改过一个模块的算法(与调试支持无关),这个模块被认为是我们的编译器里最复杂的模块之一。

这是一种另辟蹊径,没有从优化入手,而是从调试开始。实际上这是公司为培养新员工而另辟蹊径,也只有在其他人的宽容下才得以进行,有一定的局限性,不易模仿。但是,当我跨过第一道门坎之后,已经可以凭借自己的能力和经验来选择发展路线了。继续做调试,或者转去做优化都是不错的选择,不过我有了个朦胧的想法,打算再另辟蹊径,不过这一次就不能指望别人的宽容了,必须首先说服别人,我要做的工作有多么重要,然后踏踏实实的把东西做出来。如果能够成功地给别人留下一个“说到做到的另辟蹊径者”的形象,那么以后另辟蹊径时,阻力就会小很多。

再说说“术业有专攻”。除了一次被拉壮丁去修改模块算法,我一直在做支持调试优化代码的工作,前前后后一年多时间。随着功能不断增多,局势发生了微妙的变化。调试不能破坏优化,但优化也不能破坏已经取得了的调试成果,为此还专门做了一套测试集。如果有些同事对支持调试不感兴趣,或者没时间做深入的了解,他们在自己的任务接近完成的时候,会邀请像我这样的人对他们的工作做一番检查(review),确保不会破坏什么。当然,测试集是最后一道关卡,如果测试通不过,也要找我们帮忙调试。这样,我就在一个相对狭窄的领域里树立了威信、建立起壁垒,从而减少了竞争威胁。

波特在这一章的末尾提到,任何战略都是有风险的,详细内容这里不再赘述,总结成八个字——审时度势、与时俱进。


[1] 说实话,这三个词翻译得有点别扭。

程序员,你的路好走吗?(一)

原载:http://blog.csdn.net/netcasper/article/details/77545

形成竞争战略的实质就是将一个公司与其环境建立联系。
——《竞争战略

《竞争战略》第一章名为“产业结构分析”,指出“一个产业内部的竞争状态取决于五种基本竞争作用力”,即“进入威胁、替代威胁、买方侃价能力、卖方侃价能力、现有竞争对手的竞争”。显然,直接套用是套不上了,不过,倒是可以借鉴一下波特的具体分析过程。

进入壁垒和退出壁垒

这两个壁垒的高低决定了职位的竞争激烈程度。进入壁垒越低,潜在进入者选择这个职位的可能性越大,竞争越激烈。这个道理很直观,就拿我从事的编译器开发为例,通常情况下编译理论被认为是计算机科学里最晦涩艰深的学科之一,大多数人学过就忘了,唯一记得的就是难学。这样的话,即使有从事这方面工作的机会,也会选择放弃。那是不是进入壁垒高了竞争就不那么激烈呢?也不是,还要看退出壁垒。想想看,我费了那么大劲入了门,谁要是让我改行我还不得好好寻思寻思啊,总不能让前面的心血白白浪费了,怎么也得把投资回收的差不多啊。在我看来,那些偶然进入编译器开发领域的人,要么知难而退、早早退出,要么越陷越深,不忍放弃;而真正促使竞争激烈的,是那些有意识地进入这个领域接受挑战的高手、天才。由于人才难得,做这一行可以获得相对高薪;可是高手云集,要取得成就,有所突破就很难,容易产生挫折感,“既生瑜,何生亮”是最贴切的描述。

其实壁垒不仅仅是技术上的,还包括感情上的,尤其是退出壁垒,很多人也确实是这么想的,想想都做了这么久了,有了感情了,索性一直做下去,不再换了吧。而转换成本是进入壁垒中的一个重要因素,我们可以从两个方面分析它,一是跳槽后做同样性质的工作,虽说工作内容在理论上是基本相同的,但形式上却可能是完全不同的,这时就要花费一定的力气去熟悉它;另一方面,老板找人替换我的代价也可以看作是转换成本,比如提出“软件蓝领”概念的人其目的就是想获得较低的转换成本。显然,转换成本越低,竞争也就越激烈。

下图显示了进入壁垒与退出壁垒的关系

在意识到自己的强项与弱项以及处在什么样的环境之后,就可以给自己一个清晰的定位。进而,可以采取相应的行动影响壁垒,使其向着能够提升竞争力的方向发展。最后一点是必须关注整个行业的变化,因为行业的变化会引起壁垒的变化,进而影响我们的相对竞争能力。

以我自己为例。

2003年毕业后一直从事编译器开发工作,属于入门级选手。当初选择这个方向是因为确实对它感兴趣,很想知道编译器这个程序员最重要的工具都做了哪些事情,如何做的。在国内,做编译器的厂家不多,而以编译为研究方向的实验室在大学中也是凤毛麟角,因此,新入行者(包括我在内)相对于编译领域来说多数是白纸一张。所以,进入该行业的壁垒并不是对编译理论的掌握程度(技术壁垒),而是取决于转换成本。那些能够使得招聘单位转换成本尽可能小的人必然成为优先选择对象。

既然编译领域机会少,难度大,属于进入壁垒高的行业,自然选择这一行业的人也就少。我相信编译领域也属于退出壁垒比较高的行业,因为有太多的人不十分了解编译却仍然成为优秀的程序员,可见编译知识的应用领域不算广泛。双高造成了行业内部竞争十分激烈,使我处于两难境地,一方面我很喜欢这种工作,另一方面又很难出人头地。

到这里不得不提一下读《竞争战略》的最大感受,就是所有分析只是为了唯一一个目标——获得利润。十分理性,也十分冷酷。我想我也不得不做出“鱼与熊掌”的选择,只是现在还不知道该放下哪个好。说实话我觉得出人头地的想法有点虚荣,但克服它又很难。至少得做出点能获得大家认可的东西吧。

当然,如果更深入一点,还是会发现能够扬长避短的方向,只是需要一点点耐心和洞察力。不过这个还是留到以后再说吧,敬请关注。