02. 我的计算机启蒙:绕了一段路,我又回到了软件开发
发布于
阅读时间
约 23 分钟阅读

02. 我的计算机启蒙:绕了一段路,我又回到了软件开发

9岁的我每次听见钥匙插进门锁,都会立刻拔掉电脑插销,试图制造一整天没有碰过电脑的假象。这场计算机启蒙发生在九十年代末:没有课程,没有明确目标,只有一台藏不住余热的电脑,和一个总想把它拆开看看的孩子。

这个办法从来没有真正奏效。电脑主机会发热,CRT 显示器断电后还会随着温度下降发出几声“嘎吱”。如果等父母已经进屋再关电源,基本只能束手就擒。

我的父母并不喜欢我用电脑打游戏,可我还是一次次偷偷打开它。

钥匙插进门锁的时候

小时候,我对电脑的兴趣最初没有多少技术含量,主要还是为了玩游戏。周末等父母出门,我就一个人守着电脑,直到门外传来钥匙声,才开始手忙脚乱地销毁现场。

玩游戏之外,我也会把主机里的零件拆下来,再尝试装回去;系统出了问题,就找出 Windows 98 光盘重新安装。做这些事情没有明确目的,主要是好奇,也因为那个年代的操作系统确实不太稳定。电脑用着用着可能就死机了,下一次开机时连 Windows 桌面也进不去,我只能看着电脑屏幕上的英文字符干发呆。

故障多,反而给了我不断折腾的理由。

当身边的小伙伴还停留在打开软件和运行游戏时,我已经开始使用一些 MS-DOS 命令,也敢进入全英文的 BIOS 调整硬件,甚至尝试给 CPU 超频。现在回头看,这些操作未必都做得正确,胆子大于知识的情况应该不少,只是那时并不知道害怕。

这些知识主要来自电脑期刊。父母给了我足够的零花钱,让我能买下当时流行的杂志,再对着里面的文章一点点尝试。很多具体内容后来已经忘记,但那种学习方法留了下来:先看到一个陌生名词,再找到能够操作的地方,最后亲手试一次。

我以为 Dreamweaver 也是游戏

九十年代末,我们那座小城市里,电脑城几乎是购买家用电脑、硬件配件和软件光盘的唯一去处。电脑城就在市中心,而我家离市中心也就10分钟走路的路程(我家乡是个很小的城市,从家开车到山脚下也就不到10分钟)。所以我很喜欢去那里闲逛,看硬件,也看摊位上成排摆放的盗版游戏光盘。

那时买游戏盘有点像开盲盒。为了尽量利用光盘容量,一张盘里经常塞着不止一个游戏,包装上却不会全部写出来。我会拿出所有零花钱一次买好几张,回家把游戏挨个安装,再去找卖家换其他光盘。有时也和同学交换,大家靠一张张实体光盘传播游戏,多少有点像后来 BT 下载所做的事情,只是速度更慢,也更依赖人与人之间的往来。

大约在 99 年,我10岁,从同学那里换来一张光盘。除了想玩的游戏,里面还有 Dreamweaver 和 3ds Max。那时我不知道它们是什么,看见陌生软件就以为也是游戏,于是全部装进电脑。

打开 Dreamweaver 后,我胡乱操作出一个页面,又发现旁边还有窗口可以编辑代码。我在键盘上随便敲了几下,页面里立刻出现了刚刚输入的内容。

我不知道那叫网页,也不知道自己碰到的是代码,只觉得很奇怪:原来屏幕上显示的东西不是固定的,我输入一些字符,它就会发生变化。直到多年后上大学,看见高年级学生用 Dreamweaver 做毕业设计,我才明白,九岁那年无意中打开的东西,是一个网页编辑器。

3ds Max 更难理解。我花了很长时间研究按钮,最后发现软件默认提供了一个三维茶壶,可以拖动、旋转和修改外观。我一直以为只要把茶壶调整正确,接下来就能进入正式游戏环节。等了很久,游戏也没有开始。

软件是英文版,电脑期刊又很少详细讲这些专业工具,我最终没有继续研究。至于假如当时看得懂英语,10岁就能顺便学会 C++(这显然属于多年后的我替小时候吹牛)。

不过那张光盘还是留下了一点东西。它第一次让我看到,电脑除了运行别人做好的游戏,也能用来改变页面、制作图形,甚至创造原本不存在的东西。

离计算机越来越远

童年对电脑的兴趣,并没有直接变成清晰的职业规划。在国内读大学时,我学过计算机,仅仅1个学期后就退学了。后来到日本留学,原本也打算继续选择计算机方向。

现实没有按照这个计划发展。准备留学生考试时,我没有足够时间重新复习理科内容,于是改考文科。最后成绩不高,可以选择的学校有限,我便进入商科方向学习。毕业以后,又顺着所学专业加入一家会计师事务所。

这条路谈不上经过慎重设计,更像在每个阶段,根据当时能抓住的选项继续往前走。很可惜,我的每次选择都不像是在做“贪心算法”时的最优答案。

