鲸语 - 一名多大校园开发者的独白

编者按:三人的学生团队,历时四个月,从零开始开发应用,冲进了App Store新闻资讯类榜单全球前30,并登顶“多伦多”相关应用的搜索结果。这篇长信,来自鲸语的开发作者,关于校园开发者的经历,关于鲸语诞生的初衷,以及他和伙伴之间的故事。附App Store下载链接

“按下确认,鲸语就算正式发布咯”,小G把手机递给我。

“……”

我侧过头,熄灭的屏幕里映出我们三个人的剪影。思绪暗涌,或许半年前的我不会预想到这一刻。从一无所有开始,这是对我们,对鲸语,很意外而深刻的一段时光……

一个人到一群人 - 鲸语的前生AirLoft

鲸语的源头,如果硬是要追溯回去,那是在2016年4月1号上线的一个粗糙网站项目AirLoft。

那是我刚接触计算机学习一年以来第一个独立完成的作品,印象蛮深刻的,因为那是学院CSC309课程的一个团队项目,可能是当时对网站技术的痴迷,一个人完成了所有的开发。想法挺简单的,每个人都可以发布自己能提供的服务,然后你可以基于地理位置的远近看到别人所能提供的服务,以促成交易。当时就连项目名字起得也是特别粗糙,loft,阁楼嘛,通常大家和朋友分享私密事的地方,前面加个Air,也是傻乎乎地致敬当时最火的平台Airbnb。

AirLoft或许也可以被粗译成,空中楼阁,这或许也是我所有空中楼阁想法的起点。

“我希望能够基于地理位置连接你和周围优质的服务”,还记得当时我在一个项目分享会上这么讲。那是华人技术社团UTADA每年都会举办的项目展示大会,不大的房间里塞满了人,宛若一场小型发布会,每一个项目的发起者依次阐释着自己的想法和进度,来吸引在场的人组建最初的团队。有希望开发桌面宠物的,有希望打造异地情侣合照App的,还有一系列从外卖到选课承包了几乎所有校园生活的想法……场下出奇的安静,我脑海里飞速地闪过想法实现的技术框架,身子却一动也不敢动生怕椅子咯吱作响。现在回想起来,那或许也是那段时间里除学习之外少有的几个笨拙而严肃的时刻。

从讲台上下来,逆着投影的光,台下稀稀拉拉的掌声,总给人一种谢幕的错觉。可值得庆幸的是,AirLoft成了当场分享会最受欢迎的项目,几近半屋子的人在结束后找我询问项目的开发和发展表示希望加入团队。想起这一两年来被其他厉害的师兄带领的经历,这一次我义无反顾地承担起领队的责任,欢迎着每一个人的加入。来自于社团里的20余人,这应该是AirLoft最初的开发团队构成。还记得当时,我觉得我是最幸运的领队。

只是……

回到一个人的战斗 - 鲸语的出现

学生开发者本身其实是一个蛮尴尬的身份,一方面作为紧密的学生群体的一员,我捣鼓开发的东西可以很快被很多人了解,使用甚至因此让我获得赞誉,而另一方面我也很清楚地知道自己不过也只是业余选手,无论在能力还是经验上。

可即便很业余,这却是我向往的生活的一部分,一种能够真正把想法实现出来的自由感。

那是我正式接触计算机专业学习的第一年,我用平时的空闲时间揽下了特别多的开发任务,各种博客,网站,游戏还有VR,也慢慢认识了很多同样喜欢开发的同学,很幸运地成为项目领队,之后再成为社团技术部的负责人。可是……也渐渐地,开发涉及的领域越来越多,支持想法的技术难度越来越大,作为学生,我也越来越难去说服别人去牺牲业余时间和你一起挑战一个工程难题,去完整一个商业想法。

没有什么能够承诺的余地,或许正是学生开发者乃至校园创业者相似的现实。它无法承诺你的GPA抑或者履历,更多的也只是在打点好自己学习和生活之后的兴趣而已。而路越窄,越人迹罕至。志同道合绝对值得感恩,而更大多数的时候,这是一个人选择的战斗……

还记得那个时候在AirLoft的开发阶段,我正在研究怎么处理文本之间的相似度,为的是可以帮助用户找到更贴切相关的服务。我记得特别清楚,那天晚上在家,我正拿UT助手历史上两百多篇文章来测试算法准确度,当屏幕上突然亮出结果的时候,我心里也突然亮出一个念头—

“说不定我可以把整个多伦多范围的资讯和服务都串联起来而不仅仅只是校园范围的……”

“……”

我静默下去。和往常那些浴室里的胡思乱想不同,我感觉到这一次的想法远非不可实现,回想起当初自己刚来多伦多的时候大到租房,退税,小到选课,买零食却需要翻遍各个网站、论坛、公众号和微博查攻略的繁琐,如果能有一个应用把这些攻略像归档一样整理好,每一个话题都能收纳到所有相类似的实用文章,再告诉你离你远近哪里可以找到……感觉会挺实用的不是嘛。我打赌当时的我绝对不会想象到几个月后一个手机应用的上架乃至进入排行榜,更别说现在加入的人工智能,场景识别和视频一系列更复杂的技术等等。当时就是那么一霎那,我觉得这应该是AirLoft真正去实现的方向,这能够真正帮到大家,而我,可能可以把它做出来,那么我来试试吧。

