2021 年 9 月 2 日 0:00 刚过,我正一边打着游戏,一边等着大洋彼岸的苹果审核员给我发来消息。这帮我平时非常认同的完美主义者,此时竟显得有些可恶——大哥,放放水,让我的 App 过审吧!那时担忧得不行的我还没有意识到,我正在完结一场近 10 年的旅途,圆一个来自 2012 年的梦。
这场“长途旅行”的起点位于我的初中,那时候我有两件特别关心的事。
一个是传闻中的世界末日就要来了,我很担心地球会不会就此突然消失,尤其是考虑到另外那件让我特别关心的事还没有实现,我就格外头疼。另外那件事,也是年近十几岁的我最大的梦想(之一),就是做个带界面的软件。
朋友您可别急着笑,那时候我还真就特别认真地想要实现这件事。哪个男孩儿小时候没个特别想要却得不到的玩具呢?只不过我那个玩具是想自己造的,以及,它存在于 0 和 1 组成的数字世界,而不是看得见、摸得着的现实世界。
我当时还像模像样地考虑过,这“玩具”得是货真价实的软件,要用代码写出来,至少不能是拿 PPT 伪装的“交互装置”(说起来,我那时候可热衷于做这种事儿了);它最好有一些实用的功能,而不是单独拿来看的。用今天的话说,这小屁孩闲得没事,想做个 App。
但 App 可不是什么好搞定的东西,放游戏里,至少是死去活来折磨你三四天的那种 BOSS。想独立开发一款 App,你至少得真会那么一门编程语言,然后还得选择一个做界面的流派,按照要求约束自己、修炼功法、习得招式。当然,一般编程的喜欢管流派叫“框架”,但归根结底就是选一套开发界面的流程和工具库,这些东西能帮你搞定许多比做界面本身艰深许多的问题(比方说,怎么在屏幕上画一个按钮,这实际上麻烦得很)。对那个初中毛头小子来说最难的,还不是上述这些技能,而是他根本不知道这世界上还有这些鬼东西。
在他畅游在互联网上,讲软件开发的深邃教程组成的海洋里,并且差点淹死时,他突然想起一件事:不对啊,我是不是学过一个东西,叫 flash?
即便在 2021 年,这个连收购了 flash 的 Adobe 公司都宣布放弃这个项目的年代,flash 本身基本已经在互联网上销声匿迹了。2012 年的 flash 却刚走下坡路没多久,flash 小游戏依旧是身边初中生们的心头好,flash 本身也是为数不多我勉强能用的技术。
尽管我基本还是弄不懂 flash 到底是怎么运行代码的,尽管我不觉得 flash 做出来的东西真的算是个软件,尽管 flash 本身也不很适合拿来做界面,但当初那个执着的小子还是设法搞出了下面这个东西:
这是个专门给课前展示开发的小工具,避免课前演讲的同学一不留神讲了半节课(虽然大家似乎都这么期待着)。它颇显质朴的界面很好地实现了计时与提醒的功能,风格截然不同的几个按钮也各自发挥着作用,整个工具散发出一丝拖拉机式的野性美感。
这个工具有让我满意的地方,但终究还是不合我心意的。我的技术太差,差到不足以理解这个折腾出来的小东西到底是如何运行的;我的设计很烂,烂到当时的我都不觉得我做出来了美的东西。一句话,我的能力没能支撑起我的想法,于是我踏上了一条长久的旅途,一边学习,一边慢慢靠近我的理想。但这旅途太久,久到我都不怎么记得上路的原因。
其实现在回想起来,我找不到什么有道理的理由来说明,那个初中生为什么如此执着于带界面的软件。这种想法更像是一种笨拙的表白手段,只是想讲出我对计算机,以及计算机软件的偏爱。
时间暂时回到 9 月 2 日,当时我正在《光遇》里肆意地飞翔,苹果回复的通知猛得给我按到了地上。
“‘Larkle’(版本 0.1.0 macOS)的 App 状态已更改为‘被驳回’”。
我感到疲惫又难堪,尤其是点开苹果给的反馈,看到满满两页的英文,一时间我都想干脆算了。就像,这条路上时常遇到的那样。每到这种时刻,我总会下意识地问,为什么呢?为什么要这么难呢?
2018 年左右,我第一次听说了一个叫“Electron”的技术,它可以用网页技术来做 App,我差点没惊喜得从椅子上跳起来空中回旋 720。
如果朋友你了解网页开发,应该就会知道现在做网页的这帮人是多么癫狂——很少有哪个开发者圈子这么热衷于把成吨的新技术用到项目上的,即便是搞游戏开发的都没这么狂热。
这种热情让网页技术的发展炸开了花,从十年前那个只适合用来做展示的平台,变成今天这个基本啥都能搞的新面貌(甚至可以直接用网页技术本身做 3D 游戏)。非常巧的是,这个过程中我一直在慢慢啃着网页技术。现在你告诉我,这个小怪物可以拿来做 App!
这种乐开怀的惊喜在了解 Electron 有多难搞之后,瞬间破灭了。看着 Electron 的文档,这个写了几年代码的我,还是仿佛回到了当年看软件开发教程的时刻。这简直就像你打开了一个巨难的游戏,卡关卡了一周,终于决定去翻攻略。翻了一圈,结果发现攻略也看不懂。
哪有啥理由,Electron 搞这么难只是因为当时还方兴未艾,配套设施没有做好。但有时候事情不顺遂也是有意义的,这种阻挠拖慢了旅途的进度,反而给了我更多的时间去反思。我发现,就算我的能力还没到能独立开发出一款软件,我也已经可以做一些有趣的小东西了;在开发游戏的过程中,我也可以写一些带界面的小插件来提高效率。尽管带界面的软件依旧是我心中的白月光,但对它的追寻从简单的追逐,变成靠近又伴随着新的目标。
归根结底,我是否能用一种可视化的、基于计算机主流交互形式的方式,来实现一些我所关心的功能和效果呢?
时间再次回到 9 月 2 日,我抛掉想要放弃的想法,在伙伴的陪伴下读起了苹果的反馈意见。其实意见给得挺明确的,主要就是苹果要求在软件的系统菜单上额外添加一个选项,这样就能满足它的设计规范。我有些小生气——咋就不能忽视一下这小问题呢,都肝了这么久的项目了。但又很理解,要是我来做应用商店,我铁定也这么严苛,谁叫咱们也是完美主义呢?
照着苹果的要求修改了 App,随即又提交上去,等待着第二天的审核。
其实,这次提交给苹果的 macOS App 或许是我的一份答卷。它是我第一款真正意义上做得比较完整的电脑上的软件,就是用上面提到的 Electron 技术驱动,这么说来,它的确认真地圆了我这个持续了快 10 年的梦,结束了这场旷日持久的探寻。但它也只是我对新目标的一个简单回答,开启了我下个 10 年的路途。当完成一款软件不再是门槛,做什么样的软件就成了新的迫切问题。按照我的尿性,这软件可能是我自己游戏的开发工具,也可能是给身边人做的小工具,还有可能是什么我没做过的新玩意。
9 月 2 日的深夜,这款 App 终于通过审核,出现在了 Mac App Store 当中。我像往常一样,激动地发了朋友圈,然后在回味中结束了那个夜晚。
回过头来我才发现,圆梦未必要多么激昂,可能目标的完结就发生在极为自然的一刻。也恰恰因为这种自然,圆梦才不是一种结束,本质上其实也并非是另一种开端——圆梦只是一个稍显特别的时刻,它让你意识到自己竟然达成了如此的成就。但前往梦想的道路从来都是一直延伸的,它指向你在意的问题无限深远的未来,等待你踏实地继续上路。
评论区
共 15 条评论热门最新