分类目录归档:My Thoughts

I will always think, even though I am never right.

读《第三帝国的兴亡》

算是近年来耗时最长的一本书了,从14年到现在,断断续续看了两年才看完。

不得不说,作为一个流浪汉、半瓶醋的艺术家、退伍的士兵,希特勒具有的视野、口才以及行动力都是惊人的,这些特质综合到一个人身上,使他成为天才般的人物,而恶魔和天才只是一线之隔。

他的征服欲望和对犹太人根深蒂固的偏见是他的思想基础,这个基础是不人道的,因此他也注定了即使成功也是短暂的。

但是从他发迹到灭亡的过程,可以看到,一个有思想(虽然是邪恶的),有鼓动力,有行动力,同时又有付诸行动的策略的人,是如何能够以一己之力和全世界较量,甚至差点成功的。

首先是思想的号召力(再一次说明,它是邪恶的),和共产主义运动不同,希特勒的国家社会主义理论是一个个人理论,来自于他也止于他。但他据此发展了自己的党,也能在民主投票中,得到德国三分之一公民的支持。

而他的让人惊异的演讲才能,使他成为真正的“现实扭曲力场”的鼻祖,他在公众面前可以滔滔不绝声情并茂连续做几个小时的演讲,他可以让同样独霸一方的墨索里尼在他面前毕恭毕敬听几个小时不发一言……他的巧舌如簧使得那些贵族出身的陆军将领们最终甘愿听从他的指挥,甚至在一次次被迫违背自己内心的情况下依然不改。

然后是他的行动力,和那些在希特勒执政的岁月里,孜孜不倦地准备推翻他,却在长达六年的时间里一次行动也没组织过(最后在德国即将奔溃的时候终于组织了一次政变,却完全没有精心组织的样子,轻易被扑灭了)的异见者不同,希特勒基本上一直在致力于将他的理论(他的那本自传)付诸实现,期间的障碍,通过外交威慑、军事行动一一铲平,而且很难得的,能够克制自己(至少在前期)的心理障碍,暂时违背自己的理论,寻求曲线救国达到自己的终极目标。

而这就涉及到他的策略,从小的诡计一直到克服自己的心理障碍(对于苏联恨之入骨,却为了避免前期的双线作战,甘愿冒被国人反对的风险和苏联结盟),至少在大战的前期,他几乎在只凭心理战的情况下就取得了欧洲大陆近半土地的支配权。

当然了,成也萧何败萧何。前期轻易得到的巨大胜利冲昏了他的头脑,在战场上稍微出现挫折的时候,他没有了之前的狡猾,变得斤斤计较,后期的战争,在他一次次的“死守阵地”的决策中,一次次失利,一点点退却,而他却在苏联打到家门口,包围了柏林的时候,还在想着反攻。偏执和赌博成就了他,也毁了他。

商业和技术的新可能

上周六参加了极客公园上海的活动——奇点·创新者峰会 2016

这几年没有像之前那样常态性地关注创业圈和创业的资讯,但是断断续续刷feedly的订阅内容,也知道极客公园这几年做的东西,因此前几天看到fenny的公众号推荐,就毫不犹豫买了票。

整个活动没有让我失望。总体来说,有信息量,组织很专业,主题很有人文关怀,有点TED的感觉,甚至嘉宾访谈的形式,也有点TED的影子。

整体论坛的主题是“品质”和“幸福科技”,不管是大范畴的新能源、VR、AI,还是具象的高品质自行车、精品视频、高工艺手机产品,都是服务于这两个主题。

其实不管是“品质”还是“幸福科技”,都根源于一个更宏观的社会变化,就是中国的第二产业、第三产业,已经不仅仅是为了满足“拥有”和“消费”了,而是坚定地朝着产业升级的路径在走。前几年还是“得屌丝者得天下”,现在越来越多的人不愿意被视为屌丝,中产阶级成了社会的中坚力量。

这个在参加这个论坛之前,其实自己已经有一些感知。

年初看吴晓波的文章,吴晓波反屌丝经济,认为在中国的中产阶级人数突破一亿人的当前,中产经济已经崛起。而从我身边的观察,越来越多的人出国旅游,而且不再强调穷游,越来越多的人乐于花钱做精神的消费,看比赛、电影、话剧……特别是,海淘在这两年爆发式的发展,以至于国家特别出台了针对海淘的税收政策。海淘恰恰说明了很多人不满意国内产品的品质,而不得不花时间、精力、更多的钱去买国外的产品,而这,反过来讲也恰恰是国内产品的机会。还有公司的同事,很多人辞职创办创意公司,做品质生活产品/服务——所有的迹象都在表明,有钱的人越来越多了,大家对品质的要求也越来越高了,相应的产业机会也潮水般涌现。

