菜鸟摇身变大牛 - iOS程序员的成长笔记

前言

咱们常常在网上会看到这样的文章,你的同龄人正在如何。这是典型的贩卖焦虑的文章。的确,现阶段,刚毕业几年的年轻人,面临车,房子等,有时候压力挺大的。但你过分焦虑的话,天天生活在恐慌当中,你会发现你生活过得一团糟。对比一下,不少国家的底层平民,典型如印度,一点不焦虑,乐天知命,反正永远上升不了,得过且过。因此,适度的焦虑也许是成长的代价,咱们要把握好一个度。ios

有时候,我也常常在想,到了30 多岁,我本身会是怎样的?是继续奋斗在一线写代码,仍是作技术架构,或者转行,创业等等。说句实话,我如今也是一脸懵逼,将来是怎样的,我也不肯定。但有一点能够肯定的,我一直在追求更完美的本身,提升本身的核心竞争力。程序员

今天,站在个人角度,一块儿来聊聊职场技术人的成长历程。在我看来,如下几个方面尤其重要。面试

  1. 自学能力
  2. 复盘总结能力
  3. 技术素养

自学能力

image

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:413038000,无论你是小白仍是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!设计模式

如下资料在群文件可自行下载!

刚开始实习的时候,觉得工做了,技术就能够日新月异,由于想着有人带了。等到工做了,才发现仍是 too young,too simple。架构

在工做中,遇到不懂得,90% 的问题须要你本身解决的。相信工做中的人都深有体会,第一:同事也有本身的任务须要完成,不可能你一碰到问题,就想着会有人帮你解决。第二:工做中,每一个人都会有本身的分工,有时候遇到的问题,每每是特定场景的问题,若是以前没有遇到过,一时之间也很难帮你解决。顶多提供一种思路。app

所以,自学能力真的很重要。具体来讲,表如今如下几点。性能

第一:善用搜索引擎学习

说句实话,技术遇到的问题,只要不是最新的,80% 的问题均可以经过搜索引擎找到相应的解决方案。记得,我刚入职场的时候,有一段时间,遇到问题的时候,第一时间总会问身边的同事有没有遇到这样的问题。等他们比较空闲的时候,通常会跟你讲解,忙的时候,也是叫你去百度或者 google 搜一下。搜索引擎

固然,搜索的话也有一些技巧。这里就不展开说了,建议你们多用 Google,Github,StackFlow。google

第二:学会触类旁通

平时工做中遇到的难题,不要仅仅停留在表面,要经过现象去分析背后的缘由。好比说,开发的时候遇到滑动冲突,经过搜索引擎在网上找到相应的解决方案了。这是第一步,但还不够,咱们不只要知道解决方案,更重要的是要了解为何要这样解决?有没有更好的解决方案。

若是咱们仅仅停留在抄的层面上,bug 稍微变化一下,下次你仍是解决不了。由于工做中遇到的 bug 老是千奇百怪的,但十之八九,掌握了原理,解决思路都是差很少的。

第三: 造成本身一套解决问题的思路

解决问题的思路,这个跟工做经验有必定的关联。资深的工程师,遇到问题的时候,对比普通的工程师,每每能较快定位到问题根源。这跟我的的积累和经验有空,一时之间很难找到适当的例子说明。也许这就是只可意会,不可言传吧。

那咱们平时开发中遇到的 bug,你的解决思路通常是怎样的?

这种通常分几种类型的 bug。第一: crash 的话通常比较容易解决,通常从堆栈能够看出信息,再结合代码或者搜索引擎能够定位到问题。

第二种:逻辑错误的 bug。这种类型的 bug,咱们要先定位到大概的代码,再结合 log,看是哪里出错了。但有时候,用户反馈回来的 bug,每每不是否是必现的,是偶现的。这时候,就须要一步步分析了。


复盘总结能力

image

总结对于每个人来讲都很是重要,这点是毋庸置疑的。

相信你们也常常遇到这样的场景。

  1. 这种类型的 bug 我之前遇到过,但一时半会不知道怎么解决了。
  2. 我之前明明是这样写的,没问题啊。
  3. 这种功能我之前作过,找了半天,找不到之前的代码了。

刚开始实习的时候,这种状况我常常发生。仔细想来,通常有如下缘由。

第一:人的记忆性是有限的,不可能记住全部的东西
第二:没有及时总结

还记得这句俗话吗?好记性不如烂笔头。平时咱们看文章,或者跟别人探讨,以为某些观点挺正确的。但过后就是想不起来,这是为何呢?这是由于咱们只停留在表层,没有真正转化为本身内在的东西。你记性好,当时记住了。但你能保证十天,一个月,一年以后,你还记得住吗?

