0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样成为软件架构师

工程师人生 来源:网络整理 作者:工程师吴畏 2018-10-19 09:55 次阅读

“软件架构师”这个名词也不知是什么时候进入我的脑中的,不过一直就很疑惑,总觉得和软件的Team Leader之间有些纠缠不清。不过以我的观点来看,软件架构师除了没有行政上的职责以外,与Team Leader也并无二致了,也就是一个软件团队的核心设计者和决策人。作为一个软件团队的领头人,架构师应该具备哪些能力、素质和经验呢?

我可以把一个软件研发工作者的从业经历大致划分为3个阶段

第一阶段是新手期

这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这时有人跟他说你的这项工作用这个不合适的话,要是性子急的人估计就直接开始骂娘了,性子缓些的也会想尽理由说服你使用这个新东西,实在没办法的话,吃不下东西睡不着觉也想另找个地方用一下。

新手时期的程序员对需求和应用环境的掌控能力还不强,但却往往信心爆棚地认为自己写的代码有多么优雅高效。当问题出现时,大多数人的反应就是:“怎么可能!在我的机器上运行的好好的!”。不管看了多少书,学习了多么高效的算法,实际的工作中需求和环境始终是变化万端的。其实我也很不明白为什么那么多的技术类书籍往往都带有或多或少的炒作成份,往往夸大某方面的优势,而对缺点却往往一带而过,同时,相对思想算法讲解、技术介绍类的书籍,针对具体项目研发实例进行技术选型讲解的书真的少之又少,或许这也从侧面反应了写书人很多,真正做研究的却很少吧。

新手期程序员的不成熟还体现在团队表现上,当一个问题提交给新手,当跟踪别人的代码段时,经常会丢手不管,还理直气壮地说“我这块没问题”,殊不知问题都没有查清楚,你又怎知不是你的问题呢?在团队研发中,我一向坚持入口点解决问题的原则,只要问题的入口点在你这里,就必须全程跟踪查到底,问题查出来了,再通知相关人员进行程序修正。团队的程序员虽然分工不同,但每个人必须对他人的程序和算法有清楚的认识和了解,因为大家是在同一个环境下工作,虽然代码有分工,可是操纵的却是相同的设备和资源。独善其身在团队开发中是最要不得的想法。

第二阶段是中级程序员阶段

这个阶段的程序员对技术、和工具的选择已经审慎了很多,可以根据具体的需求来选择需要采用的技术,可以写出详细的需求调研报告并提出设计方案,优点、缺点分析得清晰明了。在应用层面也有较强的全局理解力,在团队中也具有相当的协作能力,因此具备较强的解决问题的能力。

中期的程序员虽然在应用层面上已经相当严谨,但在系统层面的掌控力却并不强。应用系统也并非独善其身,她和网络环境、使用方法、硬件环境、操作系统、地点、时间等等诸多因素有着千丝万缕的联系。在少量用户的中底端研发中,如越来越多的呈几何级数增长的信息管理系统中,系统掌控力并非必须的能力。但在一个高端高并发量,被大量应用于不同环境的软件产品,系统掌控力就是不可或缺的能力。这种能力我认为大部分取决于知识面,工作越多,经验越丰富,就越能对不同的应用环境有着敏锐地感觉和判断。

大多数中阶段程序员限于行业,对语言的依赖还是很强,比如搞信息系统的和搞单片机的、搞网络、路由器交换机的,由于系统层面不同,专精和对语言的理解都不甚相同。

第三阶段是高级程序员/分析师/架构师阶段

进入这个阶段的前提是多年的工作经验,广阔的知识面和对系统底层到高层的全面认识,已经使其进入了无语言无工具的层次。也就是能任何清楚地感知每种编程语言的优劣、使用范围、编码禁忌,对一个大型工程能有最全面的了解,在选择语言和确定技术方案的时候不会被自己对语言或技术工具的偏好(或者根本已经无所偏好)所影响,真正明白了其实别管是神马语言、神马技术,归根到底咱们的对象还不是CPU、内存、硬盘和网络,该做的事情一件都不能少,所谓的技术框架是对初级程序员用的,真正高级了不研究个清楚透彻都不敢让你进来。即使对同一种语言,在不同的操作系统中,如Visual C++和Unix C、AIX XLC、GNU G++等等的区别,以及不同版本之间的区别也了如指掌。这个阶段很难达到是由于对操作系统层面的清晰了解,相信一个初级程序员一路走来,大部分工作都是在Team Leader的规范和引导下完成的,每人都必须做好自己的工作,虽然在应用层面必须顾全大局,但系统层面的问题相对就难以接触了。如果不是对技术有着强烈的渴求和一定的综合能力,系统层面的工作经验将很难与你有缘。这就好比一个当外科医生的,其实做手术并不像很多人想象中那样难,一般看个几次,基本上也就差不多了,如果得到机会实际操作一下,不单是可以积累大量的经验,自信心方面的收获也是无法估量的。但是,动手术责任重大,机会不是人人都有的。技术工作者其实还是很幸福的,毕竟工作经验的取得相对于当医生还是容易的多。