而这些机会,在最具嗅觉灵敏度的IT人眼里,变成了下一波IT行业的新趋势。其中最明显的,就是“移动互联网的浪潮正在退去”,而以各式各样实物为载体的技术形态正在涌现。作为正在做移动互联网的人,虽有不甘,却也不得不认同。其实在这次的技术团队晋升里,自己也能从侧面看到这个迹象。过往几年都是晋升大头的钱包团队,这次晋升提名的人数明显少了,提名而最终没有晋升成功人的也多了。甚至,回过头来讲,整个公司,在去年这个时候,实际上就已经撤销了独立的“无线部门”。可以说,无线的技术体系已经完善,后面更多地是作为一个相对轻薄的“端”而存在,技术的真正核心,仍然是在后端的业务模式以及核心算法。特别是算法,在AI、VR、AR兴起的现在,越发地重要。

另一方面,作为创造了最大的财务自由群体的IT行业,其从业人员也开始更多地关注科技以外,去做更有人文关怀,更有情怀的事情。最让我感动的是张向东和罗永浩。张向东是洒脱,可以在创业成功功成圆满之后,抛开名利地位,从零开始做一个传统得不能再传统的产业——自行车。罗永浩是悲壮,其实我一直觉得老罗唤醒了国内的手机行业,让他们从注重跑分拼硬件参数,变成一个个强调情调强调质感,而老罗作为第一个做出了这样的手机的人,却由于公司的经验不足,没能得到开创者应有的市场地位,但是他没有气馁和埋怨,一直在品质追求中不断前行。

应该说,正是有了中国整体进入中等收入国家这样的背景,有了中国科技行业十多年不断发展的技术积累,有了经历过这一波互联网浪潮被激发出来的全民对创业和创新的普遍认知,中国的技术行业发展已经走在了引领世界的道路上。

机会很多。

比出来的郁闷

郁闷都是比出来的。

这种事情说出来会显得自己纠结,小气,想不开……所以,我就在这里发发牢骚好了,烦。

为什么整个公司提名晋升有78%的成功率,我这个级别的晋升,提名83个人,也有46个人晋升成功了,但是具体到我所在的这个面试分组里,12个人才成功了4个人,是不是各组之间标准不统一,是不是我们这个分组的面试官太严了?!

即使不是按照公司78%的成功率算,只是按照46/83的成功率算,“今天下午最好的一个”的我也应该能成功啊,为什么偏偏到我这里就是1/3的成功率啊?!超过提名中的一半人,对我来说也不难啊!也许我没有达到100%符合晋升的绝对标准,但是晋升的这些人里面,真正完全达到这个标准的有多少?按照1/3的比例,是不是应该只有28个人晋升成功?!不可能刚好我这个分组比较差,只有1/3符合标准,其他的组就都有一半以上的人符合标准。

提名了,然后这样失败了,其实比没有提名还让人难过。或者说,如果没有那个面试官跟我说的“你是今天下午最好的一个”,我会自认技不如人,也不至于这么难过。更进一步说,如果大家都是按照这样严格的标准,按照1/3的成功率,我也可以心悦诚服成功的人都比我强,需要继续发奋学习。

而现在的情况是,我会忍不住地想,如果我不在这个面试分组,而是去任何其他的面试分组面试,很大可能我已经成功了。

这才是最让人痛苦和不甘心的!

哎。

牢骚完了。积极一点,早点走出来。

记一次失败

7月4号——

这次失败打击非常大。

不光是失败本身,更多的是没有做好失败的准备。从答辩结束之后就一直很乐观,特别是某个评委一句“今天下午最好的一个”让我以为成功在望。

结果正契合了一句话:希望越大,失望越大。

这几天一直没睡好,白天里脑海里也时不时冒出来主管跟我说结果的那句话,真的是很不好受。

但是失败了就是失败了,再怎么难受,怎么不服气,还是要从自己身上找原因。一个评委跟你说你是“今天下午最好的一个”,那只是表示在他的眼里,你比其他几个人好,但是这个不是选举,不是多选一,而是选贤任能。比别人好说明不了什么,你必须证明你能够胜任更高要求的工作。

很遗憾他们认为我还现在还不能。

问题出在哪呢?

