职业规划中的“我想要”和“我需要”
最近听到一些年轻的同事纷纷想转职,想从程序员转做业务分析师。尤其是年轻的ZY也有这样想法,让我感到有点触动。很多时候,尤其是年轻的时候,我们分不清“我想要”和“我需要”。在一句“我想要做BA”的背后,需要的是什么?
人际交往能力
据说程序员是一个死板孤僻有人际交往障碍的族群。因为不愿成为头上长草脚下生根的孤老程序员,所以我想要做BA。
但是,没有人阻止你在写好程序的同时练习人际交往(尤其是在ThoughtWorks这样的公司)。实际上,现代商业软件开发根本没有什么火箭科学,作为一个程序员大部分时间本身就是在进行人际交往。你能把设计思路讲得明明白白让队友信服吗?你能列出各种实现选择的优劣说服客户不要做愚蠢的选择吗?你能面对五十个同事做一次落落大方的技术演讲让大家欢声笑语同时学到知识吗?练习人际交往的机会俯拾皆是,不要等到自己被冠以“业务分析师”的名头才把脑袋从屏幕前移开。
对商业的了解
每天给客户写的代码为什么值那么多钱?为了理解客户的商业运作,所以我想要做BA。
同样,没有人阻止你去了解。尤其是这个网络时代,让学习这些知识变得前所未有的简单。你只要订阅 Economist 和 McKinsey Quarterly 的RSS,每天花两个小时读完所有的更新(并且用 1.HourFor.Me 来监督自己),很快你就会发现:你能跟上各种“高端的”商业对话。这些文章里会有不时提到的引用书目,到豆瓣加上这些书,每周一本,一年读完50本,你对商业的了解会超过你的客户——他所知道的大多只与某个行业相关,而你学到的将是全景。
请注意,我说的是简单,不是容易。每天坚持两个小时做一件事、每周读完一本书,这永远不会容易。戴上“业务分析师”的名头也不会让这件事变得容易。
交互设计能力
总是写这些枯燥的代码太没意思了。为了 像小熊那样 画出酷炫的手绘,所以我想要做BA。
买 这本书 ,开始练习素描。每天一小时,两个月以后你就能画得 有模有样 。然后订阅 Smashing Magazine 的RSS,到网上找手绘和简笔画素材,不断练习。同样,你并不需要一个名头、一个工作才能学习这些。
管理能力
我不想总是跟着别人屁股后面,我想别人都听我的,所以我想要做PM(为此先做BA,因为据说BA更容易变成PM)。
记得在决定加入ThoughtWorks的那一天,老师对我说:“leadership”和“management”是不同的东西。要别人跟从你,你需要的是leadership,而不是一个manager的头衔。所以还是这句话:不要等待某个头衔,现在就开始练习你的leadership。想想你的代码会被别人如何使用,想想你开发的软件会被如何部署,在所有人都妥协的时候鼓励团队坚持写测试和重构,这些都是leadership的表现形式。郑大大 展现leadership的方式很简单:“在我的项目里不容忍烂代码。”很简单,但一点也不容易,也许你可以问问郑大大是怎么做的。
更少的压力/更多的钱
为什么每次出bug都要我来修?为什么我的薪水不够买房?我要做PM,我要出人头地,我要有钱⋯⋯
你知道我会说什么。去变得更强,然后来踢我的屁股吧。
ThoughtWorks的真实故事
也许在如今的某些大团队中,“多能工化”已经成了一个传说。在我的第一个ThoughtWorks项目中,Perryn Fowler 既是架构师又是tech lead还是PM有时兼任BA并且每天写程序。当他满脸怒气地对我说“我的项目里不允许有没测试的代码”时,我就认定:ThoughtWorks的leadership就应该是这样的——他让你感到你应该听他的,并且如果你不听,他会一脚踢在你屁股上然后自己搞定所有事。
郑大大现在的项目有同样的气味。LY作为BA+PM进入,我从第一天开始就告诉他:你要写代码,你要了解所有事,如果出了问题你就顶上。ZQ作为QA进入,每天参加code review,并且学着写Chef脚本。从项目管理的角度,我希望所有人能做所有事这样项目就不会有瓶颈;从人的角度,我不想看到“ThoughtWorks PM”、“ThoughtWorks QA”,我想看到一个个Perryn的复刻,随时准备踢别人屁股并且搞定任何事。
然而,关键在于⋯⋯
正如我一再强调的,所有这些能力,都不需要得到一个专门的职位或者头衔才能开始获得。因为它们有一个共同的特点:它们都基于人类语言。
软件开发从根本上来说,是将人类可理解的连续的物理世界,以图灵机可计算的方式建模为离散的数字模型的过程。而整个软件行业的各种行为中,只有编程(即:以图灵机可计算的方式建模)这一行为不是基于人类语言,而是基于机器语言的。换句话说,即使不戴BA/PM的帽子,你永远可以和那些只懂人类语言的麻瓜们练习其他能力;一旦你脱下了程序员这顶帽子,你将没有机会练习严肃的编程。这一根本性的分野决定了一个事实:程序员可以转向其他职位,而其他职位无法转成程序员——所有post-technical的人,无论多么努力保持自己的技术水平,最多也只能停留在转职之前的水准。
因为这是一条不归路,所以在说“我想要做⋯⋯”之前请想清楚:离开编程的键盘,你所追求的可能只是一种很简单(尽管不容易)就能学到的能力;但与机器对话——整个软件开发的根本——的能力,当你发现自己需要的时候,就再也找不回来了。