实战解析—论三年内快速成长为一名技术专家
本文首发于GitChat。2017年9月11日,周一晚上8点30分。支付宝架构师,《JAVA并发编程的艺术》作者,10年+软件开发和架构经验,并发编程网创始人清英带来了主题为《如何在三年内快速成长为一名技术专家》的交流。以下是主持人飘静整理的问答实录,记录了作者和读者问答的精彩时刻。
问:工作中,有时候实现一个功能,会去看有没有现成的轮子可用。对于重复造轮子与改造轮子有什么看法?
答:一定会的,其实这也是一个提高技术能力的方法,比如今天想做个日期转换的功能,JDK8有日期的新特性就会考虑直接使用LocalDate.now().format(DateTimeFormatter.BASICISODATE),以前都是自己写个DateUtils。
如果已有的轮子不满足需求,我觉得可以基于已有的轮子进行改造,提供更多的特性。
在写代码的过程中,永远要思考的是现在业界的技术方案是如何做的,
现在的方案有什么优点或缺点,我能不能直接使用,不能使用的话,是否优化后可用,当然用的时候要了解它的实现原理,做到知其然知其所以然。
问:阿里的技术专家P7从招聘层面上来说,比如工作年限,过往经历,技术能力等需要达到怎样的要求,可否详细讲一下?
答:年限是5-10年,
技术能力有几个方面的要求,扎实的基础能力,在技术上要有技术亮点,用过的框架要知道其技术原理,能独立解决各种技术问题,具备分布式系统的开发经验,比较强的实战能力。
阿里的5要求能独立负责一个模块,6要求能独立负责一个系统,7要求能架构和负责多个系统,并规划系统的未来能力,在某个领域达到专家水平,可以是某个业务领域,也可以是某个技术领域。
独立这两个字要求很高,即遇到任何技术问题,你都能独立解决。
问:工作中,产品方案设计的时候,经常会存在多方分歧,有分歧就会存在妥协,如何合理的坚持自己的观点,如何合理的做出妥协?
答:方案没有对错,每个方案都有他的优点和缺点,要分析出别人方案的优点和缺点,肯定对方方案的优点,再针对缺点提出对方如何解决这个问题,还是说不解决这个缺点。一起讨论出最合适的方案,而不是要争论谁对谁错。
问:我就是在业务团队,偏技术。框架听起来很酷但遥远,能否带入门,给几个知识点?
答:在业务团队也可以做很多框架,比如可配置化支持业务的框架,自动生成添加删除修改页面的框架,业务数据校验的框架,
只要多思考如何快速支持业务,就能找到合适的业务框架。可以从几个点出发,配置化支持业务,页面自动生成,流程标准化等。
问: 最近在学习Spring源码,看了点书,可以跟着作者的思路看源码,但是看完不久就忘了,其实是没有太多的应用场景的,对于看源码,有什么好的方法吗?
答:可以用这个思路,比如让你来设计一个Spring框架你会如何来设计,Spring Core最重要的就是IOC和AOP,
自己可以尝试实现下简单的IOC和AOP功能,然后再去对比看下Spring是如何实现的,这样即使忘记了Spring的代码,但是仍然能基础其实现原理。
问:对于三十岁的程度员,如果还想再深入做技术,有什么建议?
答:技术人员一定要有危机感,无论多大年纪仍然要持续的学习,我也已经三十多了,每周会花点时间学习点技术。
但是年纪大了,其实时间不会那么多,所以要提高学习的效率,掌握一些学习方法和方法论,并且要静下心来持续的学习。
学技术什么时间都不晚,因为总有新技术冒出来,但是一些永远不变的技术可以优先学习,比如各种协议(TCP,HTTP,一致性hash协议),实现原理,算法等。
问:自己也实现过IOC和AOP的一些小案例,但是实现比较简单,IOC是基于一个Map来实现的,AOP使用CgLib实现,但是再看Spring Core的源码时,还是感觉很吃力,嵌套层次太多,Debug多次,还是比较吃力,怎么办?
答:技术人员一定要有个特质就是死磕,有的技术人员可能花2个星期解决一个技术BUG,就是对着源码一点点的看,要能入定。带着问题去看源码会更轻松点。
问:工作中都是杂乱无难度的工作内容,如何提升技术?
答:要给自己制定学习计划,
比如要学习哪些技术,每天学习什么,达到什么程度。
工作中用一些方式方法减少杂乱无难度的工作内容,比如白天不答疑,或只在固定的时间答疑,写FAQ减少答疑,少参与一些会议,不实时去回即时通讯软件。
问:文章里面提到了架构能力,架构能力由什么组成?如何提高架构能力?又如何去设计一个架构?
答:这是个很好的问题,后续可能写一系列的文章来分享下我的看法。
架构分很多种,有业务架构,网络架构,数据架构及中间件架构。 架构能力最关键的是抽象能力,能抽象出系统中不变的部分形成领域模型。而变化的部分都是通过扩展实现的。有点像乐高积木,抽象出各种基本模块,就可以搭建你想要的东西。
那么如何提高架构能力?多学多思多实战,首先掌握架构模式和架构原则,比如分层架构,模块化,或者看些架构的书,《企业应用架构模式》等,然后看已有的系统架构,思考下该系统为什么要这样架构,遵循了哪些原则和模式,这个架构的优缺点有哪些。然后就是自己参与到架构中,和架构师一起讨论设计。
问:我是草根一个,怎么选择学习的方向?现在是做前端的一些基础工作,应该朝哪方面进深?
答:我之前在的第一家公司也写过几年前端,当时还面过阿里的前端。
前端我觉得可以先学习一些技术框架,比如React和H5。
然后做些能证明自己能力的作品,比如微信小程序,或者H5的程序。
最后就是能写一些前端框架。
我们现在Java程序员都开始做全栈工程师,用的就是前端开发提供的框架。进阶路径,学习和研究前端框架=》做作品=》做前端框架。
问:我之前做运维现在做Python运维开发,因为运维开发需求变动很厉害,场景会经常变化,做的时候感觉很容易迷茫,怎么办?
答:我认为运维主要解决的是自动化运维的问题,减少人工成本。
可以尝试定一些原则,并写一些脚本来提高运维效率。我之前在广告团队做过devops,PE给了我几十台裸机让我扩容,我自己写了个脚本一键在N台机器上进行扩容,安装nginx,jdk和程序包等。
运维需要操作系统,虚拟机,容器化技术和网络技术上非常精通。比如DNS实现原理,linux常用命令,shell脚本等。
问:我自己下来学了好多大数据相关的东西Lucene es Hadoop spark 机器学习之类的,感觉没有项目做依托,关键是没有实实在在在工作中接触的项目。怎么办?
答:首先是学习大数据相关的技术,达到一定的深度,
然后找相关公司的人沟通下,和他们泡在一起,自然就会主动找你。
我们以前有个同事就是主动和oracle的人聊JVM,最后被Oracle挖走了。
(全文完)
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 实战解析—论三年内快速成长为一名技术专家
暂无评论