CSDN程序人生频道了采访了在职场混迹十年,依然对技术全情投入,饱有百分百热情的丁威老师,他是《RocketMQ技术内幕》作者,RocketMQ官方社区优秀布道师,CSDN 2020博客之星亚军,“中间件兴趣圈”公号号主。

或是冥冥之中自有安排,亦或是坚持不懈努力得来,你是因何踏入程序员这个行业的呢?写代码,改Bug,一千个程序员,可能就有一千个与代码的故事……
程序员甲,大学专业被调剂,从此深深爱上了写bug……

程序员乙,听说土木工程毕业不好找工作,于是赶紧转行学了编程

程序员丙,因喜爱玩电脑、拆装手机,从此走上了编程的不归路,虽然我会修电脑,可我是真正的程序员

……

资深技术人 丁威

丁威目前在中通快递研发中心基础平台担任资深架构师,主要负责全链路压测、消息中间件、数据同步、缓存等中间件在中通的研发与落地,日常主要关注中间件领域。丁威认为,中间件在分布式架构体系中占据举足轻重的地位。主流分布式架构体系通常包含微服务、网关、服务治理、消息、缓存、调度、存储(关系型数据库、NoSQL)、分库分表等。每一个领域都会存在多款优秀的中间件,掌握中间件、深入理解各个中间件的设计理念,无疑将极大提升对分布式架构的理解。

因“找工作”与Java结缘 开启程序生涯

丁威大学专业是网络工程,大一第二学期接触到了C语言,但真正令他开启编程之路的则是大三选修的Java。步入大三下学期,离毕业越来越近,大家不得不面对“找工作”这个难题,而当时充斥的信息都说网络专业不好找工作,丁威回忆道:“作为一个名贫困生,如果读完大学无法找到工作,对我这样的家庭是致命的,经过一番调研,选修了Java课程,正式开启了编码之路。”

在谈到大学里的课程是否重要时,他提到:“不是读书无用,而是用时方恨少。”大学大部分专业课程在毕业后第一次找工作或许没有什么助力,但随着程序生涯逐渐深入,才会明白那些课程是多么重要。

作为离开校园10余载的程序员,他依然对如下几门课程印象颇深:高等数学,计算机操作系统,数据结构与算法,软件工程。

程序员奋斗的黄金时期

作为入行10年,经验丰富的程序员,丁威表示:结合自身工作经验,程序员的黄金奋斗时期是前5年。

回顾自己的程序生涯,他觉得前五年一定要做好职业生涯规划并付诸努力行动:

第一份工作真的很重要,如果有好的学历背景,找工作时不能将就。

如果没有好的学历背景,也无需气馁,要一开始就为自己树立一个远大的目标:一定要凭着自己的努力,励志进入所处行业的头部企业。

有了目标,工作的第一年主要扩大自身知识面,点到为止,以便快速完成日常工作;进入工作第二年后,就要开始打牢基础,刨根问底,探究原理,快速成长。

此外,他还分享了自己进入高并发领域的一次面试经历:“在2016年跳出舒适区去面试的时候,我发现面试官张口闭口就是分布式,高并发,而这又是我极为欠缺的。能够进入拥有高并发的业务场景不是一件容易的事情,想从实战中学习高并发更是可遇而不可求。”

作为一名没有高并发经验的程序员来说,要想有机会接触高并发,丁威唯一能做的是先具备高并发的技能,而学习各个领域中的中间件,无疑能助力见识高并发的编程技巧,并且中间件也是分布式架构体系的支柱。丁威从2016年9月开启了中间件的学习之路,持续至今,一直记录了自己的学习成长历程。

与Bug打交道的日子

在分享技术之路方面,丁威谈到,C语言算是入门语言,而真正把他领入编程之路的是Java,此外,目前在工作中还会用C++、Go、Python等语言。对于准备踏入编程领域的同学来说,认真学好一门语言,后边可以基于自己的兴趣及工作业务需要,再扩展其它语言的学习,这样会容易很多。

