想投身app应用开发领域吗?以下是一些你需要考虑的事项。
我目前这份app应用开发的工作已经做了快五个月了。对某些人来说,这简直是科技领域工作的理想天堂。和朋友们聊天时,他们描绘的画面是:明亮宽敞的办公室,裸露的砖墙,草坪地板,冥想舱,还有巨型滑梯——一个硅谷风格的超潮人乌托邦,以纯素无麸质的活性炭拿铁为燃料。“他们是做什么的?”我被问过无数次——“用过的东西吗?”

学习曲线
由于之前没有任何app开发经验,我开始试用期时对即将到来的陡峭学习曲线感到有些忐忑不安。我担心很快就会发现我根本一窍不通。
别误会,面试的时候双方都明确表示我没有app开发经验,但这没关系,而且我也不是软件开发新手。我的职业生涯是从嵌入式软件工程师开始的,之后在一家网络安全公司工作了四年,负责为企业开发全盘加密和管理软件。
这篇文章并非旨在提供一份循序渐进的指南,教你如何在三个月内从零基础成为一名合格的app应用开发者,市面上有很多在线课程声称可以做到这一点。它更多的是我反思自己几个月在软件开发这个全新领域摸索前行的经历,以及在此过程中我发现的一些有用方法。
在介绍会和入职培训之后,我拿到了一本名为《iOS编程:大书呆子牧场指南》的书,并被告知可以浏览一下,并在网上寻找可能有用的课程。
iOS 还是 Android?
首先,在开始app开发时,你会首先想到一个问题:iOS 还是 Android?或者两者都学?从长远来看,我认为同时掌握两者的经验无疑是方案,但你不可能同时学习两种不同的编程语言和两种不同的开发生态系统,并指望在几个月内就能为公司做出贡献。所以,选择其中一个吧,但究竟选哪个呢?是选择你感兴趣的那个。
我选择走 iOS 开发这条路,是因为这是我感兴趣的领域。我使用 iPhone、iPad、MacBook 等设备,而且对苹果公司本身也很有兴趣。如果你对所选开发平台的整个生态系统不感兴趣,那么你就不会关注苹果/谷歌发布的新产品和功能,以及这些新功能催生的全新app应用创意和开发实践。就我目前所见,尤其是在app开发领域,如果你不紧跟行业发展趋势,很快就会被淘汰。如果你对整个app领域都不感兴趣,那么开发起来会非常吃力,或许app开发真的不适合你。
选择一门培训课程
一天结束后,我找到了一门我觉得不错的在线课程。网上有成百上千种不同的课程和课程平台,比如 Udacity、Udemy、Treehouse、Lynda 和 PluralSight 等等。我选了 Udemy 上的一门课,是一位同事推荐的。
这些课程通常会带你了解app开发是什么,它的优势是什么,如何搭建开发环境,探索集成开发环境(IDE),编写一些简单的“Hello World”程序(例如屏幕上的一个按钮),并系统地讲解大多数基础app应用中使用的重要功能以及通用编程对象。浏览课程章节列表时,我看到了按钮、文本框、图像视图、数组、字典、循环、类、对象、字符串、自动布局、导航、视图控制器、动画、位置信息、手势、网页内容、API、JSON 数据等等,不胜枚举。
我接着学习了那本书和在线课程,花了一周左右的时间编写了一些简单的BASIC应用程序。这些练习设计得很好,也让我感受到学习的循序渐进,但实际上它只是帮助我熟悉了集成开发环境(IDE)。跟着老师的讲解做久了,难免会觉得非常重复枯燥。
我在学习这门课程时注意到的第二点是,实际需要编写的代码行数非常少;这与我之前的工作经历截然不同,在之前的岗位上,用户界面几乎是次要的。课程几乎每次练习都是先将界面对象拖放到屏幕上,然后用一些代码将它们连接起来。我惊讶地发现,简单的用户界面竟然可以如此快速便捷地搭建出来。对于那些在网页或其他以用户界面为核心的领域工作过的人来说,这或许并不奇怪,但对我来说,这却是一个很大的转变。对于app应用而言,设计和用户体验至关重要。
第三点是,我从“加分题”中学到的东西多,也就是课程要求我们尝试以某种方式扩展应用程序并自行测试的部分。这无疑促使我们去谷歌搜索,并在 Stack Overflow 上寻找答案。在所有开发领域,如果你对某个问题有疑问,总会有人在 Stack Overflow 上提出过。
接下来,我们继续讨论模仿代码的问题。
大约一周后,我对机械地模仿代码和创建让猫咪图片在屏幕上app的按钮感到有些厌倦。我已经掌握了如何巧妙运用关键词在谷歌上快速找到任何编程问题的答案,是时候看看真正的应用程序了。
有了 Git 仓库 URL 和 Jira 任务,我查看了代码,发现根本没有一个包含视图控制器且结构清晰的 storyboard。甚至连一个项目都没有!POD 文件是什么?为什么会有这么多 xib 文件?
第四点:培训课程环境与真实的开发环境截然不同。任何存在一段时间的代码库都会随着开发人员的更迭而不断变化和演进,形成一些编码实践的特征。你今天编写的代码应该比去年编写的代码更好,组织结构更清晰,更易于测试,也更易于阅读。一旦你学会了如何使用集成开发环境(IDE)以及如何查找问题的答案,就应该熟悉设计模式以及公司正在使用的设计模式。这对于理解现有代码库并能够为其做出贡献至关重要。如果你学习代码是为了找到一份新工作,可以看看你所学语言的一些开源项目,了解代码的工作原理,并尝试修复一些bug。即使没有其他收获,这也会在你的简历上增添亮点。
抽出一些时间去图书馆
这些演示应用与实际项目之间的另一个区别在于大量使用了第三方开源库。浏览 GitHub,你会发现成千上万个用户创建的库,它们可以帮助进行 iOS 开发。如果你发现自己需要编写大量代码来完成一些看似简单的操作,例如向服务器发出 API 调用,那么你几乎肯定能找到一个库来帮你省去编写代码的麻烦(我们使用 Alamofire 来进行 HTTP 网络通信)。
了解包管理器,例如 CocoaPods、Carthage 和 Swift 包管理器,以及如何使用它们,并掌握开源许可证的含义及其对代码和发布的影响。有很多库可以帮助你处理应用程序开发的几乎所有方面,包括网络、布局、过渡效果、动画、代码风格、通知等等。
我在开始开发实际应用时注意到一点,那就是网络 API 调用非常普遍;目前在英国应用商店排行榜前 100 名的免费应用中,超过 90% 的应用都将网络 API 调用作为其主要功能的一部分。务必了解不同 API 调用的发起和接收方式,以及在异步环境下构建响应式应用的重要性。
终身学习
我越深入地研究应用程序开发(阅读 iOS SDK 文档、寻找新的实用库和教程、关注 iOS 和 Swift 的新发展),就越意识到这方面的知识浩如烟海,足以让我终身学习。在我目前参与的项目中,我对 iOS SDK 的许多方面都还知之甚少,例如 SpriteKit、Metal、MusicKit、ARKit 和 CoreML。但这并不意味着我不应该了解这些框架的基础知识,这样当项目需要使用这些技术时,我就不必从零开始。
学习成为一名软件开发人员,无论是app应用开发还是其他任何领域,都是一个永无止境的过程。当你找到理想的工作后,并不意味着你已经“成为一名成功的软件开发人员”,而仅仅是旅程的开始。鲍勃·马丁在他的著作《代码整洁之道》中建议,除了日常工作之外,你每周应该花费20个小时来提升自己,增强职业技能,才能被视为一名“专业人士”。
阅读有关应用开发、设计模式和新技术的博客。也阅读一些与软件开发无关的领域,有时候你的大脑需要从软件问题中休息一下,才能保持学习的新鲜感和思维的敏锐度。

这听起来显而易见,但请确保你对所从事的领域感兴趣!并且要不断了解你所在领域的新功能和新技术。
在线课程和书籍是熟悉 IDE 和语言语法的好方法,但真正的学习来自于开发真实的app应用程序,所以尽快开始吧。
时刻留意那些可以帮助你开发应用的第三方库。
学习是一项终身活动。务必每周抽出时间阅读和学习新知识,并将其作为优先事项。