对于 iOS 开发基于经验的一些总结与规划

ozh5486 7年前
   <p>又一年接近了尾声,一年下来感觉自己还是很菜,突然想起之前和朋友聊天,朋友本身技术实力极强,业界认可度也较高。但是还是认为自己很菜。我认为这很大一部分是对于知识的敬畏心,作为程序员就需要不断的涉猎新知识,学习。而每次涉猎都发现自己的渺小… 其实完全不必畏惧知识的多,我一直认为菜可以接受,但每过一段时间回头反思,发现自己原地踏步完全不能接受…</p>    <p>关于成长</p>    <p>回首发现自己步入程序员的行业也有几年的光阴,记得一开始的时候,我也和很多初学者一样,四处询问怎么才能实现高速的成长,想窥探大牛们的成长秘籍…虽然现在的自己依然有着超级多的不足,但是比起当初可笑的自己,也可以无愧的说没有辜负这几年的光阴。</p>    <p>曾经我一直认为我要是能进一个足够大的团队,和一群牛人一起工作,不会了就去问,肯定成长的超级快。年初的时候,自己足够幸运,到了一个还不错的团队,团队里的小伙伴也很给力。这一年我发现自己也确实得到了长足的进步,学会了 Python ,能用来做一些有趣的事,开始尝试写一写前端。逐步涉猎更多的知识…</p>    <p>但是我发现整个过程却和我当初的设想相去甚远…当初以为进了大的团队,就有人教你带你,但是事实上并非如此,在大公司业务需求可能会变得很复杂,每个人的工作量变得极大.面对 KPI 等压力,没有人可以很轻松的怡然面对… 也没有人有时间去在很小的点上锱铢必较的对你一点一点的提携…所以,那些觉得进了大厂,就一定能成长的小伙伴,真的大厂极大的压力并不一定是成长最好的土壤,但是不可否认的一点是高压力和高负荷的工作,能提升工作效率,能从事更多深入的工作,深入才是成长的原动力。当然感觉自己这一年来成长较快的另一个原因是从身边的队友身上学到的改变了一些解决问题的思路和方式,以及提升效率的方式。</p>    <p>而这一切进大厂并不是必然条件,对于个人的高要求和好奇心一样可以达到一样的效果。</p>    <p>说了上边一堆的废话可能对于许多人而言,并没有什么很大的用处,其实细化到日常,不过是不要忽视很多细节,保持技术上的好奇心,多实践也许就是技术人最好的成长方式。比如我想每个 iOSer 肯定都知道 Runloop 的概念,网上讲解一大堆,每个人面试的时候都要为此好好准备一番,但是很少有人去真的思考这个很多操作系统上都有的机制到底是用来作什么的,原理到底是什么…其实基于原理的思考,再看技术上实现细节,也许真的会事倍功半…当然下边还会说这件事…</p>    <p>还有很多人说,我在研究什么什么高深的技术,但是一问到技术上的细节,就会说那一部分基于 SDK 的并不了解… 对于这样的问题,记得以前做直播接入的腾讯云SDK,那个时候就敢说自己做过直播,现在想来自己真的蛮好笑的…</p>    <p>此外,现在网上铺天盖地的一万小时理论.但是我认为这样的理论会让很多的人走向一个误区.以为我一直努力一直付出就一定可以成长,我不否认这样成长的事实,但是如果一万个小时的努力只是去做完全相似的事,成长真的有限…我认为同等时间的基础上生长速度却取决于涉及的深度,反思总结的能力以及眼界,知识的广度等多方面的因素综合的结果.遥想高中时代,同样的付出结果大为不同,其实道理大致相同。</p>    <p>当然我上边的话,同样会给一些人造成误区。因为只要努力的去学习一些难的知识,往深了看就行,其实我过往的经验是,我深入看一个知识的时候,经常过一段时间没有技术场景的情况下,就基本上忘记了,记下的都是皮毛,但是我发现经常再看一些基础知识的时候能够联想到一起去,再回头去看那些技术,反而有一种豁然开朗的感觉,所以在深入的时候基础的重要性不言而喻。但是单看基础一样有此问题,所以孰轻孰重,完全在于个人实践。其实我认为最好的方式是对于一个技术方向从浅到深的持续研究。这也就是很多优秀的技术博客,我们看了没多久就忘记的原因。因为我们总是看到一个技术面,缺少整体和深入的理解。</p>    <p>这里也可以拿自己作为例子,因为各种各样的原因,最近有换工作的尝试,找身边的朋友内推了滴滴。面试的过程中我的简历中写了最近自己做的一些包大小优化相关的工作,我们做的程度大概到 Mach-O 的级别,其实还有很多不足,滴滴技术上的的老大就问我有没有从编译原理上做一些考虑。其实知道 clang 的词法解析,语法解析,语义解析生成语法树的过程,但是真的不知道技术上的细节…其实这里就涉及到了编译原理的基础和编译原理上的深入…其实就是想借此说一下基础和深入的区别到底是什么以及基础对于深入的重要性。虽然有幸耗时两个小时过了据说最难的 iOS 老大的技术面,但是还来不及兴奋,就因为手写不出 DFS 等比较基础算法被淘汰…说实话对于这样的失败方式心底十分的不甘心也很难接受,可终究是因为自己菜,怨不得任何人,至此更明白基础的重要性。</p>    <p>可能有人会问,对于客户端开发,算法真的有那么重要么。我想说对于部分人而言重要,算法可以是优化函数执行时间的思路和方向。而对于部分人而言,确实可有可无。其实深入的时候,很多优化相关的工作其实和算法真的息息相关。可对于实现需求本身,可能有人会觉得意义不大…所以看法完全因人而异,算法之于我,我认为就是自己不足的短板,最近可能会用很长的一段时间,花时间去补相关的知识。再多余的说句可能会让人觉得装逼的话,不过我觉得无所谓别人怎么看。成长绝不是出于功利目的,所有只是功利目的的成长一定伴随很多潜在的问题。</p>    <p>关于未来的思考</p>    <p>面完滴滴之后,我完全放弃了换工作的想法。其实不是找不到,自大的认为找到一家比起当前薪资有一点涨薪幅度的公司应该不难,但是从成长的角度考虑,这样的选择无疑是一种失败。</p>    <p>因为就换工作这件事而言,本身就是一件成本极高的事情。程序员要在离职前完成很多交接的工作,下一家公司还要熟悉新的开发风格规范等等…这一段时间其实我认为做的工作就相对低效。而且没想清楚自己为什么要换工作,盲目的找到了下一份工作,最后的结果大部分都是步入持续换工作的死循环。所以换工作一定要去想,这份工作为什么想换,下一份一定不会出现相同的问题么?怎么在下一份工作中解决相似的问题。如果有解决方案,那就在当下去实践没有什么大不了。</p>    <p>此外,频繁的换工作其实会对自己的职业生涯产生很大的影响。前段时间练车,同车的人闲聊中得知是 360 的前端,技术上聊天中感觉很强(当然我前端很菜,但是我认为很多知识有共通性)从其口中得知,因为回老家了两年,两年间两份工作,回到北京面阿里的时候,过了所有的技术面,但是因为频繁的换工作,被 HR 拒之门外…我认为这样真的太可惜…可是不稳定,对于一个企业而言从成本角度考虑也完全能够理解。现在京东对于稳定性的要求,了解的人自然都懂,当然对于职业生涯没有这样量级要求的小伙伴也完全当我没说….所以,如果对于下一份工作没做好多年稳定下来的准备,希望最好不要换。</p>    <p>当然我说到阿里这些公司,并不代表我的意思一定要去顶级的互联网公司,此外做大厂的螺丝钉也不一定是最好的选择。其实大厂之外,依然有很多好的公司可以给我们比大厂更好的成长,但是这就需要我们发现的眼光了。</p>    <p>其实这里可能就会涉及到最近看书中写道的一些预见性。有幸去一个有足够成长空间的公司,公司业务量级的不断扩大,陪伴一个企业成长,不断地去承担更大的压力和责任,我想这样的成长速度和成就感才一定是很多人最想要的。</p>    <p>说到预见性,举个小例子。就说我为什么选择滴滴面试,想进滴滴吧,因为我看好出行领域的未来,看好的原因是新能源汽车现在已经成为了未来的大势所趋,而无人驾驶汽车的量产我想也并不会太远了。此外随着技术上的深入,我觉得最多十年的时间,街头上可能会出现很多无人驾驶的新能源汽车而且成本不会很高。可能有人就说我说的是伪命题,成本低了那么买的人多了,对于共享出行并没有什么优势。其实不然,因为不会变的是城市空间。所以将来城市出行可能会因为汽车太多而变得更加拥堵。而滴滴基于多年的大数据和现在的自研地图一定有能力去优化出行路径的预判和选择,这就是很多人忽略的壁垒。而且在省去了其中人力难于管理,更容易提供统一化的服务之后,成本可能会更被大众所接受。那时共享出行可能会真的改变人们的出行方式,那个时代也许出租车真的会被淘汰。对于将来这样的预见,是我想去滴滴的原因。</p>    <p>其实上边不过是预见的太多的例子中的一个,移动时代移动支付的兴起,回到几年前再往后看,其实这其中的道理也就没那么难懂了…当然,对于预见性,也有很多伪命题,比如多年前的共享,其实不是想法不好只是当时没有移动互联网的土壤供其成长,所以太早的预见性也可能失败。所以对于预见性,更多的是仁者见仁,智者见智。但是只要是基于足够思考的践行我想都不会太差。</p>    <p>如果只是为了换工作而换工作,最后可能会走入死循环,我想这是每一从业者都不想看到发生在自己身上的。</p>    <p>此外对于换工作而言,一定要有对于行业和市场的有足够清晰的判断,比如当下一份 double 薪资的初创企业请你去,会如何选择呢? 前段时间有朋友真的面对这样的抉择,当然薪资可能不至于那么夸张,当时我们吃饭说到此事,我就很直的劝他不要去…</p>    <p>因为现在的大市场环境就是不景气,现在的投资环境并不好,再加上美国近几年可能会不断地加息,国内市场虽然没有直接的加息,但是贷款等变向加息很多人都能感觉得到。这就意味着资金的流动性在将来一段时间一定会变得较差,所以投资人会变得相对谨慎,再加上美国不久将来会降低企业税,国外的资本在硅谷也就有了更多的选择。所以这一切对国内的创业环境而言都是打击,所以我认为明年可能是创业更寒冷的寒冬。会有更多的小企业面对资金不足的问题,这个时候选择去初创企业那所谓的高薪。确实有很大的风险。一旦失业,再重新起航,这来回之间时间成本因素考量之下,也并不一定值得。在此还想说我没有任何对于创业者的否定,在这样的环境下坚定初心的创业者,我相信一定是内心强大的勇士,我心底也充满了敬畏。也相信在这样环境下成长起来的企业,一定有很好的前景。只是希望可以让很多人在换工作的时候有足够的考量,如果没有面对这些问题的勇气的人,也一定不是创业者想找的人。彼此不耽误,我认为这样也许再好不过。</p>    <p>其实说了那么多,才发现好像偏离对于未来思考的主题。那么就言归正传。既然决定了稳定下来,那就在工作之余,一定要给自己定下成长的方向。除了对于自己影响较大的算法之外,我认为将来的客户端工程的发展方向都是向着巨型项目的方向进行发展。所以这一过程中,我想有经验的开发者一定知道效率在这个过程中的重要性,接下来一年我可能会看更专注的去做相关的东西。其实面试滴滴给了我一个很好的出发点,所以第一步就从编译原理入手吧。</p>    <p>此外,最近在看一本 debug 相关的书,发现 debug 完全可以变得更加高效。但是其中可能会用到 Python 脚本来完成部分工作。这半年越来越发现,对于客户端开发掌握一门脚本语言的重要性,真的会有很多很多的使用场景的。所以会尝试使用 Xcode 的实现更高效 lldb 。 总之我认为效率化的方向,都值得深入的去研究。</p>    <p>前段时间有幸的看到了 bestswifter 分享的机器学习在客户端的使用场景的 ppt ,其实这完全是可以进行尝试的方向,随着手机计算和存储能力的提升。完全有理由相信客户端能够完成更多相关的任务,这个方向深入的研究,说不定会是一种趋势。</p>    <p>此外也给小伙伴提个醒,作为 iOS 开发者,对于苹果官方的消息,一定要有足够的预判。比如对于 Hybrid 的开发模式,是不是可以适度的减少相关钻研的时间。滴滴在做 HTN 我想可能就有对于这方面的考虑吧。再比如苹果可能会大范围的下架模板化的项目,对于外包而言将是极重的打击.所以在外包行业的小伙伴,真的提前要有一定的准备…</p>    <p>总之接下来即将到来的 18 年一定不忘保持初心,在好好工作之余,看足够的书,完成自己想要做的事,哪怕明年这个时候发现自己更菜了,但是回首此文,能读到自己的成长,就足够了。</p>    <p> </p>    <p>来自:http://www.cocoachina.com/ios/20171226/21656.html</p>    <p> </p>