如何从程序员到架构师?

关于这个问题,首先要知道什么是架构。在软件开发中,架构普遍指通过某种特定的平台,而达到完成整体软件功能的设计过程。架构是软件设计中非常重要的一个环节只要需求和架构确定之后,我们认为这个软件也就基本上可以定型了。

软件架构的主要目的是希望能重用以前的代码和设计,从而提高开发效率;在保持系统稳定的前提下,扩充功能和性能。

如何提高系统设计能力

一般而言,开发人员在从事开发3年后基本可以逐步做出初步设计,再做设计3年基本能够具备架构设计的能力。架构设计虽然高屋建瓴,从顶朝下对问题进行分解并最终解决,但是你会看到真正所有能力却是来源于你日常的编码和日常功能模块设计的大量实践积累。

当然大部分软件开发人员并一定能够在其中具备软件设计能力,这涉及到思维意识的转变问题。比如前面提到的架构要具备自动化和复用,在设计阶段要有分层、分解、抽象、聚合等思维能力。

比如一个边缘设备日志收集上报云端功能,别人告诉你采用MQ去接收日志上报到云端,你去编码实现,那么具备的是编码能力,但是你自己能够对问题进行分析和建模,参考比较各种方案后,得出采用Kafka去接收并上报日志到云端,效率最高,并最终实现,那么就是具备了设计能力。

因此在日常的编码工作中,需要刻意去培养这方面的软件设计能力。

在架构设计领域,需要站在更高的层次,你面对的是一个完整的业务系统的构建。这个业务系统包括了底层技术框架的搭建,开源组件的选择,开发框架和分层设计这些非功能性的设计内容,同时考虑如何对各种业务进行分而治之。

架构设计能力的培养,我觉得可以从如下几个方面进行:

1.务实技术基础

想要造高楼,基础必须要扎实,这里以Java为例,需要务实的基础有:Java基础、高并发、JVM优化、设计模式、数据库和索引。

现在有很多好的视频网站,能找到视频教程,比如哔哩哔哩,视频教程有个好处就是可以快进,回退,并且看起来比较轻松,我喜欢看书,书看的比较仔细推荐书籍有:《On Java》(新版Java编程思想)、《Java并发编程的艺术》、《深入理解Java虚拟机》、《高性能Mysql》、《HeadFirst设计模式》。。。。。。

一边看书,一边实战、一边记录写成博客系列教程,同时又能锻炼自己的文笔和口才,说不定还能收获一批粉丝,打造自己的个人IP,扩大自己的影响力,如果写的好的话,还能转成收费专栏,还能有一部分收入。

2.培养软件设计能力

设计能力往往就是从编码和编程思维开始的。

首先是将重复的东西自动化掉,其次是将相似的东西通过参数抽象变成可复用的方法或函数,在抽象后来实现自动化。其次就是自动化后你会发现如何更好应对变化,为了应对变化你做了更多的抽象或接口设计,在这个过程中逐步积累设计能力。这一个步骤你会发现你的就是某种设计模式来解决的问题。

其二就是编码积累到一定量后,你可以看软件架构设计的书籍,先形成设计的完整思路和方法论,也可以看设计模式类的书籍,对设计模式有一个完整的了解,能够将日常编码实践的内容和设计模式进行对比分析。这样再遇到类似的问题,你可以少走自己探索的弯路等。

但是以上也仅仅解决了设计能力的问题。

没有解决架构思维层面的问题,架构思维的核心是全局能力,是高度的抽象和建模能力,是既要清楚业务,又要懂得技术的相互衔接能力。

当然大部分架构设计人员更加热衷于开发框架,技术平台,开源组件选择等,而忽视了如何从一个业务需求的提出,你能够通过系统分析,得出整个业务系统应该如何划分模块,如何设计接口,如何设计整体数据模型和数据库来支撑业务,同时你也能够想清楚你需要遵循什么样的开发框架和模式以及分层架构来完成某一个功能模块的开发。

这个事情实际相当有难度,大部分人员不具备这个能力。

但是为何很多人架构设计还是做得不错,简单来说整个信息化和互联网发展到今天,各种业务系统,电商平台,互联网应用你基本都可以找到类似的架构参考和原型,你只需要参考别人的做法去做即可。

比如你要做一个电商平台,具体应该如何分解各个子系统,或者是否建立各个中台能力中心,这些都有标准的做法,不需要你再去创新,你只需要参考别人实践去做即可。

但是如果你面对一个全新业务,你要去规划和构建整个业务系统的架构设计,模块划分,我相信大部分架构设计人员都无法做好这件事情。这个能力已经不是简单的你技术多牛,而是考察的全局思维和系统观,考察的是分解和集成,分类和抽象,问题分析和解决,模式匹配能力,这些能力统筹我经常谈到的思维能力。

