目前做 Java 后端开发,规划是先走技术再走管理。大部分人可能都这样想,但大部分人也是走着走着就走偏了,不是学的太杂没一样精通的,就是技术还没锻造好就急躁地向往管理方向迈步,要不就是走歪了,规划后端又去搞前端,可能是一时的兴趣,可能是公司业务需要。下面一点点列举。

公司选择

大公司 Or 小公司

  每种职业都有自己的要求,这种要求是建立在公司业务以及社会平均要求之上的。和物品的价格类似,有的工厂快,有的工厂慢,价格是社会平均劳动时间来决定的。职业要求在社会平均技能水平之上,还要根据公司的业务,大公司追求稳定和技术创新,需要螺丝钉,虽然只是一颗螺丝钉,但是你一定要做到这颗螺丝品种中最好的。小公司追求快速发展,要求万金油,拿来主义,有能拿来配置一下就用的做好。
  所以在做职业规划之前,要想清楚自己是去大公司当螺丝还是小公司当大哥。我是想去大公司的。原因如下:

  1. 大公司人多,能多结交人,锻炼交际和办公室政治,小公司的人估计十个指头就能数出来。
  2. 相对稳定,小公司一天到晚怕解散,现在能活下来的创业公司很少很少。
  3. 镀金,出来之后回二三线老家,绝对比在小公司做个小组长更难唬住人。
  4. 能提高技术,和很多大牛一起工作,而且大公司的高并发和调优等问题,小公司一般业务占比 8 成。

在我看来,小公司唯一的好处是钱多离家近,事少不少还不一定,适合二三线有家庭的人。

公司类型

  如果你没有转行做产品经理的打算,最好的要属技术驱动型公司,就是那种技术非常牛,让你抄你都跟不上的公司,比如谷歌。谷歌的搜索完爆百度,广告这个不谈,一部分原因是中国搞 SEO 没在上面花钱。单纯从问题答案准确性和博客质量来说,谷歌高好几个台阶,百度出来的全都是千篇一律复制粘贴的博文。在中国,这种公司很少,而且没有研究生的知识深度或者 211,985 的 CS 专业背景,不现实。
  产品驱动,分为互联网产品和软件产品,互联网就是现在的 bat, 滴滴,美团之类的,软件比如说金蝶,个人还是非常倾向于互联网产品的,而且云计算时代,互联网产品的份额会越来越大。

职业技能范围

  
  谈完了公司选择,再谈一下职业技能范围,这个去看一下你期望的公司的招聘要求就好了,大部分都是写的很少,比如熟悉算法,设计模式,做过高并发项目。但里面的内容可一点不少。
 按照他们的招聘要求拿出一个交集,优先深入这些交集内技术,其他的暂时不去学习,只做了解。
要求的技术栈有:

  1. Java 源码学习过,分析学习过里面的设计模式和算法。
  2. sql 调优,配上生产案例,比如两条 sql 还是一条 sql 加 having?或者用 in 还是 not exist,为什么?sql 事务和索引,什么情况下会死锁,如何检测?什么情况下需要事务。应该怎么加索引。
  3. 主流网络协议,TCP/IP,HTTP,带着问题学习 Netty 源码
  4. jvm 调优,利用现有的博客和 idea 去实践。
  5. 从 netty,spring,distruptor,guava,vert.x 等框架中学习 java 多线程。
  6. 主流框架原理,Spring,SpringMVC,Spring Boot,Mybatis
  7. serlvet 容器,web 容器,tomcat,nginx 的原理
  8. 消息中间件原理和用途,RabbitMQ,kafka 等
  9. 缓存系统,redis 的用途。
  10. 分布式相关,分库,分表,spring cloud,dubbo,rpc 和 restful,zookeeper,负载均衡,redis 集群,elasticsearch,分布式 cap,熔断等。
  11. linux,git,maven 等工具

spark,hadoop 是否需要学习

no,这是大数据工程师需要的。

vue,react,angular 等是否需要了解

我们用前端用 react,用的都是 restful 接口协议,哪种技术都一样。
这个不需要了解,了解了也没用,都是皮毛。

go,python,scala 等呢?

如果公司业务有需要,可以学习需要用的,其他的就算了。虽然语言很多地方相通,但涉及到具体业务又要去学习各种轮子,费时间。

AI 呢?

不需要,没有研究生的学历,虽然是个香饽饽,但也要认清自己。

学习方法

  1. 看源码和实践为主,看源码的过程中一定要分析其中的设计模式和算法。可以找一些分析源码的书或者视频, 按照上面的顺序来分析源码, 但分析源码和实践的时间一定要有而且超过书上和视频的时间
  2. 带着举一反三的目的去提问题。
  3. 有问题先去谷歌,再去百度。
  4. 如果需要系统化的学习,比如看 spring 源码需要 Gradle 和 Groovy,相应的书籍,一般也就看个目录和前两章,了解这个是什么以及如何安装配置。
  5. 记博客,写要点和思想,给出源码。

关于造轮子

目前没有造轮子的能力,目前没有这个能力,造出来垃圾也不好意思拿出去献丑。

主要是 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 集。

锻炼思维的同时也能让自己多说点话,整天对着电脑说话少也不好的。

爱好

一定要是有益的爱好,玩游戏就算了

太广泛也不好,没时间。

太费时间的也不行,比如摄影,麻将这种。

目前发展两个爱好,

  1. 练字
  2. 折纸
  3. 英语 (能在 stackoverflow 让老外一眼看不出 china 英语的水平)

35 岁之后

打算 30 之前拿到资深或者架构资格,之后往技术总监或者 CTO 上发展。

以后可能自己做老板,那时候的心态可能就不一样了,太遥远的未来无法预料。

12 月 8 更新

下了个 app 练习配音

  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    123 引用 • 718 回帖 • 1 关注
感谢    关注    收藏    赞同    反对    举报    分享