本文作者:孤花自赏

上班天天写业务代码,程序员:敢问路在何方?

孤花自赏 5个月前 ( 04-27 ) 310 抢沙发
上班天天写业务代码,程序员:敢问路在何方?摘要: 对于30岁的你来说,基本上现在处于上有老下有小的状态,身上可能还背着房贷车贷,压力比较大,对此就需要多方面的考虑了。今天凯少在知乎上看到这样一个话题:30岁以上的程序员该何去何从?...

对于30岁的你来说,基本上现在处于上有老下有小的状态,身上可能还背着房贷车贷,压力比较大,对此就需要多方面的考虑了。今天凯少在知乎上看到这样一个话题:30岁以上的程序员该何去何从?凯少的观点是与其费力纠结未来的前途,倒不如好好把握现在,趁自己还有精力的时候好好的锻造自己,努力提升自己的专业能力和业务能力,始终坚信船到桥头自然直,只要保证自己在市场上的竞争力,就必然不会被时代所淘汰。


咱们言归正传,说说今天的主题,每当说到这个话题,不同的人自然有不同的见解。下面是阿里技术协会(ATA)分享一篇内部文章。


不管是开发、测试、运维,每个技术人员心理多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器接网线敲shell命令,这不是凯少想要的运维人生”等等。


凯少在做职业等级沟通的时候,发现有很多人确实也在按照凯少之前所说的方法尝试Do more、Do better,但在执行的过程中,几乎每个人都遇到同一个问题:长时间不用该技术容易淡忘,效果很差,怎么办?


例如:学习了jvm的垃圾回收,但是线上比较少出现FGC导致的卡顿问题,就算出现了,恢复业务也是第一位的,不太可能线上出现问题然后让每个同学都去练一下手,那怎么去实践这些jvm的知识和技能呢?


Netty凯少也看了,也了解了Reactor的原理,但是凯少不可能参与Netty开发,怎么去让自己真正掌握Reactor异步模式呢?看了《高性能MySQL》,但是线上的数据库都是DBA管理的,测试环境的数据库感觉又是随便配置的,凯少怎么去验证这些技术呢?


框架封装了DAL层,数据库的访问我们都不需要操心,我们怎么去了解分库分表实现?


诸如此类问题还有很多,凯少这里分享一下个人的经验,其实就是3个词:learning、trying、teaching!


1)Learning这个是第一阶段,看书、google、看视频、看别人的博客都可以,但要注意一点是“系统化”,特别是一些基础性的东西,例如JVM原理、Java编程、网络编程,HTTP协议。。。。。。等等,这些基础技术不能只通过google或者博客学习,凯少的做法一般是先完整的看完一本书全面的了解,然后再通过google、视频、博客去有针对性的查找一些有疑问的地方,或者一些技巧。


2)Trying这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:Jvm垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整各种jvm启动参数,再运行的过程中使用jstack、jstat等命令查看jvm的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复杂一点的也就几十行。Reactor原理:自己真正去尝试写一个Reactor模式的Demo,不要以为这个很难,最简单的Reactor模式代码量(包括注释)不超过200行(可以参考Doug Lee的PPT)。自己写完后,再去看看netty怎么做,一对比理解就更加深刻了。


MySQL:既然有线上的配置可以参考,那可以直接让DBA将线上配置发给我们(注意去掉敏感信息),直接学习;然后自己搭建一个MySQL环境,用线上的配置启动;要知道很多同学用了很多年MySQL,但是连个简单的MySQL环境都搭不起来。框架封装了DAL层:可以自己用JDBC尝试去写一个分库分表的简单实现,然后与框架的实现进行对比,看看差异在哪里。用浏览器的工具查看HTTP缓存实现,看看不同种类的网站,不同类型的资源,具体是如何控制缓存的;也可以自己用Python写一个简单的HTTP服务器,模拟返回各种HTTP Headers来观察浏览器的反应。


还有很多方法,这里就不一一列举,简单来说,就是要将学到的东西真正试试,才能理解更加深刻,印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand,而且“试试”其实可以比较简单,很多时候我们都可以自己动手做。当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。


3)Teaching一般来说,经过Learning和Trying,能掌握70%左右,但要真正掌握,凯少觉得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。 </span></p><p><span>这样的例子很多,包括凯少自己写博客的时候经常遇到,本来凯少觉得自己已经掌握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学写了PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚,或者有的点其实是理解错了。写PPT、讲PPT、讨论PPT,这个流程全部走一遍,基本上对一个知识点掌握就比较全面了。 


后记成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better还是Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里凯少想特别强调一下:前面凯少讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!


如何获得积分?积分可通过签到、投稿,还可以购买获得,10元充换100积分,推荐开通VIP会员更实惠,全场2折!
【积分充值】 【开通VIP】

文章版权及转载声明

作者:孤花自赏本文地址:https://www.gstun.com/397.html发布于 5个月前 ( 04-27 )
文章转载或复制请以超链接形式并注明出处搞事堂

赞(0

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,310人围观)参与讨论

还没有评论,来说两句吧...