高级阶段一定需要有团队的开发和管理经验,一个软件团队好比一个乐队,每个人对曲目的理解都不同,虽然司职不同的乐器,没有指挥家也会弄得一团糟。软件团队的每个人对语言、业务、能力的理解都不一样,交流方式也有别,同时他们操作着相同的系统和资源,如果Team Leader不做好规划,后果肯定可想而知。丰富的经验和敏锐的触觉神经足以判断出团队成员的编码风格和技术选择偏好,能以足够的经验和理由说服其抛弃自己的感情偏好,从而很好地完成自己的工作。这种能力有点类似于行政的管理,但实际上却是有明显的不同的,这种管理基于的是实际的丰富经验和充足的理由,绝对不可以将行政管理中的排队观念带入,如果2个人意见相左,就必须争论,争不下去了回家想清楚理由再争,甚至直到时间来证明一切,不能说这次你听我的,下次我听你的,技术工作是绝对的,最好的、最适合需求的方案永远只有一个,如果你觉得“都可以”,只能说对行业和需求还没有吃透。

高级程序员是经常会对需求说“No”的人,对行业的深入认识和对系统及应用全局的把握能力使他具有真正指导用户的能力,规范用户的工作、思想并用计算机这个工具真正对行业产生引领作用。高级架构师能深入认识管理和技术的关系,管理上出现的问题一定要在管理上解决,工作经验不多的用户或者程序员往往会把管理上产生的问题抛给软件系统,导致系统越来越复杂,维护成本迅速增长,而管理上的问题却依然存在。但有一个现状是,往往用户提需求都直接提给负责程序的程序员,小公司估计直接就和程序员联系了,大点的也由一个其实并不怎么懂技术的所谓“客户经理”协调转发,而并非经过设计师和架构师的同意,因为他们可能现在已经在研发别的项目了。那么用户的需求是否合理,是否符合当初设计的初衷,往往初级的程序员并不知晓或有不同理解和偏好。虽然这也是实际情况所限,很难做的更好,但这也造成了很多系统的持续发展力很低,而许多用户也处于信息不对等的弱势地位,也只好将就算了。

最后,技术和社会是紧密联系在一起的。社会的进步发展决定了需求和技术的发展,一个对技术发展有着敏锐感觉的架构师必须对社会有着深刻的认识。一个良好的团队必须有新老交替才能不断进步,老人要舍得带新人。“要让一部分人先富起来,然后先富的带动后富的,最终达到共同富裕。”这是我们上学时学到的话吧,不过要是先富的尽想着向前看,根本没把后富的放在眼里,那这个团队也好、社会也好,也就没多大的持续发展力了。其实我倒是认为现在真正的大富豪还是有不少知民间疾苦的,顶层的和基层的都还能了解屁民们的生活,不了解的是中间层,他们整天生活在富庶小康的温床,经常会提及一些好高骛远、不切实际的想法,而对那些为底层人民谋福利的事情嗤之以鼻,甚至讽刺为“用先进的技术做愚蠢的事情”,目的仅仅是为了哗众取宠和彰显自己的远见卓识。

先写到这里了,其实我自己也在为成为一个真正的架构师而奋斗,一家之言,难免有所偏差,不过还是那句话,“我们一直在努力”。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 架构师
    +关注

    关注

    0

    文章

    47

    浏览量

    4610