现在回想起来,自己有两个问题没有回答好。一个是关于“纠结”的问题,我讲的案例确实是我曾经纠结过的问题,但是纠结的原因牵扯到团队利益的问题,这样的部门利益问题,在更高的公司层面上实际上是不好宣扬的,这样导致了我在描述纠结原因的时候磕磕碰碰,最后评委也没有理解我的纠结点。另一个关于现有问题和规划的问题,我其实没有想清楚,刚想起一个监控的问题就随口说出来了,没想到评委揪着这个深入。监控其实不是优先级很高的问题,我也还没有投入去解决这个问题,但是为了圆自己的话,只好硬着头皮去说,于是又一次磕磕碰碰。而且我觉得这里可能为自己埋了个雷,因为监控涉及到重复造轮子的问题,我也许讲了原因,但是他们不一定会认同。

还有一个贯穿始终的问题,就是我的表达。我的表达有两个问题:一是为了突出软件产品和自营业务的区别,不断强调各站点的需求不同,好几次这样的表述——“**站点是这样的”、“对于**来说,它的需求又不一样”……这样从评委的观感来说,就倾向于觉得我更多是在做一个个解决方案的架构,而不是体系化地去建设一个产品架构。另一个表达问题,其实是凸显了前面所有问题的一个症结,就是我的表达实在太快了,回答很快,语速也很快。表达快的好处是,显出我的思维敏捷,那个说我表现好的评委,一部分原因应该就是这个。但是表达快的坏处也很明显,对于我事先没有思考过或者需要比较“巧妙”回答的问题,我没有给自己思考“怎么回答”的缓存时间,所以这类的问题,我的回答就容易凌乱,而且容易给出不成熟的回答。而如果我回答得慢一点,给自己一点时间,我其实可以有更好的题材可以回答。典型的就是那个现有问题和规划的问题,其实有哪些问题,需要做哪些规划,都是很久之前就在做了,结果我抓住脑袋中一闪而过的监控就开始回答,而监控恰恰是还没有做规划的一个领域。

所以归根到底,我还是自己把自己坑了。表达的问题其实一直是我的问题,但是我一直没有很好地解决。一直觉得平时不爱说话,需要说的时候打机关枪般伶牙俐齿还蛮不错,事实其实是,不爱说话,所以口齿不清,打机关枪,你有时间思考吗?不怕说错话吗?

7月10号——

这几天慢慢消化,加上最终还是和评委直接沟通了一番,得到了更全面直接的反馈。归根到底,不管是技术上还是管理上,越往上走,越偏向于对思维方式的考察。更高阶的架构师或者管理者,需要能够自己定方向,对技术人员来说,也许不能决定业务的方向,但也要能开始影响业务的决策方向。另外,你不是一个人在战斗,也不是只是做一个项目,因此,你需要考虑协同作战,需要考虑长远的规划。总结一句话就是,先要做更高阶的工作,才能得到更高阶的工作。听起来矛盾,却也是羁绊我的一点。在其位谋其政只传统的工作思维,但是现在,我需要更多做一些,不在其位而谋其政的事情。

技术人员为什么要提升自己

作为一个技术人员,或者具体点,软件工程师,一开始总是从写程序开始的,后面可能慢慢会做系统设计、架构设计。即使是单纯的写程序,也是从边边角角的模块,慢慢做比较有技术含量的模块,再到比较核心的模块。

这是一个典型的技术人员的成长路线。

在我看来,伴随着你的成长,带来的最大的好处是,随着你能够做的工作范围越来越大,你对工作的自主选择权也越来越大,在整个软件技术栈和工作流程里,你有更多的自由选择自己想做的部分。即使是不得不被“安排”工作,公司也更倾向于给你安排更有难度的工作,毕竟那么多钱养着你,却只让你做一半薪水的人干的活,傻子公司才会这么做。这样你也更能获得提升,所谓马太效应,强者愈强。

最差的技术职业生涯就是,一直停留在初始阶段,也就是简单模块的实现阶段,由于做不了更有技术难度的工作,就只能在边边角角的工作中,不断被安排,不断地被当做“资源”。

在我看来,被当做“资源”,是技术人员最悲哀的时候。每个技术人员可能都会有这个阶段,但我们要努力让这个阶段尽快结束。

群体的盲目与狂热

终于把十年前就想看的关于20多年前那个事件的著名的三小时纪录片看完了。

之所以一直没有刻意去找,是因为从中学时代开始,我已经断断续续把那个阶段前后几代最高领导人的传记都看过了,所谓的左中右派,从国内出版的几笔带过到国外出版的详细的回忆录,都或多或少绕不开这个事件,因此我也早就有不同视角的了解。

