【转载】阿里感悟:如何在三年内成长为一名技术专家

写在前面:自从看完了《并发编程的艺术》一书,就开始关注做者方腾飞的网站:并发编程网,里边常常会有不少干货,本身能学到不少东西,这一篇便是转载做者的某次内部演讲吧,全文以下:git

 

工做前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,作事专一,也容易养成良好的习惯。在咱们公司有些同窗在前三年中就快速成为某一个领域的技术专家,有些同窗也可能止步不前。本文和你们一块儿探讨下如何在三年内快速成长为一名技术专家。程序员

学习方法github

  • 1:掌握良好的学习心态
  • 2:掌握系统化的学习方法
  • 3:知识如何内化成能力
  • 4:广度和深度的选择

实战技巧编程

  • 1:你须要学会的编码习惯
  • 2:在业务团队作开发如何成长

 

掌握良好的学习心态

空杯心态

首先要有空杯的学习心态,而不是傲娇自满,故步自封,空杯子才能够装下更多的东西。首先要学会取百家之长,带着欣赏的眼光看团队的同事或学校的同窗,欣赏每位同事或同窗的优势,而后吸收他们的优势,每一个同事都有其擅长的能力,好比有的同事技术能力强,那么能够观察下他如何学习的(或者找他请教学习方法),有的同窗擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?若是他解决不了时,他是如何寻求帮助。有的同窗擅长使用 IDE 或 MAC 的快捷键,那么能够向他学习提升工做效率。有的同窗能快速理解业务知识,观察他是如何作到的,本身如何达到他的程度。沟通能力,解决问题能力以及规划能力均可以向同事学习。服务器

挑战权威

从书上看到一个知识点,或者从别人那里听到一个知识点,必定要去挑战和质疑这个知识点的正确性,不然学到的知识点多是错误的。先用逻辑思惟推测下,再实战检测下,必定要记住实践是检验真理的惟一标准。好比同事说这个 SQL 加这个索引是最快的,首先要思考同事的结论是如何得出的,是靠历史经验仍是测试过,若是咱们没有经验,就加上这个索引跑下 SQL,看看执行计划和执行时间,再换下其余索引试试会不会更快。依次类推,并发必定比串行快吗?无锁必定比加锁快吗? 不少结论都是在特定的场景下才会产生的,必定要本身亲手实践验证下。架构

坚持学习

有的同窗可能工做了五年,可是学习的时间可能一年都不到。学技术不能急于求成,只要学习方法正确,量变必定会引发质变。我在大学刚学 JAVA 时,怎么都学不会,可是坚持学习了几个月,天天看张老师的 JAVA 视频教学,买书按照书里的代码一行一行的敲代码,白天睡觉,晚上学习和写代码,写到宿舍关灯时就去避风塘呆一夜,早上 6 点钟回宿舍睡觉,学到必定时间后,忽然恍然大悟,才入了门。并发

在工做中,我曾经花了一个月的时间学习 AOP 的实现原理,学习了各类方式来实现 AOP 的原理,并写了几种实现方式的代码,虽然花的时间不少,可是到如今仍记忆犹新,对于排查问题和学习其余知识都很是有帮助。框架

要作到坚持学习,学习的环境很是重要。若是你想学,可是又不在学习状态,能够考虑换个学习环境,我常常会去星巴克看书和学习。我据说有的同事会周末抽一天去大学教师上自习。运维

把事作精

对本身要求越高,进步越快。要有强烈的把事情作完美的心态,我刚开始工做的时候,老是快而不精,作事作的不够细致,总但愿快速拿出结果证实本身,可是反而证实不了什么,技术能力也得不到提高,缺乏技术亮点,在团队中也没什么影响力,后面就开始锻炼一次就把事情作对的心态和方法。我观察过,不少人都擅长快速作事情,可是把事情作好作精致的人会比较少,可是结果倒是在精益求精的路上才会快速提升本身的能力。好比用 100 行代码实现的功能,思考下是否能够用 10 行来实现,以便于下降运维成本,提升下次的编码效率。引用 GUAVA 等类库,提取公共方法,和使用 JDK8 新特性等。系统的方法压测事后,单机只能承受 1700QPS,能够思考和实践可否优化下程序提升 QPS,减小服务器数量。机器学习

