后端工程师的成长

工程师成长之前的观点。 工程师怎么成长

我的观点核心是,认清自己的定位体系化的成长,通过技术视野促进自己的成长。

Java基础

对于Java而言,最基础的无外乎Java Specs JVM Specs 阅读代码,尤其是基础类库的时候有疑问基本可以从这里翻。

总体上把握的话还是 Thinking in Java, 进阶就是思想上的问题,这些可以看下:

然后就是深度问题,如果从系统设计的角度看,无外乎Concurrent(JUC), Nio, Streaming等等,这些基本需要深入的研究和理解下。

Java之外

深度的本源还是基础,比如看nio的多路复用,免不了epoll/kqueue之类,性能优化也免不了进程/线程管理等,这类的基础还是os和linux kernel相关。而socket相关又免不了TCP/IP4层。 JUC里的CAS AQS很多东西又设计到JMM,这些基本又是计算机体系结构的内容。这些都是技能树里的叶节点。

  • Linux内核
  • 操作系统
  • 深入理解计算机系统

基础的外延才是架构,如果希望对架构有个较深的整体认识,还需要对架构模式有一定的认识。比如经典的POSA系列。

后端系统的最终还是分布式,分布式的基本思想需要有一定的把握力,比如分布式难点,Paxos, 2PC, CAP等,如果没有类似的宏观概念基本没有什么架构观念在里面。

MIT 6.824 是个很好的梳理。

进阶

程序员没有什么捷径,就是多读多写代码。

  • netty
  • spring
  • guava
  • elasticsearch
  • dubbo(x)

怎么读,我认为最有效的方法还是造轮子

视野

通用的技术社区我就不列了,而且通用社区基本每天都有后端的各种信息,这个能解决很多问题。

其他的,如知乎的R大,InfoQ(Qcon, ArchSummit), JavaOne, OpenJDK Maillist等等。

回到目前的团队

接下来做的事情:

  • 基础服务docker化 (jenkins, gitlab, jira, testlink etc.)
  • 数据基础服务的搭建 (database混乱, log混乱, 数据中心化等)
  • 服务轻量级化 (termite, 轮子, 部分服务docker化)
  • Java 8化 (拥抱变化, 包括为了的java9的jigsaw.)
  • 组件化 (为了业务而做组件?组件的价值是什么? )
  • 其他的… (比如change队列, yaml loader, optlog etc. 我要做这些的目的是什么? )

我们写过的代码,做过的调研,是好牙医技术的财富,更是我们技术生涯的财富。

公司成长和个人成长永远是双赢的。

最后

人的精力总是有限的,成长都是暗时间的累计,差距也是一分一毫的累计。

人都是懒惰的,当自驱力失效的情况下,强制是唯一的手段。

EOF