热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为了升级到架构师,程序员无需过度关注哪些技能?哪些技能不可缺?

如果走技术路线,架构师是个关键的结点。如果在大厂,一般有有6年时间足以升级到高级开发。因为在大厂里,能提供架构师所需的分布式组件开发调试以及上线的经验,上进点的程序员只要跟着大流,

    如果走技术路线,架构师是个关键的结点。如果在大厂,一般有有6年时间足以升级到高级开发。因为在大厂里,能提供架构师所需的分布式组件开发调试以及上线的经验,上进点的程序员只要跟着大流,多通过排查问题观察底层,多通过压测或部署组件多实践缓存、高并发高可能之类的技术,想不升级到架构师都难。

    但不少程序员止步于高级开发,在我之前的博文为什么很多程序员没有升级到架构师?里讲述了这一现象并分析了原因。如果是因为主观不上进导致自身发展受限,那么别人也帮不了你,不过我在面试候选人的时候,发现一些态度积极的程序员把时间和精力用在了不正确的技术方面,从而无法升级,这是相当可惜的。在本文里,就先从反面讲,哪些技术可以在升级到架构师以后再看,同时讲下从高级开发升级到架构师的关键技术,以及实践方法。

1 理论方面的知识,不必整本书地学

    像网络,Linux操作系统,编译原理等理论方面的书籍,一般很厚,不过幸好,此类知识可以边学边看,比如要看linux线程并发方面的知识时,再看相关资料也不迟。

    这里将综合多个大厂面试和开发的标准,给出理论方面需要掌握的普遍标准,反之没提到的就可以用到再学。

    1 数据结构方面,了解链表,队列,堆栈,线性表,树和矩阵,图以及更复杂的无需了解,然后结合一种语言,比如Java,了解对应的对象,比如ArrayList。同时了解下红黑树,二叉树之类的概念,或许面试会问到

    2 编译原理,了解状态机概念,可能会用到。

    3 网络方面,理解七层网络协议,外带了解下tcp,udp和http协议细节即可

    4 Linux方面,稍微会写命令即可。

    5 数据库原理方面,也就了解些概念即可,比如索引原理,事务,范式和锁即可。

    总之,与其花时间看整本理论方面的书,还不如多敲些实际的代码。

2 项目管理方面的技能,需结合实际,而无需啃书

    这方面有很多经典,但看百本书,比如实践一个月,这方面的建议是,在架构师之前的阶段,看些相关软件管理的实践要点即可,比如敏捷开发里,头脑风暴以及迭代发布的实践要点,而且最好和你当前从事的软件管理模式相匹配,比如你现在用的是敏捷模式,那么就关于详细设计概要设计等文档的编写方式,大致了解下格式即可,也无需深入。

    还是这句话,这方面的一些经典书,当你成为项目经理或高层以后,再看不迟,而且到了这个层次看了很有帮助。不过话说回来,目前在大多数的公司里,不是你在项目管理方面的技能很资深才提拔你成为项目经理,而是你对业务有一定了解,同时技术,尤其是解决问题的能力达到一定水平 ,而且沟通协调方面的能力还不错,才提升你。

    在成为架构师之前,项目管理方面的技能大致要了解到什么程度呢?比如拿敏捷开发举例。

    1 每天站会该如何组织,如何表面自己已做,未做和当做的事,如何表明自己任务的阻碍点。

    2 如何维护每天站会所需的看板,看板上该有哪些模块,相关任务点该怎么写。

    如果到了项目经理级别,还得会用看板,站会和任务纸条等方式管理项目,以及控制风险,但如果仅仅是架构师之前的开发,了解这两点即可,不用看过多其它的资料。所以为了升级到架构师,更应当把时间用在分布式等技能上。 

3 虚拟机,底层代码,一定要对景实际问题,别脱离实际去看

    我见过不少虚拟机方面的书,非常经典,从底层和细节全面讲述了虚拟机的结构和GC流程,同时也看过不少关于字节码结构方面的资料,此外,我也见了不少深入细节讲线程的书。这些书在面试方面对人的帮助优于提升技能方面。

    为什么不建议在升级到架构师之前,过多看虚拟机等方面理论的资料呢?第一平时开发用到的可能性不大,第二看不用不久就会忘掉,第三对解决调优高并发之类的问题,也没什么太大的帮助。

    而且,对于底层代码,也要解决问题去看,不建议大面积地看诸如集合,Spring IOC底层的源码。比如某天遇到因Kafka而导致的OOM异常,那么可以通过Debug到底层看消息相关流程,再排查问题,调试MyCAT的问题也可以这样。总之如果带有排查问题的目的,针对性很强,非常有帮助,就像围绕语境学习常用英语单词和词组,但如果大面试去看底层代码,就好比背字典,效果大家可以想象。 

