为什么要写一个自己的App?浅谈非CS专业如何拿到面试

avatar 267064
whatsoever
16268
51
写在前面
第一次在地里分享经验,还是有一点小紧张。回想一下已经毕业三年半了,工作生活也都慢慢步入了正规,而这一切都离不开读本科时自己写的第一个(误:其实是第二个)iOS App,所以特地来分享这一段有趣的经历,希望能帮到更多想转码的同学。

我的背景
相信大部分想转码的同学都是为了找工作而妥协(当然也不排除有些是对CS发自内心的热爱!),我也不列外。楼主是美本毕业,本科学的是计算数学专业(Mathematics in Computing),属于应用数学下的一个小专业,上的专业课大部分与optimization和numerical computing有关,也可以选修CS专业下基础的课程。撇开专业内容不谈,本专业毕业生大部分都是毕业即失业大军中的一员。还记得第一次参加学校校招时,CS专业的同学面试拿到手软,而我所有的简历都石沉大海。才暗暗下定决心踏上转码的道路。加上当时苹果刚推出Swift不久,于是心血来潮地想写一个自己的App。一是学校教的课程都太无聊,学来学去也不知道该怎么应用,二来想着可以丰富自己的简历,所以就这样踏上了iOS开发的不归路。第一个App是一个日记类的应用,主要功能非常简单,只能记录文字,选择天气和心情。当时的基础比较差,加上功能太过简单,不出两个月就没有写下去的动力了,于是这个App就永远留在了我的Github里。而真正帮助我找到实习与工作,并且直到今天还在维护的,是大二时开发的第二个效率类的App (类似于Forest)。记得第一次上架App之后收到真实用户反馈的喜悦,挣到第一笔广告费的激动,以及在面试时展示给面试官时他们的惊讶。毫不夸张的说,这个App带给我的成长和机遇太多,我也希望我的分享能激励更多在找工作的同学们。

为什么推荐iOS开发
  1. 上手简单: 记得Swift推出之前,我也短暂的了解过Objective-C,那糟糕的syntax和复杂的变量名实在让我上头,加上我对 Android开发也不感冒,于是选择使用从Swift上手。回过头来看我的选择还是非常正确的,一是Swift作为一门新的语言,确实比较容易上手。而且一直在推陈出新,比如新推出的 SwiftUI,几行代码就能完成一个复杂的UI交互。加上Xcode+Simulator良好的支持,debug也非常的便捷,绝对是转码同学的捷径。
  2. 丰富的资源:记得刚推出的时候,很多开源的项目还是Objective-C写的,不过这些年来优秀的Swift library也越来越多。大部分你想要实现的功能都可以通过CocoaPods实现。同时网上的学习资源也很多。我当时主要是通过Raywenderlich来学习的,不过后来我在Coursera和Udemy上也发现了很多优秀的课程,尤其推荐 Angela 的 iOS & Swift - The Complete iOS App Development Bootcamp。 虽然是我毕业之后才发现的,但里面的内容十分详细,几乎涵盖了从应用设计,到代码实现,应用提交以及后期的维护和 Marketing 的全部内容。10/10!
  3. 便于展示: 不同于其他的学校项目,一个真正上线的应用给面试官留下的映像一定是更深刻的。相比于和面试官聊我训练了一个模型,做了一个网页,如果能直接掏出手机向他展示你的应用,并告诉他有多少活跃用户,多高的用户评价,肯定更容易打动面试官。
  4. 各方面的拓展: 从一开始单功能单页面的应用,到后期主页的搭建 (MEAN/Flask),加入广告 (Google Admob),内购 (IAP),简单的服务端的推送(AWS API Gateway, S3),用户数据的分析 (Google Firebase),可以丰富的功能会越来越多,可以学习到的知识也越来越多,这些都是可以放在简历上面详细介绍的内容。
  5. 未来的发展:一个优秀的应用一定是可以长期维护并且很有可能带来收益的。除去每年$99的开发者账户的费用,加入广告后,只需要维持一个比较低的用户数就能达到收支平衡了。还记得我刚加入广告时从每天一两毛到现在每个月$1000+,只要能保持DAU的上升,收益的增长一定也能保证。同时楼主也收到过一些投资机构/个人的报价,想通过买断的方式收购我的App。我目前收到最高的报价在$120k左右,大约是目前每年广告收益 x 10. 如果你能把你的App做到更大,这个收益一定也更可观!