作笔记的可贵之处,是你的思考过程。当你着手记笔记的时候,你的大脑在思考,我要怎样用简短通俗的语言记录下来。这在无形之中加深了你的印象。一段时间后,即便你忘记了,但当你回看之前的笔记的时候,咱们每每会吸取地很快。

固然,我也不赞同一味地死记硬背。生活中的杂事那么多,不可能事事都记录下来。挑选那些你以为重要的,有感触的便可。

那可能有部分问就会问了,什么是重要的?这里我发表如下个人见解。

  1. 开发中须要常常用到的。这些你确定须要记住,不可能说每一次你须要用到,再去搜索,这样效率多低。
  2. 第二,一些疑难杂症。针对某些特定场景的 bug 或者须要注意的。

人的一辈子也是同样,是一连串的故事组成的。咱们的一辈子,究其到底,不过是全部经历事情的总和。咱们的昨天和今天,决定了咱们的明天。就像种瓜得瓜种豆得豆同样。

咱们有时候就是有这样的一种错误,以为今的事情不用总结,之后须要用到的时候,之前全部的认知会天然而然得回来。这是,这只是咱们找的一个借口,为本身的懒惰的一个借口。其实咱们内心明白,今天的总结会对明天有着莫大的帮助,可是懒惰总能打败咱们的理性。


技术素养

image

前面这两步作好了,在所在的技术领域专心工做几年,不敢说你成为一名技术大神,但至少成为一名高级,资深工程师。

什么是技术素养呢?

在我看来,包括如下几个方面。

第一方面:技术深度和技术广度。

做为一名技术人,技术仍是最重要的。它是咱们的专业技能,也是咱们谋生的重要技术。

技术深度,简单来讲就是你在技术领域的钻研程度。假设有 A,B,C,D 四个领域,咱们在 A 领域有很深的钻研和造诣,碰到 A 领域的疑难杂症,咱们基本能很快地解决,这就是技术深度。而你若是 A,B,C,D 四个领域都有必定的了解,这就是技术广度。

那怎样平衡好这二者之间的关系呢?

我的的见解是若是你想往技术发展,先钻研某个领域,争取有较高的造诣,以后再横向发展,了解其余的领域,作到有一技之长,这将造成你独特的优点。

由于你在 A 领域有较深的造诣以后,你将有必定的不可代替性,这就是价值。并且,如今大公司分工明确,不少时候须要的是专才,而不是什么方面都懂一点的人。固然,我不是不建议你们全面发展,只是说,先钻研某个领域,再想其余领域拓展。

第二方面:大局观

大局观,简单来讲,就是看待事物的视野和角度。具体到技术人来讲,主要是技术栈,技术方向的选择,以及业务方向的洞察。

一个技术团队的领导,每每须要有较好的大局观。
主要表现对于各技术栈的选择和比较、架构设计模式的考虑、设计策略等。一个良好的架构,每每可以以最小的代价应对变化多端的需求。同时,注意:架构的选择,须要结合业务场景,脱离业务场景来谈架构都是耍流氓。

业务能力的洞察,主要是指结合业务和技术,可以作出合适的判断,要清楚当下那些任务优先级别比较高,作什么事情收益最高。技术与业务是分不开的,在不少状况下,技术是服务于产品的。任凭你技术作牛,效果作得再酷炫,性能作得再好,产品没人用,那就没什么卵用。由于在这里,你的技术产生不了任何价值,而公司说到底,就是一个盈利机构,你以为可能一直烧钱下去吗?

固然,对于产品天马行空,异想天开的想法,咱们也要懂得合理拒绝,不能由产品牵着鼻子走。

举一个例子,去年 去年“网传中国平安产品经理与开发因「根据手机壳颜色改变app主题」需求打架一事”,这反映了一个公认的事实,程序员或多或少与产品经理存在着某些矛盾。最好的解决方案是,技术人懂点产品思惟,产品懂点技术,考虑问题多从对方的角度出发。


总结

说到底,就是要培养本身的核心竞争力,造成本身独特的优点。而如何确立本身的竞争力,就须要咱们逐步培养,技术深度,技术广度,业务洞察能力等。作好每一项,都不是一件 easy 的事情。尤为是技术深度,业务洞察能力。后面有时间,再单独写文章与你们探讨技术深度的问题,由于我如今也不是有特别深的理解,哈哈。

记住,职场中,作好本身本职工做的同时,请记住要培养本身的核心竞争力。公司只是你工做的一个平台,不是你的所有。你离开了这家公司,你还能潇洒地生活吗?

以上仅属我的意见,某些地方有些纸上谈兵,不喜轻喷。

做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:413038000,无论你是大牛仍是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!

推荐阅读

iOS开发——最新 BAT面试题合集(持续更新中)