那么,在编写代码时,程序员最讨厌跟“谁”打交道,那肯定非bug莫属了。丁威曾在博客发表过《困扰我半年之久的RocketMQ timeout exception 终于破解了》一文,为什么会这么久?丁威表示,该Bug之所以困扰半年,并不是说半年一直在处理,其中一个非常重要的因素定性:重要而不紧急。

对于超时问题,程序员很容易根据经验定性为网络原因,而且由于他对RocketMQ非常熟悉,有充足的证据证明RocketMQ服务端写入耗时非常低,将技术问题初步定性为网络问题,从而将问题抛给网络组同事。由于是跨部门协作,并且该问题不紧急,各个职能部门有自身的OKR,协调起来比较麻烦。

在谈到Bug及突发事故的处理流程方面,他表示,面对BUG,或者生产事故,一个非常重要的突破口:询问是否有变更,优先回滚,优先止血恢复问题,然后才是分析与排查。排查BUG,通常是根据错误异常栈,定位代码,结合日志分析即可。

技术成就多彩人生

除了担任架构师一职,丁威还是RocketMQ官方布道师。2017年,阿里巴巴将 RocketMQ捐赠给Apache基金会成为Apache的顶级项目。与此同时,RocketMQ也深深吸引了丁威了关注,RocketMQ性能为何如此高效,背后运用了哪些技术?如何实现刷盘?定时消息、消息过滤等实现原理……

好奇心带来学习力,彼时,丁威正式开启RocketMQ源码研究之路。与目前主流的消息中间件Kafka、RocketMQ、RabbitMQ相比,丁威觉得RocketMQ的优质特性有:

编程语言是Java,众所周知Java是当今最流行的编程语言;

RocketMQ提供了消息检索功能,是回怼项目方质疑丢失消息的最佳法宝;

提供消息重试、定时消息、事务消息、自动位点提交等业务开发必须的功能。

架构简单清晰,运维成本低。

布道师也可以理解成技术推广专家,需要经常分享技术实战,参与社区组织的技术活动,对此丁威表示,程序员参与技术分享,打造技术影响力,拓宽人脉圈,助力职场,形成“品牌”溢价。

他说道:技术分享并不会牺牲工作效益,反而会提高生产力,但我们坚持一个原则,在公司,除非进行与工作相关的技术调研,业余学习必须利用业余时间,并且可以优先攻破公司中目前选用的技术栈。

程序员如何快速入行中间件领域,他表示:补齐基础,勇往之前。中间件开发的必备基础:Java集合、JUC并发包、Netty(NIO)网络编程。

入职中间件的职业发展方向,丁威介绍到:“中间件方向其实有两条路线,中间件研发人员(技术创作者)、中间件应用人才(技术架构师),大家根据自身情况选择即可,都可以成就一番事业。”

最后,丁威也分享了他的座右铭:越努力越幸运,唯有坚持不懈。与读者们共勉。

资深架构师自述:程序员的黄金奋斗时期是前5年