现在,多了一个从绝对的对立面视角来看待的事件记录,也基本没有改变我原先形成的观点。

触动我的,反而是这里面暴漏出来的,我从其他的“高层”视角看不到的,一个“大革命”状态的典型症状。

“大革命”有两个显著的特征,一是参与者众多,二是需求急迫蕴含着暴力的倾向。

参与者的众多,导致了参与者个性的丧失。“沉默的大多数”和“狂热的大多数”本质上是没有区别的,都是一群没有个性人云亦云的“社会性动物”,而且人数越多,个性越缺失。最后,众多狂热的参与者所能产生的,就只是众口一词的口号。

在这个事件的最后时刻,原本希望力挽狂澜,把理性带给狂热人群的几个知识分子,在现场听了人群的几声口号之后,居然就变成了带头喊口号的积极分子。可见个体在群体中无意识的从众压力是多么巨大。

而群体需求的急迫,带来了更大的问题。《旧制度与大革命》提出了两个意味深长的观点——”旧制度塑造大革命、大革命继承旧制度”以及“革命在某种程度上是欺软怕硬的”。这两个观点放在这个事件里也是成立的。如果不是政治环境比较轻松,怎么会有持续几个月愈演愈烈的这个事件,怎么会有军队多次被手无寸铁的民众喝退,甚至拉打下车?欺软怕硬加上想要立竿见影的急迫心理,本意是求民主的运动,却变成个别“领袖”挟民意以令天下的专制舞台:必须要满足示威者的要求,不能妥协,扬言政府不对话就一直对峙下去,政府开始和理性派对话了,又暴力破坏对话现场……对内不妥协,对外不合作,甚至寄希望于升级矛盾,触发暴力之后以暴制暴,这不就是“大革命继承旧制度”吗?

狂热的理想主义者,往往更容易成为他狂热地想要推翻的人。浪漫的法国大革命后,诞生的不是期望的共和,而是比国王更专制残暴的罗伯斯庇尔。这个运动的那个女性总指挥,甘愿拉着成千上万人为理想献身(最后她也做到了,事情如她期望地发展,流血事件发生了,只可惜没有带来她期望的革命)。如果她真的成功了,成为了下一个“领袖”,她会不会和罗伯斯庇尔一样,在崇高的理想的名义下,变成她所反对的法西斯呢?从她的所作所为看,我深深后怕。况且,在她的口号和理想号召下留守到最后的人牺牲了,而她却远走高飞,她期望用流血唤起的革命并没有发生,于是她转而通过公开说谎煽动仇恨——她其实已经站到了自己想打倒的那一面了。

最后我想说,北大的那个学生领袖,还有几个知识分子都还是非常理性的,在那种氛围下能够保持理智真的非常难得。如果运动能够在他们领导下开展,也许结局会完全不一样。只可惜,在狂热的群众里,只有极端的人才能抢到话语权。

这是群众运动的悲哀。

最最后,政治不正确地说一句,女性和中二少年真的不适合做社会活动家,前者容易情绪化,后者容易走极端,而这两个,恰恰是最容易把群众带偏的因素。


Principles for Watching Football

看球费电,故制定如下看球准则:

1、联赛,前四之间的比赛选择性观看,其他一律不看;

2、亚冠,淘汰赛选择性观看,小组赛一律不看;

3、国家队,选择性观看与强队的比赛,与排名低于自己的球队比赛,一律不看;

4、可以自己写评论,不看任何足球论坛,足球新闻和非比赛的足球节目;

恶之花

关于最近两件表面上完全不相干的事情引发的感想。

一件事是这两天某在校大学生被百度推广的黑医院骗了几十万,非但没有治好肿瘤,反而病情更加恶化,提前去世。看到新闻时,又不免愤恨。百度也许不是罪恶的源头,却是助纣为虐的一方。作为代表时代前沿的互联网公司,而且还是获得了得天独厚保护和垄断性地位的公司,想的不是回馈社会,而是如何从大多数还处于愚昧状态的老百姓手中赚更多的钱。赚钱本身没错,但是赚病人以至于绝症病人的钱,无异于在别人家庭的伤口上撒盐,居心险恶和麻木不仁的程度,和山贼搜刮农民无异。另外,作为口口声声“让中国人更方便地获得信息”的公司,却人为操纵信息的传播,为了商业利益隐匿真实信息,传播虚假信息,作假的基因深入骨髓到连公司官方声明都能谎话连篇,这种厚颜无耻也只有四人帮之流能够比拼。

