给那些刚入行的 iOS/Android 开发新手们的一些建议

给那些刚入行的 iOS/Android 开发新手们的一些建议 

2016-03-12  txx  糖炒小虾

前言

       最近我司春雷招聘计划开展的如火如荼。我天天要去面试好多 iOS  Android 开发者,几圈下来感慨万千,有的初出茅庐,有的已经工作了三四年,但是却总觉得那么不可心。根本满足不了我的要求。我感觉并不是我要求太高,而是他们并没有意识到这行应该怎么做。最近到处刷脸,经常会有童鞋问我如何学好 iOS,如何才能成为中级、高级的工程师,那么就借此机会说说我的看法。供大家参考。


持续学习

       软件开发这个行业是一个持续学习的行业,并不是像有些传统行业那样。我学会了技能这辈子就靠重复这个技能吃饭了。所以我们面试完有时会打趣地说某个面试者,他这个三年经验实际上是三个月的工作经验重复了三年。

       我总爱拿 Node.js 举例子,这货半年不关注,分家出来一个 io.js。再过一段又合并了,版本号上 1 了。如果你再拿着上古的 Nodejs 经验去找工作,肯定会被批为与时代脱轨的。(当然 Python3 呵呵就好)


  iOS 开发这个社区,除了互相捧臭脚以外还是有非常大的活力的。ReactiveCocoa 如今 Github Star 数已经破万,Swift 已经在语言排行榜里和 OC 名次差不多。已经不再是面向对象一党专政,而是面向协议、函数式、函数响应式编程百家争鸣。


  我们在这样焕发着活力的社区环境下,怎么能吃老本呢?

该如何学习

      那么作为一个初级的 iOS 开发者,只会用用系统库,遇到不会的问题只能做到面向 StackOverflow 编程,甚至面向百度编程。我们该如何提升呢?面试官总会百般刁难 什么 RunLoop 啊,什么 Runtime 啊,这玩意开发的时候我们从来不会遇到啊,我该怎么学呢?


科学上网

  学会科学上网是至关重要的,虽说貌似犯法了。但是,如果你善于用 Google 的话,你会发现你遇到的所有问题。基本上都会有先人遇到,能大幅节省在开发上所浪费的时间。以及 StackOverFlow 是英文问答社区,所以耳濡目染的也会变得不会那么头疼看英文,毕竟当你知道你眼前这坨鬼画符能解决你卡了好久的 Bug 的时候。一个字一个字的查,也要逼自己看懂的。而能勉勉强强看懂英文对技术的提升至关重要。


精通一门武艺

       11 年,我在触控有幸和他们的 COO 聊天,他是技术出身。和我讲了讲技术到底该怎么做。现在想来那一晚和他的谈话改变了我的未来。


       他说游戏开发非常庞大,要学的地方非常多,很难学好,他推荐我看 Cocos2d-iPhone 的源码(那时候还没有 -x)。一遍遍的看,直到能完全看懂的时候,你会发现自己再写游戏既不会有问题了。毕竟自己引擎都能写,那游戏还算个啥?


      通过阅读引擎,可以看到 Cocos2d 是如何和 UIView 交互的;如何做的触摸事件分发;如何做的渲染;如何做的 Schedule;如何做的 Action。这些都会涉及各种设计模式,各种底层函数的使用,各种多线程的问题。有了这个例子作为范本来模仿着设计框架,优化性能,代码功底会大幅提升。


       当然这个过程是非常非常枯燥且艰难的,毕竟一个四万行的引擎,从哪里下手怎么坚持下去都是问题。有些地方为了优化效率还选择了纯 C 来做,看懂他更为头疼。于是要持之以恒的一点点的啃,而不是一朝一夕的。


        对于 iOS / Android 开发来说,网络引擎是个很不错的选择,一万行代码左右,庞大的社区支持不会遇到太大的坎。AFNetworking,Volley,AsyncHTTPRequest,Alamofire 都是很不错的范本。这些代码我都读过,学到了很多东西。很多新手头疼的 GCD 应用、多线程、接口设计、Runloop 之类都有使用。


       当把这套框架吃透了之后,技术不仅会上升很多,也会更有自信一些。再找其他的框架看看 例如 YYKit 系列是个很不错的选择。也可以去尝试看看 CoreFoundation 的实现,对于 RunLoop 的理解还是要看 CFRunLoop 这个东西。以及 NSArray NSString 他们每个方法具体实现时间开销,都可以略知一二。当然去看看 OC 的实现也是不错的,等该了解了OC 这门语言的本质的时候。对于什么 Runtime 啊,isa 啊,都成了小儿科。哪怕没看懂,这时再去看 Sunnyxx 和 郭耀源 的那些底层文章,就不再是天书或者道听途说了,而是有自己的知识体系去理解这些东西。


了解其他领域


       当有了更多的精力,可以去看看 Android 的框架,甚至 WinPhone 的框架,这些东西不需要精通,只需要看看其他平台是怎么设计的。大部分是一样的,但同时也有自己的特色。他们的设计理念,API 封装,也是十分值得借鉴的,可以为自己所用的。以及,我们经常和 Android 的同事一起讨论框架设计,甚至对于不知道该怎么实现的地方去看看 Android 源码怎么做的,毕竟开源,直接抄过来。


      前端和后端的东西同样可以借鉴,像 Redux 这个前端框架已经有了 Swift 版本。RX 系列框架已经覆盖了全部语言。苹果以及 OC 并不是世界上最好的语言,有很多糟粕,当你看多了其他的语言,再去做自己的业务视野会宽阔很多。


        学习一门脚本语言也是十分有必要的,大多数 OC 程序员只会 OC 这门语言。做一些工具的时候还是不愿离开自己舒适区,继续用 OC 来做。这明显是不对的,太过于低效。Python 二十行就能写一个简单的爬虫。换做 OC 估计要写二百行以上,还只能在苹果的系统上跑。 


反思

      上面 blabla 说了那么多,其实这个是最重要的。要多反思,反思体现在各种地方,比如当初写了一段脏代码,就要不断去思考,如何去优化如何去解决掉这个问题,而不是过了就过了。学到了一个新的设计模式,就不断去思考,这个设计模式有啥用,能否用于重构之前的代码。看到了 AFN 一段奇怪的代码,就要去思考为什么会这么设计,这么设计有什么特殊的意义么。当不断去反思去问自己为什么的时候,就不会觉得自己到了瓶颈了,因为有太多的东西不会了,有太多的东西可以学了。从而让自己坚持不懈地学下去。

  

最后

       这是我对学习技术的一些看法,希望能对大家有所帮助。如果你喜欢,请关注此公众号,我会将我平时开发遇到的小技巧,研究出来的黑科技,写在这个公众号上。内容不见得是 iOS,有可能是 Android 逆向 后端,也有可能是创业的感受。谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值