你好,骗子

我是中途转行的,过去我所学的专业与所做的工作都和编程没有什么关系。

但在大学里读书的时候,我对写代码这件事已经萌生了兴趣。虽然我忘记确切的起因了,那时候我通过网络上的材料自学了一些HTML和CSS,并对之产生强烈的兴趣。

工作以后,我整个人的精神状态一直不太好,情绪也不太健康。最严重的那段时期,晚上睡觉时因为工作压力而做噩梦。

不管一个人究竟如何看待工作,对大多数人而言,工作始终是他人生里最为重要的事情之一。醒着的大部分时间都在工作。所以一个人如果总是在工作上感到不顺心,就很难说享受生活。我开始觉得我正在从事的工作并不适合我,为了“拯救”我的生活,也许我应该在这件事上考虑别的可能性。因为之前有过自学基础的缘故,最后我决定在编程这条路上试一试。也许这样说有点戏剧性的夸张,但目前为止来看,这个决定几乎改变了我的人生。

一开始我在一家公司里从事“切图”的工作,用HTML和CSS写简单的的静态页面,并尝试学习JS。这个过程并不顺利,有一阵子我甚至怀疑我做错了,我根本不是当程序员的材料。令我印象最深的一个细节是,我在网上寻找JS学习材料时,不断地遇到jQuery这个词,然后我死活都搞不清楚这个东西到底是什么、和JS是怎样一种关系。对于已经能够编程、特别是科班出身的人而言,这种困惑可能相当可笑,但当时我真的绞尽脑汁搞不懂什么叫“库”。这种概念上的混乱、无知,比学习JS过程中的任何具体困难都更加挫败我。

这家公司并不是技术导向型的,事实上,包括我在内,整个公司只有两名程序员,如果我也算得上程序员的话。在这里我工作了两年多,工作里没有任何学习的空间,到我离开的时候,我仍然没什么长进,只会用JS做一些最最基本的DOM操作。最大的收获,可能是因为公司网站需要兼容到IE6,而学会了各种各样兼容旧浏览器的奇技淫巧。

去年10月份,我开始了我的第二份编程工作。这一次我进入了一家技术主导的公司,但也只是理论上如此。在我入职的时候,如果不算实习生的话,整个公司就只有我一个程序员。然而正是在这里,因为“环境所迫”,我体内好像也有个小宇宙,突然爆发了。在这一年之内,我从一个写最基本的jQuery都有问题的垃圾程序员、变成现在这个用半天的时间学会使用VueJS的我。

开始的前两、三个月里,我都专注在jQuery上。一开始写一个再简单的效果都要跟着教程一步一步来,后来慢慢地找到感觉了,能够一举三反,大多数普通的页面效果都能自己想出办法来实现。这时候是我第一次真正觉得自己像个程序员。期间首回碰到要写动态交互的情况,我对ajax是什么一窍不通,吓得周末回家什么都不干,就只顾着到处找相关的资料来学习。

后来公司里做后端的同事向我介绍了Angular,我简单了解了以后觉得特别深奥,心想还是等我把基础学扎实了再来搞懂这东西吧。但后来碰到一个非常复杂的页面,同事说你不用Angular这种框架来写代码会乱死、人会累死,最后我没办法只好硬着头皮上了。就是这一次,我体会到一个往后仍然不断应验的道理:很多东西都不是在细腻的计划里学会的,而恰恰是在各种混乱的实践之中搞明白的。于是接下来的一两个月里,我大量地接触Angular,在似懂非懂的情况下勉强学会了使用我的第一个前端框架。这时候的我不但知道“库”是什么,我还知道“库”和“框架”的区别是什么,这让我很有成就感。

再后来我从订阅的相关网站里听说了React,有点跃跃欲试。有天晚上大家都下班了,我就一个人待在办公室里折腾,下载Node.js、用npm安装各种依赖、写最新的语法、使用webpack编译和打包代码。我不是特别喜欢React的风格(好像和我对Facebook的偏见有关系),但学习React带我进入了前端领域真正的大世界。一开始我还没搞清楚状况,只知道跟着教程安装这个、配置那个,等到我从中学会很多概念回过神来的时候,才恍然大悟:我终于跟世界接轨了。我莫名其妙踏入了那个“高级”的JS社区,从此以后,订阅的网站里所讨论的这个那个趋势、这个那个技术,我终于都有点头绪了。

接下来我开始了疯狂的学习历程。虽说“疯狂”,但我完全不觉得劳累。一方面是因为我很享受;另一方面是意识里其实一直有所节制,不想让自己成为工作狂。总之我几乎每天晚上下班后都会学习,有时候一整天下来什么东西也没学就会觉得特别空虚、焦躁。这个过程里,最重要的可能是我花时间学习了大量Javascript的基础知识,这比学习任何一个新的WEB API或新框架都重要得多。

之后我系统地学习了git的使用,接触了Typescript、Less、Rollup等等东西。这后来最重要的一个里程碑,应该是我学会了使用Node.js。不是使用它辅助前端开发,而是真真正正地使用它编写后端代码。上一个月,我独立使用Node.js、MongoDB和Vue为公司搭建了一个内部使用的系统,现在已经是我们公司研发部门每日必不可少的依赖。

这就是我的2016,一段出乎我自己意料的成长。更重要的是,我变得非常开心。我再也没有一天是害怕上班的,我很享受工作,也得到很好的报酬。我的日常情绪有了很大的改善。

想起来有些奇幻。大学寝室里某天熄灯以后,我搬着椅子坐在走廊里看《CSS权威指南》,别人走过去都问我这么拼命做什么,看清楚我看的书目后更是莫名其妙不知所谓。那时候的我大概也没预料到,这些奇奇怪怪的代码有一天将会改变我的生活,我会成为一个程序员,并且还算擅长这件事。

如果我身上还有什么关于工作的难题需要解决,那大概是英语里所说的impostor syndrome。我肯定自己的能力,并且相信自己现在是一个起码称职的程序员。但根本上,我仍然是一个有些保守、不自信的人。有时候阅读别人的文章,感到自己跟别人比简直什么都算不上,总觉得自己写的代码在别人看来都特别幼稚、可笑,没有任何技术含量。

面试的时候,如果一家公司开出A到B的工资,然后问我期望值,我几乎笃定会回答A,然后还觉得有些配不上因而不好意思。我想让自己大气一点,事实上敢夸海口的人得到的机会更多,但还是无论如何都说不出口类似“我JS水平很好”、“我精通CSS”这种话。有一天我仔细想了这个事,最后发现在我所设想的情境里,我宁愿拐弯抹角地跟面试官说“我这方面的能力只能算掌握了基础,但我这个人一般把自己评估得比较保守”,也不敢直接说“我觉得我应该在平均水准以上”。

今年年中,因为种种原因,我想接受另一个公司的入职邀请。我目前所在公司的老板知道后,直接给我翻了一倍工资,用一个在我所在的城市算得上很大的数字挽留我,我才知道我值这个价钱。但这对“治疗”我的骗子综合症没有什么太大的帮助。

也许以后我会继续长进,直到有一天我的水平终于让我不再以自己的代码为耻,不再以为自己是个配不上自己工资的冒牌货。也许不会。

但我真的很开心我成为了一个程序员,从事着我非常热爱的事情。所以,最后还是要对今天的自己说一声:

console.log('你好,骗子');