作者面对面 | 非科班程序员,应当如何野蛮成长?

采访者 | 大胖

受访者 | 修言

能否介绍一下你自己,和你正在做的事?

大家好,我是修言。我本人算是一个经历比较丰富的程序员,一开始待在创业团队,后来是在滴滴做可视化,目前在阿里做前端开发。除了业务开发之外,还做一些性能优化和工程化方面的事情,对前端基础能力的探索会比较多。

成为一名开发者的契机是?

其实我并非科班出身,大学专业与计算机离得十万八千里。说起来入坑开发的的契机,应该是读书的时候。那时候移动互联网算是刚刚起来,看到一些 App 与 H5 站点,从心里觉得很酷。

出于一种好奇心、一种探索,年轻人看到酷的东西,总想着自己实现出来。每个人都有一个创造的梦,创造一个属于自己的产品,

恰好当时也认识了一群很有想法的小伙伴,组了一个小团队。但是问题来了,想做产品。但是没人能把它做出来。类似网上说的:「有一个很好的想法,就缺一个程序员了!」都不会怎么办?那只能硬着头皮自己来了。这就入了开发这个坑。

能否聊聊当初你是如何面试进阿里的?

我的一面

我的一面其实比较顺利,一面是一个主管,面试中他提了一些相对比较基础的知识点,主要涉及到语言核心与业内方案。

回过头来想想,当时一面面试的时间有些长,能深刻地感觉到主管把滴滴、美团这种公司的一面、二面打包成现在的一面。当然整体来说讨论的内容偏基础,没什么说得出彩的东西。

我的二面

二面开始,就不是那种单纯的技术点了。二面更多是关于方案设计,他会开始考察你思考问题的能力,开始考查构建方案的能力。一句话,怎么利用你的技术来解决问题?能解决什么问题?思考问题的边界是什么?

与二面面试官聊得比较开心,整个过程持续了差不多两个小时。面试官同样给我提了很多关于技术上的问题,涉及到算法、服务端、网关这些知识,知识覆盖面很广。

之后的几面都通过得很简单,与前两面的面试难度相比,后面几面相对容易得多。

其实整个下来给我的感觉,除了一面是在聊那些大家喜闻乐见的面试题,剩下的其实全在你自己,核心还是面试官想知道你会不会解决问题、能不能独当一面、去了团队里能不能扛事。面试官想要的是一个立体的人,一个有思想的人,而不是一个被动的写代码机器。

在你的学习或职业生涯中,遇到的最大挑战是什么?你是如何克服的?

遇到的最大挑战是在创业期间,一个是没钱,一个愁技术。

资金上困难是因为当时团队一直钱不够花,但开销却一直有。你想要做需求、做事情,就需要花钱。真的很难。当时我们没有融到很多钱,融资的规模很小。

同时我们还要面临技术上的困难。当时的情况是要做一个跨端 App,我们采用的技术是 H5,但是要拓展成一个在Android、iOS 上面都可以跑的应用。要知道当时我们只有一个程序员,四个产品设计围着一个程序员,还是挺有压力的。

因为时间紧、工期紧,所以必须做些探索,于是我们发现了 React Native。React Native 在当时还是比较冷门的,只有很少的人在用,网上资料也比较少。当时学 React Native 其实踩了很多坑,资料也是从国外找来的,中间有很多问题,也不是很容易就能和别人交流。

另一个问题是,人不够用。当时我是自己去找人,找到的人技术方面基础很差,甚至是零基础。当时我认为他们有时间,把他们笼络起来,无偿教他们学技术。只要他们愿意留在团队里,把他们学到的技术应用到我们的产品里,就万事大吉。

这种无偿的教育造成了大量的时间投入。现在想想,其实我们没有输在开发上,而是输在管理与产品本身。

但是这一点也很好,通过大量的时间投入,我才知道怎么样才能给别人量身定做一个定制化的学习路线和成长路径。这也为我后来的写作做了铺垫。

你觉得技术人最重要的品质是?

每个阶段可能都会有不同的理解,我现在觉得是:

  • 第一点:皮实,这是一个普世的品质,对每一个成长阶段的技术人来说,都是一个很重要的品质。

  • 第二点:负责,把你一个人丢到一个项目里,你都能把它方方面面打点完。不只是你的技术能顶上,更重要的是你这个人能顶上。当你面对需求时,你能够有价值感知。当你在分析需求时,在设计实现的过程中,你有自己的一套,包括你在团队里面,能够支持自己身边的人,起到帮助作用。

  • 第三点:坚持,这是一个较为个人化的理解,要能够坚持不懈地去做正确的事情。正确的事可以给我们带来相当大的复利。