4 设计模式,软件重构之类的技能应放在项目大环境,别抽象学,更全面铺开学

    这方面也有不少经典,可谓字字珠玑。这里我提两个问题。

    第一,面试时如何考察这方面的技能?估计是问“你用过哪些设计模式?”,大家结合项目叙述下即可。

    第二,在工作中你接收了一段代码,在此技术上新增功能,你敢按设计模式和软件重构方面的知识,重构现有代码吗?估计不敢,因为风险太大。

    那么这方面的技能对程序员有什么帮助呢?

    第一固然是面试时帮助加分,第二能让你在解决问题时有更多的方案,比如实现通知回调类需求可以用观察者模式,第三能帮助你的代码看上去不难看。

    比如一些文学名著,对我们的帮助更多的是陶冶情操多涨知识,设计模式和软件重构类的著作能帮我们提升在软件开发方面的素养,在升级到架构师之前,这方面该掌握到什么程度呢?

    1 了解必要的设计模式,而不是23种都面面俱到,需要结合项目问题了解,同时面试时,能结合你解决过的问题说明某些设计模式的细节。

    2  了解软件重构方面的结论,比如哪类代码不好,该如何重构?

    要达到这个程度,所需花费的精力并不多,但如果用大量时间看这方面纯理论的书,而不结合项目实际有选择性地调个别点来看,那么到了架构师以后,你会发现当初学的很多点对你的帮助并不大。

5 面试时如何考察架构师?架构师平时干哪些活?

    在前文里,给出了一些无需着重看的技能点,无需着重看,并不是怂恿大家不学习,而是把看这些技能的时间用在能立竿见影出效果的技能上。

    在讲架构师哪些技能不可缺之前,我们先来看下面试架构师的问题。 

    第一层问理论和实践细节,比如Netty的序列化方式,以及Dubbo针对不同级别设置超时时间的方式。

    第二层问分布式调优和解决实际问题的技巧,比如如何配置MySQL主从模式,如何配置MyCAT读写分离外带高可用,如何压测,如何根据压测结果调优代码。

    第三层问底层细节,比如dubbo协议,Netty读写索引的细节,kafka持久化,Redis超时失效机制等方面。

    第四层是针对资深架构,问如何根据业务设计高并发框架,比如秒杀系统如何实现。

    为什么要问这些呢?因为招进来的架构师需要在平时工作中干这些活,哪方面的活呢?

    第一固然是高级开发所需的,分析和解决代码层面的问题。

    第二是出了分布式组件方面的问题,首先知道该看哪些底层代码,即了解组件的重要组件和工作流程。而且这方面要有经验,比如出了Netty OOM问题,得知道该从堆外内存等方面排查,而且得优先检查通讯结束时release部分的代码,如果没问题再debug。这才是架构师比高级开发值钱的点。

    第三得给出面向高并发高可用的方案,比如搭建负载均衡和限流组件等,而且不光是理论层面的,还得负责部署上线。

    其实在我之前相关博文里,已经给出了类似内容, 上文只是总结。在下文里,将面向这个目标,给出升级到架构师不可或缺的技能,以及如何高效掌握这些技能。

6 要熟悉解决异常问题方面的组件技能

    理论方面的技能应该很多,网上有很多xx大厂的面试题,而且大家只要稍微上心点,应该也能看到理论方面的相关技能,比如Netty重要组件,Netty协议等,但如果光知道这些用处不大,还得继续看解决异常方面的技能。

    比如为了Dubbo超时会有什么危害,如何防治?或者Netty线程池满了以后该如何优雅降级。如何掌握这方面的技能呢?

    第一到网上搜,比如用 Netty OOM异常,Netty 线上问题排查 等关键字查,这样好歹能知道该看哪些方面。我在博客园上就看到不少结合问题分析分布式组件的文章。

    第二结合平时遇到的线上问题看底层代码,分析为什么会出错,也就是说结合实践看。如果没机会实践怎么办?大厂里一般可以找其它组, 小公司一般比较全栈,估计在部门里多观察即可。

    比如遇到一个MyCAT问题,大家可以先按照大神分析问题的步骤,再调试一遍代码,复盘下大神排查问题的思路,然后再扩大看下这个流程的细节,以及MyCAT的组件,这样哪怕一周遇到一次问题,一个月也有四次实践学习的机会,积累个半年,你的能力就大涨了。比起单纯看资料,这样的升级效率就高多了。 

