最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Go 语言专家曹大谈十年技术生涯:有理想,但不理想化

  • 2022-09-08
    北京
  • 本文字数:3549 字

    阅读完需:约 12 分钟

Go语言专家曹大谈十年技术生涯:有理想,但不理想化

作者 |贾亚宁

嘉宾 |曹春晖 / 曹大


个人成长和职业晋升是每个人都很关心的话题,对于软件工程师而言尤为显著。互联网不断普及,越来越多的程序员加入到了优质岗位的竞争中,每一个互联网从业者可能都思考过这样的问题:如何能从人才大军中脱颖而出,如何能更高效率地获得成长和发展?


关于这个话题,我们不禁想到了 Go 语言的专家——曹大。熟悉并使用 Go 语言的开发者可能多少都听过这个名字,互联网上甚至还有专门整理曹大内容输出的文章。但是曹大这个人很神秘,很少在公众场合露脸,多是通过文字和同行交流,他长期在 xargin.com 上进行技术输出,并践行终身学习理念。他对自己的要求极高,目前是一名自由职业者,也因此在下文中可以无所拘束地发表个人观点。


由于对曹大成长经历的好奇,我们特别邀请到了曹大本人——曹春晖老师,他是北航硕士,IT 行业多年从业者,曾在某公司担任技术专家,畅销书《Go 语言高级编程》的合著者,Go Contributor,对 Go 的底层实现有深入理解。


同时,曹春晖老师也是年初上线的 QCon+ 案例研习社「Go 语言与并发编程」专题的出品人,带队来分享 Go 解决并发问题的最佳实践。因此我们主要针对个人提升角度对曹春晖老师进行了采访,一起来看看他的实践和思考吧。


InfoQ:你最近主要在做什么呢?


曹春晖:过年的时候在读 Ray Dalio 的《原则 2》,一定程度上了解了自己为什么在股市上只会亏钱。年前看了一些排队论的知识,理解了延迟和队列的关系,可以用来解释很多场景,比如 Go 的调度系统和延迟的关系,网络队列和延迟的关系,为什么控制延迟要丢弃请求等等。最近就在玩艾尔登法环了。


InfoQ:你的职业生涯中印象最深刻的挑战是什么?你是如何解决的呢?


曹春晖:技术的挑战都不算什么大事,工程方面的问题一定可以找到解决方案,找不到方案的那就是世界难题了。在公司里最大的挑战是有 idea 的时候,要说服老板去做(碰到太多次了),因为公司里的老板背景各异,不同的人不可能对一件事情有相同的看法,这时候要达成共识就需要反复沟通,拉齐、磨合、开会,摆出各种软件工程系统架构理论,再搬出硅谷的 FAANG 是怎么做的,很心累。能说服老板的话,其它事情都是小事,这很难避免,因为大公司都是这样的。


InfoQ:方便分享一下你的职业发展路径吗?你认为影响技术人的职业发展的重要因素有哪些?


曹春晖:我的职业发展参考价值不大,其实这么多年看下来,在同样靠谱的前提下,职业的发展顺利与否主要都是看运气……了解了一些公司运作的规律和招人的潜规则以后,很多事情比较无奈,不太好说(真心话)。


学习方面给各位技术人的建议是要养成终生学习的习惯,不要学到某个程度就固步自封,即使是后端技术,五年前和现在其实差别已经挺大的了。我以前写过一篇《工程师应该如何学习》,介绍过一些学习的渠道和方法,可以参考。工作中打过交道的人,其实很多工作十年的人跟刚毕业的学生没什么区别,你看看你们公司的架构师,CRUD 都能搬出 100 种理论来说明为什么要这么设计,这才是真水平。


另外,写代码以外的技能也是要刻意训练的,比如口才、演技等,很多踏实写代码的人其实在大公司里很吃亏,要理解什么是一定程度上的按闹分配。


InfoQ:作为常年在 Go 语言世界里探索的人,你认为什么是学习 Go 语言最高效的方法?


曹春晖:入门的话就看《The Go Programming Language》,最好的学习方法就是把书上的例子都抄一遍。可以翻翻优秀的 Go 项目来学习他们是如何使用这门语言的,前面也提到了,awesome-go 里有很多这样的项目。直到你觉得 Go 的所有语法都了熟于心,就算是入门了吧。


