【畅言】从程序员到架构师的方法与逻辑

架构师是什么?

架构师这词其实很有意思,很多人的Title是这个,但其实我们对架构师都干什么并没有太统一的认识。往大了说,比尔盖茨当年好像也称自己为架构师,往小了说随便一个小的软件上做设计的也说自己是架构师。所以如果把这个词泛化而不局限于特定的场景,估计单是说清楚什么是架构师就要花费不少口水。下面我们用一个取巧的办法,在一个具体的场景下来看看,架构师都该干什么,而不把这个词泛化,如果在特定场景下这个角色应该干什么清楚了,那它就可以为其它场景下提供不错的参考。

我们只考虑从头开发一款产品的场景,不考虑这款产品可能是个家族,可能需要在公司里与许多东西配合这样繁琐的事情。这样问题就简化成:当我们要开发一款新产品的时候,架构师都要干些什么?为让事情更具体,我们进一步假设公司想做一个Trello,Worktile这样的协同办公工具。

在产品初期除了UI这类东西,还能明确的一些关键需求大概是这样:

 

  • 简单、迅速,追求极致的用户体验,这时也许能想到看板这样的功能
  • 打入社交元素(任务分配与沟通时打入信息流的机制)
  • 移动端支持
  • 公司判断:如果产品能在1年内上线,时机比较好

 

其他的需求呢就是感觉上肯定有,但暂时说不清楚

基于这样的简单提示,长做程序的可能脑子里会立刻冒出来无数东西,比如:

 

  • 快的确保?
  • 看板里拖动的实现?
  • SaaS时伸缩性的确保?
  • 数据库中表的设计?
  • 数据库类型的选择?
  • 移动端的支持方式?
  • 人员的现状?
  • 迭代式开发的支持?
  • … …

 

但显然不是每个事情都要在架构设计阶段搞定,否则等于是被弄蒙了,这时候架构师的一个关键职责就是要能区分出哪些东西预先需要搞定,而哪些东西则要在迭代过程中解决。

一般来讲重置成本越大,牵涉的人越多的事情越应该由架构师预先搞定,否则就容易做无用功,对开发工作产生致命伤害。具体来讲这类事情由三个核心部分组成:

 

  • 选定Tech Stack
  • 概要设计,确立分工的基础
  • 协同方式

 

下面来分别解释下这三个方面的具体含义。

选定Tech Stack是指要选定包括编程语言,基本框架等一系列东西,比如Trello选完之后大致是下面这个样子:

