zoukankan      html  css  js  c++  java
  • 《架构漫谈》阅读笔记

      软件架构师如何工作?

      不同于软件工程中只需要编码的“低级”码农,一名合格的软件架构师首先要对架构有深刻的理解。那么什么是架构?从建筑的角度解释,架构是计划、设计和建造建筑物、物理结构的过程和生产活动。从这个定义上看,架构像一个过程,但又不明确。为了弄清这个问题,我们首先要了解为什么会产生架构?在最早期,人类之间不会沟通,过着自给自足的自闭式生活。但是作为一个高级动物,繁衍后代的本能让男性和女性开始群居,这个时候就出现了分工。每个人擅长的能力不同,有些人种田厉害,有些人制作工具厉害,有些人狩猎厉害等,当每个人都得带了合适的分工,这个群体就像是一个有着完整骨架的人,不再一盘散沙,不再各自为战。所以架构就是:
        1. 根据要解决的问题,对目标系统的边界进行界定。
        2. 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
        3. 并对这些切分出来的部分,设立沟通机制。
        4.根据 3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

      软件架构师是一个严格的职业,需要对概念的绝对理解和掌握。《同福客栈》里给我印象最深的人物不是那些每集都出现的主角,而是一个倒霉的小反派“姬无命”,因为他就是对概念不够理解,才会被吕秀才抓到破绽强加错误的概念,最后死在了自己的手里。其实大部分人对于每天都习以为常的概念,都自以为明白了,但实际上都是下意识的,并不是主动的认识。为什么软件架构师一定要认识概念呢?根据前面对架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。 

      认识概念只是一个基础,发现问题才是软件架构的关键。大部分的概念基本都有一个很大的问题,就是缺乏主语。所以就需要软件构架师找出问题的主题,主题找到了,边界进而也就明确了,后续的一系列解决方案也都水到渠成。架构师要解决的,基本都是别人的问题,不是自己的问题。任何找上架构师的问题,绝对都不是真正的问题。因为如果是真正的问题的话,提问题过来的人肯定都能够自己解决了,不需要找架构师。架构师都要有这个自觉:发现问题永远都比解决问题来的更加重要。

      在识别出问题后,大部分问题都会迎刃而解,但还是会有一些问题需要做出相应的调整,也就是架构的切分。切分是一个很生动的词汇:切分团体中每个人应得的“蛋糕”,也就是合理分配每个人的利益。利益是一个人生存的根本,所有维护利益是每个人的本能,“人不为己天诛地灭”正是由此而来。有舍才有所得,在这个模式下,每个人都必须舍弃自己一部分的利益,才能达到团体的共赢,而那些不愿意和别人进行利益交换,不想依赖别人的人就会受到孤立,生活自然也就越过越差。那么如何切分呢?切分一定要掌握如下几个原则:

        1. 必须在连续时间内发生的一个活动,不能切分。

        2. 切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。

        3. 切分出来的部分,不应该超出一个自然人的负载。

        4. 切分是内部活动,内部无任怎么切,对整个系统的外部应该是透明的。 

      在我看来,架构的实质其实就是利益的分配,架构师就是要去平衡别人的利益,甚至会调整别人的利益的。软件工程是一个博大精深的学科,我不能只满足于做一个会编程的码农,现在的社会需要的是软件构架师这种复合型编程人才,不局限于解决问题,而是发现问题、平衡问题的两端。这就需要从今天开始做一个有心人,盲目的编程只会局限自己的眼光,提高自己的格局从善于发现开始。


     


     

      

  • 相关阅读:
    English 2
    速算24点
    心理学1
    从微服务到函数式编程
    034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述
    033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
    032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题
    031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
    030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符
    029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑“非”运算符
  • 原文地址:https://www.cnblogs.com/clueless/p/8525480.html
Copyright © 2011-2022 走看看