本文是我一个朋友的经历,谨以此文告诉那些向往更好的未来发展而一直努力奋斗的朋友们。不管你现在身处什么小公司,都不要气馁,机会还是有的,只要你敢于拼搏奋斗,我相信你一定可以成功的。
首先介绍一个我的朋友:我的朋友小王,从小就能吃苦。他是一个不知名的大专毕业的,学历不算很高,学的计算机专业。从学历来看,他是没有优势的,不是985,也不是211,又不是本科。先行条件他都不具备。那么究竟它是如何进入阿里的呢?请看下文详细描述:
我这里就大概概括了几点成功秘诀,仅供参考学习:
1、知己知彼百战百胜
做技术和打仗是差不多的,你时时刻刻准备着开发,就为了上线(上战场)。首先你要对自己有个明确的认知,你会那些技术,哪些还不理解的。建议多去看看大公司的面试题和面试要求,看看他们主要技术方向有哪些方面,然后作为参考去巩固学习。
技术测评这个建议每个月做一次。这个可以由你本人自评,也可以小组内部评价。如果你们公司有明确的kpi考评的话,那么你可以把测评结果作为kpi的辅助工具。
一般来讲,首先有一张很详细的测评表,测评表主要包括技术分类,每一个技术概要,评分,然后是未来发展方向等方面。通过这个表主要把你的当月所学到的技术,用到的技术点都罗列出来,然后根据掌握程度细分进行评价,然后下一步需要努力的方向,以及技术在项目中的运用等。虽然小公司不具备条件公司给你做技术测评,也可能是独立开发,没有小组测评,建议还是做一个个人测评,对你自己的技术有一个更好的了解,方便下阶段的技术提高和扩展。
2、学而时习之,温故而知新
技术更新很快,可能你今天学了,一段时间没有用到,明天就忘了。所以我建议不光要学习,更重要的是要多复习,把你学过的东西不断的去巩固温习。
(1)关于做笔记工具选择:
为了以后可以更好地复习,要养成做笔记的好习惯,如果没有纸质的日记本,可以用有道云笔记或者印象笔记之类的记忆工具,辅助你做笔记。
(2)关于思维导图:
每一次做笔记之后,我们要做一个思维导图去把笔记整理成目录,通过它一目了然的可以看清楚整个笔记的结构,可以清晰地看到你要复习的关键点。思维导图工具推荐:xmind、ProcessOn在线网站等。
(3)关于做笔记的方式:
关于做笔记不要仅仅是copy源码,也不要仅仅是copy别人的博客,一定要抓住要点去做笔记。比如你查找一个刘海屏适配,你把别人的博客全文复制进来,收藏起来以后再去看,这种做笔记的方式是不可取的。你只需要抓住核心关键点就可以了,比如它是用的什么样的适配,根据什么适配的,核心代码有哪些等等。然后就是之前收藏过哪些类似博客,做一个综合分析等,这既是做笔记,也是一种总结和思考。
3、懂得不耻下问,切勿趾高气扬
技术虽然重要,但是态度更重要。端正态度也许你距离成功也不远了。
不耻下问这是一种态度,是一种很难的的精神。看到网友的面试经历提到过:有些大厂出来的人动不动嘴上就挂着我是哪个大厂出来的怎么怎么样,经常炫耀,显得自己很6的样子。其实你要问他问题,他还一副高高在上的样子,爱理不理的。其实可以看出来,虽然这些人身处大厂,但是这种人的态度不是很友好。人都是生来平等的,没有谁高谁低。今天你在大厂春光得意,明天就被人搞下台。得意忘形对你自己没有一点好处,还落得一个不好的名声。你会的别人不一定会,你不会的但是别人可能会,你要懂得不耻下问,你会发现,通过提问,你居然可以学到更多东西。
除不耻下问之外,同样的还有一个很好的品质,那就是:谦虚。懂得尊重人,不耻下问的人基本都很谦虚。我那个朋友小王性格就很随和,很谦虚,一点架子都没有,戴着个眼镜,看起来像是读书人,其实他是一个技术大佬。
4、凡事预则立不预则废
这里讲的是凡事都要有一个良好的规划,不管是对工作任务的安排,学习的安排,还是对未来前途的规划,都需要首先有个规划。 古话说:“凡事预则立不预则废”,说的不是没道理的。你现在身处小公司也没关系,不要心灰意冷,也不要唉声叹气,工作很忙很累也不要抱怨。
你首先要明确一点就是你的目标是什么?
如果是混日子,那你基本就没有什么好的发展了,程序员吃的青春饭大家都理解的,正是学习的好时机你不努力,你对未来没有规划,那么你就算离开了那家公司还是没有什么好的发展的(创业或者家里有矿除外)。
我相信大家都不想混日子的,都想有个更好的发展。那么你就要从你进公司开始,做了计划。你现在应该怎么样朝着目标前进。你的未来还缺少什么?有哪些要求是大厂需要的,你需要以后去跟进的?然后你就要制定一个短期计划,短期内你要实现什么突破,攻破什么技术方案,有什么成果,怎么运用到项目中。这些你都要做一个计划表,安排出来,每天抽取一两个小时去按照计划学习。
有人会问:“我一个小公司的,我做功能的时间那么忙?哪有时间安排这安排那的?”其实这是一个误区。时间是挤出来的,我们每天可以抽取一两个小时学习吧,上班途中看公众号,下班途中看书学习,这都是充分利用时间的示例。你去看看一些成功的大佬,他们的工作事情安排都是有计划的,他们一般不会做无计划的事。其实你可以在网上发现王健林的作息时间,几点起床,几点看书,几点开会都有明确的安排。虽然我们是一般人,但是我们也可以给自己做一些小目标,从一个个的小目标开始着手去学习。王健林说:“给自己一个目标,赚他一个亿试试。”我们当然不可能那么做,我们可以这么做:“先努力写100W行代码试试。”
比如你准备学习自定义控件。短期一个月之内你可以制定一个目标,研究自定义View的所有有关的API使用。如果没有学完,那就继续排期学习。后续当你熟悉之后,你就可以继续安排一两个月甚至更长的时间去看View里面的源码,比如绘制流程,渲染机制,事件分发机制等,看看它们是如何进展的。再然后就是怎么灵活的运用到项目中。
5、不积跬步,无以至千里
技术的发展太快,开发中的需求多样,你如何快速把你所学的技术用来去开发一个需求,这是一大难题。往往有时候你看到一个需求,但是以你现在的能力还做不了,但是随着你不断的学习和积累,以后遇到同样的需求,你就可以得心应手去做了。这就是一个技术的积累的问题。
另外技术的积累对于解决问题的能力的提升也很重要。当你的技术有了一定的积累的时候,你看到一个bug,你就会不自觉地大断点调试,看Debug日志,看上下文信息,看各个参数赋值信息,看代码有没有低级错误等多方面去检查。再比如内存泄漏问题,当你使用工具检测发现有内存泄漏时,你正常是不容易发现的,可当你平时学习了内存泄漏检测方式和排查方案,你就会按照一些方案去解决内存泄漏,可能方案并不是唯一的,但是通过逐步排查,总会找到问题的根源。这就需要技术的不断积累和实践才可以做到。像小公司天天写业务代码,只要上线推广即可,一般是不太会注重App质量的。但是作为一个程序猿来讲,对自己严格要求一点,App质量方面也尽可能的去把控一下,就算公司没要求,你也要自己去尝试着做这件事,因为这对于一个大型应用是至关重要的,所以你可以从小应用开始着手去锻炼积累你的技术。说不定某一天当你的用户量增长到了几百万甚至几千万的时候,你有了前面的积累,再去做的话,就会有一些经验可循了。
比如大厂的App基本上都会用到插件化你技术。那么建议首先你去用一下热门的插件化框架,拿来之后封装一下用到项目中。然后就是深入框架的源码,结合一些大佬的博客和相关书籍,试着去分析源码,自己做总结,研究实现原理,研究插件化框架跟java虚拟机有什么联系,AMS,PMS,Binder机制这些是如何运用的,hook是如何做的。这是一个漫长的过程,看安卓framework源码是很痛苦的,需要长久的目标才可以做到。
6、燕雀安知鸿鹄之志
身处小公司也不要灰心,相信自己是可以的。不要因为别人的嘲笑就停止追逐的脚步,别人进了大厂只是比你快了一步而已,有啥可担心的?你要有足够强大的内心支撑,你才可以抵挡住外界的质疑。俗话说:“燕雀安知鸿鹄之志?”只要你树立信心,坚定不移的去做,哪怕项目再小,只要你做的能够体现出一定的水平,那也是非常可取的。毕竟面试第一步基本都是拿技术说话,不管是基础的,还是底层的,都不要怕,只要你掌握的足够多,并且有实战经验,下一步就好办了。
7、见风使舵、顺势而为
技术的发展太快,我们是应该根据时代的发展选择技术,还是应该按部就班用以前的旧方案,这是一个难题。这个问题应该辩证的去看待。
首先要把基本功练扎实,先从深度上去学习,就像前面所说的要制定计划,要在技术上有积累。然后我们要在广度上去横向拓展,不断的扩展其他的语言技术栈,比如脚本语言groovy、python;比如js、react、vue等前端技术。
现在的Android开发不像以前的开发那么简单了,现在纯原生的少,混合开发多,跨平台框架和工具层出不穷。但是不管怎么变化,我们一定首先要了解怎么使用,然后我们要理解核心机制,至于用不用到项目中需要结合项目实际做决定。比如rn前两年很热门,里面无非就是react语法,核心是js桥接。比如Cordova也是用的js开发。所以我们适当的掌握一些前端语言也是有好处的,比如js、html5这些建议学一下,就算不是很精通,能够写就可以了。还有react、vue这些框架建议了解一下。近两年小程序也火了一波,熟悉前端技术栈,对于小程序开发是很快上手的,特别是react、vue等前端框架的使用能帮助更好的开发出质量高,好维护的小程序项目,也是值得推荐的。
2017年 Google I/O 大会上,谷歌介绍了Flutter,自此之后众多Android开发者对此很感兴趣,表示上手很容易,学习成本低,性能也不错,其实也是一个不错的跨平台技术,可以尝试用一下,毕竟它是新出来的,社区还不完善,目前正式版还没出来,用在项目中会有什么意想不到的坑无法得知,不过可以自己写一些小项目玩玩,体验一下这个技术带来的便捷和体验。
8、思想有多远,就能走多远
这里面的思想主要有两种:技术和管理。
(1)技术层面来讲,你想在技术上深耕,必须要对技术有足够的认知度,不管是深度还是广度,你都要具备一定的水准。具体技术的要求可以参照大厂面试的要求去提升自己。建议一定要有着架构的思想去看待编程。
1.写代码不能懒散,一定要规范去做,严格按照Java代码规范去做,另外你可以制定一个代码准则,哪些需要约束的,哪些需要遵守的都是要有个准则,按照规则去做。
2.一定要有一个文档,不管是接口文档,还是项目文档,或者是项目本身的需求文档之类的。小公司可能比较简单,很多都是口头说一下,扭头就变了。建议一定要有书面的文档做记录,这么做的好处:一是为了记录需求变更,有据可查;二是为了规范流程,减少不必要的沟通、甩锅和冲突。
3.一定要注重代码质量,扩展性和稳定性都要兼顾。因为往往一个app的发展会不断的迭代延续下去,修修改改是很正常的事情,那么在写代码的时候尽可能的多预留接口和开放的代码,方便以后扩展。需要熟练掌握常用框架MVP,而MVC和MVVM(谷歌的)一般用的少不推荐,项目中灵活封装MVP三层结构代码。如果是独立开发,那么你从项目初期就要确定项目应该如何去组织架构,怎么分层,需要用到哪些技术?哪些开源库我可以自己去实现的?哪些需要修改源码以便项目使用的?如果是接手老项目,首先也要熟悉业务逻辑,然后就是修改让代码更严谨,逻辑更清楚,层次更分明,扩展性更好。
4.上面也讲过多多学习,学习开源库的源码,学习framework层的源码,学习jvm。熟悉底层和源码是做架构必备的技能之一,你掌握之后可以有更多的解决途径。
复制代码
(2)管理层面来讲,如果你有兴趣当了小组长,管理开发组里面的人,那么你就一定要多看一些管理的书籍,专业的理论是必备的,如何合理的安排任务,确保任务按时完成,如何提高团队开发效率,如何带领团队技术提升,如何给团队带来更多好处(比如项目奖金等),如何承担该承担的责任,维护团队的利益,如何稳定开发组员的情绪,如何应对突发情况,如何应对上下级之间的关系等。这些方面都是需要是了解和熟悉的,当你真正的做过管理之后,你才会发现这里面的门路其实是很复杂的。
9、鱼逐水草而居,鸟择良木而栖
一定要跟着比你厉害的人学习,不管来自哪里,你身边如果都是优秀的人,那么你也差不到哪里去。有句古话说得好:“鱼逐水草而居,鸟择良木而栖”如果你想去大厂挑战自我,一定要不断的去和大厂的人多沟通,哪怕是实习生。多向他们学习如何开发的,团队管理是怎么做的,他们需要用的什么技术等。
多出去走动,多参加一些论坛和技术活动,多认识牛人,多喝同行交流,开拓视野。当你的圈子越来越大的时候,你会发现内推其实也是很容易的。如果有经常写博客,写开源项目或者开公众号的朋友,那就更好了,可以向他们取经学习一下。这些东西既可以锻炼你的文笔,同时也是你个人实力的一个展现的平台,还可以收到一些打赏,其实也是不错的选择,当你真正参与一些有意义有价值的开源项目的时候,其实这个含金量比你写代码相对来说是更高的,所以好好把握,前提是你有足够多的积累和技术输出,你开源的东西能够带来真正实用型的帮助。
【最后】技术不是唯一赚钱的工具。开发是吃的青春饭,当你年纪大一点,基本都会转管理路线了,或者有的自己创业了。你除了技术之外,还可以关注一下管理,万一哪天你进了大厂,刚好缺个组长,你不就有机会可以去试试吗?
另外面试是多方面因素决定的,比如你的技术、言辞、表情、衣着、以及给人的感觉如何等这么多因素都有可能影响结果。既然决定要去面试,那就要做好充分的准备,该记住的技术点一定要掌握好,自然发挥就好,大厂也没有那么可怕,相信自己,你可以拿到大厂offer的。
本次征文活动的链接 juejin.im/post/5b923a…