在拜读了《架构漫谈》九篇博客之后。
对于软件架构师如何工作,我的第一反应是第五谈中的一个小标题——成本为王。
在我的理解中,成本可以分为两方面。一方面是开发软件的成本,另一方面是开发软件的目的是降低做这件事的成本。这两方面都需要软件架构师来考虑。其一需要考虑研发这款软件的人力物力成本,因为公司研发大部分软件的最终目的还是为了盈利,如果在现阶段不具备研发此软件的资金,那么做再多的其他准备也是徒劳。其二需要考虑研发此软件是为了方便人的某件事并且可以降低成本。我们为什么要用计算机,要用软件?举一个简单的例子,最简单的精神享受例如听音乐等等,有了软件我们没必要非要跑到现场听现场的版本,而是随时随地打开音乐软件就可以听到差不多的版本。不仅方便了我们的生活,也极大的降低了用户听歌的成本,当然用户可以通过升级VIP等方式,提升自己的视听享受,这些关于软件如何盈利的手段因为文章篇幅问题我们先暂且不谈。有了既定的用户,又能有不错的收入此款软件就算成功吧。
其次明确软件架构是为了什么,到底要解决什么问题。作者王概凯Kevin在架构漫谈(六)中,对问题做出了明确的解释,在这我主要谈一谈我对作者所写的认识以及自己新的看法。
首先是软件要解决谁的问题?
在第五谈的最后解释到:软件的实质是将使用者带入到计算机当中,将计算机的硬件运行起来解决用户的问题。所以前边的问题就有了答案——解决用户的各种问题。要做到这一点需要解决以下两个问题:
①业务问题:就是没有这款软件的时候,需要解决的人是谁、解决的问题是什么、怎么解决的?如果明确了这个问题,最起码知道了软件的发展方向,软件架构师也有了软件的概要设计灵感。
②计算机问题:这一方面总结起来就是计算机硬件如何满足软件的需求,并且硬件存在的诸多风险,在失控的条件下如何保证软件还能正常运行。然而软件架构师需要在这方面下功夫的是:将软件在设计时尽可能的占用更少的计算机硬件资源,同时做好备用路线,以备在突发状况中能够不间断的为用户提供服务。
其次,软件工程师们要解决的首要问题是将业务owner的业务虚拟化,同时解决软件开发和运营的生命周期问题。
那么我们就首先需要了解业主的想法,大部分软件需求者清楚自己在什么地方有问题,但是无法准确的将问题指出,更不能向开发者提供自己认为可行的解决方案。这就需要开发者设身处地的站在需求方考虑问题;但是我们所开发的东西又是生活中没有的新型产品,所以我们也不知道提出的概念是否合理。这就需要软件架构师在设计方案是不仅要考虑编码的复杂程度,也要考虑多种可能以及解决方案,将自己置身于问题当中,设计出更加人性化的产品。
同时软件架构师要明确自己权力和义务。
软件架构师职位在编码人员之上,这就意味着有更多的权力,需要去组织别人去完成工作,把团队中的每一个人放在合适的位置上,做到 1+1>2 的效果,这才值得你拥有这项权利。这需要架构师了解自己团队每一个人的特长,用其长技来做事,效率往往是最高的吧。
反过来,有更多的权力就会有更多的义务。你站在上帝视角来支配每一个人,就需要做一个好的领导人,对自己项目的成员有绝对的信任,当他们犯错时,第一个有勇气承担后果的也应该是项目的架构师,因为错误的根本原因在于你对软件的理解错误从而导致体系存在问题,等等等等。
当然作为一个项目的软件架构师技术要过硬。
有很多人会问,做架构师是不是不需要学习技术甚至是语言,答案当然是否定的。且不说出了问题找不出原因在哪,如果没有过硬的技术,甚至不知道开发的项目应该选用什么工具和语言才能将成本降到最低,这就又回到了我们的第一个问题。当然也需要你有着比下属更高的水平和经验在出问题的时候指导他们。
这就是我对软件架构师如何工作的一点看法。