目前做 Java 后端开发,规划是先走技术再走管理。大部分人可能都这样想,但大部分人也是走着走着就走偏了,不是学的太杂没一样精通的,就是技术还没锻造好就急躁地向往管理方向迈步,要不就是走歪了,规划后端又去搞前端,可能是一时的兴趣,可能是公司业务需要。下面一点点列举。
公司选择
大公司 Or 小公司
每种职业都有自己的要求,这种要求是建立在公司业务以及社会平均要求之上的。和物品的价格类似,有的工厂快,有的工厂慢,价格是社会平均劳动时间来决定的。职业要求在社会平均技能水平之上,还要根据公司的业务,大公司追求稳定和技术创新,需要螺丝钉,虽然只是一颗螺丝钉,但是你一定要做到这颗螺丝品种中最好的。小公司追求快速发展,要求万金油,拿来主义,有能拿来配置一下就用的做好。
所以在做职业规划之前,要想清楚自己是去大公司当螺丝还是小公司当大哥。我是想去大公司的。原因如下:
- 大公司人多,能多结交人,锻炼交际和办公室政治,小公司的人估计十个指头就能数出来。
- 相对稳定,小公司一天到晚怕解散,现在能活下来的创业公司很少很少。
- 镀金,出来之后回二三线老家,绝对比在小公司做个小组长更难唬住人。
- 能提高技术,和很多大牛一起工作,而且大公司的高并发和调优等问题,小公司一般业务占比 8 成。
在我看来,小公司唯一的好处是钱多离家近,事少不少还不一定,适合二三线有家庭的人。
公司类型
如果你没有转行做产品经理的打算,最好的要属技术驱动型公司,就是那种技术非常牛,让你抄你都跟不上的公司,比如谷歌。谷歌的搜索完爆百度,广告这个不谈,一部分原因是中国搞 SEO 没在上面花钱。单纯从问题答案准确性和博客质量来说,谷歌高好几个台阶,百度出来的全都是千篇一律复制粘贴的博文。在中国,这种公司很少,而且没有研究生的知识深度或者 211,985 的 CS 专业背景,不现实。
产品驱动,分为互联网产品和软件产品,互联网就是现在的 bat,滴滴,美团之类的,软件比如说金蝶,个人还是非常倾向于互联网产品的,而且云计算时代,互联网产品的份额会越来越大。
职业技能范围
谈完了公司选择,再谈一下职业技能范围,这个去看一下你期望的公司的招聘要求就好了,大部分都是写的很少,比如熟悉算法,设计模式,做过高并发项目。但里面的内容可一点不少。
按照他们的招聘要求拿出一个交集,优先深入这些交集内技术,其他的暂时不去学习,只做了解。
要求的技术栈有:
- Java 源码学习过,分析学习过里面的设计模式和算法。
- sql 调优,配上生产案例,比如两条 sql 还是一条 sql 加 having?或者用 in 还是 not exist,为什么?sql 事务和索引,什么情况下会死锁,如何检测?什么情况下需要事务。应该怎么加索引。
- 主流网络协议,TCP/IP,HTTP,带着问题学习 Netty 源码
- jvm 调优,利用现有的博客和 idea 去实践。
- 从 netty,spring,distruptor,guava,vert.x 等框架中学习 java 多线程。
- 主流框架原理,Spring,SpringMVC,Spring Boot,Mybatis
- serlvet 容器,web 容器,tomcat,nginx 的原理
- 消息中间件原理和用途,RabbitMQ,kafka 等
- 缓存系统,redis 的用途。
- 分布式相关,分库,分表,spring cloud,dubbo,rpc 和 restful,zookeeper,负载均衡,redis 集群,elasticsearch,分布式 cap,熔断等。
- linux,git,maven 等工具
spark,hadoop 是否需要学习
no,这是大数据工程师需要的。
vue,react,angular 等是否需要了解
我们用前端用 react,用的都是 restful 接口协议,哪种技术都一样。
这个不需要了解,了解了也没用,都是皮毛。
go,python,scala 等呢?
如果公司业务有需要,可以学习需要用的,其他的就算了。虽然语言很多地方相通,但涉及到具体业务又要去学习各种轮子,费时间。
AI 呢?
不需要,没有研究生的学历,虽然是个香饽饽,但也要认清自己。
学习方法
- 看源码和实践为主,看源码的过程中一定要分析其中的设计模式和算法。可以找一些分析源码的书或者视频,按照上面的顺序来分析源码,但分析源码和实践的时间一定要有而且超过书上和视频的时间
- 带着举一反三的目的去提问题。
- 有问题先去谷歌,再去百度。
- 如果需要系统化的学习,比如看 spring 源码需要 Gradle 和 Groovy,相应的书籍,一般也就看个目录和前两章,了解这个是什么以及如何安装配置。
- 记博客,写要点和思想,给出源码。
关于造轮子
目前没有造轮子的能力,目前没有这个能力,造出来垃圾也不好意思拿出去献丑。
主要是 fork 和 pr,这样能学习吸收开源的优秀思想,也能做出自己的贡献,给好项目,大作,提 pr 通过之后也能拿出去见人。
"自大"与完美主义
程序员是公认的智商很高的群体,夸的人多了,彩笔也飘了。
像有些人,比如我,有一点完美主义
看某个地方不顺眼,就想改。觉得应该不麻烦,稍微花点时间没事。
之前看虎扑跟帖,不喜欢某些帖子,写油猴过滤。
网易新闻,用 go 写了个爬虫爬新闻
豆瓣,用 python 写个自动发帖脚本。
之前信赖 gtd,总想自己做个 gtd 工具,觉得做个简单的 app 不麻烦,现在在用滴答高级版,有几个地方用的不太舒服,总想改进,或者照着他的抄一个,现在想想,还是我太自大了 。其实很多时候凑合一下就好了。
安卓得研究,桌面日历得研究,有什么用呢?花了半年的空闲时间做出一个不稳定的简陋版。
最近有做个了书签工具, 用的 javafx,本来还想学习 material 样式和 rxjavafx,现在看来,算了吧,现在的够用就行。
每样东西花的时间不多但加起来就多了。
这个时候要辞职了,拿这个出个见人吗?找 java 工作给人看一个半成品安卓,一个 python 小脚本,一个没有代理的 go 小爬虫,一个只有几个按钮的 java 桌面?
其实凑合一下就好了,这些需求没有那么强烈的,钱才是最强烈的,这些东西不仅不会带来钱,还是让你贬值,提前退出程序员的圈子。
时间分配
程序员工作压力大,健康的饮食和锻炼必不可少。
就按照目前我们 10-9-5 的上班安排。
晚上 10 点半上床睡觉,早上 7 点起床,7 点到 8 做早餐午餐,8 点到 9 点健身洗澡。
9 点去上班,地铁看些逻辑学的书籍或者听《罗辑思维》等有声电子书。
中午 12:30-1:00 午睡半个小时,1 点到 2 点自己学习 1 小时。
工作的时不要久坐,多喝水,多洗脸。
7 点如果工作没做完继续做,做完了就学习到 9 点。
9 点下班,地铁看书听书,10 点回房间,练字
,洗刷面膜睡觉。
这样工作日每天的学习时间大约 2-3 个小时。
双休也不要睡懒觉,可以拿出一天做一顿好吃的午饭,约朋友爬山等。
周末平均有 1 天多的时间,大约每个周末 12 个小时学习时间。
这样算下来每周可以学习 22-27 个小时,相当于我们仆人的 4 个工作日。
具体的安排用滴答。
管理规划
最近很喜欢研究逻辑学,有一套纸书,也有电子书。
因为这是逻辑学不仅能程序员需要逻辑思维,与人打交道或者开会也需要逻辑,还能诡辩。
目前打算每周录一集有声电子书,主要周末的时候录,打算坚持两年,录到 100 集。
锻炼思维的同时也能让自己多说点话,整天对着电脑说话少也不好的。
爱好
一定要是有益的爱好,玩游戏就算了
太广泛也不好,没时间。
太费时间的也不行,比如摄影,麻将这种。
目前发展两个爱好,
- 练字
- 折纸
- 英语(能在 stackoverflow 让老外一眼看不出 china 英语的水平)
35 岁之后
打算 30 之前拿到资深或者架构资格,之后往技术总监或者 CTO 上发展。
以后可能自己做老板,那时候的心态可能就不一样了,太遥远的未来无法预料。
12 月 8 更新
下了个 app 练习配音
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于