7 更要掌握全栈流程的分布式组件部署技能

    这方面,要多向运维学习,小到linux命令和shell脚本,中到系统上线,大到扩容,你未必动手敲代码,但可以参与值班。架构师所需的高可能高并发技能是虚的,下面给出这方面的具体技能。

    1 能通过jenkins或shell脚本部署组件的能力,系统上线时,需要了解灰度发布切流量的实践技巧。

    2 未必需要了解底层,但需要配置高可用的集群,比如redis集群,一台机器出故障,第一会报警,第二能自动切换。

    3 需要掌握优雅停机和迁移扩容的实践技巧,比如迁移服务时,如何设置优雅停机,扩容时,第一如何起新服务,第二如何把流量切到新服务上,第三如何设置回退预案。

    4 如何组织压测,如何在压测时监控关键指标,如何根据压测结果优化性能。

    还是这句话,如果当前没机会参与,就先在边上看,等给出结论后,再自己复盘看下相关技能的实践要点。这些技能就比较难得了,网上类似资料有,但很少,而且需要自己组织,所以更需要在平时工作中主动积累。我见过很多高级开发,平时也就注重在windows上开发业务,由于工作中用不到,他们为图省事,不去参与部署压测和扩容方面的工作,结果会在高级开发的阶段停滞不前,最后年龄上来了,导致无法升级。

8 随后才是看些面试题应对面试

    我也知道,如果当前处于初级和高级开发阶段,平时被分配的工作任务很少涉及到上述架构师所需要的技能,但并不意味着你身边就没有架构师,工作中就看不到这方面的技能,当你通过观察复盘,结合案例掌握了架构师相关技能后,如果在大厂,那么自然有机会升级到架构师,但如果在小公司,那么你就需要多刷相关面试题了。

    这方面的题太多了,比如redis面试50题,xx大厂 dubbo面试xx题。如果光看这些题,面试官一旦结合案例问dubbo细节,一定能问出你没相关经验。如果被问出没相关实践经验,那么甚至你面不上大厂的高级开发岗,更别提架构师了。

    但现在你已经积累了案例经验,那通过刷题积累更广泛的技能,那么面试架构师,甚至面试大厂架构师,都不是问题了。或者退而求其次,你或者可以先进大厂做高级开发,这个职位也能积累架构师的经验,这总比在小公司前途要光明。

9 总结:不为炫耀学,学的时候更得注意优先级和方法

    我们看书,不是为了向朋友炫耀自己了解多少,而是要提升自己解决实际问题的能力,看底层代码同样也如此。

    在明确目标的前提下,我们也要明确学习的优先级和方法,比如一些对现阶段帮助不大的技能,可以延后学,而对升级到架构师有帮助的技能得结合实际问题学。

    总之目标得明确,所谓在正确的阶段做正确的事。如果要走技术发展路线,要升级到架构师,所有的学习都得是为这个目标。如果当前的技能无法满足大厂的面试需求,应方向正确,优先结合项目实践看分布式组件技能,而不是继续挖掘单机版这类对架构师帮助不大的技能,而且总是先深入技能,再看能帮助提升知识面的各种著作。  

    本人在之前也写过不少关于升级到架构师技巧的文章,比如以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?而在这篇文章里,是针对了一些升级方法上的误区,先讲述哪些技能无需过度学,再讲述哪些技能得优先结合项目学,自认为能在前文的基础上,进一步帮助大家在升级到架构师的路上少走弯路,希望大家能喜欢。

     最后感谢大家能读完本文,祝大家新春愉快,身体健康,万事如意。

版权说明:

    如果要转载本文,请先征得本人同意。

为了升级到架构师,程序员无需过度关注哪些技能?哪些技能不可缺?


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
GXTV杨波
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有