把事情作精,必定是要强迫本身多花心思多花时间在这件事情上。有位技术牛人给我分享了一个心得,我以为说的很是好,老板给你布置了一个任务,你要花百分之 150 的精力作到 100 分,这样在老板那里你就能拿到 80 分或者 60 分

掌握系统化的学习方法

若是学习到的知识不成体系,那么遇到问题时就会很是难解决。有些同窗会出现这些状况,好比编码时遇到问题百度搜索,若是百度上找不到答案,这个问题就解决不了。再好比,在开发中要用到某个技术点,就学习下 API,程序调通后就再也不深刻研究,浅尝辄止,若是程序遇到其余问题也不知道如何解决。

以上状况我认为叫点状学习。遇到一个问题,解决一个问题,须要一项技术,学习一项技术。那么如何由点到面,由面到体,造成系统化学习呢。

首先要肯定学习的知识领域,须要达成的学习目标,针对目标制定学习计划,就像你要写一本书同样,先把目录写出来,而后根据目录上的知识点逐步去学习,最后把这些知识点关联起来,造成一个系统化的知识体系。学习的时候,能够制定一个计划,以周为单位,好比第一周学什么,第二周学什么。

好比我最近在学习人工智能,学习步骤是:

  • 1: 高数基础知识:线性代数,微积分和统计学。最近在打德州扑克时,我也会用统计学里的知识计算下输赢的几率。
  • 2: 人工智能基础:买几本书人工智能的基础书籍,如《机器学习基础教程》《Python 机器学习》
  • 3:框架:TensorFlow 等。
  • 4:实战:在工做中找到一个应用场景,把学到的知识运用进去。

知识如何内化成能力

做家格拉德威尔在《异类》一书中指出,1 万小时的锤炼是任何人从平凡变成世界级大师的必要条件。1 万小时有多久?天天学习 10 小时,须要大约三年。可是不少人都工做了五年甚至更长,可是为何成为世界级大师的却很是少。读者能够先本身思考下这个问题。接下来谈谈个人见解。

成长必须经历一个步骤,就是把知识内化成能力。知识是用脑记住的,能力是用手练习出来的。在工做的几年里,咱们可能看过不少书,听过不少技术讲座和视频,可是经过听和看只是让你能记住这些知识,这些知识还不能转换成你的能力。

听和看只是第一步,更重要的是实践,经过刻意练习把听到和看到的知识内化成你的能力。

刻意练习,就是有目的的练习,先规划好,再去练习。首先给本身定一个目标,目标能够有效的引导你学习,而后使用 3F 练习法:

  • 1: 专一(Focus),专一在眼前的任务上,在学习过程当中保持专一,能够尝试使用番茄工做法。
  • 2:反馈(Feedback),意识到本身的不足,学习完以后进行反思,思考下本身哪些方面不足,为何不足,
  • 3: 修正(Fix),改进本身的不足。

不停的练习和思考能够改变大脑结构,大脑像肌肉同样,挑战越大,影响越大,学习更高效,而且也会产生突破性。

广度和深度的选择

技术人员的学习路径有两个维度,深度和广度。不少程序员都有这个疑问,是先深后广,仍是先广后深呢?

经过这么多年的学习和思考,个人建议先深后广,由于当技术学到必定深度后,就会有举一反三的能力,本身掌握的广度也天然有了深度。可是在实际学习过程当中,深度和广度相互穿插着学习,好比学习并发编程时,首先学习 JDK 源码,而后学进去以后,开始看 JVM 源码,最后看 CPU 架构,在技术点逐渐深度研究的过程当中,广度也获得了完善。

