22
头图
比起技术上的提升,业务层面的积累更宝贵。

今天我们采访的嘉宾是 @然后去远足,他于 2019 年加入思否社区,至今已经在社区回答了 2800 多个问题,为社区做出了非常大的贡献。他自称是已经奔四的 90 后,从小就接触计算机,熟悉多种编程语言,现在是一名全栈工程师。本期我们非常荣幸地邀请到了他,以下是我们对他的访谈。

Q:你是如何进入编程这个行业的?

我觉得家庭因素占很大一部分吧。90 年代末家里就购置了第一台电脑,再加上家慈从事的也是软件开发相关的工作,当时家里有一整面墙是一个大书架,上面好几个格子摆着的都是计算机方面的书籍,所以我小的时候就对这东西特别感兴趣(不会承认主要是为了玩游戏😂)。然后高考报志愿的时候也都是填的计算机相关的专业,毕业后也一直在这行里,一切还都挺顺理成章的。

Q:目前的工作是做什么的?主要使用哪些技术?

我目前服务于一家跟环保相关的 NGO,通过一些技术手段和工具来帮助企业和政府进行环保及生产方面的决策。要说语言的话其实学了挺多的,参加工作以来在项目里陆陆续续接触到并且实际应用过的就有 VB、VC++、Dephi、C#、Java、Python、PHP、Golang 等等了,目前更熟悉 JavaScript/TypeScript 前端领域一些,毕竟用的时间最久。但真不敢说哪项技能是精通,顶多只能说是熟练掌握 —— 求职时我的个人简历里也确实是这样写的。

其实现在 Coding 的工作占比不是特别多了,日常主要还是一些技术管理、业务沟通之类的工作。但我也还是会“强迫”自己去多接触些新东西,未必是真的新,但起码对我来说是新的。比如前些年 K8s 很火的时候,就尝试自学了相关内容,最后在公司里推动了整条业务线 K8s 化改造,还是挺有成就感的。

Q:日常工作中,有没有什么比较受益的学习方法?

我之前给我的同事们分享过一种编程的方式,叫“小黄鸭调试法” —— 在调试代码的时候对着一只小黄鸭,详细地解释每行代码的作用和思路。具体的出处和原理这里就不展开了,因为这个方法也不是我独创的,在网上是可以查到的。简而言之,在一个人表达自己想法的过程中,这种方式会帮助他去整理思路,重新考虑问题。

编程毕竟还是比较考验逻辑思维的,很多时候一个人想出来的东西很可能其实是钻了牛角尖,这个时候再顺着错误的思路去想,只能越想越偏。我遇到过很多人在一个问题上会卡住很久,我说你给讲讲吧,往往讲了几句他自己就发现问题所在了。

这种行为本质上是一种对输入的再输出,所以不光可以用在调试代码上,事实上任何有输入、有输出的事情都可以应用这个方法,就比如学习技术这件事。上学的时候班里会有一类学霸,他们比普通成绩好的人更厉害的地方在于,能把别人也给讲明白了,这其实就是一种对输入的再输出。这也是为什么我很喜欢在思否社区上回答别人问题的原因,回答问题的过程本身就是一次消化吸收并检验之前自己所学内容的机会,能给别人深入浅出地讲明白,其实才代表着自己已经真正学会了。

Q:最难忘的一段工作经历是什么?

可以分享一个刚参加工作不久的“教训”,虽然已经过去七八年了,但印象依然十分深刻。

我当时就职的公司在那一年双十一期间第一次决定搞一个类似于秒杀的活动,而我负责整个秒杀活动的技术统筹工作。活动是晚上八点整开始,临近下午四点的时候,公司群突然炸锅了 —— 所有活动链接全都打不开了。经过紧急排查后发现,是因为域名处于未备案状态,被云服务商停止解析了。国内的开发者应该都清楚域名备案的重要性,这里不做过多解释了。在紧急联系云服务商后,结果得知是因为半个月前我们有一批新域名需要备案 —— 那个时候还不像现在,可以全程自助化在线上操作,那个时候还有几个步骤是需要电话回访的 —— 他们在电话回访后,认为我们是想“替换”原有的域名备案,而不是“追加”新的域名备案,于是在向管局提交信息的时候就把我们之前的域名备案给申请撤销了,而赶巧到了那天这个撤销生效了(因为不是我负责接听的电话,所以原本具体的通话内容我已经记不得了,但时至今日我也不能理解并且非常想吐槽的也还是,真的有哪家公司的业务是需要“替换”备案的吗?)。

