很努力了,为什么我还在原地踏步?
坚持写作有不少好处,除了赚些零花钱之外,还常常能收获读者的赞赏,满满的价值感。当然,最有意义的是,通过分享老兵哥我认识了天南海北不少的朋友,偶尔还有小伙伴找我咨询职业发展的建议,被信任的感觉也很好,尤其是被软妹子信任。只要时间允许,我非常乐意分享个人经验和观点。
前两天有位加了微信的小伙伴找我咨询如何提升技术能力,想起当年我也存在这方面的困惑,总觉得自己已经很努力了,但过了一阵子才发现依旧在原地踏步。对于参加工作 3 ~ 5 年的小伙伴来说,这是一个比较普遍的问题。因此,我就基于本次咨询稍作加工,剔除隐私,分享出来供大家伙参考。
软妹子:老兵哥,可否推荐几本技术书籍?
老兵哥:有没有特定的学习目的呢?
软妹子:提升技术水平。
老兵哥:哦,换个问法,你中长期准备往哪个方向发展,或眼下要解决什么具体的问题?
软妹子:我觉得自己目前的技术能力还是有些弱,想提升一下技术,下一步准备往高阶开发冲刺了。
老兵哥:嗯,那可以先专研专研编程语言、设计模式、领域驱动设计等。
软妹子:好!如果就 Java 语言来说,这几个方面有没有可推荐的书籍?
老兵哥:编程语言,《Thinking in Java》、《Effective Java》 等经典系列;设计模式,四人帮 GOF 的《设计模式:可复用面向对象软件的基础》最经典;领域驱动设计, Eric Evans 的《领域驱动设计:软件核心复杂性应对之道》最经典。
软妹子:《Thinking in Java》这本书我在朋友那儿见过,已经残缺了。当时翻看了几页,讲的非常细致。
老兵哥:是的,这些作品都出自该领域的大神之手,口碑是有保障的,属于传世经典了。
软妹子:前两天我刚买了几本剖析开发框架原理的书籍,这两天到货,有时间准备看看。
老兵哥:嗯,在 Java 语言领域,Spring 这套开发框架就是事实标准,非常有必要专研学习。如果时间允许,建议看看官方文档,会非常有收获的。
软妹子:嗯嗯,我觉得设计模式最能体现程序员的代码质量了,例如:我前段时间一直在用策略模式,取代了 if else 的嵌套,感觉代码美观了很多。
老兵哥:是的,从初、中到高级开发,必须要夯实编程语言和设计模式,再往上走我们还需要打通自底而上(垂直)、端到端(水平)两个维度的技术栈。
垂直技术栈
水平技术栈
软妹子:明白。你最近有没有发表新的文章啊?
老兵哥:最近有些忙,空闲时间都在赶 GitChat 上的稿件,技术文章我都发布在 GitChat 上,个人觉得公众号不太适合纯技术文章,在这里我主要分享软技能相关的。
软妹子:好的,回头我找来看看。其实,我现在还停留在客户端、应用、框架、DB 这个层级,Web 容器那层不甚理解。
老兵哥:嗯,现在应用都部署在容器云上了,标装化程度越来越高,Web 容器(像 Tomcat)这层已经被弱化了,就像 Spring Boot 内嵌了 Tomcat。以前,我们做应用性能调优必须要熟悉 Tomcat 的原理和参数等等。
软妹子:嗯嗯。
老兵哥:另外,Web 应用都是遵循 Servlet 这套标准的,而 Web 容器就是这套标准的实现,Spring 嫁接在它上面的,所以我们还是有必要把它弄懂。
软妹子:是的,Web 应用的生命周期就由它负责管理。
...... 过了一会儿 ......
软妹子:老兵哥,你推荐的那本设计模式是用 C++ 写的演示案例啊?
老兵哥:哈哈,对哦,忘了我最初是用 C++ 的,后面才转的 Java。如果你对 C++ 完全没有概念,那可以找 Java 版的设计模式书籍,具体哪本书最好,我也不太清楚。不过,设计模式本身是不区分语言的,它更多是一种设计思想。
软妹子:哈哈,我在豆瓣上看了下书评,好评度蛮高,参考价值肯定是有的。
老兵哥:是的,C++ 和 Java 都是面向对象的编程语言,对设计模式来说差别不大,在具体实现上会有些细微差别。如果你用 C++ 学习设计模式,最后能够用到 Java 上,那说明你真的学透了。
软妹子:嗯嗯,那真是,明白了,谢谢哈!
我们都知道,职业发展离不开学习,但要掌握的知识技能非常多,不知道从何入手。老兵哥也曾经历过类似阶段,日常工作都由团队安排,不可能按照自己的喜好选择,属于被动学习。虽然每年都坚持看不少书,但感觉自己没什么提升,后来我找到了解决这个问题的关键:学以致用。
我们必须带有明确的目的去学习,而不是漫无目的地涉猎。这些年,我都会制定提升架构师所需软技能的阅读计划(参见文末链接),专攻公众演讲、技术写作、产品管理等,坚持下来效果很明显,例如:公众演讲上我登上了多个技术峰会的舞台做分享,还跨界做了上千人规模技术论坛的主持人,兼职完成了几十场职业发展类的培训授课,多次荣获企业大学的金牌讲师。
学以致用,可以是为了中长期的职业发展目标学习,也可以是为了解决眼下某个难题学习。如果是为了中长期的职业发展目标学习,那我们必须要明确个人未来想担当的角色,例如:技术专家、架构专家、项目经理、产品经理或团队管理等,然后我们还要梳理出胜任未来角色所需的技能树,以此技能树为对比参照,缺什么就补什么,否则光空想不行动是无法抵达未来的。如果是为了解决眼下的难题,那我们就要追求短平快了。如果你对未来的职业规划不清楚,那建议先找找职业规划类的书籍,例如:古典老师的《你的生命有什么可能》,从兴趣开始,然后培养能力,最后实现价值。
千万不要“只见贼吃肉,不见贼挨打”!兴趣跟目标之间,还差着能力,明确目标是第一步,接下来就要梳理出新技能树,然后一点一点投入时间精力把这棵树苗浇灌培植长大,最后才是开花结果收获目标的时候。我们很容易掉进“用战术上的勤奋掩盖战略上的懒惰”这个陷阱,动脑很累,思考有罪,让自己在低水平工作上不断重复,用一年的经验工作了五年,滞留在原地踏步。
今天先分享到这里,如果你觉得有价值,麻烦动动手指 转发 给其他需要的小伙伴。另外,老兵哥我后续还会分享职业规划、应聘面试、技能提升、影响力打造等经验,关注「 IT老兵哥 」,赋能程序人生!