因此不管哪一种学习方式,学习态度才是最重要的,在广度学习的时候有深刻研究的态度就能达到必定的深度,在深度学习的时候,主动学习相关的技术点,广度也获得拓宽。

你须要学会的编码习惯

程序员应该学会经过技术的手段来提升效率。几个经常使用的手段是使用工具,快捷键和编写脚本。

  • 1. 使用各类工具

技术人员电脑尽可能用 MAC,使用命令行效率必定比在1024*1024像素中找一个10*10像素的按钮更快。IDE 用 IDEA,比 Eclipse 更智能。命令行工具用 iTerm 和 IDEA 里的 Terminal。写文章用 MAC 的客户端工具 MacDown,左边编写,右边展现,比 Word 等工具方便快速不少。有时候我还会用按键精灵里配置脚本须要解决工做问题,好比经过点击咱们的系统,来执行任务。这样的工具不少,只要能提升工做效率的工具,你们均可以尝试使用。

  • 2. 使用快捷键

MAC,IDEA 和 Eclipse 有不少快捷键都要学会使用,好比在 MAC 命令行中经过 idea . 快速打开工程,经过 open . 快速的打开文件夹,把 IDEA 里经过快捷键把一段代码抽成一个单独的方法,快速生成 getter setter 方法。

  • 3. 用脚本写工具

当咱们用人工的方式作一件重复性很强的事情,首先要考虑使用工具来帮咱们自动完成,若是没有相似工具,能够本身写个脚原本实现,这样除了能快速解决问题,还能提升本身的技术能力。

好比,我常常要在两个 maven 仓库发布 jar 包,我就写了个脚原本实现 jar 包的发布,deploy.sh代码以下:

cp pom.xml pom.xml.bak
rm pom.xml
ln -s pom-2-deploy.xml pom.xml
mvn deploy
rm -rf pom.xml
cp pom.xml.bak pom.xml
rm pom.xml.bak

在业务团队作开发如何成长

我一直在业务团队中作开发,在业务团队最主要的提升的能力是业务抽象和架构能力,经过业务场景,不断思考如何经过合理的架构和业务抽象能快速支持业务,下降运维成本。同时在这个过程当中锻炼技术能力,好比写一些技术框架来快速支持业务,作到技术驱动业务。

可配置化的方式支持业务

设计业务的领域模型,把不随着业务逻辑变化的领域模型作成系统能力,把随着业务逻辑变化功能,作成可配置化,上一个新业务,经过配置的方式或少许开发就能支持。

在作客户后台功能时,因为须要展现的数据种类很是多,每种数据展现可能须要花费几天的时间,因此设计了一个通用的技术框架,实现了经过配置化的方式展现各类数据。

写框架解决业务问题

我在上家公司常常作一些 CRUD 的业务功能,我就本身开发了一个快速作 CRUD 的框架 jdbcutil, 经过配置实体生成 SQL 语句,实现了子类只要继承父类,就自动拥有 CRUD 的能力。后面还写过生成 CRUD 页面代码的程序。

目前咱们团队在作的 TITAN 框架经过模块化开发的方式,解决易变的业务系统在多人开发时遇到的问题。

技术驱动业务

在业务团队,必定要不断的思考如何利用技术来支持快速支持业务,配置化是一种思路,可是有些功能配置复杂度比较高,配置加验证的工做量,可能须要一个星期的时间,那么能不能减小人工配置,实现系统自动化配置,因而能够研究下人工智能,经过人工智能的方式实现,系统告诉人须要配置哪些东西,而后交给人来进行确认,这样能够大大减小人工成本,更快的支持业务。

 

转载自并发编程网 – ifeve.com 本文连接地址: 《阿里感悟》如何在三年内成长为一名技术专家

相关文章
相关标签/搜索