进阶要去学习怎么定位 Go 在线上系统的问题,成为一个 Go 的高级工程师。这部分需要大家了解一些 Go 的底层知识,学习基于 goroutine 和 channel 的各种并发编程模式,以及常用的工具链:比如 pprof 怎么用,怎么用 --base 去找内存泄露,出了性能问题怎么做优化等等。要达到的目标是:线上的 Go 系统出了问题,能够通过自己的知识储备快速定位。Go 的底层知识现在国内比 java 圈还卷,文章很泛滥,可以随意搜搜,择优阅读。


下一步是要通过多接触各种场景(比如大流量,高并发的,业务的,基础设施的等等),同时与其它语言横向做对比,了解 Go 语言在各种场景下的优缺点,不要成为一个语言原教旨主义者,比如我在工作的过程中就看到过不少 Go 其实就没法应付的场景,大家硬着头皮用,硬着头皮 hack,项目搞到最后优化起来也很痛苦,可能还不如直接去用 Rust。尽量多思考,也不要忌讳与其它语言的熟手交流。


相比 PHP 之类的语言,Go 的最大好处是可以跨越很多领域,从业务到基础设施,如果你业务干腻了,技术储备又足够,也可以去玩玩基础设施开发 (当然,我不建议你总是换, 实在手痒可以业余时间给一些开源基础设施项目提提 PR)。也就是大家的工作内容选择范围会大很多,这又需要考验你的智慧了,选择哪个领域才能赚到钱,我没法给出很具体的建议哈哈。



InfoQ:你是如何看待软件开源的呢?你又是如何参与到社区内的呢?


曹春晖:开源曾经是最好的学习和与世界连接的方式,只不过现在的开源社区弥漫着令人不太舒服的氛围,开源组织大多被大公司所控制,程序员付出了自己的业余时间,但没法为这些付出得到适当的回报。如果你不是很抗拒这些东西,想要在 GitHub 上被别人看见,这个很容易,看看你日常工作中都用到了什么软件,去 GitHub 上提 issue,提 PR,这都是贡献方式,等你熟悉了以后就可以写一些大点的功能了。


如果你手边没用什么开源软件,那可以在 GitHub 上找找 awesome-xxx 类的仓库,看看里面有没有感兴趣的东西愿意帮作者一起维护。比如 Go 程序员,你可以看 awesome-go,找找里面 star 数很多的项目,无聊的时候翻翻它的代码,总能找到提 PR 的机会的。


另一方面,这两年有不少 infra 的创业公司靠开源融到了钱,这个对程序员来说是好事,因为 infra 在大多公司内被当成支撑部门和成本中心,其实不太受老板待见,创业公司做 infra 能赚到钱,这意味着会有更好更多的基础软件岗位。未来中美科技大概率会搞脱钩,谁也不知道我们手边的这些习以为常的基础设施会不会哪天就不让用了。


InfoQ:你是如何做到长期内容输出的呢?对想要开始的小伙伴有什么建议吗?


曹春晖:要给自己设立一个简单的目标,同时不要影响到工作,我之前写了很多年 blog,体感最合适的是一个月两篇文章。内容可以和工作相关,也可以无关。两周一篇,压力也不太大,可以没事想起来就写写。


输出是很重要的,费曼学习法告诉我们,你要把知识讲得明白,才能确定自己是真的会了,只是应付工作里的那点东西,很多时候人会变得懒惰,慢慢也就不想思考了。我曾经在某公司听到一个很高级别的人自豪地说他很多年没看一本书,还很骄傲地讲给他的下属听,我不认为新进入行业的人能够有像这位一样靠公司起飞的运气,还是要把学习当回事的。


因为增加了输入,这些输入一定会在某个时间点对你的工作产生帮助。在某大公司的时候我也看到内网上一些优秀的文章作者,他们基本上都保持了持续内容输出的习惯,这也意味着他们看了非常非常多的书。有些人的读书速度能快到匪夷所思的程度 (一年 68 本),不知道他们是怎么做到的。


多积累一些知识以后的输出是很有价值的,我之前写的系统设计的文章被人看到以后会来问我是怎么做的,说不定聊着聊着就成同事了。


InfoQ:最后,作为一名互联网老兵,你想对年轻的技术人说些什么呢?


曹春晖:技术是安身立命之本,要保证自己的技术能够比工作岗位上的要求高出一截,你才能脱颖而出。公司里做事情的时候,不要觉得琐碎的工作没有意义,大多数的自动化、抽象、架构和平台都是从琐碎的工作中积累而来的,如果你没有这个重复劳动和思考的过程,你对任何场景的思考都不会很深入。边工作也要边输出,也就是前面说的,输出很重要,写文章、写书和去演讲都算输出,就算公司黄了,你通过输出也至少有个业界影响力对不对。当然,重复的工作干了两年,这肯定是不行的。


