Mr. Tech经常听到有人吐槽
每天上下班挤地铁
每个月给房东打工
每日Bug改到头秃
但是
忙十年却赶不上同事三年
房价物价年年涨
而你的升职加薪却遥遥无期
为什么你光努力没成绩?
为什么你在职场没有竞争力?
为什么你总被同龄人甩在身后?
其实,这不是因为同事比你聪明,而是因为你没有掌握职场升级打怪的正确窍门。为此,Mr. Tech特地请来个推传说中的优秀“同事”——个推Java主管逍遥,为大家传授一下职场超车、告别打杂的秘诀。
逍遥大学毕业仅仅一年,便协助主管承担了团队管理任务;工作两年,便开始独立负责个推核心技术团队基础推送线;工作三年便正式任命为B2D研发部基础推送线Java主管,现负责管理数十人的核心技术团队。逍遥将职场感悟归结为四点:技术知识体系构建、做好职业规划、思维模式转变、情绪调整及控制。
(以下为逍遥的个人分享)
技术知识体系构建
我经常在面试的过程中会问大家如何构建自己的Java学习体系,来帮助自己更快更好地掌握相关的知识并应用到工作中来。然而,就面试者来看,大多数人对此并没有进行过深入思考,回答起来吞吞吐吐,知识体系不全。为此,我建议大家不妨可以从初学、进阶两方面着手,来全方位提高Java学习能力。
初学
初学者建议从学习的语言基础看起。拿Java举例,设计模式自不必提,Java虚拟机(JVM)原理也是必不可少的,了解JVM底层的运行逻辑可以对如何写出优秀的代码或者分析出现的问题都有很大的助力。还有学习JDK自带的一些基础包源码也是很好的示例,对建立代码编写风格以及使用类库的熟练程度都会有提升。然后是学习常用的框架组件,Java的话就是Spring、Dubbo这些。其它的便是现在互联网公司常用的中间件学习:Redis、Kafka、ZooKeeper、RocketMQ等。学习这些框架组件和中间件,不能停留在表面的使用,内部结构和原理是必须要搞清楚的。建议技术人员深入去看看源码。
此外,经常性的回顾整理也是必不可少的。好记性不如烂笔头。艾宾浩斯遗忘曲线、学习金字塔理论等等前人经验或者科学研究都表明,我们要经常整理总结记录,才能学得更好。这个习惯需要终身保持。
以下Java书籍是我工作过程中发现比较不错的几本,从入门Java到日渐精通,每次看都会有不同的感悟,推荐给大家。
《设计模式》:这本书由国际公认的面向对象软件领域的四位专家合作撰写而成。该书深入分析了面向对象的23个设计模式,并为读者总结了最有价值的面向对象设计经验,提炼了一组设计精美、表达清晰可以在实用环境下提供帮助的软件设计模式。
《深入理解Java虚拟机》:作为整个Java图书领域公认的经典著作和超级畅销书,全书由走近Java、自动内存管理机制、垃圾收集器与内存分配策略、虚拟机性能监控与故障处理工具、调优案例分析与实战五个部分组成,深入分析了JVM的工作原理。
《Java并发编程的艺术》:本书对Java并发编程中最核心的技术即JDK源码、JVM、CPU等进行了深入剖析,为读者总结了Java发编程的框架、工具、原理和方法,对Java从业者在如何应用好这些核心技术方面具有重要的指导意义。
进阶
我理解的进阶应该不再停留于语言编码中了,你需要对整个程序的运行负责:性能怎么提升?高可用怎么实现?服务怎么降级?线上问题怎么处理?这一系列的问题如果你已经开始思考了,那么恭喜你,你已经进入了这一阶段。在进阶过程中,你不仅需要编码能力,你还需要掌握如下几点:
-
程序服务的运行状态:对服务程序增加监控、告警、日志来帮助其了解运行状态。不断去观察端详你写的程序真实运行状况,有助于将一些隐患消除于未然,应对突发问题也更容易上手分析并快速找到处理对策。
-
计算机基础和操作系统:主要包括CPU调度、中断、内存机制、I/O机制。尽管读过计算机专业的人员一半以上都学过计算机基础和操作系统,但很多人对此认识还不够深刻。针对在实际解决问题的过程中,我们经常碰到的计算机基础和操作系统相关的问题,去总结回顾,会有新的理解。
-
网络知识:这方面包括TCP/IP协议与模型、常用的网络问题分析工具(tcpdump、netstat)、常用的代理和负载工具(nginx、lvs等)、DNS和域名服务、CDN服务等。具备这些知识在处理问题和设计方案中会让你有更多的灵感和方向。
-
线上硬件环境:这个需要熟悉linux网卡的性能指标和调优参数、cpu核数频率及性能、文件系统的调优参数、内存策略的调整参数,以及机房的网络架构。在性能调优中我们会经常用到这些。
做好职业规划
适合度认知
现在程序员岗位比较热门,不少机械、化工、水利等专业的毕业新生也涌入到了该岗位中。然而,很多人虽然选择了程序员这个行业,但对自己是否适合还是不确定的。
在我看来,代码能力作为未来必备的基础能力之一,先干几年是绝对没问题的。但在干这一行的过程中,你可以慢慢去思考以下几点:我码完代码有满足感吗?我对写过的代码、维护过的项目能做到完全了解吗?我会静下心来去看做过的项目中所用到的技术更深层次的原理吗?每次过需求、做实现是不是都只是安于实现?如果过了2年你的答案都还是否定的,我觉得可以考虑转岗。
短期规划
对于刚入门的程序员,前三年是比较关键的,建议做到几点:
1.扎实技术基础,参考上面提过的技术知识体系构建部分。
2.以增长见识、提升自我为出发点,用开放的心态,主动去接触各个业务各个部门。当然这个以后也是要持续保持的。
3.积极参与各类问题的分析排查,锻炼自己解决问题的能力。
长期定位
长期定位一般分几种:技术专家、技术架构、技术管理。以下我列出三个定位必备的素质,大家看完后可以经常思考下自己的发展方向。
技术专家:具备某一方面或多方面专长,能非常快地解决一般人处理不了的问题,或者代码能力超强,经常编写偏底层的高性能的高可靠的代码;
技术架构:非常熟悉世面上的各种框架和架构模式,能有自己的实际架构经验,善于处理系统出现的各类问题,对于系统如果要达到怎样的目标如何去优化有很强的理解且有很多方案;
技术管理:充分了解团队的方向具备强烈的责任感,熟悉团队成员的优缺点并善于利用,能助人成长、带人成事。
思维模式转变
这点是我目前感触较深的一点,其实这也是任何职场人都必须觉察的。程序员作为一个较特殊的职业,大部分时间面对电脑思考写代码会不自觉过于沉浸自己的代码世界中,觉得写完自己的代码就高枕无忧了。以下几种情况跟大家分享一下,希望大家引以为戒。
-
当整体方案涉及多个部门或者多人协作时,经常遇到因为缺少产品交互中隐含的几个接口而导致项目运行不成功的情况,或者因功能实现方界定模糊导致项目运行失败。
-
线上运行的程序出了问题没有主观能动性,认为自己了解不多担心解决不了,导致依赖他人的思路和排查。面试中我发现这种问题尤为常见。不少候选者在回答线上运行程序排查问题时都说是上级或者别人解决的,自己对相关问题并不了解。
-
只满足于做完本职工作,对团队没有输出足够的个人能力和魅力。
-
对整体业务不了解,只关注代码运行逻辑,不知道在整体业务中起到的作用。这种在有较长业务链中出现较多。
-
一些可选任务,觉得和自己没什么关系,不去考虑做后会有什么收获。
其实大家要分清楚,自己的目标是什么:只是为了自己当下轻轻松松舒舒服服的写代码,还是说想为整个项目或者团队带来贡献并且自己能够得到成长。如果你有后一种想法,那么你就需要审视自己是不是可以更加主动的发挥自己的能力,去提升自己而不是抱着没我也行,“雨我无瓜”的想法。
之前听过一个说法,国外程序员更关注于做好产品,国内更关注于做好技术,所以很多国外公司可以不用运营不用销售,技术人可以成为布道师,自己推广跟进自己的产品、服务或者开源项目。我也认为“技术布道”是一种非常好的方式,是可成长性很高的思维模式。
情绪调整及控制
我刚毕业时,对一些事也是懵懵懂懂,一开始工作有非常多的新东西要学,语言也不熟,做些小工具也常出错。后来,当我真正开始负责关键模块,逐渐融入团队,做出成绩得到肯定后,我才开始进入状态。回想当初,我的抗压能力帮了我很多。为什么80%以上的技术人员无法快速成长?那都是抗压能力差导致的。只有抗住压力,不被压力所打败,你才能获得成功。
最近参加的一个培训学习,让我意识到这其实是人的情绪风格决定的。大家有兴趣可以看下《大脑的情绪生活》这本书,里面讲了六种情绪风格,其中情绪调整的能力(也叫回弹力)在你沉浸于负面情绪时可以帮到你很多。
总结
互联网时代,拼能力不拼资历。要想不被淘汰,提升自己是关键。逍遥的职场经历有两点Mr.Tech认为尤为关键:坚持构建自己完整的技术体系和主动承担更多责任的工作模式。在技术水平的锤炼上,慢即是快。只有基础扎实了,我们到应用的时候才会信手拈来不费力。
此外,职场态度也很重要。在完成自己本职工作的情况下,程序员可以主动关心其他项目进度,敏感地发现他人的工作中自己可以帮忙,提出改进建议的点。在这解决问题的过程中,你的能力会变强,而能力变强会进一步提高问题的解决速度,进而推动你解决更多更重要的问题。
最后,Mr. Tech希望大家在2019年仅剩的两周里,加快步伐、提升自己的职场技能,更好地迎接2020年的到来:告别迷茫!告别脱发!告别单身!