软件架构师的能力与特质

软件开发工程师的职业发展无非两大类:一是做“官”,从事管理工作;二则继续从事技术工作。对于后者,软件架构师(software architect)是很多软件开发工程师追求的理想岗位。在这我想谈一谈软件架构师所需的几大能力和一些特质,以便读者能更好地规划自己的职业发展。
 
1)需要很好的逻辑思维能力。对于软件开发工程师来说,由于大多从事编程工作,所以很容易以为自己的逻辑思维没有问题,足以满足软件架构师一职所需。实则不然!就我的观察,不少工作近十年的工程师仍存在思维不清的问题。主要表现在和他讨论问题时,你问他A,他回你B,且很容易跑题和抓不住重点。软件架构师在工作中需要“咬文嚼字”地理解文字和沟通,此时清晰的思维就是关键。
 
2)需要很强的概念(括)能力。软件架构师在很多情形下是管理层与工程师之间的桥梁,除了掌握技术细节,还要对技术细节进行一定的抽象概括使管理层理解问题所在,以便管理层恰当地参与决策。此外,软件架构师在日常工作中也会面临各种各样的技术问题,良好的概念能力有助于把握住问题的本质,从而有效率和效果地解决问题。
 
3)需要熟练运用UML(Unified Modeling Language,统一建模语言)的能力。软件架构师由于需要从事大量文字描述性的技术工作,不可避免地需要借助图,而UML就是一种较通用和接受程度较高的图形化建模语言。软件架构师对于UML的掌握,不能只局限于明白各种图型的意义,还得能熟练地查阅UML规范,以便精准地了解各种术语和图型的含义,从而实现对模型的精确表达。记住,“好图胜过千言万语”,图要好就得追求表达的精确性,这就离不开对UML的精准掌握。
 
4)需要很强的业务能力。对于系统架构师(system architect),业务能力可能包括对行业规范的熟悉、对组织结构和客户关系的清晰了解和研发流程的深刻理解等。对于开发架构师(development architect)业务能力则可能包含对行业规范的理解、对开发环境(编程语言、开发平台与框架、开发流程等)的熟悉和很强的软件查错能力等。
 
5)需要较强的组织能力(含沟通)。软件架构师在日常工作中需要做不少的协调工作,包括组织技术会议的召开和带领团队攻坚,这些都需要一定的组织能力。拿组织会议来说,有些工程师不喜欢在会议之前进行事先准备和与相关人员进行允分沟通,而是喜欢开会时事无巨细地讨论,这势必造成会议低效。面对这样的会议,软件架构师需要很好地判断是终止会议重新安排呢,还是继续进行。如果继续进行就得在会议中很好地掌控会议的话题和节奏,并依据自己的概念能力让与会者更有效地达成共识。
 
6)敢于承担责任。软件架构师在不少情形下是技术层面的决策者,他必须敢于“拍板”,这就要求他承担起相应的责任。当然,责任的承担不能“人有多大胆,地有多大产”那样,而应建立在自己的职业素养和能力之上。软件架构师如果不勇于承担责任,那就容易造成开发工作开展不下去的局面。
 
7)面对挑战的勇气。其实,这一点对于每一个职场人士都很重要,但对于软件架构师尤为重要。与软件开发工程师相比,软件架构师所面临问题的复杂度更高,既会有技术因素,也会有人为因素。解决这些问题有时是很大的挑战,也让人觉得痛苦。有挑战就意味着其中一定蕴涵着其中存在可收获的内容,每克服一次我们的能力就获得了提高。在面对挑战时,我喜欢对自己说“没有痛苦就没有成长”;也会设想自己在面对挑战的环境中工作了一年、几年后将会有多大的收获啊!这种设想会给我们的职业发展带来更大的想象空间,使得自己面对挑战时更具耐心、信心和勇气。
 
如何获得前面所提及的一些能力相信是读者比较关心的,我的回答是“需要时间和坚持”。有些能力的获得不是简单地掌握技术知识就行了,而是需要一定的人生阅历,比如概念能力就是这样的。对于开发软件架构师,如果要设计出一个好的软件架构,除了接触和学习已有的出色设计外,还得需要一定的行业积累和很好的概念能力。对于概念能力,我认为它是依托于生活的,这就需要时间。这种理解也解释了为什么业内流传着成为软件架构师得30岁以后才更可能。
 
至于坚持,它同样很重要。一个人的能力是有限的,很难做到这个也懂那个也会。某种程度上,所掌握知识的广度对于我们的职业发展是有益的,但这是基于我们在某一方面很精这一前提的。要精于某一方面,就一定离不开在同一领域的不断坚持。坚持意味着我们在那个领域会碰到更多的问题和做更多的思考,这是成为领域专家的唯一途径。
 
或许有读者会问,在这些能力中为什么没有谈及文档编写能力呢?原因不是因为它不重要,相反,这是软件架构师所需具备的最基本能力之一。其实,文档编写能力考验的是前面提到的逻辑思维、概念和运用UML的能力。一个说话没有障碍的人,只要具备这三大能力就一定能写出好的技术文档。在日常工作中,如果某人不喜欢写文档、或认为写文档不重要,那是因为这三大能力还不过关的缘故。也正因如此,我建议工程师不要想当然地以为“只要会写代码,文档编写能力并不重要”。如果这样想,那么软件架构师一职也就离我们远去了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA编码设置