2015 年进入事务所后,我很快发现,自己并不喜欢每天和数字、表格打交道。想到未来几十年可能都要重复类似工作,我开始如坐针毡。坚持五个月后,我选择辞职。

裸辞,没有下家,也没有足够积蓄。

那几个月的工资没有支撑我太久。我尽量压缩开销,一天能只吃一顿,就不吃第二顿。嘴上说得像能靠意志力扛过去,科最后还是向父母要了些钱。然后用2张信用卡拆东墙补西墙,才撑过最难的一段时间。

这次辞职并不等于方向自然出现。我只是确定不想继续做会计,却还没有证明自己能够做别的事情。

空瓶子里终于有了一点水声

2015 年前后,日本软件行业有不少开发岗位。即使没有工程经验,我也能通过猎头得到几次面试机会,只是这些面试通常第一轮就结束。

原因并不复杂:我没有足够的开发经验,也没有能够展示自身的项目。博客里学到的零散知识,在面试时很难变成有说服力的能力。

为了找到下一份工作,我开始学习 Java、SQL 和 PHP,也在网上找到 freeCodeCamp 与 Khan Academy,跟着课程往下做。那段自学时间不到三个月,没有完成任何可以拿给面试官看的项目,更谈不上已经做好成为工程师的准备。

网上有许多免费教程,也有不少其他行业从业者成功转行的故事。这些内容像鸡汤一样反复出现在眼前,在我没有动力的时候,偶尔也能打一针鸡血。

学了一段时间后,我依然说不清自己掌握了多少。更准确的感觉,是原本空着的瓶子里终于装进一点水,拿起来晃一晃,至少能听见声音了。

“明天来吧”,以及迟到三周的我

后来,我主动报名参加一家派遣公司的面试。负责面试的是公司 Solution Manager,也是后来给我第一次开发机会的人。

他问我:“之前有过什么开发经验吗?”

我说:“以前手搓过博客,在虚拟机上从零敲命令部署过 LAMP Stack,还会一点 Java 和 SQL。”

他又问:“那你想做哪方面的开发?服务端、手机 App,还是基础设施?”

我回答:“现在还不知道,只是写代码的时候很有成就感。我想试试 Web 开发。”

他说:“你今年二十六岁了,在开发领域里已经不算年轻,得抓紧开始。”

我问:“那得从什么时候开始抓紧?”

他说:“明天就来吧。我们先带你做项目,做些简单培训,再去客户那里工作。”

我嘴上答应了,心里却觉得自己可能还能找到更好的工作。第二天,我没有去报到,而是继续通过猎头参加其他公司的面试。

三周以后,我确认自己确实拿不到其他开发岗位,只能灰溜溜地重新回到那间办公室。经理看见我,先问这几周去了哪里,为什么答应加入公司却没有出现。

这件事没有什么体面的解释。我以为自己还有更多选择,结果只是多碰了几次壁,又绕回原点。

他最终还是让我留下,因为他认为我愿意在开发这件事上花力气。公司也允许我在办公室免费研修,没有工资,但报销交通费和午饭钱。条件谈不上优厚,对当时的我却足够重要:终于有人愿意让我先开始,再慢慢证明自己能不能做下去。

我从派遣员工和测试工作起步,第一次真正进入软件行业。后来我很早便离开了那家公司,但始终感谢那位经理。他没有替我完成转行,也没有保证我会成功,只是在其他公司都不愿意承担风险时,给了我一个可以开始的位置。

第一个被带上开发大会的页面

进入行业后,我曾被派遣到 Everysense,负责应用程序测试。那时我的身份仍是测试人员,离“前端工程师”还有一段距离。

后来,公司老板突然需要一个数据可视化 Demo,便叫我做一个能够展示数据的小页面。

我使用 Vue 搭建前端,用 Leaflet 显示地图,再通过 Chart.js 绘制数据。最后做出的页面可以在地图上标出 GPS 位置,也能用散点图展示六轴传感器数据的热力分布。

这些工具的名字对非工程师未必重要。重要的是,我第一次不再只负责检查别人写出的功能,而是亲手把原始数据变成一个可以看到、可以操作、也可以拿出去展示的页面。

老板后来带着这个 Demo 参加开发大会,并成功用它展示了公司产品。它没有变成什么知名项目,也没有带来戏剧性的结果,却给了我一个具体证据:我不只能够学习开发,也能够做出实际可用的东西。

这个小页面成为我转向前端工程师的起点。

2016 年,我做了第一个 GitHub 项目 leaflet-menu,用途是在 Leaflet 地图上显示菜单。这个菜单便是那个用在了Everysense老板要求的demo项目上的工具。项目很小,影响也有限,却给了我不少信心。

10岁时,我只能对着 Dreamweaver 随便敲字;到了这时,我已经可以围绕地图做出自己的工具。

我开始向系统各处伸手

此后十年有余,我经历过五个团队,岗位范围从嵌入式测试扩展到 Web 前后端开发、大数据工程、架构设计和web基础设施。

周围一些工程师建议我留在同一个方向,多积累几年。这种建议有充分道理,长期深耕能带来更扎实的专业能力。但对我来说,不同岗位也提供了另一种价值:

