在程序猿的世界,有一句江湖传言“面试造火箭,入职拧螺丝”。相信广大同胞都深有同感,那么各个大厂小厂的"螺丝"真的需要“火箭技术”来进行安装吗?
显然不是。那么又是什么起因造成了这种局面?
经济学上有个词叫“通货膨胀”,货币供给大于实际需求,进而导致货币贬值,物价上涨。其实,这个词用于程序猿的世界同样普遍适用。而且,当下互联网的火速发展正使程序猿进入了一个“通货膨胀”的状态,这里的"通货"便是程序猿本猿无疑了。
想想互联网初期,一个程序员只需会基本的编程技能,企业就愿意接收你。那是由于编程从业人员少,有基础就好,其余的企业也愿意给你时间去学习和积淀。
随着互联网火速崛起,程序猿行业高薪高福利的吸引,越来越多的人开始报考计算机相关专业,同时也有相当一部分外行人急于进入这个行业。于是,许多编程的培训机构就应运而生,从这里流水般的向社会输送了一批又一批速成的开发人员。
这个时候,编程从业人员就发生了膨胀。进而导致程序猿身价贬值,企业要求大大提高。由于企业发现,会基本技能的程序猿遍地开花,以前的评判标准显然就已经不足以来选拔人才。于是,面试官将考核从基础技能逐步向底层原理延展。
稍大一点的厂面试的深度和广度便会加大,招一个Java你不看点JVM源码,不懂Spring框架怎样行?招一个iOS你不懂Runtime,Runloop,不会玩黑魔法怎样行?
当然,考核的延展不止是这些与专业强相关的领域。由于这也还不足以过滤掉太多的人,所以数据结构和算法的考核应运而生。什么现场手撕个立方根都不是难的,现场手撕红黑树才是变态至极的考核。
在这种场景下leetcode就诞生了,它把各个大厂面试过或者可能面试的算法收集起来让面试者练习。但是,考核者也知道有了算法题库,面试前大家都在刷题。于是,就有可能继续想出更加变态的考核。如此,就导致这个循环一直这样恶性地发展下去。
不可否认,算法练习对程序猿的编程思维有肯定的裨益。但是,广大程序猿刷题的初心并不是为了扩展思维,而是单纯地应付面试。而且,对于大多数程序猿,这些在入职后的业务里有90%的可能用不到。
环境已然如此,我们不能像计划生育似得控制程序猿的数量,宪法赋予每个人成为程序猿的权利。既然不能改变环境,我们只能改变自身。
在应对通货膨胀的措施中有一条是:储备黄金。黄金作为一种不可再生的稀缺资源,在通货膨胀时期,显然比普通货币更具备经济话语权。而在某些特殊时期,有了经济话语权就相应地有了政治话语权。
所以,既然不可避免同类数量的快速增长,那么就尽可能将自己锤炼成一块黄金。毕竟企业在茫茫程序猿的世界,一定会倾向于那些黄金程序猿。
在这方面,我也还只是一个青铜段位的小开发,所以不敢妄议。只是简单分享一下自己的看法,可以看作是一种还未经证明的方法论。
首先,有程序猿的地方就有江湖,有江湖就不免会有各种实力排名,各种内家功夫外家功夫。别的门派我也不清楚,只能谈谈我自己所在的门派。我派自乔帮主以开天辟地之产品内功创派以来,不断吸引了广大以技术修炼为目的的江湖人士加入。技术方面,门派已有两大镇派功法:OC宝典和Swift真经,功法之下又有外功内功。
入我Apple门,方知Apple大法好
前有至圣乾坤OC功,后有斯威夫特天罡决
外可搭UI支框架,内可提性能少奔溃
上能述原理引技术,下能分任务导开发
如此修为,成就不世之App,名扬三方之框架,不久矣
......
ps:哈哈先让超哥意淫一把...
所谓外功,包括作为iOS开发的基本技能和进阶技能。
基本技能,显然入行半年就基本能做到。对于进阶技能,首先需要一个复杂业务的环境,就比方你公司正在做的项目有这些需求。其次,需要对某些原理性的东西有一个初步的认识。再其次,假如能有少许内功加持就会更加如鱼得水了。
所谓内功,就是可能在你的APP中不能一眼立马看出的东西。要么,它需要时间的积淀(比方长时间的稳固性,奔溃率什么的);要么,需要直接去看你写的代码也能看出少许端倪。其实,内功就是对外功强有力的加持。就像我们都会降龙十八掌,但是内功深厚的人打出来总会那么不同凡响。
只会外功的程序猿就在青铜段位,内功入门即可以是白银称号了,中期是黄金小成,大成阶段就是黄金大成段位了:真正的黄金程序猿!当然到了这个段位其实已经很少写代码了。。。
走过几个程序猿的工位,依稀可以看到他们的座右铭:
最近,甲骨文中国区全量裁员的消息在程序猿的圈子可谓是炸了锅。“N+6”的赔偿让不少人觉得甲骨文良心还在,可是仍然也有大部分员工拉横幅抗议。这些人大部分是有家有娃的30+开发者,有人说他们年龄大了已经错过开发者最佳时期,也有人说他们在外企安逸长期划水技术退化所以担心被裁很难找到工作。这个,我很难评判孰对孰错。当然,我对像这样的由于政治起因而“殃及池鱼”的国际事件深表遗憾,同时也希望他们都能找到新的归宿!
现在,我们跳出这个事件本身并不去评判他。想象假如是30+的我们遭遇了这样的事情,我们究竟该怎样办?
技术真的是30+开发者的瓶颈吗?可是,人外国开发者的黄金年龄都在30+。当然,这个也与国内的就业环境息息相关。首先,假如继续在互联网行业继续干下去无外乎两条路:转管理和技术总监。首先,我个人并不擅长管理,所以暂且将之抛出今天的探讨范围之外。
这就又回到了,怎样修炼外功内功成为黄金程序猿的问题上。首先,作为一名从事四年开发的程序猿,我特别了解当先程序猿的辛苦,虽然有些公司不是996但也难免有加班行为。但是,我对一句话也是坚信不疑:时间就像海绵里的水,挤一挤总会有的(鲁迅先生请为我站位打call)。
工作上很多时候会是一个多业务的代码拼凑,解决的大多是业务逻辑,其次才是技术深度,当然也不排除有些时候也是能学到新技术的。所以呢,假如只局限于工作,那我们就大概率地只能靠经验和跳槽去提高身价。
因而,我觉的我们有必要在工作之余去总结少量工作中的经验,同时还要不断扩大自己的视野,尽力去汲取其余相关的技术。适当减少打游戏的时间,转而去提升自己。毕竟50岁的你还能继续打王者荣耀,虽然可能反应有所迟钝,但就算如此本质上对你并没有任何损失。但是,当你50岁的时候才想着去提升自己的技术实力,不是不可以,但是学习速度肯定不能和20几岁的你相提并论。
就是最近一段长期的失业空窗期,让我发现开发中的很多点我都是知其然而不知其所以然。而且当我重新去审视这些技术点,重新去复习了少量操作系统,网络相关原理的时候,我回过头来恍然发现:在以往的项目中,其实我还有至少40%的优化空间,虽然在我当时开发的时候已经足够小心翼翼和一丝不苟!
过去的大半年里(2018),我都在关注和学习区块链相关的技术。这使得我本职的iOS开发仅仅局限于工作之内,所以当我作为一名专职的iOS开发去重新审视2018的开发历程的时候,我发现自己其实并没有太大的进步,一直是个青铜程序猿。但我仍旧感谢这一段“没有进步”的历程,它让我对另一个货币的自治世界有了很大的了解。只是,我不应该过度地投入到这个世界。
总而言之,就是承着大好年华不断提升自我软硬实力,向着黄金程序猿进发。他日就算甲骨文事件发生在我们身上,也仍旧能笑对江湖:此处不留爷,自有留爷处!
其实,这篇文章原本要作为之后的iOS面经的一个开篇题记。不料写开之后竟然一发不可收拾,写了这么多。接下来分享几个面试的经历吧。
首先,我面试了也有几家公司了。个人感觉好的公司有以下两点:
首先是一家互联网二线偏三线的公司,公司做漫画的,行业内Top几。面试是有笔试题的,题量大概一小时。基础40%,原理框架40%,算法题20%。很快一个小时差不多做完了,接着技术一面。前半段围绕笔试题开展,后半段聊其余OC的少量原理性东西,category/runtime/runloop等都有涉及到。很轻松的通过了技术一面,这里一面的东西基本是外功和基础内功。只需修炼过,一般的基础修为也是可以渡劫成功的。
我谈这家面试的重点是二面,由于二面涉及到大都内功范围。我二面没过,但是呢我分析不太是我修为不够的起因。可能是由于恰好岗位和技术内功不是很对口,由于他们目前的需求是会做大的代码重构与UI优化。而我最近两年是做SDK开发的,涉及到的UI操作很少。这回内功修为倒是够了,反倒是外功不匹配。。。
我想表达的一点是,招聘是一个双方协调的中庸。有些时候,你面试失败并不是由于你的内功修为不够。只是,刚恰好不是最需要的而已。就好比他们项目目前最需要的是武当登云梯能飞二丈高的需求,这个需要很深的内力加持。恰好你内力深厚,但是你会的是凌波微步。一个是垂直的高质量需求,一个是水平上的高能力。所以,恰好不匹配而已。
所以,很多时候面试失败不要暗自菲薄。也许真的是不合适的,最合适的还在后面。只需你时刻准备好。
接着再分享一家互联网创业公司,二线偏上吧,发展甚是迅速。技术一面大概就用了两小时,其中从基础到原理到项目再到算法都是有所涉猎的。其中比较难的就是手撕了一个缓存框架,要求写出核心代码。像这种公司,它一般一面就会要求外功与内功并重。不然,你没有这么多积淀是一定聊不了这么久的。一面不是我要说的重点。
二面呢也大概有一小时四十分钟,这回主要聊项目和框架。由于我之前做过SDK开发,所以聊设计和SDK注意事项比较多少量。其次,面试官还出了少量情景题让我思考怎样设计处理方案。假如一时想不出,面试官会提醒一步步指导你,看你能思考到哪一步。这一次是我至今遇到过最战战兢兢的面试了。但是,二面我也顺利过了。
我想说的一点是,很多时候我们通过面试并不是依靠我们真正的价值,而是我们给面试官传达的自身价值!就是有些问题你可能不会,但肯定不能说不会下一个吧。肯定要表达出自己的观点和思考,哪怕不对。或者者说,有些时候可以兵行险着出奇制胜。拿我这次来说,其中有一个问题我就答复得比较偏差。但是我当时大胆地说出了自己的想法,而且也成功地吸引了面试官的注意(我答完后他记录了下而后三面技术官又问我这个的启发思路怎样来的)。而且,就此开展,我甚至跟他详谈了具体的实现什么的(妈的感觉自己在天马行空也不知道对不对)。但是,后来面试结束后,到家我马上查资料发现最开始的那个点就是错的,根本实现不了我说的。但是这个点后面推理与设计都是对的,只需对这个方案最开始稍作调整就可,我写Demo逐个得到了印证。而且,我也觉得他也以为我可能整个都是对的。
当时我就觉得后怕,不知道怎样敢乱说。但是回过头来细想还是利大于弊的,虽然开头有点小错误但是整体方案瑕不掩瑜。而且退一万步来讲,就算都说错了,我也向面试官传达了我的思考,起码面对这个问题我不是束手无策也有自己的思考和方案,假如是实践,也许试错之后还会有新的思路。
后续的三面交叉面应该,而且不是iOS开发。聊框架和设计思路,大约半小时。四面HR四十分钟,没什么可说的,常规的谈话。现在还在等消息中……说是一周内给结果。期待和煎熬中……
唠叨这么多,现在终于算进入正题了。所谓"九面真经",并不是说我面试了九次啥的。就是觉得"九阴真经",“九阳真经”,“玄天九幽神功”…这些大凡厉害的武林秘籍都有九,所以也给自己后续要写的面经取名“ 九面真经”。
其实,更多的是一个知识点的回顾,短期速成复习的方式。内功的修炼还是要循序渐进,平常多看官档,看大牛们的博客,慢慢地修炼!
九面真经总纲
他强由他强 清风拂山岗
他横由他横 明月照大江
他自狠来他自恶
我自一口真气足
手敲代码心眼明
丹田气起Bug诛
乾坤乃我code建
日月是我编译生
----------------------------- 九面真经撰经人 chaors