技术员如何在3年内快速成长为技术专家?
在我们公司有些同学在前三年中就快速成为某⼀个领域的技术专家,有些同学也可能⽌步不前。
  本⽂将从学习⽅法和实战技巧两个⽅⾯和⼤家⼀起探讨如何在三年内快速成长为⼀名技术专家。
学习⽅法:
掌握良好的学习⼼态
掌握系统化的学习⽅法
知识如何内化成能⼒
⼴度和深度的选择
实战技巧:
你需要学会的编码习惯
在业务团队做开发如何成长
掌握良好的学习⼼态
空杯⼼态
  空杯⼼态
  ⾸先要有空杯的学习⼼态,⽽不是傲娇⾃满,固步⾃封,空杯⼦才可以装下更多的东西。
  然后要学会取百家之长,带着欣赏的眼光看团队的同事或学校的同学,欣赏每位同事或同学的优点,然后吸取他们的优点,因为每个同事都有其擅长的能⼒。
  ⽐如有的同事技术能⼒强,那么可以观察下他如何学习的(或者他请教学习⽅法),有的同学擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?
  如果他解决不了时,他是如何寻求帮助。有的同学擅长使⽤ IDE 或 MAC 的快捷键,那么可以向他学习提⾼⼯作效率。
  有的同学能快速理解业务知识,观察他是如何做到的,⾃⼰如何达到他的程度。沟通能⼒,解决问题能⼒以及规划能⼒都可以向同事学习。  挑战权威
  从书上看到⼀个知识点,或者从别⼈那⾥听到⼀个知识点,⼀定要去挑战和质疑这个知识点的正确性,否则学到的知识点可能是错误的。
  先⽤逻辑思维推测下,再实战检测下,⼀定要记住实践是检验真理的唯⼀标准。
  ⽐如同事说这个 SQL 加这个索引是最快的,⾸先要思考同事的结论是如何得出的,是靠历史经验还是测试过?
  如果我们没有经验,就加上这个索引跑下 SQL,看看执⾏计划和执⾏时间,再换下其他索引试试会不会更快。
  依次类推,并发⼀定⽐串⾏快吗?⽆锁⼀定⽐加锁快吗? 很多结论都是在特定的场景下才会产⽣的,⼀定要⾃⼰亲⼿实践验证下。
  坚持学习
  有的同学可能⼯作了五年,但是学习的时间可能⼀年都不到。学技术不能急于求成,只要学习⽅法正确,量变⼀定会引起质变。
  我在⼤学刚学 Java 时,怎么都学不会,但是坚持学习了⼏个⽉,每天看张⽼师的 Java 视频教学。然后买书,按照书⾥的代码⼀⾏⼀⾏的敲代码。
  我⽩天睡觉,晚上学习和写代码,写到宿舍关灯时就去避风塘呆⼀晚上,早上 6 点钟回宿舍睡觉,学到⼀定时间后,突然恍然⼤悟,才⼊了门。
  在⼯作中,我曾经花了⼀个⽉的时间学习 AOP 的实现原理,学习了各种⽅式来实现 AOP 的原理,并写了⼏种实现⽅式的代码。
  虽然花的时间很多,但是到现在仍记忆犹新,对于排查问题和学习其他知识都⾮常有帮助。
  要做到坚持学习,学习的环境⾮常重要。如果你想学,但是⼜不在学习状态,可以考虑换个学习环境,我经常会去星巴克看书和学习。我听说有的同事会周末抽⼀天去⼤学教室上⾃习。
  把事做精
 把事做精
  对⾃⼰要求越⾼,进步越快,要有强烈的把事情做完美的⼼态。
  我刚开始⼯作的时候,总是快⽽不精,做事做的不够细致,总希望快速拿出结果证明⾃⼰,但是反⽽证明不了什么,技术能⼒也得不到提升,缺少技术亮点,在团队中也没什么影响⼒,后⾯就开始锻炼⼀次就把事情做对的⼼态和⽅法。
  我观察过,很多⼈都擅长快速做事情,但是把事情做好做精致的⼈会⽐较少,但是结果却是在精益求精的路上才会快速提⾼⾃⼰的能⼒。
  ⽐如⽤ 100 ⾏代码实现的功能,思考下是否可以⽤ 10 ⾏来实现,以便于降低运维成本,提⾼下次的编码效率。
  引⽤ GUAVA 等类库,提取公共⽅法和使⽤ JDK8 新特性等。系统的⽅法压测过后,单机只能承受 1700 QPS,可以思考和实践能否优化下程序提⾼ QPS,减少服务器数量。
  把事情做精,⼀定是要强迫⾃⼰多花⼼思多花时间在这件事情上。有位技术⽜⼈给我分享了⼀个⼼得,我觉得说的⾮常好。
  ⽼板给你布置了⼀个任务,你要花百分之 150 的精⼒做到 100 分,这样在⽼板那⾥你就能拿到 80 分或者 60 分。