此时已经快下午六点了,十多万预约用户已经等着参加活动了,这面却处在所有服务不可用的尴尬境地。当时我工作经验尚浅,遇到这种事真的是脑子一片空白。多亏有一位同事提出了一个思路,能不能在海外机房临时上线,先把这段时间扛过去。于是从注册新域名到部署整个服务,好在当时项目规模不是很大,整个过程在短短两个小时内全都匆匆搞定,但已经没有更多的时间做测试了,只能硬着头皮上了。之后的活动中虽然也还是出现了一些意外状况,但起码整体还是平稳度过了。

这件事带给我两个启发:第一,即便准备再充分,也永远不要认为你真的已经做好了准备;第二,哪怕不是你的原因,但出现状况了,作为负责人你就得想办法顶上,把问题的责任甩给制造问题的人是解决不了问题本身的。所以到今天为止,我在做工作计划的时候,都会先考虑一个最坏的结果要怎么办。这也算是某种程度上的“一朝被蛇咬,十年怕井绳”了。

Q:工作至今,有什么比较深刻的体会?

我觉得相比于技术层面上的提升,更宝贵的其实是业务层面上的积累。因为除了特别偏门,或者需要非常特殊的场景才能实施的技术,你总归是能自己去提升的。无论是自学还是问别人,或者是行业交流,除非是你不想学,否则总能找到办法的。但业务上的东西,如果你不在这个行业或者领域里,就很难窥其门径。互联网行业里大家经常提到说“技术人要有产品思维”,你要从各个维度去理解需求、理解产品、理解用户甚至理解市场,非互联网行业这点要更甚,那你怎么去“理解”?无非最后都还是要落地到业务上来。求职的时候,在岗位要求里我们也经常能看到会有一条“具有某某行业经验者优先”,这就是业务上的积累。所以我觉得我的成长都来自于这方面。

技术不是空中楼阁,最终肯定是要落地到解决实际问题、提高生产力或产品价值上。编程的实质是一种将现实中的具体问题通过抽象、分解、总结等方式,转化为计算机可以理解的运算逻辑和数据结构的过程(也就是所谓的“程序=算法/逻辑+数据结构”),而程序员就是通过编程语言和工具将现实世界和代码世界连接起来做映射的那个人。比如说我们想要开发一个即时通讯工具,那我们就需要将用户、好友、消息、群组等等一些概念抽象出来,然后再对这些数据进行操作和处理。可这仅仅是一种很初级的抽象,我们之所以能如此抽象,也是因为这个场景太基础了,而且也有很多现成的公开的案例资料供我们借鉴。但如果我们换成其他场景呢?

曾经跟一个证券行业的朋友聊过,他提到了一件很有意思的事情,他们内部有某些系统,其中主持开发工作的,有很多不是那些学计算机这种科班出身的专业人士,反倒是一些学数学、精算、金融出身而又半路出家转行做了程序员的一些人,因为这些人更了解证券这个行业里的各种概念,更能迅速理解并充分评估需求。

这里我不是说技术不重要,技术非常重要,你看这个例子里的这些人他们也都是全职的开发者,只不过是半路出家而已 —— 我相信思否社区里同样有很多人并不是科班出身,但这不影响在日后能取得的成就 —— 他们同样掌握着过硬的技术素养。但同时,他们又掌握了普通开发者所不具备的业务能力。换而言之,如果大家的技术水平都差不多,你能凭借什么更胜一筹呢?那么你就要不断地精进,既要成为技术专家,更要成为业务专家。

Q:技术人如何提升自己的业务能力?

具体问题具体分析,但总归是有些共性的脉络可循的。无论你是做 2B 还是做 2C 的,第一件事总还是要理清业务流程的。有些人觉得自己就是颗螺丝钉,领导交代自己只负责做个简单的增删改查,自己只要会增删改查就好了,这种心态千万要不得。只关注自己那一小片天地,是永远没办法成长的。

平时得多问问自己了解自己开发的这个产品的目标是什么?其中哪些功能解决了哪些现实问题?你觉得自己开发的功能满足了用户的需求了吗?如果你自己是用户,你觉得它好用吗?如果好用,为什么好用?如果不好用,哪里不好用?这些问题你自己未必能想明白答案,那这个时候你就要去多学多问。可以自己主动查公开资料、翻行业案例;也可以去问自己的同事,像产品经理、商务代表,包括同岗位的同事们或直属上级,都是可以去请教的。有些年轻人会觉得羞涩,不好意思开口,但其实不用刻意为之,平时总得是要沟通需求的吧,趁机会有不懂的就说不懂,虚心请教,总会有收获的。