关于正确的事情,我得说一下,因为人的思考总是主观的,我们对一件事的认知,不太可能一开始就是正确的,所以我们要在不断精进的过程中持续打磨,一点点修正航向。

你在 GitChat 上创作了 Chat《非科班前端面试大厂的实操指南》和《从 Vue 3 源码切入,全面掌握前端编译原理》,你希望通过这两篇 Chat 向读者传递什么?从你的角度看,你的收获是什么?

我在 GitChat 上面现在有两个 Chat,第一个 Chat 是《非科班前端面试大厂的实操指南》,第二个 Chat 是《从 Vue 3 源码切入,全面掌握前端编译原理》。

因为自己从五人小组、十人团队、千人公司到万人集团,接触了大量形形色色的前端团队,所以我得以沉淀了一系列与面试和成长有关的方法论,并最终形成了一套简单直接、可复用性较强的面试思路和解决方案。在此基础上,经过反复打磨、实践验证和表达层面的梳理,便有了这篇 Chat。

这篇在内容上主要是:站在面试官的角度,告诉你面试的本质,少走弯路,帮助你理解大厂团队到底想要什么样的工程师,还有一些硬基础知识,比如对大前端知识结构梳理。

另一篇《从 Vue 3 源码切入,全面掌握前端编译原理》以 Vue 3 的源码作为切入点,去教大家前端编译。

Vue 3.0 源码发布一月有余。目前针对 Vue 3.0 的源码分析基本围绕响应式原理展开,鲜有对模板编译原理进行分析的。这篇 Chat 主要是带大家来啃下这块“硬骨头”——理解 Vue 3 中的 compiler-core。

当然,本文还是一篇面向任何阶段前端而写的编译原理教程。编译原理作为大厂面试中的热门考点,具备极高的区分度,但其对应的书面学习材料却普遍有一定阅读难度,对野生程序员居多的前端同学并不友好。本文在写作的过程中,穿插了大量的代码示例+图片解说,力求不装 x、说人话,确保阅读体验如丝般顺滑。

这两篇内容其实算是对我个人的一个总结,一个讲的是体系,一个更偏重深入。不管是面试还是研发的过程,尝试建立体系在任何场景中都不会吃亏。我也是希望能给大家做一个引路人吧。

对其他学习或奋斗中的人,你有什么建议?

这里得分三点来说:

第一点:坚持做正确的事

作为技术人来说,如果你认为现在做的事是正确的,那一定要对这件事有一种执念。你在坚持这件事情的过程当中,一定要有自己的韧性

技术这个东西,你如果想要把它学透、把它做好,确实是需要你有某种「一根筋」的特质,一定要有那种打破砂锅问到底的精神。

你不能在遇到困难、遇到麻烦的时候,不管三七二十一先跑为敬。这是不行的,在面对未知的时候,自己对痛苦,对恐惧一定要有耐受度

第二点:通过别人的眼睛去看这个世界

向别人学,是比较重要的一点。对我来说,我的很多成长历程,恰恰来源于别人,来源于那些比我更强的人。所以我也建议大家在工作当中、在学习当中多去发掘,找到比自己强的人。如果别人做的比自己好,或者在哪个方面碾压了自己,就,不要觉得不舒服,完全没有必要。

通过别人的眼睛去看这个世界,通过比自己强的不同的人去看待这个世界,你会发现自己的世界变大了。也可能会理解原本你理解或解决不了的问题。

例如,你可以回忆一下自己之前接触过的那个很强的人,如果我站在他的角度,我会怎么看这个问题,我会怎么解决这个问题。当我们借助别人的思维方式,来解决自己的问题时,很可能去取得突破性的进展。

所以说我一直不建议技术同学过分固执和狭隘,完全活在自己的世界里面,一直在自己的那个小世界里打转。这其实对你很不利,你容易陷入一种怪圈,以一种行为模式去生存。这时候就谈不上成长了,你往往只能在一个楼层或一个楼梯间里反复打转,很难再成长。