掌握系统化的学习⽅法
  如果学习到的知识不成体系,那么遇到问题时就会⾮常难解决。有些同学会出现这些情况,⽐如编码时遇到问题百度搜索,如果百度上不到答案,这个问题就解决不了。
  再⽐如,在开发中要⽤到某个技术点,就学习下 API,程序调通后就不再深⼊研究,浅尝辄⽌,如果程序遇到其他问题也不知道如何解决。
  以上情况我认为叫点状学习。遇到⼀个问题,解决⼀个问题,需要⼀项技术,学习⼀项技术。那么如何由点到⾯,由⾯到体,形成系统化学习呢。
  ⾸先要确定学习的知识领域,需要达成的学习⽬标,针对⽬标制定学习计划。
  就像你要写⼀本书⼀样,先把⽬录写出来,然后根据⽬录上的知识点逐步去学习,最后把这些知识点关联起来,形成⼀个系统化的知识体系。
  学习的时候,可以制定⼀个计划,以周为单位,⽐如第⼀周学什么,第⼆周学什么。
  ⽐如我最近在学习⼈⼯智能,学习步骤是:
  ⾼数基础知识:线性代数,微积分和统计学。最近在打德州扑克时,我也会⽤统计学⾥的知识计算下输赢的概率。
  ⼈⼯智能基础:买⼏本⼈⼯智能的基础书籍,如《机器学习基础教程》《Python 机器学习》。
  框架:TensorFlow 等。
实战:在⼯作中到⼀个应⽤场景,把学到的知识运⽤进去。
  实战:在⼯作中到⼀个应⽤场景,把学到的知识运⽤进去。
知识如何内化成能⼒
  作家格拉德威尔在《异类》⼀书中指出,1 万⼩时的锤炼是任何⼈从平凡变成世界级⼤师的必要条件。
  1 万⼩时有多久?每天学习 10 ⼩时,需要⼤约三年。但是很多⼈都⼯作了五年甚⾄更长,但是为什么成为世界级⼤师的却⾮常少?读者可以先⾃⼰思考下这个问题,接下来谈谈我的看法。
  成长必须经历⼀个步骤,就是把知识内化成能⼒。知识是⽤脑记住的,能⼒是⽤⼿练习出来的。
  在⼯作的⼏年⾥,我们可能看过很多书,听过很多技术讲座和视频,但是通过听和看只是让你能记住这些知识,这些知识还不能转换成你的能⼒。
  听和看只是第⼀步,更重要的是实践,通过刻意练习把听到和看到的知识内化成你的能⼒。java技术员培训
  刻意练习,就是有⽬的的练习,先规划好,再去练习。⾸先给⾃⼰定⼀个⽬标,⽬标可以有效的引导你学习。
  然后使⽤ 3F 练习法:
  ·专注(Focus),专注在眼前的任务上,在学习过程中保持专注,可以尝试使⽤番茄⼯作法。
  ·反馈(Feedback),意识到⾃⼰的不⾜,学习完之后进⾏反思,思考下⾃⼰哪些⽅⾯不⾜,为什么不⾜。
  ·修正(Fix),改进⾃⼰的不⾜。
  不停的练习和思考可以改变⼤脑结构,⼤脑像肌⾁⼀样,挑战越⼤,影响越⼤,学习更⾼效,并且也会产⽣突破性。
⼴度和深度的选择
  技术⼈员的学习路径有两个维度,深度和⼴度。很多程序员都有这个疑问,是先深后⼴,还是先⼴后深呢?
  通过这么多年的学习和思考,我的建议先深后⼴,因为当技术学到⼀定深度后,就会有触类旁通的能⼒,⾃⼰掌握的⼴度也⾃然有了深度。
  但是在实际学习过程中,深度和⼴度是相互穿插着学习,⽐如学习并发编程时,⾸先学习 JDK 源码,然后学进去之后,开始看 JVM 源码,最后看 CPU 架构,在技术点逐渐深度研究的过程中,⼴度也得到了完善。
  所以⽆论哪种学习⽅式,学习态度才是最重要的,在⼴度学习的时候有深⼊研究的态度就能达到⼀定的深度;在深度学习的时候,主动学习相关的技术点,⼴度也得到拓宽。