不要说社会风气如此,社会风气不是堕落和犬儒主义的借口,即便社会风气真是如此,作为有财力也有足够影响力的公司,更应该做社会的脊梁而不是随波逐流。

想起了Google曾经的企业格言“Don’t be evil”,也许Google意识到了作为信息的入口,自己掌握了太大的权力,于是用这句话时时警醒自己,不要滥用权力,不要作恶。而百度呢,和Google同样性质的公司,而且几乎在所有领域都照着Google的步伐亦步亦趋,为什么单单这最简单的一句企业格言却不学呢?

另一件事,是今天刚看完的《白夜行》。随着故事慢慢走向终结,对于故事的主人公,那一对从小学时代开始相伴相生,二十年成长路上伤害了多少少女的心灵,杀害了多少男人女人的“伴侣”,特别是那个完美得像仙女一样的女人,从怜悯、惊讶、震惊、再到厌恶、痛恨,最后,知道真相的时候,又不由唏嘘。她能杀了自己的亲生母亲,自己的养母,毫不手软地让一个个女孩失去灵魂,最后,看着二十年来伴随在自己身边,为了她杀了自己亲生父亲,为她清除了所有的“敌人”和障碍,为了她过得光鲜靓丽,不惜自己永远活在灰色世界里的那个男人,为了保护她而自杀在自己和警察面前,而她面无表情地一句“我不认识他”,头也不回地走了……她会难过吗?也许不会。但是我会因此恨她,恨警察无法把她逮捕归案吗?我也不会。

因为,两个喜欢逛图书馆的孩子,小学时就喜欢看《飘》,喜欢一起做精美的剪纸的孩子,他们的未来本应该是光明的,而恰恰是他们最亲近的父母,让他们直面了人性的恶,就像她自己所说,她的一生,一直是没有阳光的。这恶之花一旦种下,为什么要指望一个11岁的小女孩自己把她拔掉?

这两件事情都是关于作恶的,而且他们也是有一定的相似的。西方有一个理论叫“破窗理论”,中文里大概就是“破罐子破摔”。对于百度和合伙谋财的公司/医院来说,可以归咎于中国的社会伦理在四人帮的时候已经被破坏殆尽,对于《白夜行》的女主人公,小小年纪被亲生母亲强迫卖淫,让她不能再善意地看待社会。不同的是,前者是自己选择的恶,后者是别人强加的恶而又转嫁给他人。

自己选择的恶,是可以避免的,他人强加的恶,能够与之搏斗固然鼓舞人心,如果不能,也只是叫人遗憾。

这也是我们要谴责百度,但是我们无法谴责那个女主角的原因。

如果你可以选择,为什么要做恶人?

成就他人

去年的业绩比较好,年底的调薪和股票激励也还不错,但是知道同组去年刚进来的同事没有股票,调薪也聊胜于无,突然就感觉有点难过。

他也是很努力的,而且刚刚买了房,经济压力很大,仅仅只是因为表现还不够突出,收获就差了好多。

选择真的很重要。毕业时的选择,让我在现在这个人生阶段就拥有了相对比较好的经济和生活条件,而别人也许跟我有同样的能力,也足够努力,但是只是因为来的晚了一点,就错过了好多。

我因为自己的选择(其实也是运气)收获了很多,所以也要把这样的运气传递给其他的人,让别人也可以一起分享,这是感恩,也是传递美好。

不只是为自己的成长,也关注团队的成长,这是我后面要更加着力的事。而现在的我,也有能力和职责,去做能成就别人的事。

成就他人。

工程师到架构师

好友在写微信公众号,上个月找我约了个稿,写一下程序员成长为架构师的话题,而我也刚好想对这么些年的工作,有一个阶段性的总结,于是有了这篇文章。

朋友公众号文章首发,地址在此。我这里就算留个底。

——————————

0、前言

架构师是一个没有被严格定义的角色。

在写这篇文章之前,我特意把这几年看过的关于架构和架构师的书重新翻了一遍,结果发现它们的定义或多或少有一些不一样,而经过了这几年,一些之前同意的观点,现在的我也不敢苟同了。另一方面,业界对于架构师这个岗位,其实也没有统一的角色定位。在阿里巴巴,前几年是有专职的“架构师”职位的,现在已经回归到“工程师”、“专家”、“研究员”这样的纯技术职位。而我面试过的人中,也有各种各样的“架构师”,很多小团队里,项目经理就经常自认为架构师。大概架构师目前还不至于称为一个职业,更多的是在项目中的一个角色,而其角色定位也是模糊的,因此,这个文章里,我主要还是从自己的理解出发,阐述一下这个角色的定位和个人发展的建议。

