前期学习小结和后期进阶计划 | Java工程师

96
拾壹北
2017.03.27 16:46* 字数 2346

2017-03-27

从2月14号开始到现在,已经在QFC培训1.5+月了,培训的内容很丰富、很系统:

  • 文化培训、工程师素养
  • Java
  • Guava
  • Servlet + Tomcat
  • JDBC
  • Spring
  • Mybatis
  • 数据库
  • 数据库基础
  • MySQL
  • web
  • HTTP + Json
  • Linux
  • 基本命令
  • Shell
  • Maven
  • 开发安全
  • ...

PART 1 前期学习小结

0、视野开阔

初出校园,即使很不情愿把自己定位作一个“小鲜肉”,但是到公司经过系统化的训练,接触了很多牛人,使用了很多没有用过的开发工具,对以前了解过的知识再度深入的学习 ... ... 真切感受到自己懂得太肤浅。站在大平台上,视野逐渐开阔了,摆脱了先前自己小打小闹的“井底”,接触了企业级的开发的技术方案。在这种冲击下,使我逐渐明确了技术在我个人发展中所要具有的重要地位,以及我该如何成为一个技术控,正如《如何做一个合格程序员》课程上讲师所讲:你是一个码农、程序员、工程师还是 ... ... 艺术家?

  • 关于公司文化

Qunar的企业文化非常鲜明,很有创业公司的感觉,只是有没有所谓“大公司的通病”我现在还不得而知。就我个人而言,非常认同Qunar的企业文化,这让我工作很愉悦。平时留心观察,就会发现公司里每个人都忙忙碌碌、精神饱满。“大声说话”,鼓励健康的冲突,在公开批评中引发思辨,让大家对事物有更清晰的把握; 遇到批评三不问, 不问出处、不问动机、不问资格;允许范错,鼓励知情地怀疑,不断学习,持续改进。

1、身份、思维的转变

学校注重过程,而公司以结果为导向,这是非常大的一点不同。学校里学知识、做作业,关注学习过程和对学习内容的掌握,即使作业做得不对也会给“步骤分”,但是在公司却不会。公司注重产出,一切目标、KPI必须量化,过程再艰辛但是结果错误甚至没有结果,那就是0。当然结果导向并不是说只看重结果,而是强调目标驱动,遇到问题主动去推进,推不动可以连越两级,直至事情解决。

2、规范化

即使是以前做过若干个项目,培训之后体会到那些小玩意儿都是学校里玩的东东,根本拿不出手。规范化在开发中处处体现:文档规范、项目管理规范、开发工具规范、框架规范、日志规范、数据规范、接口规范、监控规范、安全规范等等,时时处处体现着大公司的规范化运作。

  • 规范利于开发:团队协作甚至是个人开发,规范化的总是有好处的,遵循规范才能有理可循;技术规范化(例如使用项目管理工具Maven扩展自己的pom、TC对公司业务封装自己的工具类库等)有利于提高开发的效率,保障开发安全
  • 规范利于管理:公司不强调彰显个性,你只需要按照公司的规范做好自己的工作,并在技术上不断提高、挑战自己
  • 规范利于沉淀:系统化的知识管理有利于公司知识的沉淀,如用于文档管理的wiki,员工学习交流平台Qunar大讲堂等
3、技术深度

模仿 -> 功能 -> 性能 -> 智能

  • 模仿

刚开始看大神的代码感觉很费劲,用了设计模式和第三方类库,有点吃力,后面逐渐适应了,因为那些代码来来回回分析了好几遍,设计模式也了解了一下,Guava也不再陌生。所以,优秀的源码是必须要读的,第一步往往来自于模仿。

  • 功能

功能是基础。完成功能有很多方法,如果让我按照以前的完成方法和现在的完成方法来分类,那么只有“坏方法”和“好方法”的分类。我想说的是:完成功能要讲究技术深度,在我现在看来,第一个层次是“语法层次的完成”,就是学了基本语法去实现功能,或许以前的我就是这样子的 -- # ;第二个层次是“扩展层次的完成”,这个层次注重设计和抽象,在完成功能的基础上,考虑可扩展性和封装,考虑代码的健壮性和鲁棒性,考虑类设计的合不合理,方法接口设计考虑内聚和耦合... ...这需要大的代码量积累,包括阅读优秀框架的源码和自己的代码量。

我能这么分是因为我正处在这第二个阶段,至于还有没有更高的层次,我现在还不清楚,也不必着急搞清楚,功夫还不到那个层次是悟不出来的。

对我而言,现在这个阶段就是提升第二个层次的能力(当然某些语法、JVM等的基础还是需要补一补),提高方法主要是:读源码 + 看官方文档 + 看书 + coding + 请教导师(在剩下的半个月zhenbing.guo哥还是我的导师的日子里...)

  • 性能

对web application的可靠性和性能的考虑在以前是欠缺的,现在就不一样了,企业级应用面对更高数量级的用户群,从数据库扩展到负载均衡再到想方设法提升服务性能。

  • 智能

  • 算法:现在涉及的较少

  • AI:这是个啥

4、交流沟通

这是一种意识也是一种能力。遇到问题要主动请教,没遇到问题也要主动看看别人是怎么做的(往往别人那里有自己不曾见过的技能),故而为一种意识;让对方明白自己的问题和意图,简洁明了的把问题表述出来,先抽象给自己,再抽象给别人,故而称之为能力。

切莫瞎搞,多沟通,多问——“人不要脸,天下无敌”

5、解决问题的能力

经过上次小平的感悟分享:往往在处理遇到的问题上花费了太大的精力,而可怕的是,这种时候往往都不知道自己在做什么,没有“顿一下”想想问题的原因,对问题没有概念上的认识和范围的界定,没有一个明确的解决问题的思路,导致我们大多数情况下不是在解决问题,而是在浪费时间。也许有时侥幸解决了问题,也不知其前因后果,除了解决当前的问题,其他毫无意义。

  • 呈光师兄的建议:遇到问题先“顿一下”,给问题一个界定:这个问题属于什么范畴?然后结合自己的知识储备和当时的环境预测引发问题的原因,带着这些目的去寻找问题的解。给自己规定一个求解的时间,如果规定的时间里还没有解,就主动求救,不要钻进牛角尖。

  • 我的体悟:一个问题就是一个点,自己知识上的一个缺陷,应该以点带面补充欠缺的知识体系,不过需要注意是,避免扩充知识占据工作任务,可以先把要学习的内容记录下来,下班或者任务完成后再进行梳理。

PART 2 后期进阶计划

导师给出的建议:
  • 编码规范
  • 设计方面
  • 设计模式
  • OOP的设计原则
  • 不光是知道关键是实践中要用起来,比如之前反复提到的内聚、方法定义原则 ... ...

这里主要针对Part1中技术深度部分做后期Java开发知识的进阶计划,先附一张Java工程师技能表:

  • Java(一个月内完成)

  • Java基础:《Java核心技术 卷一、卷二》

  • 设计模式:设计模式教程

  • 《Effective java》

  • 《重构,改善既有代码的设计》

  • 《代码整洁之道》

  • 框架

  • spring
    教程 + 官方文档

  • Mybatis:源码

  • Dubbo:源码

  • Redis:源码

规划与总结