Written by
hanhan
on
on
后端工程师的自我修养
半年前,我致力于成为Web后端工程师,当初在知乎上看到一句话:人生苦短,这么多有意思的方向,何必要做web(大意如此,web后端地位之低可见一斑)。经历到现在,才略懂。web后端的确是没挑战的一份岗位,常见的就是面向业务逻辑CRUD编程,不要说高并发、C10K问题,绝大部分人写的还是面向内部人员的web吧,别说1w并发,日访问量能有1w都罕见(当然我很期待以后有这样的实际需求抛给我,以打破我对web的错误认知)。那么后端工程师,尤其是Java工程师,资深和新手程序员其差别在何处?
仅以我这一个月的零碎见闻来看,有:
- 主流框架、中间件相当熟练的应用,包括但不限于
netty
,redis
,Spring
, ORM(MyBatis等)quartz
, 线程池ExecutorService
。 - 设计模式、抽象类、接口的广泛应用,以我目前水平看来甚至有过度设计的嫌疑。整体设计上很规范。
- Java语言本身的特性很熟,譬如反射,各种锁用的也很熟练。
- 对于相对常见的需求,有相对成熟的解决方案。譬如监控、譬如任务调度。
- 因工作经验丰富,对常见的单点登录(SSO)等各大公司通用的解决方案熟悉。
- 思路清晰,看穿你的技术细节。
总结一下,其实就是:时间带来的熟练度的提升,经验带来的给出方案的能力,下功夫和思考以挖掘深度
。这是技术上的修养,而在非技术方面,学会更有效地沟通和表达则是工程师不可或缺的能力。
站在新人的角度,尽量多学习、多思考,以及质疑,因为他们做的或说的也有很多错的。
硬实力
- 效率&生产力
- Linux与shell脚本,awk sed文本处理命令,vim命令,常用部署命令(tomcat)、常用软件。
- git,我用了几年git也基本没超出 add, commit, push, pull, reset这几个范畴。
- Python的熟练使用与进阶。
- 前端
- 前后端分离方案。
- cookie与session(有些前端对此都不够了解)。
- 静态代理与转发。
- 数据库
- 数据库设计,字段。
- 事务性。
- 会写常用SQL。
- 后端
- Spring IoC与aspectJ的熟练使用与原理。
- 后端ORM的原理与某个ORM的熟练使用。
- 主流中间件,netty, redis, kafka, zookeeper的熟练使用与原理。
- 常用库如quartz、executorService的熟练使用。
- jdk源码,实现原理。
- 设计模式
- 数据结构(譬如双向链表实现LRU)
- 机器学习入门
- …
软实力
- 沟通与表达
- 想到再补充