1、架构师的定义

架构师:任何复杂结构的设计人员。

架构师的名字来自于建筑业,Software Architect直译应该叫“软件建筑师”。从很多方面讲,软件架构师的工作跟建筑师很像,为了寻根问祖,曾经我也看了不少建筑设计的书(推荐一本《建筑的永恒之道》),最后我发现,两者一脉相承,现阶段分道扬镳,未来也许殊途同归。

一脉相承——不管是建筑师还是软件架构师,都是为了“大图”而存在,做好顶层设计,充当需求方和实施者的桥梁,是其最重要的两个职责。

分道扬镳——两者的发展阶段不同所致。建筑业实践绵延数千年,理论根基有数百年,真正成为一门学科也有一百多年,而软件架构真正出现不过二十年。建筑业已经在足够高的层面上模式化,建筑师能够真正去“设计”,也就是决定“做什么”。而软件行业还在高速发展中,各个层面的技术还在百花齐放。技术的选择意味着权衡,因此软件架构师更多还在关注“怎么做”——这也是建筑师可以称设计师,而软件架构师只能算高阶工程师的原因,设计师更关注美感,而美感在软件架构师的考虑优先级里,排不上第一。

殊途同归——计算机发展的几十年,也是技术不断往上抽象和模式化的几十年。SOA、IoT、IFTTT等技术理念已经接近于建筑行业的模块化级别,各种“智慧城市”、“生态城市”已经在架构层面上考虑“做什么”。假以时日,架构师也许能成为一个真正的纯“设计”的职业,到时候大学里也可以开设“软件架构”的专业了,那一句“建筑设计师在成为建筑设计师之前,是不会成为建筑工人或工程师的“也能在软件行业成为现实。

当然,这只是可能的未来,这需要我们这些前辈技术人员,能够和建筑行业的前辈一样,把技术规范化,设计模式化,还要有一套关于架构美学和功能设计的完整统一的约束,任重而道远。

2、架构的职责

在软件技术发展的前几十年,是没有架构师这个称谓的。所有的人都是程序员,可能有个带头的人,叫主程序员。随着计算机技术的发展,软件覆盖的领域越来越大,软件本身也越来越复杂,现在,动辄几百万行、几千万行代码的软件系统已经非常普遍。软件的复杂化,对于开发人员的脑力负担也不断增大,而人脑所能处理的信息量是有限的,于是,软件开发工具、开发方法也在不断发展,从汇编语言到高级语言,从函数到框架,从面向过程到面向对象,从设计模式到架构模式,总体而言,人类在软件开发工具的各个维度上都在做着”封装“和”抽象”,架构设计是这种抽象和封装的最高层次。从架构的维度上,已经不需要考虑语言、函数、设计模式这一类的抽象,而是站在整体软件系统的高度上,考虑系统设计的技术合理性,需求实现的完整性,商业诉求的匹配度(主要是成本和效率)——这是架构的技术职责。

另一方面,随着行业的发展,软件项目的参与角色和人员也越来越多,从起初只有程序员和需求方,发展到技术、产品、设计、商务、项目管理多团队,技术团队内部的分工也越来越细化,前端、后端、测试、运维、售前售后技术、集成技术等应运而生。架构师是技术团队面向产品设计等团队的接口人,承担着弥合技术与非技术团队之间知识和语言体系差异的职责,同时作为技术团队的带头人,要负责勾勒蓝图,明确边界,让不同技能的团队通力协作,最终完成软件系统的整体建设和发布——这是架构的组织职责;

2.1、架构的技术职责

首先,架构师经常被类比于建筑师,但是有两个建筑领域的基础理念,在软件架构领域是不成立的(至少现阶段不成立):

建筑设计师在成为建筑设计师之前,是不会成为建筑工人或工程师的。——现阶段的软件架构师,一定是从软件工程师成长起来的。

建筑学和工程学之间的区别表现在“做什么”和“怎么做”:建筑师决定做什么,工程师想出怎么做。——现阶段的软件架构师,除了决定做什么,也要决定关键部分怎么做。

架构的技术职责分为三大块:

  • 抽象设计;
  • 非功能设计;
  • 关键技术设计;

首先是抽象设计。架构师需要能自由地在不同的抽象层次和视角上分析需求,不同的架构层次/视角提供了不同的视图,这些视图互相验证,又能构成整体的设计大图。架构的抽象层次分成两个维度:

  • 垂直维度