第三点:主动构建自己的知识体系

学技术不能执着于表面,不能只执着于那些简单的快乐。比如很多同学喜欢大量学习 API 轮子使用,学习这些东西能给我们带来明显而及时的反馈和成就感。容易的事情做的人最多,但这些东西是没有温度的。大家不要去捡软柿子捏,但凡有一个人想做技术,他都能学会。

如果你只执迷于这些东西的话,那么你作为一个技术人的可替代性会非常强。你应该怎么办?这时候构建自己的知识体系就很重要了。

如何构建自己知识体系:

主动去构建自己的知识体系,基础要牢。不是说你要把某个 API 背得多么熟、把某个轮子玩得多么转,而是要深入它的底层,去看这个东西是怎么实现的?这个接口是怎么设计的?它为什么这样设计?创造它的那个人在打磨的过程中,有哪些思想值得你去借鉴?这是你在学习的过程中需要有的思考。这是构建自己知识体系的层面。

另一个层面要稍微拔高一点:你对业务、技术,对所从事的领域的工作,都应该有自己独立的思考。思考你面对的每一个具体的问题,去感受思考过程中的那种困惑和痛苦。这些体验慢慢经历得多了之后,你会变成一个有自己“思想”的人。至少是在技术上有自己的工程和架构思想。有了这些之后,你就不再是一个小工。

目光要长远,要想清楚自己真正想做什么,自己想在技术这条路上走多久。如果你的答案是,我要走得很长远,我要一步一步变得更强!那你现在就要开始重新审视自己的知识体系还有工作方式了。

最后聊聊你是如何写作的吧。

写作 · 甜

我的写作历程从《前端性能优化与实践》开始。写这本书的契机是因为那段时间我生病休假了,休假时我又闲不住,把自己之前在性能优化方面的见解沉淀了起来,我本来只是想这么玩一下,之后就还是回归到自己的生活里面。

但我没有想到写完之后,反响还比较大,慢慢地我接触了很多读者。在跟读者打交道的过程中,我意识到了自己可能做了一件比想象当中更能影响别人,带来正面效应的一件事。

我写的所有内容基本上都来源于读者告诉我他们想看什么,为什么想看。因为我觉得我如果写出来,就能对很多人的工作和学习起到作用。

再就是关于如何写出好内容,这个问题可以联系到我之前一些经历。在我创业的时候,我有过自己手把手去培训零基础同学的经历,现在他们在阿里、网易、苏宁,工作得还是挺开心的。

之所以能这样,是因为我对他们的思维方式和成长路径是有把握的。我知道当一个人的基础没那么好的时候,他是怎么去想问题、怎么去看这些程序、这些技术的;我也知道当他稍微强一点的时候,他是怎么去思考问题、怎么去理解解技术的。

这一方面来自于我的既有经验,另一方面来自于一种同理心,我能够感知别人在成长过程中的每一步心理活动和他们的想法。

写出好内容,我认为最重要的其实不是作者本身有多强,而是他能够多大程度去感受接收方的想法,能够站在一个伙伴的角度去给他出谋划策,去做真正有利于对方的事情。

写作 · 苦

当然,写作过程中也有一些痛苦的时候。因为我每一版内容都会衍生出多个版本,大家看到的虽然是那个最终版本,但是在这个过程当中我可能会打磨十几次,

其实写作最怕的就是写出来的时候只有我自己能看懂。作者也是有主观判断的,当站在自己的角度去表达技术某方面的内容时,就会带有一些自己的色彩。比如我可能会忽略掉很多前置知识,文章中直接用一句话说这个东西是什么,而在这句话里,可能会有好几个词大家看了不知所云。

其实从第一版到最后一版中间经过的那 99 版,可能都是在想同一个问题:怎样能做出不只我一个人能看懂的内容。能让别人看懂,让我身边的人看懂,让编辑也看懂,进而能让之后每一个读到这篇文章的人,不管是初级前端、小白也,还是有点资历的开发者,都能从当中学到东西

最后你想对大家说些什么?

预告一下新专栏,具体 12 月见,专栏的目的是帮你突破现有技术瓶颈,直击大厂。如果你感兴趣,可以在文章下方留言,有机会获得免费阅读的权限哦。

点击阅读原文,关注修言

猜你喜欢

转载自blog.csdn.net/GitChat/article/details/103379212
今日推荐