最近签证的事告一段落,放松下来想写点东西,想来想去要不就写写我自学编程的经历好了。
一切始于一部电影——《社交网络》,这片我看了不下20遍,片中扎克伯格在宿舍单枪匹马开发facebook的情节深深吸引了我,在我的心里种下了一颗小小的极客种子。
也因为这个原因,大学毕业之后,本科学习广告的我进入了互联网,成为了一个广告平台的运营,不久之后又转为产品,一干十年。
进入职场后,我渐渐接受了自己螺丝钉的“命运”,学习技术、成为极客之类的想法被我慢慢放下了。我无数次说服自己,术业有专攻,做好自己的本职工作就好。但是,无数次放下之后——还是放不下。我回想起自己进入这个行业的初衷,在这个行业走一遭,感觉不会技术始终是一个遗憾。
最终,入行的第八个年头,我终于下了自学编程的决心。
我的同事都觉得我疯了,年近30转技术?不觉得有点晚吗?我说我学点技术就一定要做开发吗?自娱自乐不可以?虽然有一些调侃和不解,但我仍然得到了很多开发小伙伴的帮助,我非常感谢他们。
自学编程的第一步是决定方向。在之前的工作中,我已经接触过不少技术概念,知道前端、后端、服务器、数据库这些东西是干嘛的,所以当我要给自己选个方向,我选择了web前端。最重要的原因是前端编程有形象化的输出,做个网页看得见摸得着,正向反馈强一些;另外(据说)前端入门相对简单,前期的学习曲线平缓,对初学者更友好。
上网一搜就能知道,要做web页面,需要开发者掌握HTML、CSS和JavaScript三种最基础的技术,HTML管框架,CSS管美化,JS管逻辑。最开始,我在HTML和CSS上没费多少事,对于HTML,div标签写一切;对于CSS,flex布局应万变——能凑出页面就成。但是,该来的总会来,在学习JS的过程中,我开始遇到一些困难。
现在已经回想不起来具体都是些什么困难了,因为已经会了,不觉得难了。只记得当时我杂七杂八看了很多JS教程和书,大多半途而废,一本看不下去,又换另一本,有点病急乱投医的意思,来来回回浪费了不少时间。后来一个前端朋友估计看不下去了,推荐我去看《javascript高级程序设计 第三版》,我照着书里面的例子敲,边敲边学,竟然很顺利地啃完了。不得不说,这本书真的是JS入门神书,虽然名字里有“高级”二字,但内容却非常浅显,对技术概念的解释也很通俗。(后来又看了第四版,我觉得从初学者的角度看,比不上第三版。)
在我感觉勉强算是入门了前端基础的时候,发生了一个现在看来意义重大的小插曲——这一年,我所在的公司开始做微信小程序。对公司的所有产研来说,微信小程序是个新鲜事物,于是无论产品还是技术,都开始啃文档。我惊喜的发现,微信小程序的技术文档并不难,我完全能看懂(赞美小程序)。为了更快地熟悉小程序(也为了能装逼),我开始试着写微信小程序。
就这样,我的第一个作品诞生了。
这是一个记录怪物猎人刷怪时间的小程序,功能很简单,就是个排行榜,用户可以上传自己的刷怪时间,参与排行。这个产品并没有上线,也只有几个玩怪猎的朋友使用,但作为第一个产品,我觉得起点挺高,借助微信云开发的能力,它拥有了云函数和数据库,是一个前后端完备的产品。虽然现在看来整个产品非常粗糙,但我当时兴奋了好几天,睡不着觉的那种。
(我真的忍不住吐槽几句,微信小程序后面越搞越抽象,你要是也被wx.getUserInfo搞过,我们就是素昧谋面的好兄弟。)
学习微信小程序的经历让我模模糊糊意识到了框架这个概念。所以当我把注意力转回到web开发时,没费多大劲就能理解VUE、React是什么东西,有什么用。由于微信小程序的写法和VUE比较相似,本着多折腾的原则,我开始学习React。
接下来就到了我的“技术爆炸”时期。这段时间,我学了React和Next.js,从单页应用到多页面的网站,我开始不断给自己提需求、做Demo。
www.movieweekends.site和
www.mhr.mobi就是这段时间的练手作品。在JS基础方面,我抽空学习了ES6的语法,也学习了Typescript。在这期间我发现了一个神教程:
zh.javascript.info,这个网站应该说是我目前看到过最好的JS基础教程,作者还难得很幽默(参见3.4 忍者代码)。直到现在我都会没事上去看看,温故知新。
这时候,一个严峻的问题摆在我的面前——后端怎么办?要不要学?
因为微信小程序云开发的经历实在太香,也因为后端技术栈过于庞大,这一回我选择了偷懒(认怂)。略微google一下,我找到了Firebase,然后顺藤摸瓜,我发现了Supabase!考察一番之后,它成了我的唯一指定后端方案提供商。对此,我只能说——香,真的香!
其实我也没有完全放弃学习后端。偷懒的间隙,我也曾使用Express+mongoDB+Next.js搞过完整的前后端闭环Demo,但是距离实用还差得很远很远。除此之外,我还“略懂”了Koa、egg、thinkJS和NestJS,NestJS面向切面编程的模式着实令我大开眼界,也更坚定了我投靠Supabase的决心。
这之后,一切似乎肆无忌惮了起来。因为想把网站推上线,我学习了webpack、Vite等打包工具,然后Vercel的出现好像又使打包这件事没那么重要了;旧爱Sass被只看了一眼就疯狂爱上的Tailwind干掉;认识新欢Svelte并进入蜜月期(至今);闲得蛋疼学了点Electron,搞了个桌面Todo应用;因为学英语给自己做了个浏览器插件Transider;第一个付费网站SpeakingPass……
(这几个产品都放在了我的个人主页,有兴趣的朋友可以看看:
www.jedxie.work)
以上就是我乱七八糟的自学编程经历了。我不是那种特别自律,目标感很强的人,因此整个自学过程中充满了“闲手”,该怂的时候也怂。对我来说,这个过程就像玩游戏开地图,充满了探索的乐趣。现在回想起自学编程的初衷,嗨,极客什么的,一把年纪了还中二呐?