iOS开发:从新手到专家的一些建议
虽然你有可能在一周内学习到iOS开发的本质,但想要精通iOS开发需则要花费更长的时间。问题是你如何从新手变成专家?在这篇文章中,我们主要就这个主题给出一些建议(如果你有好的建议和相关文章欢迎分享给更多开发者):
1.练习,练习还是练习
iOS开发没有捷径可走。这是我在继续这个话题之前需要强调的东西,因为摆脱任何常常浮现于你脑海的幻想很重要。如果你仅仅在星期天的4PM和5PM之间学习/练习编程,那么你不会成为一个熟练的iOS开发者。不要误会我的意思,这么做可能会很有趣,但是它很难让你成为一个老练的专业的iOS开发者。除了极少数的人,大部分人都需要不断的练习和实践。如果你还没有准备好投入大量时间,这时候最好重新审视你的目标和理想。
2.向其他人学习
提升开发技能和采用最佳实践的最好策略之一是学习别人的代码。这不仅仅意味着浏览Stack Overflow,但更重要的是其他开发者的各种开源类库和代码片段。
不管何时你一头扎进各种类库的学习,比如AFNetworking或者Magical Record,很关键的一点是不要被各种代码淹没。有可能你不理解各种库中的代码,但这不是真正的关键,重点是从一个更高的层次来看源码和尽可能多地学习,比如命名规范、最佳实践以及设计模式等。
除了学习别人的代码外,创建你自己的类库是一个最好的学习方法。不久前,我用Core Data作为数据层开发了一款app,我没有使用Magical Record,我决定通过学习Magical Record创建自己的库,并重新创建了我需要的功能。这种方法不仅帮我创建了一个更加灵活的库,也让我学习到很多Magical Record内部的工作原理。
3. 不要仅仅复制和粘贴
这一点让我看到了正确学习方式的另一个关键面:不要不动脑子简单地复制和粘贴。我们常常会使用我们在Stack Overflow或者苹果开发者论坛找到的各种代码片段,但是不要为了偷懒简单地复制粘贴你从网络上找到的代码,这样你很难彻底理解它。最大的危险在于这可能会导致意外的行为,以致于你的代码以后都很难调试和修复。
有时候,复制别人的代码片段看着可能已经解决了你遇到的问题,但是我强烈建议不要这么做。阅读代码,理解你往代码库添加的东西,可能的话定制你需要的解决方案。不用说,这并不适用于开发者积极维护的库或框架。在项目中使用Magical Record前,如果你需要仔细检查它,那么我确信你已经理解了不同之处。使用你自己的常识。
4. 模式
Cocoa和Objective-C在很多方面都不同于其他编程语言和环境。这意味着他们有自己独特的模式和最佳实践。我确信你已经熟悉了一些常见的模式,比如委托和通知。但还有很多模式可以开发过程中帮助你,比如单例模式、观察者模式以及通用模式等。Cocoa Fundamentals Guide很好地概述了Cocoa中大部分常用模式。
5.了解你的工具
作为一个开发者并不仅仅是理解语言和框架,理解你每天使用的工具同样重要。对于iOS开发来说,这意味着你需要很好地理解Xcode和其他可能用到的工具,比如PonyDebugger和Charles。如果你想学习一些额外的技巧,你可能会对我此前的一篇文章(iOS Quick Tip: 7 Tips to Speed Up Your Development)感兴趣。
6.与时俱进
即使你不能参加苹果一年一度的开发者大会--WWDC,但浏览大量的会议视频是个很好的学习方法,你可以观看你感兴趣的专题视频,它们都是由在某方面擅长的工程师演讲,他们可以告诉你一些细节信息以及相关使用说明。另外,你还可以多关注优秀的开发者,他们会定期写一些技术文章,比如比如Matt Gemmell、 Aaron Hillegass以及Mike Ash,你可以在我为Mobiletuts+写的这篇“Where To Go Next”文章中找到更多学习资源。
7.学习其他语言
我已经注意到学习新语言或者使用新框架让我对软件开发的整体理解有了明显提高。这种方法的优点在于不会限制你对最熟悉语言的认知和它潜在可能性的理解。我最近在研究Ember.js,并了解到它的创建者 Yehuda Katz和Tom Dale是从Cocoa获得的灵感。Ember.js对mvc的实现并没有遵循JavaScript framework,不过如果你熟悉cocoa的话,就不会感觉到奇怪了。
对于软件开发来说,没有最好的语言,每种语言都有自己的优势和劣势。但是好的一面在于或多或少他们都有所不同,这使得学习新语言变得更加有趣和更有启发性。比如对我来说,Ruby在写DRY (Don’t Repeat Yourself)、易读的、干净的代码方面让我大开眼界。
总结
如果你不想花费时间成为一个更好的程序员,那么你可能要重新考虑下为什么你把成为一个程序员摆在首位。但如果你会因为一个可以帮你的新类库或者开发工具而兴奋,那么随着时间的流逝,你在提高自身技能方面可能不会有什么问题。你真的必须热爱你所做的事情,并在这面擅长,这一点尤其适用于编程。不管什么人告诉你,你不会在一夜之间成为一个老练的开发者,但如果你保持不间断的学习,并细心打磨自己的“手艺”,我想你的技术会有很好的提高。
iOS Dev职级评估:
第一层<新手>
初级:
C语言基础<C语言基础语法、数据存储方法、语句、函数、指针、数据结构>
Objective-C语法
要求:至少了解C语言的关键知识点的概念及大致用法,初步会使用Objective-C。
中级:
1、字符串(NSString NSMutableString)、数值对象(NSNumber NSValue)
2、数组(NSArray,NSMutableArray)、字典 (NSDictionary,NSMutableDictionary)、集合(NSSet,NSMutableSet)、快速枚举(for…in) NSIndexPath
3、日期与时间(NSDate)、日期格式(NSDataFormatter)、日历 (NSCalendar)、定时器(NSTimer)
要求:会使用Objective-C 的一些基本的常用对象。
高级:
Objective-C与C++混合编程
第二层<民工>
UI:
UIView、UILabel、UIImageView、UITableView、UINavigationController、UITabBarViewController,文件管理(NSFileManager)、程序包(NSBundle)、缓冲区(NSData)
网络连接(NSURLConnection)、网络地址(NSURL)、网络请求 (NSURLRequest)、请求回应(NSResponse)、错误信息处理(NSError)
MVC编程,简单控件一:标签(UILabel)、文本输入(UITextField)、按钮 (UIButton)、提示框(UIAlertView、UIActionSheet)
的用法。
触摸、限制移动、测试触摸、持久性、撤销支持、晃动控制、屏幕绘图、线的计算、检测圆形、区分手势
上线:
itunes、app store
调试:
项目编译、运行调试技巧,app程序结构、资源文件、工程配置
概念:
类与对象、消息的传递、扩张与继承、协议与代理、异常的处理
工具使用:
掌握各种iphone app开发的辅助工具
要求:熟练使用UI控件,基于网络技巧来完成项目需求,学会使用IOS的一些基本硬件特性,了解应用上线,应用管理等技巧,能调试项目,修改bug。
第三层<小成>
各功能API:
掌握了视图控制器之后,一个合格的IOS开发者要精通硬件特性和底层支持,尤其是音频,视频,动画,照相机,照片库,短信,邮件,加速计,地址薄,地图,定位等硬件支持。数据库,持久化,socket等底层支持,此外还有多线程开发,键值编码(KVC)、键值监听(KVO),通知,MVC设计模式等。
部分内容列举:
1、音频播放(AVAudioPlayer)、视频播放(MPMoviePlayerViewController)以 及播放ipod音乐
2、照相机(UIImagePickerController)以及相册的使用
3、短信(MFMessageComposeViewController)、邮件 (MFMailComposeViewController)的使用
4、加速计(UIAccelerometer)的使用、帐号注册、真机调试、上传程序
5、地图(MKMapView)的使用以及定位(Core Location)
6、数据持久化(文件读写、sqlite数据库、归档、NSCoding协议)、云存储 (iCloud)
7、多线程开发(NSThread、NSLock),操作队列(NSOperationQueue)
8、网络请求(GET、POST)、xml解析、json解析、Socket编程
代码管理:SVN,Git
要求:能利用IOS平台的一些高级功能完成复杂的项目需求,熟练使用代码管理工具。
第四层<大成>
UI进阶:
1、旋转屏幕、核心动画、自定义描绘视图、绘图上下文等。
2、绘图(drawRect)、QuartzCoreDemo、CGContextRef
3、触摸(UITouch)、事件(UIEvent)、手势(UIGestureRecognizer)、 UIResponder、消息传递、响应者链
4、UIView以及CALayer动画(CAAnimation、CABasicAnimation、 CAKeyFrameAnimation)
项目优化
要求:了解及使用IOS偏底层技巧,完成有挑战的项目需求。
第五层<顶峰>
高级技能:运行时、cocos、OpenGLES等。目前尚未修炼完成,尚不知所需日期。
游戏方向:
1、Cocos2D HelloWorld,CCDirector(导演类),CCScene(场景类),CCLayer
2、CCSprite(精灵类),CCAction(动作
3、CCMemu(菜单),CCLabelTTF(标签)
4、CCPointParticleSystem(点粒子系统)
要求:深入了解IOS系统运行原理,触类旁通,能完成IOS及相关领域的需求,例如游戏开发。
第六层<超越>
用C++重写IOS系统