如果一个人真正具备这种独立分析和解决问题的能力,具备系统思维的能力,你会发现他不仅架构设计做得好,其它很多事情都能够很好的完成。就是这个道理。

所以要具备这方面的能力,你可以先熟悉相关的业务域知识,也可以看看完整的类似面向对象的软件架构设计书籍,领域驱动建模书籍,传统的类似RUP统一软件过程方法论等。看看完整的业务需求如何通过流程分析,用例建模,对象建模,接口设计逐步落地。

3.培养创新和激情

创新并不只是想出一个新颖的点子,创新是把点子转换成经济力量的工作,按照Joseph Tidd、John Bessant、Keith Pavitt 的理论,创新分为产品创新、过程创新、位置创新、范式创新。

  • 产品创新:改变一个单位提供的东西(产品或者服务)
  • 过程创新:改变产品或者服务生成或配送的方式
  • 位置创新:改变引入某产品或者服务的前后关系
  • 范式创新:改变单位所做业务的基础精神模型

为了能够创新,需要找到一定的边界,这能够让你有学习、适应和恢复的空间,而不必过多的关注其中产生的错误,如此让灵感变成为现实的创新产品。

保持激情能够让你感觉是在做自己的事,而不是别人让你做事,要在架构师工作中发现激情、保持激情,当激情被别人浇灭的时候,要学会重启激情,把难事做好,尽心尽力投入,用激情作为前进的动力,同时坚持锻炼,这样才能一直在架构师的路途上不断走下去,成为一名出色的架构师。

以上内容分享自华为云社区《【云驻共创】怎么提高自己的系统设计和架构理论水平》,作者:阿提说说。




架构师从程序员中来,但不是每个程序员都能成为架构师,要想成为架构师,不仅要有一定的基础代码能力,也要对业务有所了解,更重要的是从思维的广度和高度进行提升。

1.基础能力

基础能力是一个程序员必备的能力,如基础代码开发、XML/JSON操作、数据库、常用框架、工具等,深入一些的还有算法、设计模式、高并发、线程等内容。如果要成为架构师,这些内容是必须要了解和掌握的,所以在平时要多分析源码分析底层的架构和算法,不断积累自己的基础能力。

2.业务能力

架构都是为系统服务的,为系统服务就是为实际业务服务的,所以对于一个合格的架构师,一定要了解业务,可以根据不同业务设计出最优化的技术方案来满足实际的业务场景,并且能充分考虑到高并发、稳定性和安全性等性能要求。这就要求我们在平时工作的过程中,注意了解业务、积累经验,将实际业务与产品开发相融合,提升业务能力。

3.思维能力

成为一名架构师,不仅是一名优秀的程序员,更要在思维的高度上超过程序员,加强思维的广度,能从分析、设计、开发、使用等多种角色的角度去看待项目和设计架构,同时要具备思维的严谨性和开放性,把握细节的同时也要接纳更多的技术方案,能够协调好各种方案的处理方式和使用范围,实现最优化的设计。

数通畅联专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注。




个人认为,有的时候不用太相信和在意这些头衔,什么XX总、技术负责人、首席架构师...头衔一个比一个唬人;

我也见过不少PPT架构师,PPT写的非常漂亮,各种架构规划的非常高大上,但是一问到具体实现,又变得支支吾吾起来,嘴里永远是一些大话、套话、虚话。

宰相必起于州郡,猛将必发于卒伍,在我看来,架构师一定是要技术出身。

架构师的工作职责

有些人认为架构师的工作只有架构设计,其余的工作让项目经理和开发人员做就可以了,我认为这种说法是有问题的;在我看来,架构师的工作是要贯穿于整个项目的。

  • 了解和把控需求:我认为架构师从需求阶段就要介入,保证自己可以完整的理解和把握客户需求;任何架构和代码都是服务于需求的;

  • 架构设计和技术选型:如果是一个新的项目,架构师需要对项目进行分解和抽象,最终形成项目架构,并结合项目的实际情况(程序员的开发能力和技术栈),完成技术选型;如果是一个老项目,通常是比较大需求或改版,架构师需要考虑这次的需求做在什么地方,是在现有技术上就能实现,还是需要引入新的技术。

  • 制定规范、把握方向:架构师就是项目的技术权威,他应该时刻与开发人员进行沟通,让开发人员理解架构意图,实现业务功能;有一些技术难点,都需要架构师冲在前面解决;甚至当项目遇到一个“坑”时,架构师是要“真刀真枪”的写代码、“填坑”的。

想要成为架构师,需要培养哪些能力

