阅读 1558

2018,一个转行程序员的成长 | 掘金年度征文

年终总结已经写过了,这次看到掘金的活动,想参加下。拿第一就不指望了,留给大佬们。我只想小册 6 折的机会,2019 年多买几本小册。我很爱学习的 :-D

自我介绍

我之前在掘金写过很多文章,可能很多人看过《我如何零基础转行成为一个自信的前端》 一文。没看过的朋友,我还是简单介绍下。我是转行做前端的,转行之前做过外贸和英文编辑,从没见过代码。2017 年自学了 10 个多月,2017 年 10 月 8 日正式开始程序员工作,到现在有一年多工作经验了。

除了之前写的年终总结,我再补充一些 2018 年所学到的,和新的一年想做的事情。

2018 学到的

一,新人先悬置争论

CS 世界是有很多争论的。有人非常讨厌 JS,也有人认为 JS 是最好的语言。Kyle Simpson 应该算是 JS 的优秀布道者了吧,照样会有人批评。这些批评看起来有很严肃的论证和思考,我都没法看出来是不是胡喷。对于这些争论,新人是很难分辨的,因为你还没有达到语言设计的高度去批判性思考。

既然缺少判断能力,那新人怎么确保自己不被带偏呢?我自己的一个经验是,先找权威学,然后在实践中去验证。比如,我在跟着 Eric Elliott 学习函数式编程的时候,确实能在写 React 应用时感受到程序组合的灵活,pointfree 的简洁易扩展,过程抽象的能力如何在解决实际问题时派上用场等。

同时,也有很多人批评函数式编程,对于这些观点,我先悬置起来,等我自己被坑了,独立总结出来的知识,才更宝贵。同理,Eric Elliott 批评的程序语言里面类继承的问题,比如猩猩香蕉问题(你本来只想要一根香蕉,结果你继承来的是一座丛林里面的一棵树上的猩猩手里握着一根香蕉),我同样不发表看法。我知道这个问题的存在,但我没写过类 Java 语言,没有自己踩过坑。

二,学习语言特性,不只是学语言

2018 年年初我学习过 Swift 和 iOS 开发。那段时间我还简短学过 Go。学多门语言的过程中,我比较了这些语言各自是怎么实现程序扩展的,是通过组合还是通过继承实现的。Swift 的面向接口编程(Protocol-Oriented Programming)给我留下很深刻印象,在我有限的 iOS 应用开发经验中,我发现这种程序扩展机制非常灵活和易用。

在学习 Haskell 的过程中,我发现惰性求值很有意思,然后我通过查资料,自己在 JS 里实现了。我在这两篇文章里面有详述:

同样,用 ES6 箭头函数实现 Y Combinator 等组合子我也折腾过。这些知识是通用的,并不局限于一门编程语言。

三,不要忽视了综合能力的提升

忽然画风转了一下,是因为自己最近在这一块感受比较深。之前都在小公司工作,压力比较小,没有经历过一线程序员必经的磨炼,所以自己在工作上还是比较嫩的。年底进了阿里,受到的冲击和自己相应的变化比较大。

综合能力首先是理解复杂业务的能力和处理复杂系统和流程的能力。这一块我适应的比较慢,还好师兄比较有耐心,让我有时间调整。提升这方面的能力一是要多问,不要太担心自己问的问题太弱智,每个细节都问清楚才放自己过。二是要有思考的习惯,每天做的杂事要有反思。这样做一是为了看清全局图,让做事有条理。二是要理解做这些事情的意义,试着看自己能不能找出优化的空间(我还在尝试,没达到这个高度啦)。

再就是程序员的一些基本功。比如高并发工作状态下,怎样通过一些小工具和脚本来自动化工作流等。说来惭愧,我直到最近才知道 git cherrypick 怎么用。

然后就是沟通表达的能力。这一块在蚂蚁新人培训里面感受比较深。在培训里面分组玩“盗梦空间”的游戏,我所在的小组,因为组长的协调和沟通,完美完成了超高难度的群体任务。表达沟通能力可以让自己的工作放大很多倍。只顾埋头写代码其实是很吃亏的。

四,重视表达和输出

写作和输出,其实最主要是为了帮自己理清想法。前段时间我写《完整解释 Monad -- 程序员范畴论入门》真的够呛,但是之前已经做了一个 public commitment,怎么也得逼自己写出来。我花了至少两个周末的时间去复习范畴论,然后中途失败,没法在一篇文章里用范畴解释清楚 Monad,最后放弃了更理论的那一部分。但是我还是逼着自己在折中的情况下较为完整的解释了 monad,自己去查资料,翻译到 JS,然后想出案例去举例子。这个过程中我对于相关领域知识的掌握更加巩固了。

在掘金写作的这半年也有些 drama。我的一些文章引起一些误会和争论。前段时间一些人的冷嘲热讽让我比较失望,删掉了全部文章,不想再回来写了。由于我写文章比较多,开源的代码比较少,于是有人称我王语嫣式程序员。我看到肯定是不爽的,但我还是有些反应过度了。

对于掘金社区,我建议是大家友善点。优先讲道理,少些诛心之论和轻佻言论。大家都是学习者,犯错和理解不一致是很正常的。提出反对意见是帮对方提升,而不是取笑和比个高低。

2019 年想做的

除了在工作上能独立负责一条业务线这个艰巨任务之外(这已经足够我扛了),学习上我还有这些方向:

  1. 往底层学习。前段时间断断续续在学 AST 的应用,写 Babel 插件和 Codemod 的使用等。下一步是学习下简单的编译原理,熟悉编译器的实现。
  2. 学好数学。学这个的目的是想学机器学习。计划是用两个季度学数学基础,下半年开始继续学机器学习。年底看能不能用 Tensorflow.js 写个简单点的应用。

希望年底回看这篇文章时不会发现自己在说空话。

掘金年度征文 | 2018 与我的技术之路 征文活动正在进行中......

关注下面的标签,发现更多相似文章
评论