大厂与普通公司的差别
对比BAT这类公司跟普通公司的工程师,其实他们的差距其实本来不大,不管是谁都只是努力地做好自己的事情,只是大公司这类的机会要来得多。
说说差距,主要是:深度、求新。
1. 深度。拿我上家公司的同事的简历为例,他提到了Android中图片的动态加载。好家伙,这是一个比较有难度的问题,至少如果你不懂ClassLoader、一些系统对应的代码是搞不定的。但是深入地问他:图片加载框架怎么解决不同资源ID重复、怎么检查对应的系统API是否可用(因为用反射调用了很多系统API,它们不是Public的)、这个方案是怎么选型的。他都没有做好回答的准备。大厂里面因为用户量大,牵一发而动全身,每一项新技术的选用,都会经过至少两个以上方案的对比,还必须拿出对应的数据证明它对性能的改进。而这都是本来能力跟你同一个level的人做的,只不过他们在大厂中不得不去完成,他们有更多的时间深入一项技术,而不是拼命做业务。
2. 求新。这是来大厂时的感受,新技术会以最快的速度得到传播,得到应用。大厂内部很鼓励这样的事情。在React Native一出来,天猫就已经在进行改造。Android M一出来,微信的工程师们就已经想好了流氓方案。
如何选择?
今天我的好友中有人问了我这个问题:
在小公司里面做全栈好,还是大公司里面做专业的移动端技术专家好?
对于这个问题,我想我大概有点发言权。在我过去若干年的职业生涯中,各种类型的公司也算都经历过,小一点的公司,大概有四五十人,大厂也待过几家。
总体来说,也算是了解“专业工程师”和“全栈工程师”这两个名词背后的水深水浅。
有时,当我们去跟一些人交流,会发现一个奇怪的现象,往往小公司的更喜欢称自己为“全栈工程师”,而大厂出来的,则反而不敢自称自己为“全栈工程师”。这究竟是为何呢?
我们可以继续引述经典理论“达克效应”。
1、不知道自己不知道。 2、知道自己不知道。 3、知道自己知道。 4、不知道自己知道。
这四个阶段其实无论在技术层面,还是职场发展过程中,都无处不在。
在我们每个人说起漫长,说起短暂的职业生涯中,总是会历经无数次技术的发展,甚至变革,这些技术其实在给我们创造价值的同时,也一点点在我们的灵魂深处留下阴影。
有的技术或理论,会对我们的职业发展产生非常深刻的影响;有的则如雨后彩虹一般,突然出现,却又遽然消失。
每一种技术或理论的产生总会有一套成体系的脉络,也许入门很容易,但要成为专家其实非常困难。达克效应表现的也是这样一种效应。
那些看起来很容易就学会的东西,往往要深入或许更加困难。而许多大厂开发者深刻体会其中的不容易,所以若非经过最少几百小时的学习,其实不敢自称为专家,更遑论自称“全栈工程师”了。
其实,有的人自称为“全栈工程师”,倒不如说是“全能工程师”---每种技术都或多或少懂一点,能够在很短的时间内完成任务,但一旦要有所深入,就略显不足,无法再进一步了。
但,无法在技术层面有所深入,是一件难以启齿的事情么?
Android发展
也许并非如此。我深深的感觉,在IT行业,看起来风起云涌,浪潮迭起,但依然充满前途和光明,其主要原因在于:人们对基于互联网场景下的应用,需求从来就没有因为互联网技术的发展而有所降低,反而越来越细致,越来越具体,产生着越来越深远的影响。
例如,很多年前就说美国互联网泡沫破灭,但今天互联网经济反而越来越重要了;移动互联网也有人唱衰,“说BAT才掌握船票,已经垄断中国经济,其他公司几乎毫无机会”。却莫名其妙间,又多出了头条、美团、小米、滴滴、京东、拼多多等数不尽的优秀互联网公司。
再过十年IT产业会逐渐退潮么,IT人才将会毫无施展才华的土壤么。不得而知,而且也不重要。重要的是,即便在互联网技术飞速发展的今天,中国依然对优秀的IT工程师非常稀缺。
即使是在某乎上天天可以看到这种:
这种
还有这种
当然了,还有这种
在这种情况下,高级Android开发工程师的薪资却不断走高
时至今日,软件实现过程并没有因为软件技术人才的增加而逐渐简化,反而依然非常复杂。我们其实都能看到,在IT行业,五年经验以下的开发者始终居于大多数,不管是十年前,还是今天,行业都几乎没有太大的变化。我们能指望现在的年轻开发者能够提前规避我们之前遇到过的那些问题么?
历史告诉我们:人们走过的弯路,后人其实还是会再走一遍。看似大爆炸的互联网,知识满地都是。其实,知识过载和知识过乏没有任何区别。所以,我们写过的那些垃圾代码,我们以前遇到过的那些bug,依然有许多年轻人在沿着我们的步伐再走一遍。
那些隐藏在软件界面的冰山之下,难道bug突然减少了?究竟会不会在哪天突然爆发?客户提出的需求,程序员们究竟是如何实现的?
我始终认为,专业工程师依然非常匮乏,无论过去、今天,或未来。
专业工程师或许不一定是某个领域的专家,也许是某些具备优秀跨职能能力的开发者。
他们首先能够基于某些行业场景出发,以独特的视角发掘问题的本质,并快速的将业务问题转换为技术实现,还能抽丝剥茧,发现不同事物之间的关联关系,从而更好的将业务问题以软件的形式进行呈现,
他们也能灵活的发现不同技术之间的优缺点,并使用合适的技术问题来进行适配,使得问题能够以最快的速度进行解决。
他们还能从多个角度出发,而不仅仅是从【软件代码实现】这个维度出发来解决问题,他们所具备的良好的沟通能力和专业素养,使得客户/用户能够愿意倾听提出的建议,从而以最少的代价来解决问题。
成为专业工程师,与选择“大厂”或选择“小厂”有非常明显的区别么?
大公司和小公司都有不同的发展轨迹,不同的人适合不同的发展方向。无论怎么选,其实都是“小样本”。
个体选择走【跨职能型人才路线】或走【专业人才】路线,对于偌大的中国来说,都其实不会对历史的车轮产生多大的影响,但我们的选择其实是在慢慢的改变我们的生活。
有时,小厂在能够填补我们对于经济上的匮乏,又有时,选择了大厂会让我们以为未来的发展无忧。
确实如此,有时一些小厂反而能够比大厂提供短期内更加诱人的薪资,这对一些经济条件不太好的人来说,犹如“久旱甘霖”;而大厂看似平滑的发展曲线,能够让我们只要沿着设定的方向走下去,肯定不会走错。
但真的小厂就意味着“朝不保夕”,大厂就一定是“高枕无忧”么?谁也说不准。
最重要的,也许依然是认清自己的定位,无论在大厂,还是小厂,使自己成为出色的“专业工程师”,更加全面的成长,或许更能让我们的职场立于不败之地。
技术更新不断,进阶之路不停
除了认清自己的定位以外,本质上真正能够让我立于中年而不败的是什么?
是技术!
你想要提升核心竞争力,最需要提升的是什么?
是技术!
不管你在大厂还是小厂,永远只有技术能够支撑得起你的薪资,而当你薪资虚高而技术水平不足的时候,我建议你马上着手提升,不然下一步很可能就是被迫转行了……
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
所以需要梳理知识,提升储备
- 架构师筑基必备技能:深入Java泛型 注解深入浅出 并发编程 数据传输与序列化 Java虚拟机原理 反射与类加载 动态代理 高效IO
- Android高级UI与FrameWork源码:高级UI晋升 Framework内核解析 Android组件内核 数据持久化
- 360°全方面性能调优:设计思想与代码质量优化 程序性能优化 开发效率优化
- 解读开源框架设计思想:热修复设计 插件化框架解读 组件化框架设计 图片加载框架 网络访问框架设计 RXJava响应式编程框架设计 IOC架构设计 Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系 底层图片处理 音视频开发
- 微信小程序:小程序介绍 UI开发 API操作 微信对接
- Hybrid 开发与Flutter:Html5项目实战 Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
这里附上针对字节跳动的面试题整理的合集,我们进行了分类,循序渐进,由基础到深入,由易到简。
将内容整理成了五个章节:
计算机基础面试题、数据 结构和算法面试题、Java面试题、Android面试题、其他扩展面试题、非技术面试题总共五个章节。
还有一份Android开发相关源码解析,这份Android学习PDF大全真的包含了方方面面了
内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等超全面Android开发相关源码精编解析
字节跳动真题解析、Android开发相关源码解析、简历模板可以免费获取
面试时HR也是不可以忽略的环节,我们经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。
有全套简历制作、春招困惑、HR面试等问题解析参考建议。
这些都是我闲暇还会反复翻阅的精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。
以上内容均放在了开源项目:【github】 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...