知道了架构师的工作职责,那么也就不难了解需要培养哪些方面的知识和技能,才能成长为架构师了。

  • 技术深度和广度:虽然有些人PPT写的好、会忽悠,也能成为“架构师”,但是我还是希望自己能成为一个有着真材实料、可以解决实际问题的架构师;所以作为架构师,技术储备一定要丰富;有些软件和框架不一定要了解的非常细致,但是也一定要知道其优缺点、试用场景、可以解决哪些问题、同时也会带来什么问题;

  • 业务知识的积累:架构和技术都是为业务服务的,脱离了业务的架构设计,都是不切实际的;所以想要成为一个架构师,一定要在业务领域有深厚的积累;

  • 抽象思维、模块化思维:这是进行系统分析和需求分解的基本素质,具备抽象思维的能力,才能把一个大的需求,分解成一个一个小的功能,但是分解后依然可以掌控全局;

  • 沟通能力:和需求人员沟通,和业务人员沟通,和领导沟通,和项目成员沟通,和周边项目组沟通...这些都是必不可少的;

  • 领导能力:推动整个项目的发展,需要架构师的领导能力,这里说的领导力和项目经理所需的领导力还不太一样,这里的领导能力,更多的是指技术能力的影响,甚至是个人魅力,也就是【可以服众】,让开发人员心里想:“这个架构这牛,跟着他我学到了很多东西”。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。




架构师是程序员的发展方向之一,所以很多程序员对架构师的工作岗位和工作内容也比较关注。目前IT行业的很多架构师都是从程序员成长起来的,可以说程序员是架构师的一个重要基础。

从程序员成长到架构师大概需要经历四个阶段,分别是初级程序员、主力程序员、核心研发级程序员、架构师。每个解决都有不同的任务,也有不同的知识储备,如果能一步一步成长到架构师,对于程序员来说不仅要有较强的工作能力,还需要有较强的学习能力。

在初级程序员阶段,主要的工作是功能模块的实现,能够辅助主力程序员完成具体的功能实现,这个阶段会锻炼程序员的基础编码能力。在初级程序员阶段,主要需要学习软件开发的流程、技术实现以及软件部署和测试方面的内容。往往初级程序员阶段的成长速度是比较快的,工作能力强的初级程序员在1到2年就会成长为团队的主力程序员。

主力程序员要独立完成功能模块的设计和实现,对软件整体结构有清晰的认知,知道模块之间的逻辑关系,能完成初级研发任务,对技术边界有一定的认知。主力程序员的发展方向有两个,一个是走项目经理,再到咨询专家的路线,另一个就是走架构师,再到技术专家的路线。如果走项目经理的路线,则需要深入了解行业知识。而对于架构师方向来说,更应该了解各种技术方案的应用场景,以及相应的性能指标,尤其是技术关键点的解决方案,工作能力强的主力程序员经过2到3年的时间会成长为团队的核心研发人员。

核心开发人员的主要工作任务往往是产品的容器部分开发,这个过程能够对软件产品有深入的学习,核心研发人员往往要跟着产品线走,大部分核心研发人员未来都会成长为架构师或技术专家。

我从事软件开发工作多年,目前也在负责移动互联开发团队和大数据团队,我会陆续在头条写一些关于软件开发方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有大数据方面的问题,也可以咨询我。

谢谢!




主要是大部分人没机会接触到足够的经验。现在程序员界也阶级固化了,很多人听上去牛逼的不得了,其实不过是一个组的主力而已,接触不到足够量的全局,你是无法了解什么是架构的。

很多行外的或者学生在问,这黑黑的窗口和一行行代码到底是如何变成一个软件的,这就是外人和程序员对软件的理解不同,相对的,普通程序员,也无法理解,他编的一个功能,到底在最后整体架构当中有什么作用。

在中小企业里,这种架构的要求还不高,但是已经可以看出雏形,那些仅仅跑上一两个微服务做个react app的小公司可能不会特别关心架构,这在我看来,和鬼火少年没什么区别,都在裸奔。一个宕机或者主程删库就能干掉一家这样的公司。

有相当多的小朋友对架构师天然有敌意,主要是因为他们无法理解软件或者系统,只有40%是和编码有关的。无论是源代码版本控制,还是源码质量管控,再到CICD,再到HA,DR,这一切都需要一个好的架构师来有机的组成。而这只是一家最小型公司的东西而已,一旦公司变大,系统开始增加,不仅仅上面讲的复杂度成笛卡尔积增加,更出现了因为复杂度增加而导致人力不可能执行的情况,这种时候,监控软件的架构设计又出现了,在中型公司,也就是程序员数量大约小于千人的非外包公司,系统集成,系统自动化是架构的主要职责。

再往上,当一个公司更加巨型化,系统的维护性和优化都可以牵涉每年几百万。这种公司本身架构师团队都可能比一个微型公司大,这些人,普通人根本看不到…

如果还固执地认为计算机世界就是在IDE里写代码,拥有这种学生思维的码农,当然成不了架构师

展开阅读全文

页面更新:2024-04-20

标签:程序员   分解   抽象   架构   思维   需求   能力   模式   业务   基础   项目   财经   工作   系统   技术   软件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top