iOS 开发怎么入门?

本文写于2014年我刚开始转行的时候,原文载于知乎, 由于知乎网页版日渐不靠谱,复制一份到我自己的博客,权当备份。

以下是2015年7月22日更新


刚开始做程序员的时候,曾经把自己自学iOS开发的一点经验写在这里分享。不知不觉,至今也获得了400多赞。后来陆陆续续有人私信我咨询iOS学习的问题,最近有一位大四的学生给我发私信,我觉得他遇到的问题比较典型,下面我把他的问题和我的回复贴出来,供参考。

我的计划大概是这样的:先看计算机导论课程,然后开始学习C语言编程,后续大概通读一遍SICP、CASPP、算法导论,然后学C++ primer。学到这里就开始学习object-c/swift,然后自己做一个app,带着这个去找一份工作。 我的计划会不会太偏重原理了呢? 我总是担心基础不好的话后续职业发展会受印象,却又怕一年时间完成不了这么多,到时候连工作都找不到。 请问我应该怎样平衡呢? 或者我可以先学一部分基础,然后先尝试实践完成app开发,以后再补回来? 您觉得在iOS开发过程中哪些基础是比较重要的呢?

你好,我将我这两年的一点经验尽量说明白供你参考。

先说我的看法,不客气地说,你的学习计划过于庞大,要学完这些知识,不要说一年,三年可能都不够。所以非常不建议看完你罗列的所有知识才开始进行app开发。

就我的经验来说,我是用晚上和周末来学习的。我用业余时间看算法导论,半年只学了1/5,后来还是放弃了。去年花了足足半年学习Code Complete。今年开始学习CSAPP,花了半年时间学了差不多一半。

基础知识对于职业生涯确实非常重要,所以我会在今后的职业生涯一直保持学习。但是如果不是已经在从事iOS开发工作,我肯定不会看这些书。

所以对于你来说,如果想从事这份职业,要先学习写一个iOS app最必需的技能,通过解决问题驱动自己学习!学习这些技能,对于一个零基础的人,我想fulltime学习3、4个月应该足够了。这些知识包括:Objective-C或swift的基本语言知识、Cocoa框架的基本知识、xcode的基本用法。在这个阶段,找编程的感觉,跟网上课程编一些课后作业demo app是一个好选择。

在这个阶段,你甚至可以不用学习C、算法、计算机系统等。

但是可以花时间想想自己用4个月时间,从产品角度想想,可以做出一个什么样的app?在纸上画一下app产品流程图,争取弄一个出来。

遇到问题怎么办?自己查资料,问人,解决。

然后你会发觉需要解决的问题越来越多,需要了解的知识越来越多,你之前罗列的资料自然就有动力每天学习下去了。

非常欣赏你学习基础知识的渴望,但是要注意办法,不要尝试一口吃下整个大象。

以下是原答案


自己去年12月的时候说要更新一个详细的答案,结果就被我自己烂尾忘记了,最初写这份答案的时候自己还是在摸索阶段,推荐了下面这些材料:

  1. 斯坦福大学的CS193p公开课:最新版是2013年winter。课程不仅包括iOS入门基础知识,而且还会布置由该教授亲自设计、涵盖整个课程的作业。
  2. 苹果官方文档:每一份GUIDE都是一本迷你的教材,写得很精致,而且每一份guide都会延伸到其他知识。可以从这篇开始:马上着手开发 iOS 应用程序。
  3. Ray Wenderlich:很多step by step的教程,适合掌握一定知识之后跟着教程做着玩。

上面这三分资料,确实就是我刚开始学习iOS开发的时候用得最多的资料,在着手开始iOS Code之前,需要学习相关Objective-C的知识。

对我帮助最大的可以说是CS193p这个课程(免费的哦),我跟着这个课程一行一行代码完成布置的作业,课程完成之后我就能够自己写一个简单的app出来,并且我也知道该在哪里问问题、怎样找答案(很重要)。

当我了解整个app的制作流程之后,我就给自己定计划,1个月之内必须开发出一个app,从原型设计、界面设计、到CODE。

最终我做了几个实验性的app,虽然没有在app store上架,但是能够在自己的ipad、iphone上运行展示,我就拿着这几个app去面试,很幸运地找到现在的工作。

工作之后一直在使用的材料:

  1. 苹果官方文档,必须的参考书;
  2. StackOverFlow,一有问题就问他;
  3. Github,搜索关键词iOS或者objective-c,会发现很多高手已经把大部分基础性功能实现并且贡献出来了;

另外teamtreehouse提供收费的在线教程,应该比较容易入手。

所以我认为,其实用什么材料虽然也很重要,但是市面上优质的材料呢,不外乎那么几份,最重要的是自己有一个idea要落实下来把它完成、写成一个app,这个过程当中自己自然就会去找答案、找材料、解决答案啦。

希望能帮助到跟我一样初学入门的朋友。

Posted 2014-01-01