大学四年,郑昊天已经获得了宜家 IKODE@SHANGHAI Hackathon 第一名、Uber China Hackathon 第 3 名等多项开发大赛奖项,并曾在百度和渡鸦科技等知名科技公司实习。今年,他又获得了 WWDC 18 奖学金。
如果你好奇「少年有成」的郑昊天是如何步入 iOS 开发的世界,如何培养起自己的作品风格的,不妨跟 Price Tag 在本期 INTERVIEW 里一探究竟。
介绍一下你和你的作品
大家好,我是郑昊天,网络常用 ID 为 Justin Fincher / JustZht。我目前是即将毕业的大四学生,业余时间是一个独立软件和游戏开发者,偶尔也做一些界面设计和 3D Art。很高兴认识大家!
我的作品主要有:
- Contributions For GitHub:一款能在通知中心展示个人 GitHub 提交图表的 iOS 开源软件;
- Skyline:一款 Android 上的动态壁纸软件,功能与 Pixel 手机自带的三维场景壁纸相似,但区别是可以自定义读取世界上任何一个地方的地形;
- Epoch Core:一款 Tech Demo,主要演示了我个人正在开发中的太空游戏 Epoch 的随机星球模块;
- 一些小型 macOS 开源软件,比如能让 Chrome 通过 AirDrop 分享网页的 WebDrop,可以从 ArtStation 数据源设置壁纸的 ArtWall 等。
你是怎么开始学习 iOS 开发的,对于同样想入门开发的学生有没有什么建议或经验可以提供给他们
我第一次接触 iOS 开发是在高考完的暑假,当时正值 14 年的创业潮,我被拉入几位学长的团队负责基本的设计工作,在这个过程中见识了软件从开发到上架的整个流程,因此萌生了学习 iOS 开发的念头。
我在大一尝试入门 iOS 开发时买了 Big Nerd Ranch 的 Objective-C 和 iOS 开发书籍,照着教程编写了一个简单的问答软件。
当时编写的软件现在看来肯定不值一提,但这个过程中对我最大的触动是我发现我可以更改我编写的问答软件的名称为任何我想要的名字,比如「我的问答 App」。因为对于当时的我来说,App 开发是一件很高难度的事情,而突然间我发现桌面上的这么多图标中,有一个标示了属于我的软件可以拿去给大家炫耀,这个事情本身让我有一种在创造事物的感觉,更给了我继续学习和开发的激励。
相比之下,大学的编程课程仍然停留在编程语言本身和命令行软件的基本编程上而缺少对实际应用的介绍,特别是没有让大家明白学习软件开发的最大意义是可以自己编写程序解决自己平时遇到的需求,而不仅仅是作为毕业后找工作的一个工具而已。
这种误解导致很多人都不明白自己学习编程语言的用处是什么,更不明白自己所学的编程语言和日常大众使用的软件之间其实只有一步之遥,因此很多人一是觉得学习编程语言并没有实际的用处,二是觉得应用类的软件开发很困难。
但是我觉得只要有意识地由自己平时的想法和需求来进行学习和开发,不仅自己会觉得过程有趣,在得出成果的时候也会比单纯的考试分数更能激励自己,这是一个正循环的过程。
因此我走上了 iOS 开发的道路,结果在大一结束的暑假时接了一个外包,当时连 TableView 都不太熟的我硬是靠不停地在 Stack Overflow 查找代码段给做了出来,做完之后对 TableView 也比较熟悉了。这对于我来说又是一个激励,毕竟对于一个学生来说,能通过自己学的东西变现是一件很好的事情。
因此对于想入门开发的学生来说,我觉得首先不管怎么样,找一个平时的想法或者需求,然后自己围绕着自己真正关心的这件事上开始着手查找资料和学习开发,这会比做学校布置的作业更有趣的多,也更容易一些。而且因为在做软件的过程中会投入了思考,比如功能的选择,界面的调整,最后得到的软件是能反映出个人的思考和品味的,这本身在目前以大厂开发为主流的应用生态环境中就是一件很独特的事情。
你开发的 App 艺术风格都非常独特,你的审美或设计风格都来自于哪里,独立开发者应该如何入门学习设计?
我倒不是很清楚我自己的设计风格具体是什么样子,对于我来说,完整地描述我的审美也不是件容易的事情,因为我也没有经历过系统的美学教学,对美学上的方法和术语也不是很了解。但总的来说我的审美或许来自于小时候学习素描的经历,这个事情本身对光照和空间感应该是有一定的训练的。
我个人觉得独立开发者在设计上可以先从排版入门,因为软件界面在最基础的状态即线框图的时候是没有颜色,字体或是特殊的视觉效果的,有的只是如何组合元素的学问,一般来说只要排版设计好了基本最终结果就不会太差。然后在排版之上可以按照个人兴趣看看其他的内容,可以去看苹果和谷歌的设计系统指南,也可以去 Behance,Dribbble 等设计网站上多看别人的设计。
大学四年里你创作了很多小有名气的个人作品,参加过很多黑客马拉松等比赛并获奖、先后还在渡鸦科技和百度实习过。课程之外你是如何安排时间和精力进行学习的?
如果说是处理学校课程的学习,我其实没有真正处理好过学校和个人工作间的关系 😂,我在学校翘课还是很严重的,这个也不建议大家做,因为到大四了会发现特别忙,甚至答辩完了别人都出去玩自己还要处理学校的相关事务。
在处理其它领域的知识学习上,我觉得主要还是边做边学吧,毕竟自己在做项目的过程中总会有新点子,其中就会有不清楚或者不会的内容。比如软件需要适配系统的新特性,宣传视频需要另外一种软件来渲染更好的效果或是其它的情况,都需要去学习新的事物并尝试,学习失败了就还是用之前的做法,成功了就可以说自己掌握了新的知识。
你开发的作品里,数据最好的是哪一款,你最喜欢的又是哪一款?为什么
数据最好的是 Skyline,在顶峰时期排名 Google Play 美国区应用榜第一,在软件和游戏总榜前十也呆了一周的时间 (数据源 AppAnnie,2018.1.22 日左右)。Skyline 的下载总量为 1.7 万次,给我带来的收入为 1.5 万美元。
当然这款软件还是有很多退款用户的,从下载量和收入之比上也可见一斑,软件评分上也不尽人意。这些的主要原因还是个人在开发软件时技术选型的问题,选用了 Unity 引擎和 Android 原生代码的混合架构,虽然初期开发十分快速,但也欠下了相应的技术债 (Tech Debt),软件在性能和发热上都不是太好,下一步会着手解决这些问题。
我个人最喜欢的是 Epoch Core,这款软件之前称之为 Lonely Planet,后因为和 Lonely Planet 出版社的商标争议修改了名称。Epoch Core 是一款 Tech Demo,主要演示了我个人在开发太空游戏 Epoch 中所得到的一些成果,包括了完全随机生成的星球系统。
Epoch 可以说是我个人版本的「无人深空」,我个人对太空游戏和过程生成技术十分感兴趣,也已经在这个项目上断断续续开发了三年的时间,不过目前仍然没有一个确定的发布时间 (有一个非常早期的版本见于 itch.io,如果有人想尝试下的话),而 Epoch Core 就是我目前可以给大家展示的开发进展。
你获得了今年的 WWDC 奖学金,有什么经验可以分享?
WWDC 奖学金这两年的要求都是编写 Swift Playground,因此我个人感觉充分发挥 Swift Playground 的特性比如属性的可视化修改界面和自动编译更新等会更受青睐一些。此外多使用新框架能让作品的思路更开拓些,机会也更大。
当然最主要的还是自己的创意啦,毕竟奖学金项目不是看业务代码熟练度的,而是看重个人想法,技术难度和人文精神的,这三者不必都要满足,有亮点就行。
性能上由于 Swift Playground 默认开启 Logging,在运行循环的时候会拖累速度,可以在提交时改为能够通过 plist 字段关闭 Logging 的 PlaygroundBook 格式。提交的格式上 Playground 和 PlaygroundBook 都是允许的,但是仍然是推荐 PlaygroundBook,因为可以自定义很多展示效果 (比如将展示内容充满半屏),可以将较长的代码作为库引入 book,不需要和关键代码堆在一起,此外还可以编写章节,逻辑上更有条理。
最后就是提交作品的时候会让每人写一段和代码的经历或者个人故事,这也是一个可以多多讲述个人想法的地方,可以在编写代码的时候就整理下自己的思路。祝大家好运!
作品被 The Verge、Lifehacker 等国外知名媒体推荐是什么感受?有什么推广经验值得分享?
Skyline 被推荐这件事情对我来说也很突然,因为在这之前我写信给 Android Police 并没有回应,写给 Android Authority 被报道后也只是引起了小规模的关注,我以为数据就会平稳下来了,没想到过了几天后突然被 Lifehacker 报道了,The Verge 紧接着就有了文章。
最初肯定是很激动的,但 The Verge 对软件功能的报道有些偏差,蜂拥而来购买软件的用户发现需要的功能并没有上线时便有了误解,这对我来说也是压力非常大的,急忙赶工把需要的功能做了出来。可以说是喜忧参半吧,喜当然是能被各媒体 Feature,忧的是自己的软件没有达到用户的预期,以及可能会到来的差评。
对于推广来说,我觉得前期要准备好一些相关的内容,比如宣传视频、宣传文案、PressKit、给编辑的兑换码等,包括软件主页用于被搜索引擎抓取的 meta tags 和软件本身隐私权协议等内容也都要提前准备好,然后再准备开始上 Product Hunt 或者写邮件求评测。对于不同的推广站点可以在链接加上 ref 字段,这样方便统计脚本工作,此外 Product Hunt 的更新时间并不是国内的零点,这一点要注意。
当然软件在大规模推广前最好能先找朋友们内测一段时间,我就是在这里吃了亏,因为我初期在 Skyline 项目上的时间分配非常畸形,我花了一个月验证想法并把 Skyline 做了出来,然后竟然花了两个月折腾 Skyline 的推广视频,因为当时的我十分想用 Octance Renderer 做一个逼真的宣传短片。然而结果最后并没有实现,而是用 AE 和 E3D 做了一个视频匆匆了事。
在这两个月里面 Skyline 只被我装在 Pixel 上日常使用,而 Pixel 作为原生系统+中高端性能的手机运行 Skyline 的感觉还挺不错,因此我直接以正式软件的方式发布了 Skyline(并没有想到后面的事情)。结果当用户开始大规模购买的时候,Android 众多系统版本和机型的问题导致的兼容性问题开始暴露出来,外加上 Skyline 并不是测试发布而是直接正式发布 (Google Play 可以以测试版本发布于大众,大众可以购买,编写反馈,但不能进行评分,这对于实验性的软件还是很有用的),导致软件的评分迅速下降,这个时候我再熬夜修补已经于事无补了。因此,提前内测对于软件的稳定性还是很有用的。
在推广起效的时候,下载量增加,评论,反馈邮件和崩溃报告都会很多,此外还会有很多小媒体或 YouTube 主播会发邮件询问相关事宜,个人建议可以提前准备一些回复短语 (比如回复退款申请或是回复软件问题的模板),使用一些社交聚合工具,可以快速回复、查看社交网络被提及的内容等,给用户一个好印象。:-)
分享一下你的主屏,介绍几个对你比较重要的 App 吧
我的主屏基本上是一半系统软件一半第三方软件,然后我也不怎么清除信息和邮件的角标,希望强迫症的同学不要打我 😂。Dock 栏上的软件分别为 Telegram X,微信,Missive,相机。
iOS:
- Gyroscope,一款自我量化的软件,软件界面很有未来感(FUI)。
- AppFigures,统计软件下载数据和评论的工具。
- Unread,支持 Feedbin 的 RSS 阅读器,手势交互值得一试。其最初开发团队 SuperTop 也开发了 Castro 播客播放器。
macOS:
- SalesX,可以直接从 menubar 查看 iTunes Connect 报告的软件,61 的作品。
- Deckset,用 Markdown 写幻灯片,好处是让幻灯片和文本文件一样便于进行版本控制。