图片来自网络(出处

这事情几乎是不可重置的,因为重置成本已经到了正常团队不可能负担的地步。所以Tech Stack与待开发产品的吻合程度是非常体现架构师价值的地方。选了Tech Stack但发现无法达成产品目标是架构设计上最差的结果,也正因为输不起,在这个环节上可以慎重些。这种Tech Stack的选择受限于上述所说的关键需求,比如快,支持移动端等。也就是常说的从需求的模型想技术模型的映射。

了解些技术的应该一眼可以看出来上面这张图是MEAN(MongoDB,Express,AngularJS。。。,NodeJS)架构,这架构满足上面关键需求是没问题的,但如果关键需求里有一条叫以灵活的插件结构来满足不同用户的定制化需求,上面这架构可能就有点麻烦了。

不管怎么样Tech Stack架构师第一个需要搞定的事情,没这个什么活也干不了。

再其次则是相对比较传统一点的部分,不管从哪里开始迭代,总是要切分前端后端的职责,设计彼此交互的接口,要区分出来哪些是纯工具型的模块(比如日志),哪些是基础设施型的(比如用户管理与权限),哪些是可以彻底进行迭代的(比如具体的某个功能)。这些东西之间是有一种内在的时序关联的,不是简单一句:我们迭代吧,我们测试驱动开发吧,就可以的,那会导致很大的混乱,所以这里也是架构师要扮演角色的地方。传统上管这个叫概要设计,虽然这词现在不怎么用了,但这词其实还不错的。当然架构师不一定要一个人搞定所有这些事情,而是要肩负起协调大家搞定这些事情的职责。这个地方依赖于产品的类型对业务知识的要求程度不同:一般来讲越是面向个人的产品,在业务知识上要求越低;越是面向企业的产品业务知识的要求越高。简单讲做天气应用的时候可能直接做就行了,但做财务应用时了解财务的某些知识就挺必须的。

最后一项则是分工后的一种协作的方法,这里面包含着分支策略,持续集成策略等。

显然的,下面两种分支策略下,团队的协作方式不一样.。

图片来自网络(出处

这是又一个全局性的工作,干活前需要预先定下来应该也是没疑问的,但是不是架构师搞定这事上,不同人的认知可能会不一样,有的人会认为应该是项目经理类的角色来搞定这事情。我个人则坚持认为理想情形下应该架构师搞定这事,因为分支策略等受技术的约束更大。

这就是我理解中架构师的要干的三类活:选择Tech Stack,概要设计来确立分工的基础,确立协同的方式。

在开发产品时,这三样事情不搞定,迭代都不好迭代。抽象点来看是这样:假设说在现有人员的基础上,预先搞定某问题需要耗费的成本为X,而迭代后,事到临头再处理,其耗费的成本为Y,那么无疑的Y>X的问题都应该是尽可能预先处理的问题,而不能以迭代为借口堂而皇之的进行忽视。而上述三方面问题,基本上是Y>X这类。

如何成为架构师?

首先想说的是程序员不一定要成为架构师的,优秀的程序员一样很有价值,但关键要看技术领域,我在程序员可以只关心技术么? 专门说过这事,这里不再展开。

真要想成为架构师事实上总是有两类方法,这两类方法倒不局限于架构师的学习,而是普适于任何学习。

一种是从概念规则到实践,一种则是从实践总结出概念和规则。数学更近似前者,而历史更近似后者。当我们试图先抽象出什么是架构设计,架构设计又有那些原则,之后再让大家了解现实中的架构设计如何做时,无疑的采取的也是前者的方式,也就是数学的方式。这种方式在现实中比较常见,但在逻辑上是有问题的:正是因为对架构设计的不理解,才尝试学习架构设计,即如此想学习的人天生在了解架构设计的概念与原则会遭遇困难。

出于这样一种考虑,最好的办法其实是先了解一些最基本概念,比如前面说的那些,再了解一些最基本的原则,比如:正交,信息隐藏等。之后就不在抽象概念层面打转了。而了解多个现有典型产品的架构,比如上面说的Trello,WordPress等。这时候最好对产品归类,在特定类别下抽象出来一些典型的架构模式。比如:软硬一体产品的架构,CMS的架构等。这样一来,如果一个人可以主要学习其中之一,顺道了解其余,那就可以比较迅速的掌握架构设计的知识,至少是上面说的架构设计中的前两类知识:Tech Stack的选择与概要设计。在开源的时代里,这已经成为一个人坐在家里就可以完成的事情了。

一点呼吁

最后做一点呼吁。现在各种架构设计的课程还是比较多的,但基本上都是按照第一条思路来的,比如:讲架构设计时会去尝试把架构设计分解为逻辑架构,运行架构等。从身边人的效果来看,普遍不太理想。有实力的培训机构可以尝试总结架构的模式,以一个总纲带领几个典型领域的架构分析,比如:CMS就参照WordPress来讲架构,基础JavaScript库就参照Backbone这种等。也不用太多,覆盖典型的4~5个领域就可以解决很大的问题了。这应该会更有效果,但课程创建上会比较吃力些,真想做的人要有思想准备。我个人曾经尝试和南京的TalenCamp按照第二条路来设计课程,但由于各种原因暂时进展不太大。

本文为CSDN原创文章  作者:李智勇

微软中国遭工商总局调查 或因涉及“不公平交易”

北京时间7月29日消息,据香港《南华早报》官方网站报道,日前,国家工商总局相关人员突访了微软位于我国北京、上海、广州和成都四地的办公室,正就一些事情展开问询,或因该公司涉及操作系统垄断问题。

微软中国在一份声明中表示,“我们致力于创造产品来满足客户对功能、安全和可靠的要求。我们会积极配合政府部门的调查,并回答相关问题。”

据悉,反垄断调查在中国实际上有三个部门负责,工商总局主要针对企业“不公平交易”行为,为反垄断与不正当竞争执法局,负责除价格垄断行为以外的垄断协议、滥用市场支配地位、滥用行政权力排除限制竞争的具体反垄断执行;发改委主要针对企业“涉及价格的垄断”,包括横向垄断和纵向垄断;商务部针对企业“并购行为”。基于上述部委反垄断职能划分,微软中国此次问询很可能涉及“不公平交易”。

众所周知,全球有超过90%的计算机使用微软操作系统,在中国,这一比例超过95%。在今年春天,微软停止Windows XP安全更新被认为是“强制XP退役”,这被一些专家质疑其“滥用市场支配地位,涉嫌垄断”。而在今年5月16日,中央国家机关政府采购中心曾下发过一则通知,规定国家机关在“信息类协议供货强制节能产品采购招标”中,所有计算机类产品不允许安装Windows 8操作系统,最大猜测是安全问题,有专家表示,Windows 8操作系统将进一步加剧对我国网络安全不可控而导致的风险。一系列的突发事件让微软的中国路走得并不那么顺风顺水。

早在2013年的上半年,微软曾成为美国司法部和证券交易委员会(SEC)的调查对象,原因是一名前微软员工爆料,该公司曾向海外政府官员行贿以换取软件合同。此次微软被调查也可能与贿赂官员有关。

R的数据分析制霸以及企业级应用盘点

通过与大数据工具整合,R提供了大数据集的深度统计能力,包括统计分析以及数据驱动的可视化等。而在金融、药物、媒体及销售这些可直接从数据中获取决策的行业中,R更得到了深度应用。

根据Rexer Analytics 2013年对数据挖掘专业人员的调查显示,R已经成为当下最流行的统计分析工具,至少有70%被调查者表示有使用过R语言。而在企业市场,R的受欢迎程度同样如此,多个公司和项目都使用R,并将其提供给大数据科学家和业务用户,其中包括了微软的云计算Azure Machine Learning、IBM的Big R、Teradata Aster R、Oracle R Enterprise、PivotalR的Big Data R发行版、SAP的R for HANA等,下面做简要分析:

搭载了R的Azure Machine Learning。微软在Azure ML中提供了R语言的API和模板,支持了300多个使用R语言的包,同时用户不用从头做起,Azure ML允许开发者使用已有的部分来组装适合自己需求的模型。这样做无疑降低了机器学习的使用门槛,让各种背景的数据科学家都可以使用。

IBM InfoSphere BigInsights Big R。Big R是一组功能库,提供了终端到终端的R与InfoSphere BigInsights集成。Big R可以被用于InfoSphere BigInsights服务器上的数据综合分析,降低亲自编写MapReduce作业的复杂性,让用户回归常见的R语法和范例。

Teradata Aster R。Teradata Aster R,通过放宽内存和处理能力限制条件,扩展开源R语言分析能力。针对R语言分析师,Aster R开发出他们熟悉的R语言和工具,并提供强大的处理能力及丰富的分析方法,其主要分为3个组件:“Aster R Library”预置100余种R语言功能;“Aster R Parallel Constructor”拥有超过5500个R语言分析工具包;“Aster SNAP Framework集成”将开源R语言引擎完全整合至Teradata Aster无缝网络分析处理框架。

Oracle R Enterprise。Oracle R Enterprise主要提供了该公司RDBMS以及Exadata设备的in-database分析能力。

PivotalR。PivotalR是一个允许R用户与Pivotal (Greenplum)Database以及Pivotal HD(用于大数据分析)交互的包,在类似R的界面为数据科学家提供in-database和in-Hadoop计算。HAWQ是Pivotal HD Hadoop技术的核心,通过支持R语言,提供了Dynamic Pipelining、世界级的查询优化器、纵向扩展、SQL依从、交互式查询、深度分析以及常用的Hadoop格式。

SAP将R与HANA集合。SAP整合了R语言和他们的内存数据库HANA,形成一个服务于移动、分析、数据服务和云集成服务的新平台,SAP通过Rserve(与R Server的通信器)实现了这个功能。因为使用了列存储,HANA能够与R效率的交换数据,SAP通过预封装快速部署解决方案来简化用户的操作。