你需要学会的编码习惯
  技术员应该学会通过技术的⼿段来提⾼效率。⼏个常⽤的⼿段是使⽤⼯具,快捷键和编写脚本。
使⽤各种⼯具
  使⽤各种⼯具
  技术⼈员电脑尽量⽤ MAC,使⽤命令⾏效率⼀定⽐在 1024*1024 像素中⼀个 10*10 像素的按钮更快。IDE ⽤ IDEA,⽐ Eclipse 更智能。命令⾏⼯具⽤ iTerm 和 IDEA ⾥的 Terminal。
  写⽂章⽤ MAC 的客户端⼯具 MacDown,左边编写,右边展⽰,⽐ Word 等⼯具⽅便快速很多。
  有时候我还会⽤按键精灵⾥配置脚本解决⼯作问题,⽐如通过点击我们的系统,来执⾏任务。
  这样的⼯具很多,只要能提⾼⼯作效率的⼯具,⼤家都可以尝试使⽤。
使⽤快捷键
  使⽤快捷键
  MAC,IDEA 和 Eclipse 有很多快捷键都要学会使⽤,⽐如在 MAC 命令⾏中通过 idea . 快速打开⼯程,通过 open . 快速的打开⽂件夹,在 IDEA ⾥通过快捷键把⼀段代码抽成⼀个单独的⽅法,快速⽣成 getter setter ⽅法。
⽤脚本写⼯具
  ⽤脚本写⼯具
  当我们⽤⼈⼯的⽅式做⼀件重复性很强的事情,⾸先要考虑使⽤⼯具来帮我们⾃动完成,如果没有类似⼯具,可以⾃⼰写个脚本来实现,这样除了能快速解决问题,还能提⾼⾃⼰的技术能⼒。
  ⽐如,我经常要在两个 maven 仓库发布 jar 包,我就写了个脚本来实现 jar 包的发布,deploy.sh 代码如下:
在业务团队做开发如何成长
  我⼀直在业务团队中做开发,在业务团队最主要提⾼的能⼒是业务抽象和架构能⼒,通过业务场景,不断思考如何通过合理的架构和业务抽象能快速⽀持业务,降低运维成本。
  同时在这个过程中锻炼技术能⼒,⽐如写⼀些技术框架来快速⽀持业务,做到技术驱动业务。
可配置化的⽅式⽀持业务
  可配置化的⽅式⽀持业务
  设计业务的领域模型,把不随着业务逻辑变化的领域模型做成系统能⼒,把随着业务逻辑变化功能,做成可配置化,上⼀个新业务,通过配置的⽅式或少量开发就能⽀持。
  在做客户后台功能时,由于需要展⽰的数据种类⾮常多,每种数据展⽰可能需要花费⼏天的时间,所以设计了⼀个通⽤的技术框架,实现了通过配置化的⽅式展⽰各种数据。
  写框架解决业务问题
 写框架解决业务问题
  我在上家公司经常做⼀些 CRUD 的业务功能,我就⾃⼰开发了⼀个快速做 CRUD 的框架 jdbcutil,
通过配置实体⽣成 SQL 语句,实现了⼦类只要继承⽗类,就⾃动拥有 CRUD 的能⼒。后⾯还写过⽣成 CRUD 页⾯代码的程序。
  ⽬前我们团队在做的 TITAN 框架通过模块化开发的⽅式,解决易变的业务系统在多⼈开发时遇到的问题。
技术驱动业务
  技术驱动业务
  在业务团队,⼀定要不断的思考如何利⽤技术来快速⽀持业务,配置化是⼀种思路,但是有些功能配置复杂度⽐较⾼,配置加验证的⼯作量,可能需要⼀个星期的时间。
  那么能不能减少⼈⼯配置,实现系统⾃动化配置?建议可以研究下⼈⼯智能,通过⼈⼯智能的⽅式实现,系统告诉⼈需要配置哪些东西,然后交给⼈来进⾏确认,这样可以⼤⼤减少⼈⼯成本,更快的⽀持业务。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。