从上到下,分成企业架构、解决方案架构、应用架构、系统架构等,这个分层的逻辑,是提供不同颗粒度的业务建模。CTO关注企业架构,它提现了一个企业整体的IT技术建设的战略选择,典型的就是集中式和SOA、大型机和云计算的选择等;产品经理和运维关注应用架构,这里映射了产品的业务流程和应用的整体部署依赖;外部客户关注解决方案架构,它定义了如何通过产品的整合和协同,解决特定客户的特定的技术方案需求;研发工程师关注系统架构,这里定义了单个系统的领域建模和系统框架。

  • 水平维度

具体到对某一个业务的架构设计,又可以区分出业务架构、数据架构、技术架构、应用架构几个不同的视角。业务架构是对业务领域和业务流程的分析抽象,需要提炼出业务的核心领域模型,业务的可变和不变部分,这是架构师和产品经理协同完成的;数据架构基于业务架构提炼的核心领域模型做数据模型和存储模型的设计;技术架构基于业务的性能,可用性,安全等非功能性指标,确定语言、框架、中间件、部署等技术选型;应用架构基于业务抽象设计应用系统的层次结构、系统边界等。

在这些架构划分中,企业架构匹配商业模式,业务架构匹配业务模式,其他几个架构的划分,更多的是从技术的不同视角来看,他们提供了从不同的抽象层次,不同的切面对于功能需求的分析和建模。

同时需要说明的是,架构的抽象是匹配于业务的,就像桥梁设计师不能直接转做摩天大楼设计,架构抽象也是区分领域的,每一个业务领域都有自己的独特性,因此在架构上也是千人千面的,好的架构设计也是对于业务抽象得最好的设计。

架构师的另一个技术职责,是对非功能需求的分析,这也是“架构服务于功能,高于功能”的含义。这里的非功能性需求包括了软件系统的可靠性、扩展性、可测性、数据一致性、安全和性能等。考虑到成本和运行环境等限制,这些非功能性需求很多时候是不能同时满足的。这个时候就需要“权衡”,空间换时间的算法层面的权衡,性能和可测性、可靠性的权衡,一些权衡甚至上升到了学术层面,变成无完美架构的理论根基(如CAP理论)。

架构师的最后一个技术职责是关键技术设计。建筑师不只是做整体外观设计的,建筑师也需要考虑关键部分的细节设计——曾经在巴塞罗那圣家堂,我甚至看到高迪连教堂里一把椅子都留下了详细的设计图纸。同理,架构师也需要对可能影响到软件系统整体质量的关键部分,做更细节的详细设计。

2.2、架构的组织职责

架构师是企业的一员,作为“边界人”,承担着在不同角色、团队之间沟通协调的作用。

  • 和业务、产品团队的协作

软件系统是解决现实世界的问题的,任何的软件系统都是业务相关的,当一个软件系统的商业模式确定之后,架构师就开始和业务、产品团队紧密合作,确定软件系统的业务架构和领域模型。业务和领域模型抽象的好坏,决定了软件产品是一次性的解决方案,还是可以持续支撑业务成长的真正的产品。

需要说明的是,业务、产品方和架构师是需求方和实施方的关系,所以,双方之间既是合作的关系,有时候也是谈判双方的关系,特别是对于外包型的软件产品而言,这个时候,架构师又承担着在业务方和技术团队之间找到诉求契合点的重任。

  • 和技术团队的协作

研发阶段,有架构师参与的项目,往往牵涉多个不同方向,不同业务领域的研发团队。架构在其中的作用,是整体大图的传导,以及应用和团队研发边界的划分,对于影响到整体的非功能需求的关键技术点,架构师也要能亲力亲为完成设计。归根结底,架构师为软件系统的整体质量负责,也为研发团队的研发分工负责。

部署阶段,架构师需要和运维团队一起评估满足整体非功能需求的前提下,软件系统部署的硬件成本和部署拓扑结构。例如对于互联网应用,针对性能要求,是否需要CDN,带宽需求;针对可靠性,是否需要多机房部署;针对安全,是否部署相关的安全软件。最终的部署策略,仍然是基于成本和需求的一个权衡。

技术团队是架构师的大本营。根据不同公司的职能定位不同,有的架构师立足于技术团队,有的游离于技术团队。立足技术团队使架构师能更深入了解团队所负责的产品,因此能对业务做更合理的建模,也有利于架构师对关键技术方案做针对性设计,但是可能会限制了架构师拥有更加全局的视角。游离于技术团队的架构师能够从全局看待软件设计而不受制于屁股,因此更能从客观合理的角度规划整体设计,但是由于对技术团队没有管理职能,对于方案的落地只能依靠个人的技术号召力,而且,游离意味着疏远,如果架构师不能自觉地去跟进软件产品的实际落地,可能慢慢就会架空,变成PPT架构师。