有些人会说这些难道不该是产品经理或者项目经理的工作吗?干嘛要我去想?确实,从工作职责上来说这些不是你的份内事,但你要明白你弄懂这些事情,不是为了取代前者的工作,而是为了更好地开展自己的工作。你连产品流程都搞不懂,做出来的无论是前端还是后台,能是好用的吗?健壮性足够吗?有可扩展性可维护性吗?

还有些人说我要转管理岗,那你就更得懂业务,不然你连一个需求需要投入多少人力都不清楚,怎么能做好管理呢?

在这点上做软件外包的开发者们会有些吃亏,毕竟业务不是自己的,可能全公司都没几个人能真的讲明白业务流程,完全是甲方让干什么就干什么。这就需要你自己去尝试总结方法论。比如你做多了某一类的外包项目,总能找到其中的共同点或相似之处吧?那么可以顺着这个思路去总结。

每个人所处的行业不同,这里我也只好泛泛而谈。总而言之,多学、多问。

Q:如果可以重新选择,是否还会选择这个职业?

也许会,也许不会。我是个不太愿意去对已经做出的既往决定重新假设的人,因为这往往代表着一个人对现阶段的迷惘、不满甚至悔恨。既然当初我没有选择其他的路,那么我也就不会再去想如果当初选择了另一条路会怎样怎样 —— 那对我现在已经选择的这条路毫无帮助。

Q:对思否社区有没有什么建议?

最近随着 ChatGPT 的流行,社区里也出现了不少“AI 搬运工”,我觉得这种现象是需要警惕的。

首先声明,我个人是不排斥 AI 答题的,因为我本人也在使用,有的时候确实比搜索引擎要好用。但它仅仅只能作为一个参考,而不是作为问题的解决方案。

AI 生成的回答最大的问题在于,它自己是不知道答案的对错的,只能是把语料库中的内容加工一番然后呈现给你。但语料库里的内容真的就对吗?思否上某些 AI 搬运工真的是只管搬运,不管对错(当然,如果他本人能知道正确的答案,想必也不会照搬 ChatGPT 了)。一个不知道答案对错的人,复制粘贴了一个不知道答案对错的 AI 生成的内容,去解答一个本来就有困惑、很难鉴别答案是否正确的的提问者 —— 这就很可怕了。长此以往的话,思否社区会不会充斥着大量错误的内容,给质量本来就不高的中文互联网环境造成进一步的污染呢?

Q:对于刚入行的开发者,有什么想对他们说的?

我是一直觉得编程这行跟很多其他工作相比,真的是“逆水行舟,不进则退”。你看最近的 ChatGPT 这类生成式 AI 大热,坊间一直流传说 AI 最终会取代一大批程序员。《孙子兵法》有言:“知彼知己,百战不殆”,与其被不知不觉地取代,不如平时能有机会多学学就多学学。万一真写不成代码了,提前学了还能去写 AI Prompt 不是?(手动狗头)

年轻是你们最大的资本,一定要趁这个时间多学习、多进步。随着全球经济的整体萎缩,各行各业都在降本增效,如果说原本程序员也许是一个可以挣几年快钱,然后再转行的一个过渡职业,那么我奉劝年轻的朋友最好不要再有这个念头了,这在几年前可能是对的,但这个世界不是一成不变的。

小编有话说:

在访谈中,@然后去远足 说到,回答问题的过程本身就是一次消化吸收并检验之前自己所学内容的机会,一些有意思的问题也能带动他思考。“输出是最好的输入”,希望我们每个阶段都能花一点时间静下心来,想一想,写一写,总结总结,不管是工作中的技能经验,还是人生的感悟体会,都能消化沉淀,再出发。

“编程如逆水行舟,不进则退”,技术在不断进步和发展,作为走在最前线的开发者,永远需要学习新的东西,创造新的东西,这个时候,更需要沉着应对,跟上时代的步伐。


《思否有约》记录你与编程的故事。欢迎小伙伴们加入访谈,共同分享成长之路,扫描二维码报名吧~


SegmentFault思否
14.1k 声望165.8k 粉丝

SegmentFault 社区管理媛 - 思否小姐姐