到底怎样的程序员能称为架构师?-程序员宅基地

我曾问过很多自称热爱代码的程序员的发展规划,大多都回答说期望成为一名架构师。而在招聘一方,有的团队会过滤掉多次提起架构一词而一点不提具体内容的简历。可见,虽然在大多数程序员眼里,架构师是神圣的,但又不得不承认事实是:“架构”和“架构师”是最常被滥用的。那些写能 PPT 而不能写代码的人,只做和事佬而不考虑软件快、稳、便捷的人,都称不上做“架构”更别提“架构师”

到底怎样的程序员能称为架构师?

那么什么样的人可以称为“架构师”?

据称架构一词源于建筑行业,架构师这个职位,不管是前端还是后端,职责是相同的。而用规划一次房屋的装修来描述架构师这个职位的职责是非常合适的。

建立一套 Web API 就像在定装修风格。要选择注重重 CRUD 的 RESTFul 式,还是请求自定义性更强的 GraphQL 式,又或者是简单的 JSON-RPC 式,这就像装修风格是选要简洁的日式、粗犷的美式还是奢华的欧式。定方向和选型这件事无处不在,架构师必须根据实际需求,做各种决策,为后面各部分整体结合打好基础。

灯光、墙面、家具等各个部分都需要根据风格精心设计、执行和不断修正,才可能达到原定目标,架构也一样。拿光线控制来说,施工人员可能会忽略你注重的一些细节:暖色的书房氛围;明亮且能切到影院模式的客厅;装在合适位置才不会刺眼的背景灯。在每个环节的执行上,架构师既要设计,又要保证对每个角色充分理解,必要时不排除动手编写重要环节的功能,而在经验或考虑不足的点上一旦出现问题就必须迅速调整。空有一个好的设计而没有好的执行,是非常让人惋惜的。

值得一提的是,选用最好的卫浴用品、最贵的过滤器并不是获得最佳洗浴室体验的关键点。同样,软件架构并不是说把每个部分做到最好再拼凑起来就能达到佳效果。最好洗浴室体验的关键点在于折中和妥协。例如,在水压不是特别高的情况下,把过滤器安装在总闸虽然能让用水达到最健康的状态,但会导致淋浴的水压不够,进而使体验大打折扣。把过滤器安装在厨房出水口可能是最佳的平衡,既保证水压又保证了用水的健康。分成多个部分是解耦,而协作的平衡是内聚。低耦合、高内聚是架构师处理软件各部分协作的终极目标。

装修有很多细节,例如,若不喜欢晾衣服且生活在有“黄梅天”的上海,可选洗烘一体机;房子面积不大,可选扩展型家具;对通风质量要求比较高,可安装新风系统。软件架构也需要考虑很多细节,例如客户需求、实际环境、技术可用黑科技之类、安全、重用、扩展等。而这些细节方面的考虑,并不是一个刚入门的新人能做到的。

总的来说,称得上架构师的人,必须是具备丰富系统设计经验且能保证设计执行的设计师和决策者;必须参与设计、开发执行和测试但又不局限于一个角色。也许架构师并不一定
全是这样,这仅代表个人看法和期望。

Java架构师需要会的技能

既然java架构师,首先你要是一个高级java攻城尸,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池...:;java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案java字节码技术;nio,没什么好说的,值得注意的是"直接内存"的特点,使用场景;java多线程同步异步;java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效的解决问题,比如hashmap的实现原理,好多五年以上经验的人都弄不清楚,还有为什扩容时有性能问题?不弄清楚这些原理,就写不出高效的代码,还会认为自己做的很对;总之一句话越基础的东西越重要,很多人认为自己会用它们写代码了,其实仅仅是知道如何调用api而已,离会用还差的远。

熟练使用各种数据结构和算法,数组、哈希、链表、排序树...,一句话要么是时间换空间要么是空间换时间,这里展开可以说一大堆,需要有一定的应用经验,用于解决各种性能或业务上的问题;有时间再补充。

熟练使用linux操作系统,必备,没什么好说的 。

熟悉tcp协议,创建连接三次握手和断开连接四次握手的整个过程,不了解的话,无法对高并发网络应用做优化;
熟悉http协议,尤其是http头,我发现好多工作五年以上的都弄不清session和cookie的生命周期以及它们之间的关联。

系统集群、负载均衡、反向代理、动静分离,网站静态化

分布式存储系统nfs,fastdfs,tfs,Hadoop了解他们的优缺点,适用场景

分布式缓存技术memcached,redis,提高系统性能必备,一句话,把硬盘上的内容放到内存里来提速,顺便提个算法一致性hash 。

工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题。

数据库的设计能力,mysql必备,最基础的数据库工具,免费好用,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个mysql dba。其他nosql数据库如mongodb。

还有队列中间件。如消息推送,可以先把消息写入数据库,推送放队列服务器上,由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力,解藕系统。

以上纯粹是常用的技术,还有很多自己慢慢去摸索吧;因为要知道的东西很多,所以要成为一名合格的架构师,必须要有强大的自学能力,没有人会手把手的教给你所有的东西。
想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。

架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器,为了架构而架构,这是最扯淡的,架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。

架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Java_fenxiang/article/details/88858832

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签