没什么恢弘的铺陈和情节,创造鲸语的想法就那样突如其来地出现了。

现在回想起来,还真有点像村上在书里谈论他做出决定写小说的那个瞬间—坐在神宫球场外听见清脆的击球声,“哦对了或许我也可以写小说……”。

余下的那晚,和接下来那几天我或许并没有什么特别,上班,请假上课,写作业和准备考试依旧占据了我生活绝大多数的时间。只是在每天那剩下来的一小会儿时间里,我脑海持续地被这个想法占据,碰巧半年前在图书馆里看完了整场Facebook开发者直播,也了解到了最新React Native跨平台开发App的方案。拥有接近半年React开发网站经验的我决定来啃啃螃蟹,谁知道呢,反正也没什么人试过,但是这真的很酷啊。

当时只是觉得自己不过是做了一个很小的决定,小到就有点像是在选择晚餐是配苹果还是橙汁这样无关紧要的选择,可现在想起来,当时的那个决定或许是基于我一个从未开发过iOS应用的初学者最好的决定。熟悉的技术理念和开发语言,也让我两个月用周末业余时间把鲸语的雏形开发出来成为可能。这期间经历的困境,并不像纸面上“两个月的业余时间”这么潇洒的概括,那些因为框架方案太新导致没人处理的漏洞我不得不写出奇奇怪怪的解决方案,那些直接和陌生开发者讨论实现方案长篇累牍的邮件,还有每几周迎来的新的开发观念的消化带来的一系列项目的变动……这一切都历历在目。

我无法评论我未曾选择的路,但我所经历过的那些尝试起伏,那些明亮的失落的瞬间,都作为一部分成就了鲸语最初的样子。

当初写在鲸语1.0发布文章里的那句话依然能诚恳地回望我这一段鲸语初期的开发—

“谁没有些从陌生到渐渐开窍的故事呢,或许没有那么多理所当然和信手拈来,不过举重若轻罢了。”

伙伴 - 记在鲸语1.0发布之后

无论问我多少次,对鲸语来说最重要的部分是什么,最重要的经历是哪些,我都会毫不迟疑地回答,是伙伴,是鲸语团队里的伙伴们,是一路走来志同道合的伙伴们。

我特别喜欢的海贼王漫画,讲着一群人为了各自的梦想相互守候一起冒险的故事。很幸运地,在鲸语成长的路上,我也渐渐找到了值得依赖的伙伴。

认识小G,是在羽球场上两个左撇子相遇的意外。谁也没有想到,接下来的一年,小G以新任社长的身份带领UTADA在各个对外活动上接入正轨,为鲸语项目的产品化,商业化出谋划策。在每次鲸语的重要决策之前,我脑海里都会浮现小G的一句话,“即便是最糟糕的结果,也不过只是维持现状罢了……”。很平淡的字,却每一次给我决意的勇气。小A,很有灵性的设计师和开发者,鲸语的logo和许多样式均出自小A之手,印象特别深刻教会小A项目技术背景的那晚,他凌晨三四点发来App改进的界面图,我只能用完美来评价……他们的加入,像是静寂了很久的路上慢慢传来的烟火声,我渐渐学会把所有心事都拿出来说,好话,废话,美好的愿景,耍过的机灵都抖落出来。我曾深知孤独的必然,而所有交错的经历,共同的承担,都成为恩赐而值得深深铭记。

是被“驯服”过的,于是玫瑰的名字,不再重要。

距离鲸语1.0的发布刚走过不多不少的50天,盛大,冷却,到再出发,无意却像极了过往的这一年。我一字一句地斟酌,写不出的青涩和匆忙像留不住的沙漏,笨拙却无比真实。

静静地在图书馆敲下这些字的时候,也是多伦多一段绵长的雨季正式结束的时候,终于迎来的夏天,像终于等来的恋人,空气里弥漫着绵软如絮的热烈。

我坐在E.J.图书馆最靠窗的位置,能瞧见整个Queens Park的慵懒和喧闹。屏幕一角那三人剪影的位置,依附着午后阳光的一块。阳光很暖,温顺一如眼眸。

写在后面的话

留下上面每一字的时候,是鲸语1.0刚发布的第50天。很幸运,在它的第100天,2.0如期而至。变化的是几近所有的功能和样式,这期间我们去拜访了很多业界的前辈,去展示,去交换,去见见外面的世界,也默默低下头去记下了每一处鲸语的伤。更庆幸那些没有变化的,那些依旧会紧张的,却也依旧高涨的情绪, 那些如同记录自己成长般记录鲸语成长的坚持……

很感激这期间相遇的每一个帮助过鲸语的人,尤其是校园里反馈尤其积极的同学们。我们为下一步画下了更难的挑战,要更踏实地去实现呢。

一起加油!