架构师是什么? 架构师这词其实很有意思,很多人的Title是这个,但其实我们对架构师都干什么并没有太统一的认识。往大了说,比尔盖茨当年好像也称自己为架构师,往小了说随便一个小的软件上做设计的也说自己是架构师。所以如果把这个词泛化而不局限于特定的场景,估计单是说清楚什么是架构师就要花费不少口水。下面我们用一个取巧的办法,在一个具体的场景下来看看,架构师都该干什么,而不把这个词泛化,如果在特定场景下这个角色应该干什么清楚了,那它就可以为其它场景下提供不错的参考。 我们只考虑从头开发一款产品的场景,不考虑这款产品可能是个家族,可能需要在公司里与许多东西配合这样繁琐的事情。这样问题就简化成:当我们要开发一款新产品的时候,架构师都要干些什么?为让事情更具体,我们进一步假设公司想做一个Trello,Worktile这样的协同办公工具。 在产品初期除了UI这类东西,还能明确的一些关键需求大概是这样:
其他的需求呢就是感觉上肯定有,但暂时说不清楚 基于这样的简单提示,长做程序的可能脑子里会立刻冒出来无数东西,比如:
但显然不是每个事情都要在架构设计阶段搞定,否则等于是被弄蒙了,这时候架构师的一个关键职责就是要能区分出哪些东西预先需要搞定,而哪些东西则要在迭代过程中解决。 一般来讲重置成本越大,牵涉的人越多的事情越应该由架构师预先搞定,否则就容易做无用功,对开发工作产生致命伤害。具体来讲这类事情由三个核心部分组成:
下面来分别解释下这三个方面的具体含义。 选定Tech Stack是指要选定包括编程语言,基本框架等一系列东西,比如Trello选完之后大致是下面这个样子: 图片来自网络(出处) 这事情几乎是不可重置的,因为重置成本已经到了正常团队不可能负担的地步。所以Tech Stack与待开发产品的吻合程度是非常体现架构师价值的地方。选了Tech Stack但发现无法达成产品目标是架构设计上最差的结果,也正因为输不起,在这个环节上可以慎重些。这种Tech Stack的选择受限于上述所说的关键需求,比如快,支持移动端等。也就是常说的从需求的模型想技术模型的映射。 了解些技术的应该一眼可以看出来上面这张图是MEAN(MongoDB,Express,AngularJS。。。,NodeJS)架构,这架构满足上面关键需求是没问题的,但如果关键需求里有一条叫以灵活的插件结构来满足不同用户的定制化需求,上面这架构可能就有点麻烦了。 不管怎么样Tech Stack架构师第一个需要搞定的事情,没这个什么活也干不了。 |