收藏 人收藏

    评论

    相关推荐

    架构与设计 常见微服务分层架构的区别和落地实践

    架构风格越倾向于清晰的职责定位,且让领域模型成为架构的核心。 基于这些架构风格,在软件架构设计
    的头像 发表于 10-22 15:34 104次阅读
    <b class='flag-5'>架构</b>与设计 常见微服务分层<b class='flag-5'>架构</b>的区别和落地实践

    一位架构师的自述:在尚未踏入的世界成为你自己

    这是我参与创作者计划的第1篇文章    我叫艾佳,工作经验14年,编程经验30年。 我来自智能平台部,负责标签平台、标签圈人、标签选品、EasyData、算法数据流的架构工作。 致力于批量
    的头像 发表于 09-23 15:25 312次阅读
    一位<b class='flag-5'>架构师</b>的自述:在尚未踏入的世界<b class='flag-5'>成为</b>你自己

    AMD Vitis统一软件平台2024.1全新发布

    通过新版本,系统架构师和开发者可以进一步优化设计开发流程,同时提升整体系统性能。
    的头像 发表于 09-18 09:34 289次阅读

    中级自动驾驶架构师应该学习哪些知识

    随着自动驾驶技术的成熟,对系统架构师的需求逐渐增加。自动驾驶系统架构师负责设计整个系统的结构、组件、接口和数据流;需要协调不同领域的专业知识,确保系统的可靠性、安全性和性能。总之,自动驾驶系统架构师
    的头像 发表于 06-20 21:47 235次阅读

    初级自动驾驶架构师应该学习哪些知识

    随着自动驾驶技术的成熟,对系统架构师的需求逐渐增加。自动驾驶系统架构师负责设计整个系统的结构、组件、接口和数据流;需要协调不同领域的专业知识,确保系统的可靠性、安全性和性能。总之,自动驾驶系统架构师
    的头像 发表于 06-20 21:45 232次阅读

    软件架构搞好了,还用担心代码可读性差?

    一、架构的概念及由来嵌入式软件架构是指在嵌入式系统中用于组织和管理软件组件的结构和设计。嵌入式软件架构
    的头像 发表于 06-14 08:10 224次阅读
    <b class='flag-5'>软件</b><b class='flag-5'>架构</b>搞好了,还用担心代码可读性差?

    MySQL的整体逻辑架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构
    的头像 发表于 04-30 11:14 401次阅读
    MySQL的整体逻辑<b class='flag-5'>架构</b>

    架构开发与优化咨询和实施服务

    得益于硬件平台算力的提升,汽车电子电气架构的集成度逐渐提高,多域融合成为了目前行业中软件工程的重要工作内容。经纬恒润可以为汽车电子和软件工程师在开发
    的头像 发表于 02-05 14:26 330次阅读
    <b class='flag-5'>架构</b>开发与优化咨询和实施服务

    微软加速转向Rust,加紧招募资深软件架构师

    去年BlueHat大会上,微软公开表示以Rust重编译Windows内核的计划,因其享有现代、便捷且代码易读的卓越性质。值得一提的是,微软推出的Azure Quantum开发工具包(QDK)亦采用了Rust,得以降低99%的代码量与提高100倍的运转速度。
    的头像 发表于 01-30 11:47 500次阅读

    MIPS聘请SiFive前高管,推动RISC-V指令集架构IP开发

    在SIFive任职期间,Brad Burgess不仅拓展了敢达三十多年的半导体行业经验,还成功开发了许多适用各类指令集的处理器,如x86、68k、PowerPC、Arm以及如今备受瞩目的RISC-V。此次成为MIPS首席架构师,Burgess将全权负责MIPS新建重磅产品
    的头像 发表于 01-08 11:41 462次阅读

    如何规划嵌入式软件架构

    。如果可预见未来没有扩展重大新业务的需求,那么相应的软件架构就没有必要采用高扩展的软件架构。比如嵌入式的传感器数据采集小设备,就没有必要把云计算等,业务范围不沾边的技术点放到其中。
    的头像 发表于 12-07 15:29 516次阅读

    恩智浦首席车载网络架构师开讲:CAN SIC与CAN XL芯片如何赋能未来汽车网络?

    zh 汽车正朝向智能化和电气化快速演进,这也带来了车载网络架构的变迁——正在从功能域转变为区域架构,实现更高的带宽、更小的时延以及更多的功能。这种变化也给汽车行业带来了诸多挑战。 为了应对这些挑战
    的头像 发表于 12-01 09:15 1138次阅读
    恩智浦首席车载网络<b class='flag-5'>架构师</b>开讲:CAN SIC与CAN XL芯片如何赋能未来汽车网络?

    什么是走线的拓扑架构怎样调整走线的拓扑架构来提高信号的完整性?

    什么是走线的拓扑架构怎样调整走线的拓扑架构来提高信号的完整性? 走线的拓扑架构是指电子设备内部的信号线路布局方式。它对信号传输的完整性和稳定性有着重要影响。正确的走线拓扑
    的头像 发表于 11-24 14:44 622次阅读

    【急招】嵌入式软件架构师,年80w内可谈!

    嵌入式linux平台,架构经验,5年以上经验 工作地点:北京市海淀区 薪酬:年80内可谈‼12月份需要到岗‼
    发表于 11-23 10:13

    优秀的架构师怎样绘制系统架构蓝图的?

    模型是对客观存在的抽象,例如著名的物理学公式 E=mc2,就是质量能量转换的物理规律的数学模型。除了物理学公式以外,还有一些东西也是模型,比如地图是对地理空间的建模;机械装置、电子电路、建筑设计的各种图纸是对物理实体的建模。而软件,也可以通过各种图进行建模。
    的头像 发表于 11-20 16:13 394次阅读
    优秀的<b class='flag-5'>架构师</b>是<b class='flag-5'>怎样</b>绘制系统<b class='flag-5'>架构</b>蓝图的?