它们让我能从多个角度理解同一个软件系统。

做过测试,便更容易看到功能怎样失效;写过前端,会留意用户如何接触系统;做后端和数据工程,需要考虑数据怎样流动;接触架构与基础设施后,又会看到一段业务代码之外,还有多少东西共同决定系统能否稳定运行。

跨领域经历也不断提醒我,自己不知道的东西远比已经掌握的多。有时我会给同事或其他团队的人买杯咖啡,再占用一点他们的时间聊技术、工作方法和项目判断。现在看,这种邀请未必每次都讨人喜欢,尤其对方正忙的时候;但只要能把人约出来,几杯咖啡通常能换来不少有效信息。

很多人其实都需要一次 Coffee Break。(有时候如果有机会的话,千万别忘了请客,这是个小技巧)

如果不主动和不同岗位的人交谈,很容易把自己熟悉的部分误认为整个世界。只有听见别人怎样描述同一个问题,才会发现自己这只井底之蛙,所在的井可能比想象中还浅。

远程办公留下的空白时间

这种交流方式在 2020 年发生了变化。COVID-19 期间,公司要求员工回家办公,日常沟通与会议转移到 Zoom。

隔着屏幕聊天,始终没有线下自然。有些人会关闭摄像头,面部表情和肢体动作消失;网络不稳定时,对话又会被延迟和杂音切碎。即使说出的内容足够清楚,交流仍然少了些熟悉的反馈。

过了一段时间,我逐渐适应居家办公。每天早上进入高度集中的状态,直到某个时间参加线上会议。过去散落在通勤、走动和临时交谈里的时间,被重新拼成一块块完整的工作时段。

我也开始发现,工作任务没有想象中那么满。有些事情一个上午就能做完,下午参加几场会议,甚至还能提前完成第二天的工作。社交减少以后,白天多出了一些可以支配的时间。

我习惯把这些时间拿来做软件项目。

有时只是突然冒出一个念头,觉得某个东西应该可以这样实现,便打开编辑器开始尝试。我的 GitHub 上因此留下不少小仓库,很多都没有真正完成,更没有成为产品。

没有完成,也没有成为产品

过去我容易把没有完成的项目看成失败,仿佛只有发布、获得用户或持续维护,才能证明一段开发时间没有浪费。

现在回头看,情况没有那么整齐。这些项目确实没有解决什么重要问题,也不需要被重新包装成成功。多数仓库安静地停在那里,没人使用,连我自己也很少再打开。

但它们仍然参与了我的成长。

leaflet-menu 没有成为有影响力的开源项目,却在我刚准备从测试转向前端时,给了我继续向前走的信心。其他未完成项目也常常扮演类似角色:它们是想法的起点,是练习编程能力的地方,也是我确认一种实现方式是否可行的草稿。

它们未必产生外部价值,却留下了内部变化。

我还有 pitayan-blog-theme 等项目,各自有不同来历,适合留到另一篇文章再讲。把所有仓库都塞进同一篇文章,只会让这段经历再次变成项目列表。对我来说,重要的也不是证明每个项目都有意义,而是承认自己一直依靠这种方式学习:想到一个东西,先做出来看看。

启蒙没有结束

回头看,我进入软件行业并不是一条规划好的路线。

10岁时,我不知道 Dreamweaver 是什么,也不知道三维茶壶不会带我进入游戏;后来在国内学习计算机,去日本后却因为考试准备和成绩改读商务;从会计师事务所辞职时,我没有作品,也没有足够的开发能力;第一次得到机会,又因为觉得还能找到更好的工作,迟到了整整三周。

这些决定里有好奇,也有误判;有主动选择,也有现实限制。它们不适合被整理成一条从小热爱计算机、最终顺利成为工程师的漂亮路径,因为事实并不是这样。

如果其中存在一条持续至今的线索,大概是我始终愿意打开陌生东西,亲手试一次。小时候拆主机、安装系统,后来学习代码、跨越不同岗位,再后来利用空余时间创建许多没有完成的仓库,背后都是同一种冲动:

我想知道它怎样运转,也想看看自己能不能改变它。

多年工程经验没有消除这种冲动,只是让我多了一些方法,也更清楚一次尝试可能没有结果。

那些仓库多数没有变成产品,那只 3D 茶壶也始终没有带我进入游戏。但从10岁到现在,我似乎一直在做同一件事:打开一个陌生东西,试着改变它,再看看自己能不能弄明白它为什么这样运转。

分享这篇文章

参与讨论

04. 从乐天到迅销:我学会先看组织,再谈技术
· 约 28 分钟阅读

04. 从乐天到迅销:我学会先看组织,再谈技术

从年薪300万日元的初创公司工程师,到乐天工作六年,再到迅销EC相关部门,回顾技术领导力、产品质量、工程自主权与组织责任链之间的冲突,并解释为什么换工作无法自动解决工程师职业迷茫。这不是两家公司的优劣评测,而是一名工程师重新理解技术、组织与个人成长关系的真实经历。

阅读文章 →