当前位置: 首页 > news >正文

架构师的行为准则(三)

让开发人员自己做主

架构师虽然需要为系统的设计负责,但无须包揽所有的设计工作,应该给予团队成员足够的自主权,让他们发挥自己的创意和能力,你的工作是确保大家的工作能很好的组合在一起,帮助他人解决棘手困难。当你发现同事遇到麻烦时,可以主动给出建议,但更可取的做法是创造良好的氛围,让大家主动向你征求意见。

控制项目规模

架构师要试图避免做那种“超大型”系统,因为这种系统往往难以控制,控制项目规模的办法通常有:

  • 抓住真正需求
  • 分而治之
  • 设置优先级
  • 尽快交付原则

架构师不是演员,而是管家

有些架构师误解了证明自己价值的含义,以为是炫耀技术才华,甚至是刁难开发团队,把自己放在高高在上的位子,试图让别人来崇拜你。其实架构师的职责和管家类似,承担着管理技术资产的责任,要深入了解系统里各个细节,要精打细算,而不是浮在表面做无实文章。

关注性能

高性能往往和代码优美性常常没法兼容,有些架构师往往不在乎性能上的点滴损耗,为了代码更重用或更优美,不惜多查一次数据库,多与外系统交互一次,这种做法会让后期的性能提升很被动,性能压力会逼迫你打破原有的设计,为提升性能把代码搞得支离破碎。架构师需要珍惜任何一点的性能损耗。

对复杂性要有前瞻意识

在实际的运行环境中,往往简单的系统都有可能变得非常复杂,简单的远程接口可能调不通、稳固的数据库可能down掉、消息顺序可能会错乱、服务器可能会无缘无故地down机,不要假设这些情况不会发生,架构师应该对复杂的情况有前瞻意识,要在假设类似于前面的状态存在的情况下设计软件。

关注边界和接口

任何系统或模块的边界和接口都是与外交互的门面,有交互就暗藏着误解和不恰当的划分,保持接口的顺畅交互是架构师的重要职责。往往bug发生在模块与模块之间、系统与系统之间,项目的失败也往往因为系统间交互问题,因此架构师需要给予足够的关注

助力开发人员

架构师的完美设计需要开发人员是实现,因此有业务想办法提升开发团队的战斗力,常有以下方式:

  • 寻找或开发工作需要的工具,并附上使用技巧
  • 做定期的分享或提高团队学习气氛,保持团队技术上的先进性
  • 参与开发团队的招聘工作
  • 给予开发人员更多的决策空间,帮助其成长
  • 保护好开发人员,让他们尽可能地免于杂事之中
  • 直接参与开发,分担压力

记录决策的理由

架构师常常需要权衡和决策,但决策过后却没有把决策的过程和理由记录下来,其实这是在浪费很大的一笔财富。

质疑假设

架构师往往需要假设一种情境,然后在这种情境下给出方案和做出决策,很多人包括自己从来都是纠结于这个方案的优劣,并不断改进,但却忽视了这种假设的情境是否成立,而这个可能是万恶之源。

关注系统的支持和维护

架构师通常是由开发人员成长而来,因此天然地把注意力放在功能开发上,常常忽视系统的支持和维护方面,给支持人员和维护人员造成不便。架构师需要清晰知道一个系统生命周期80%在于维护上面,而系统的价值需要支持人员去不断传递给客户,他们的需求需要得到重视。有以下几点需要注意:

  • 清晰性
  • 可测性
  • 正确性
  • 可跟踪性

不要急于求解

很多架构师都有解决难题的欲望,一遇到问题,就立马陷入解决问题的泥潭中。而更可取的是审视问题本身,看是否可以改变问题,或是干脆绕开问题,很多时候技术上的难题在通过业务上的优化是可以避免的。我们不要立足点设为解决特定问题,而是应该立足于客户需求

优秀软件是培育出来的

很多架构师需要在软件的第一版本就一鸣惊人,拿出完美的作品,其实真正受欢迎的系统是在不断发布中演化而来,对于互联网软件更是如此。架构师需要做的是打好系统的基础,使其容易修改和扩展,倾听用户的反馈,不断地在无数次改进中培育我们的软件

相关文章:

  • Java 和 C#通用的DES加密工具类的实现
  • SDL源码阅读笔记(2) video dirver的初始化及选择
  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 [CSDN]
  • 主流报表工具推荐
  • 架构师的行为准则(四)
  • Android中intent如何传递自定义数据类型
  • EL表达式中fn函数
  • 主机访问VirtualBox虚拟机服务
  • GML对象的层次结构
  • NSXMLParser详解(事例)
  • 纯JS的表单邮件发送
  • 基于GML的几何数据模型
  • [转载] 古墓丽影2
  • 对GML中时态信息的分析
  • windows 子系统认识(2)
  • 【译】理解JavaScript:new 关键字
  • bearychat的java client
  • co模块的前端实现
  • es6(二):字符串的扩展
  • go append函数以及写入
  • HTTP请求重发
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JAVA 学习IO流
  • jquery ajax学习笔记
  • KMP算法及优化
  • Map集合、散列表、红黑树介绍
  • maya建模与骨骼动画快速实现人工鱼
  • Python_网络编程
  • 番外篇1:在Windows环境下安装JDK
  • 复杂数据处理
  • 精彩代码 vue.js
  • const的用法,特别是用在函数前面与后面的区别
  • # 飞书APP集成平台-数字化落地
  • #QT项目实战(天气预报)
  • ()、[]、{}、(())、[[]]命令替换
  • (3)nginx 配置(nginx.conf)
  • (7)STL算法之交换赋值
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (pojstep1.1.2)2654(直叙式模拟)
  • (超详细)语音信号处理之特征提取
  • (转)http-server应用
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Oracle存储过程编写经验和优化措施
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET框架设计—常被忽视的C#设计技巧
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /3GB和/USERVA开关
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @selector(..)警告提示
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [acm算法学习] 后缀数组SA
  • [Android Pro] AndroidX重构和映射
  • [Android]竖直滑动选择器WheelView的实现