资深架构师自述:程序员的黄金奋斗时期是前5年相关推荐

  1. 程序员的黄金奋斗时期是前5年 | 专访CSDN博主丁威

    采访嘉宾 | 丁威 编辑 | 张红月 出品 | CSDN(ID:CSDNnews) 或是冥冥之中自有安排,亦或是坚持不懈努力得来,你是因何踏入程序员这个行业的呢?写代码,改Bug,一千个程序员,可能就 ...

  2. 标题系统架构师和程序员到底差别在哪里

    标题系统架构师和程序员到底差别在哪里 系统架构师和程序员到底差别在哪里. 我理解的去到一家小公司自己就是程序员,去到一家大公司,自己就成为架构师,但现实中,更多的是做程序员干的活.架构实际用途看似并不 ...

  3. 架构思维成长系列教程(十四)- 不想当架构师的程序员不是好程序员

    引言 不想当将军的士兵不是好士兵. 很多程序员的梦想,就是将来能成为一名架构师. 包括我刚学编程那时候,也是以当架构师为目标,觉得不想当架构师的程序员不是好程序员,希望将来能成为一个优秀的架构师.就像 ...

  4. 为了升级到架构师,程序员无需过度关注哪些技能?哪些技能不可缺?

    如果走技术路线,架构师是个关键的结点.如果在大厂,一般有有6年时间足以升级到高级开发.因为在大厂里,能提供架构师所需的分布式组件开发调试以及上线的经验,上进点的程序员只要跟着大流,多通过排查问题观察底 ...

  5. 工作五年,还没转型为架构师的程序员何去何从?

    最近和朋友在一起简单聚了会,提到了一个问题,说1-5年的Java程序员,薪资区间普遍是在15-25K左右,那有没有可能提前达到30K的薪资呢?有人说只有大型互联网企业工程师才能拿到,小公司能拿30K的 ...

  6. 不想成为架构师的程序员,只配叫码农

    刚刚过去的双十一,让"高性能""高可用""亿级"这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法. 先问大家一个问题:你觉 ...

  7. 告诉你架构师与程序员的区别在哪里

    Simon Brown 是全球知名软件架构独立咨询师.讲师,创办了专门讨论软件架构问题的网站"编码架构"(CodingTheArchitecture.com).他自称是写代码的软件 ...

  8. 架构师与程序员的区别

    Simon Brown 是全球知名软件架构独立咨询师.讲师,创办了专门讨论软件架构问题的网站"编码架构"(CodingTheArchitecture.com).他自称是写代码的软件 ...

  9. 架构师给程序员的一封信

    某Architect给他的Engineering团队的写了一封信<From an architect to a programmer>,在信中,结合他20多年在软件圈的经验,他为程序员提出 ...

  10. 提高Java架构师和程序员效率的10个工具

    Java受到全球百万计开发者的追捧,已经演变为一门出色的编程语言.最终,这门语言随着技术的变化,不断的被改善以迎合变化的市场需求. 无论你是否拥有一家科技公司,软件已经成为几乎每一个企业不可或缺的一部 ...

最新文章

  1. ML之LassoRRidgeR:基于datasets糖尿病数据集利用LassoR和RidgeR算法(alpha调参)进行(9→1)回归预测
  2. python实现队列_Python学习教程:用队列实现栈
  3. C#LeetCode刷题之#521-最长特殊序列 Ⅰ​​​​​​​(Longest Uncommon Subsequence I)
  4. Openfire性能优化与压力测试小结
  5. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
  6. Nginx+keepalived 实现高可用,防盗链及动静分离配置详解(值得收藏)
  7. python基础===字符串的制表,换行基础操作
  8. highcharts饼图
  9. Java中常见定时任务的实现方式
  10. ubuntu18.04播放mp4提示需要安装MPEG-4 AAC解码器和H.264解码器的解决办法
  11. 科技爱好者周刊:第 84 期
  12. MATLAB数字水印系统
  13. 基于linux嵌入式课程设计报告,嵌入式linux课程设计报告.doc
  14. 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
  15. Java全网最全面试题(2022年VIP典藏版)
  16. 数字签名的原理及其应用
  17. 【用Java模拟KTV点歌系统】
  18. 旧弹簧(Old spring )
  19. 关于独立DFS和域DFS板书
  20. C#API说明【Write函数】[汉字转拼音]

热门文章

  1. webuploader插件使用分析
  2. Jquery 数组操作(转)
  3. 《Elementary Methods in Number Theory》勘误
  4. cocos2d-x 绘制图形
  5. html中meta的设置
  6. Cannot read property 'scrollWidth' of null
  7. opencv学习笔记2:图像滤波
  8. 181029每日一句
  9. 181026英语每日一句
  10. unity的函数生命周期