iOS 高级工程师是怎么进阶的?

高票答案其实有点偏题,楼主问的是如何进阶,并不是高阶人士应该具备的哪些素质。
就像一个人问如何才能成功,如果你告诉他成功人士都是“永不放弃,艰苦朴素,吃苦耐劳,对事执行快准狠,对人温良恭廉让……”,他听完懵逼一阵后估计会想打你……(开个玩笑…:D)
“那我照着高阶人士的技能树一条一条去学习,我不就也高阶了么?”

憋闹,高阶人士说自己精通多线程GCD编程,你跟着去研究了一番,熟练掌握了dispatch_async的用法,觉得多线程也不过如此嘛……但之后你会发现,你除了知道了几个新api,其实技能并没有得到实际的提升,你还是不知道为什么有的代码在main_queue里执行以及在worker queue里执行会有不同的结果……

事实就是,很多问题你没有亲自遇到并解决,是没办法真正掌握的。

扯远了,说回如何进阶的问题。从操作性的层面,我觉得主要可以有以下几个方向:
了解苹果的新技术,绝大多数苹果的新技术都是为了提高开发效率而服务的(虽然有的也有坑,比如@IBInspectable这玩意儿,但毕竟是少数。),总体绝对是性价比很高的学习。

“那文档,好长啊,看不完怎么办 T_T”

请移步app store,搜索WWDC。里面有历年WWDC技术会议的内容,近两年的还配有字幕 以及demo project,学起来趣味性十足,比看Ray wenderlich的教程还简单……
修炼基本功oj.leetcode.com , 现在也支持Swift了。总体难度适中,不像ACM那么刁钻。非常适合当做了解语言特性以及锻炼自己基本编码能力的地方。 虽然算法没有用……但能写出算法的能力,很有用。这个训练能够潜移默化的提高你在平时写代码的速度。
了解FRP(Functional Reactive Programming,对应框架就是ReativeCocoa和RxSwift,没错,这并不是必须的。但我还是忍不住要安利一下。这是能够最直接,最显而易见的提供你工作效率的框架。
学习别人造的轮子 github上有很多优秀的开发者的源码,其中很大一部分都有极高的学习价值。matteocrippa/awesome-swift 这里是一个集合的,你可以根据自己感兴趣的库进行学习。(记住是学习……是研究怎么实现……是思考换你来做的话,你会如何做……不是pod install然后跟着readme使用一下就完了……),国内也有很多大神的框架值得学习,比如ibireme的YYKit。
造轮子 学得差不多了,就该自己造了。当你第一次以框架/Api设计者而不是使用者的角度来思考问题,也能够获得很多的收获。这一步能带给你能力的提升是最明显的,如果说1-4 ,都是在韬光养晦的积累阶段。那造轮子,就是你在成为高阶工程师之路的收获阶段。
@optional

贡献你的知识,把你的心得,领悟的东西写成博客。或者把你看过优秀的英文文章翻译成中文,方便后来的国内开发者们快速掌握。这并不是单纯的做好事,分享的过程,你能让你有新的感悟,学到新的知识。利人利己。


分享:
Add Comment
1 Answer(s)
顶着高级头衔,但感觉我也只能算一个中级吧。

1. 会熟练使用Profiler来调试应用性能。比如其中有一个很好的模板叫Time Profiler,会告诉你应用当中哪行代码花了最长时间,当你界面卡顿的时候,用这个可以很快找到优化点。
2. 写测试,写测试不仅仅可以帮助你找BUG,更重要的时会让你去思考如何更好地架构你的应用,其实很多好的工程师,代码架构能力都是很不错的。同时也会用OS X Server和XCode配置 Continuous Integration。
3. 可以轻松编写多线程代码,熟悉NSOperation,GCD等
4. 熟知一些常用的系统类库的原理和Best Practics,比如Core Data,这个玩意儿要玩得好,也是很花时间的。
5. iOS应用,UI占很重要的一部分,可能大部分时候你只需要使用默认的UI组件就行,但是有些时候,你必须要自己去实现一些UI组件和动画,这个时候Core Animation啊,UIDynamics啊都是很值得去学习的点。

我一般的路径是,当要解决一个问题或实现一个功能的时候,我尽量自己去实现,但当自己写的东西无法达到预期的时候(性能太差,实现不了或代码逻辑过于复杂)我才会去找第三方库。

还有就是,如果你做了两年都觉得自己没啥大进步的话,那问题可能是你手头的项目并没有什么高的要求,没有性能问题要你解决,公司也对很多细节问题无所谓,那作为有要求的工程师,你要么自己有项目可以帮助自己提高(比如我总是会自己写应用来学习一些新API和技术);要么就换家公司吧。


分享:
hanvonwcd Answered on 2016年5月20日.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.