选择也很重要,要能看得出什么是行业的红利,哪里有现金流,哪些是公司内的重点项目,哪些比较容易出成果(你要是不懂这些,只会写代码,那你的发展就会慢)。特别是这几年,这个能力会变得更加重要。


要懂得公司内的各种潜规则,比如正常是多长时间可以晋升,比正常时间长那自己基本上被当前的老板打上低潜标签了,建议找到好机会就尽早溜。其它还有很多,技术以外的思考和观察也不能太少。


如果有很粗的大腿,不要太抗拒去抱,没有人不愿意去当嫡系部队。不公平是这个世界的常态,要坦然接受!


嘉宾简介


曹春晖 某公司技术专家

北航硕士,IT 行业多年从业者,曾在某公司担任技术专家,畅销书《Go 语言高级编程》的合著者,Go Contributor,对 Go 的底层实现有深入理解,从业期间保持输出习惯,xargin.com 作者。

内容推荐

一堂来自技术大牛的私享课-“平凡的”程序员应该如何快速成长

2022-09-08 18:2211255

评论

发布
暂无评论
发现更多内容

保护亿万数据安全,Spring有“声明式事务”绝招

华为云开发者联盟

spring 数据安全 事务管理

通过 UIView 和 UIControl 实现的蒙层,哪种更简单?

fuyoufang

swift iOS 知识体系 8月日更

在openGauss上做开发?这个大赛拿出30万寻找开源的你

华为云开发者联盟

数据库 开源 信创 opengauss 鲲鹏

遇见低码:在价值中审视

华为云开发者联盟

ide 低代码 应用 开发语言 低成本

手把手教你写 Gradle 插件 | 数据采集

神策技术社区

程序员 埋点 数据化 神策数据

在java程序中使用protobuf

程序那些事

Java protobuf 程序那些事

protocol buffer没那么难,不信你看这篇

程序那些事

Java protobuf 程序那些事

springBoot中redis的自动装配

Rubble

8月日更

“挂图作战”网络实体定位技术

郑州埃文科技

Linux之yum命令

入门小站

Linux

Go Channel实例剖析

非晓为骁

源码 channel Go 语言 实例分析

docker入门:elk环境安装记录

小鲍侃java

8月日更

如何构建 Spring Boot 12 因素应用

码语者

Sprint Boot

神策分析 iOS SDK 全埋点解析之启动与退出

神策技术社区

ios 代码 埋点 神策数据

判断是否为数组的 JavaScript 方法总结

编程三昧

JavaScript 数组 8月日更

Windows Server 内存高排查

耳东@Erdong

windows 内存 Windows Server 8月日更 rammap

国产数据库的挑战与机遇

晨山资本

数据库 大数据 云原生 超融合

基于Mybatis-plus实现多租户架构

码农参上

多租户 8月日更 Mybatis-Plus

统计机器学习导论(一)

数据与智能

机器学习 统计

WEB常用HTML颜色代码表

入门小站

工具

极客时间架构实战营作业一

jjn0703

架构实战营

Battle:你会TLAB,我会逃逸分析

阿Q说代码

逃逸分析 8月日更 栈上分配 同步省略 标量替换

Go- if-else结构

HelloBug

if Go 语言 else

前端人员必会工具-apipost两分钟上手(2分钟玩转apipost)

Proud lion

大前端 测试 后端 Postman 开发工具

混合云时代来临,你的存储ready了吗?

焱融科技

云计算 分布式 高性能 云存储 混合云

FusionInsight怎么帮「宇宙行」建一个好的「云数据平台」?

华为云开发者联盟

大数据 数据仓库 FusionInsight 云数据平台 LakeHouse

手撸二叉树之另一棵树的子树

HelloWorld杰少

数据结构与算法 8月日更

apipost--接口流程化测试

与风逐梦

软件测试 接口测试 软件自动化测试

摸鱼小技巧之IDEA调试篇一~

4ye

Java debug 后端 IDEA 8月日更

自适应负载均衡算法原理与实现

万俊峰Kevin

负载均衡 微服务 负载均衡算法 Go 语言

vivo商城计价中心 - 从容应对复杂场景价格计算

vivo互联网技术

Java 架构 后端 促销系统

Go语言专家曹大谈十年技术生涯:有理想,但不理想化_QCon+_Alice_InfoQ精选文章