见:https://www.cnblogs.com/winner-0715/p/6364306.html项目中为了避免乱码等问题应该使用UTF-8编码方式,其实把编码方式设置成UTF-8是创建完项目后就要做的事,按照如图所示进行设置:这里要将Transparent native-to-ascii conversion选项勾选, 否则项目…

C#实现像微信PC版一样的扫码登录功能

现在好些网站都支持扫码登录,感觉上安全了很多,但是本地程序扫码登录的不多,就用C#实现了一下,需要作如下准备 在官网上申请一个企业微信,有条件的话做个企业认证吧,我们的是认证过的,所以账号和本地其他系统的账号是统一的.在应用中创建一个应用,这个是关键,我们扫码就是和它有…

JVM(一)史上最佳入门指南

2019独角兽企业重金招聘Python工程师标准>>> 提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的…

如何成为一个技术“牛人”

今天给浙江大学过来的几个还没有毕业的研究生做面试,这些研究生是想来公司实习的。在面试的过程中,一个学生问我“我们有C/C、JAVA等等多种语言,我如何才能成为某一方面的一个技术牛人呢?这一问题一直困扰着我”,对于这…

python量化数据处理小细节(以后还会不断补充)

使用tushare数据源获取数据后处理 以下都是本人在获得数据后,进行量化回测时,处理数据遇到的各种坑以及解决方案,有些甚至都很幼稚,切勿嘲笑 获取数据 导包 import tushare as ts import pandas as pd import matplotlib #(ju…

Linux find和grep的区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 grep是查找文件中匹配条件的行,find是搜索匹配条件的文件。 1.find:查找文件或目录语法: find 查找位置 文件名或目录名如:在…

Mysql 忘记密码重置教程

https://jingyan.baidu.com/article/454316ab4e9e65f7a7c03ad1.html 百度经验转载于:https://www.cnblogs.com/leaf-cq/p/10410694.html

067:【Django数据库】ORM查询条件详解-range

【Django数据库】ORM查询条件详解-range range:判断某个 field 的值是否在给定的区间中。示例代码如下: # views.py文件内容:from datetime import datetime from django.utils.timezone import make_awaredef index(request):start_time ma…

贴吧爬虫

import requests import re#根据url获取网页html内容 def getHtmlContent(url):page requests.get(url)return page.texthtml getHtmlContent(https://tieba.baidu.com/p/4840106397)#以html中使用re模块解析出所有jpg图片的url #百度贴吧html中jpg图片的url格式:…

别把自己变成了“二等公民”

上周参加一个代码审查会,在会上发现了设计上的一个很严重的错误。于是,我提了好几个问题,想知道为什么会出现这一错误。但是,我的同事告诉我这都是印度团队做的设计。需要提供的一个背景信息是,这个项目是我所在的研发…

jquery函数加载及生成随机数

$(document).ready(function () {var code ; //在全局定义验证码  1.将函数写好 function createCode(){code "";var codeLength 4;//验证码的长度var checkCode document.getElementById("code");var random new Array(0,1,2,3,4,5,6,7,8,9,A,B,C…

rsync解说

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、简介1、认识Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间…

关于java中getClass()和getSuperClass()的讲解

为了讲解这个问题,我们先来看一下下面的代码: package com.yonyou.test;import java.util.Date;class Test extends Date{private static final long serialVersionUID 1L;public static void main(String[] args) {new Test().print();}public void print(){Syste…

期权回测框架设计思路

期权回测,博主已经研究了很长时间,也接触了不少平台,如真格,以及这位博主提供的思路(https://blog.csdn.net/luoqingyong/article/details/107523930),利用backtrader进行期权回测。确实国内做期…

UVA815

这道题主要学到的就是数据结构的组织,一些需要从小到大排列的东西,这些东西还有对应的东西。这个时候使用map可以解决 下面贴出代码。其中所使用的思想,估计这个东西是没法学的,这就只能是灵感 //这是什么吉尔题,题意都…

我对应聘者的面试原则

最近参与了几次单位招聘面试工作,在面试工程师时,我是用我的分层准则指导与候选人的交流内容,以确定他的能力层次是否达到我所期望的。大体上软件工程师可以分为三大层次,分别是技术知识积累层、掌握设计方法层以及运用开发方法论…

rsync:基本命令和用法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 2.1 说在前面的话 rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以实现增量备份的工具。配合任务计划&#…

Java常见排序算法之堆排序

在学习算法的过程中,我们难免会接触很多和排序相关的算法。总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的。 从今天开始,我们将要进行基本的排序算法的讲解。Are you ready?Let‘s go~~~ 1、排序算法的…

python量化数据处理小细节2

处理数据主要使用的是DataFrame格式,偶尔也会有list格式。 首先定位寻找数据:主要为loc,iloc 创建DataFrame: df pd.DataFrame([1,2,3,4,5],index [a,b,c,d,e],columns[aa])或 datapd.DataFrame(np.arange(16).reshape(4,4),i…

python编码问题

参考:https://blog.csdn.net/qq_33692803/article/details/81321340 注意区分系统默认编码和本地默认编码、编码和解码的区别转载于:https://www.cnblogs.com/jianglinliu/p/10418437.html