简言之,架构师既不能完全负责某个技术团队,也不能完全游离在技术团队之外,这个,又是一个职能定位的权衡了。

同时,架构师和技术团队的协作,还有一个很重要的组织职能。如前述,架构师既决定了整体的架构选型,也决定了关键的技术方案的设计,而什么是需要架构师亲力亲为的关键技术方案,是架构师来确定的。因此,这就引申出架构师的另一个重要的组织职能——团队培养。如果架构师完成所有的技术方案设计,研发团队只管写代码,架构师会累死,研发团队也不会成长,这就要求架构师给予研发团队足够的成长空间和信任,并因此承担一定的风险和责任,这是这个角色必须承担的。

  • 和其他角色的协作

除了产品和技术团队,架构师需要协作的还有项目经理,外部客户,甚至是公司财务……一句话,架构师作为技术方案的总负责人,对接所有对技术方案有关联关系的合作方。

  • 如何沟通

协作就需要沟通,架构需要掌握多门沟通语言,而最好的语言是图表。对于产品来说,架构师沟通的工具是业务架构,用例和领域模型;对于研发团队来说,架构师沟通的工具是应用架构,组件和时序图;对于运维团队来说,沟通的语言又成了部署架构。图表的作用是维护共同的语言,同时也是让设计文档化以便于传承。

3、架构师的成长

上面讲了架构师的职责,职责既是能力的要求。可以看到,架构师既是一个全方位的技术专家,也是一个沟通协作的专家。因此,总结一下,架构师的成长,也是两条线:

  • 技术上

架构师的首要工作是抽象建模,而首要的首要是要了解自己所处的业务领域,只有对业务足够了解,才能更好地抽象和建模,也更能沉淀通用的设计方法论。几年前,我曾经看过我司首席架构师的书单,其中有银行卡组织的介绍的,有零售银行的业务分析的,而那个时候,我司还只是金融业边上的支付公司而已。

另一方面,架构师需要在业务领域所涉及到的技术领域中,都要了解甚至精通,譬如对于互联网行业的架构师,小到语言、算法、数据库,大到网络协议,分布式系统,服务器,中间件,IDC等等都需要涉猎。一句话,架构师是技术团队的对外接口人,也应该是外部团队技术问题的终结者。广度之外也要深度,对于关键的技术模块的设计,架构师需要有技术的权威性。

  • 组织和个人成长上

架构师要作为业务和技术的桥梁,因此需要精通业务和技术的语言,要锻炼沟通能力,不只是口头的沟通能力,也包括用标准化的图表表达设计思路的能力。

架构师需要一种“中庸之道”。不管是技术的选型,团队的协作、培养和分工,商业诉求和成本、产品需求和技术诉求的匹配,很多时候都是一种权衡。可以说,架构的工作主题就是权衡,这可能也是工程师成长为架构师最大的挑战。工程师经常是完美主义的,程序也总是精准精确的,但是架构师要习惯于不完美和一定条件下的不精确。

4、补充说明

上面写了这么多,其实针对的是大型的,有明确需求的,多团队参与的项目或者产品的架构师。现实世界中并不都是这样的项目,所以也并不都是这样的角色分工。例如,对于创业团队来说,活下来是最重要的,所以创业团队崇尚的是敏捷开发,快速构建,灵活试错,37signals的《Getting Real》是这种思想的最好诠释。这样的研发体系特别适用于不需要太复杂的底层设计,功能扁平化的,可以快速开发原型,小迭代不断扩展的应用,特别是web应用和APP。

另外,架构师也不是技术人员唯一的方向,甚至不是大多数技术人员的职业方向。在技术上,架构师是广度优先兼具深度,同时在技术之外附带了许多的业务性和组织职能,而很多的技术人员会更倾向于在技术的深度上不断挖掘,也不愿意投入太多的精力在业务和沟通上,这样的技术人员其实更适合的是技术专家的路线。技术专家研究的是纯粹的技术,这里面可能有算法、有编程语言、有运行容器(虚拟机、操作系统、应用服务器、中间件)、有通讯机制,这些都有足够的源源不断的问题等着技术人员去解决,而他们解决的问题,也成为软件技术不断向上抽象,不断模式化的基础,所以,技术专家的路线也是同样重要的。