开发的流程
  1. 产品构思:一个好的应用一定是因为它能够解决用户的某种需求,所以产品的定位非常重要。而对于我们个人(菜niao)开发者而言,效率类的应用一定是最好上手的。一是用户基数大,每年都有源源不断的学生群体加入到我们的潜在用户中。二是我们自身就是潜在的用户群体,可以从自身的需求出发,解决自己生活学习中的痛点。最后也是最重要的是功能相对简单,不需要复杂的服务器逻辑,基本所有的功能在用户端就能实现。
  2. 交互设计:一个好的应用当然也离不开设计。面对如此多功能相同的应用,好的UI/UX绝对是决定用户retention的重要决定因素之一。如果有美术和设计经验的同学可以自己动手,楼主就是用的Sketch完成了全部的设计,平时多浏览一下设计网站(如Dribbble/Behance/Pinterest)也能培养更好的设计素养。当然另一个解决方案是与UI/UX专业的同学合作,不过对像楼主这样拖延症严重的人来说,一定会经常被催进度,所以这个就暂时就按下不表 :(
  3. 代码实现:做为新入门的菜niao来说,第一个App的开发过程一定是痛苦的。不过好在有我们最好的朋友 Google, StackOverflow 以及 GitHub。 基本所有想要实现的功能都能在开源库中找得到(CocoaPods),不管多么傻的问题一定也有其他用户踩过同样的坑。所以其实我们唯一需要保证的就是大体框架的正确,好在iOS开发基本上离不开MVC/MVVM的模式,所以不会给大家太大自由发挥(一通乱写)的空间。但是即使没有人做 code review,也一定要保证自己代码的质量!否则一定会像楼主一样,每过一段时间就被自己的屎山代码恶心到想重构 T T
  4. 调试以及上架: 只要大家有一台能跑 MacOS 的电脑,装上 Xcode 就能开始 iOS 开发。即使没有 iPhone,大部分功能都能在 Xcode 自带的 Simulator 上调试。如果有 iPhone 的话也可以 build 在自己手机上,即使不交会员费也能给他人展示!当然,如果想先上架到 App Store, 那就必须要交每年$99的会费了。开发完成后,App 的 build, sign, 和 upload 都是在 Xcode 完成,产品其他的信息填写则通过 iTunes Connect 这个网站填写,十分方便。
  5. 收集反馈: iTunes Connect 会提供一些基础的数据,比如说下载量,用户获取途径,用户留存量以及用户评价等等。如果想要更多的用户数据可以集成 Google Firebase SDK,里面有详细的分析,包括用户在每个页面平均的停留时间,还有更多高级的功能比如 remote config, A/B test 等等, 强力推荐!SEO以及关键词优化则可以通过 App Annie,大部分功能都是免费的。
  6. 更新迭代: 收集完用户的反馈之后就是更新迭代了!当然独立开发难免会有各种各样的bug,一般来说每次提交更新都能在24小时内审核,如果有紧急的重大bug,也可以直接file ticket让然们优先审核,不过好像每年可以用的次数不过,楼主也就用过一次,确实很快!


答疑解惑
Q: 现在 Machine Learning/Deep Learning 这么火,做 App 开发有没有前景?
A: 楼主目前工作也非 iOS 相关,所以移动端开发的前景没有资格去评论。不过对于转专业的同学来说,不管是那条路,能上路肯定是最好的!

Q: 移动开发难不难?需不需要太多时间?
A: 首先,自主地学习新的知识一定不简单。但楼主也是一个普通的转码**(入门的CS课还拿过C),如果楼主可以相信大家一定也没有问题。至于开发的时间,刚开始两个月时候,每周可以会花十几二十个小时去实习基础的功能,上线之后更新评率取决于新增的功能多少,到了工作后现在基本是每半年才更新一次(... 用户也经常吐槽更新太少了)

Q: 自己的App入职公司之后还能不能维护?
A: 不同公司的Policy不一样,但是都需要提前和 HR/Legals 沟通好,如果没有 conflict of interest 基本上都可以继续维护下去。

Q: 那什么时候开始最好呢?
A:现在!立刻!马上!NOW!!!拖延才是我们最大的敌人!
  • 408
51条回复