为啥经常听到程序员朋友说自己太辛苦了、太累了,其实原因很简单:干活苦、竞争大、技术致富难。
干活苦:
有新闻说晚上十点某领导在微信群要求下属在十分钟内回复,一员工因休息早而没及时回复被裁了。
对于程序员来说,晚上十点仍有许多人在公司赶进度,等发布。即使在深夜熟睡之际,一旦电话铃声响起,程序员在十分钟内就得起来查看处理,毕竟如果是系统宕机的话,晚一分钟处理损失就多几个零。
选择程序员这职业也就是选择7*24*365的待机模式,出门可以不带钱包但随身得带个vpn,搞不好程序员在结婚当天还得停下来打开电脑解bug。
竞争大:
IT这个行业涌入太多的急功近利的求职者,培训学校批量生产的码农,一批一批又一批。普通人从培训学校培训半年便能就业,月薪轻松过万;大四学生不喜欢本专业,自己拿本书学习也能找到不错的公司以实习生的身份入门。
技术致富难:
工资不涨房价嗖嗖涨,与公司的一起成长的情怀比不过现实的残忍:领导画的饼迟迟不兑现,还没到30岁两鬓开始发白,腰背也熬病了,薪资还是那么点。同一起跑线的同学跳槽早就实现了薪资翻翻,人又何必在一棵树吊死呢?
让我们来看看知乎上的一条高赞评论:
代码水平不高的时候,天天加班也干不完,还说其实是喜欢。
随着代码水平的提高,注释写的越来越少,话也越来越少了。
话说得少了,觉得办公室气氛变得有点压抑,于是离职换了一家公司。
在新的公司还是那么忙,于是经常幻想老了就可以轻松点,却发现脑门子越来越大,眼睛看不清楚了,胳膊腿儿越来越细,肚子越来越大,原来已经提前老了,但是还要加加班。
终于有一天升职,来了几个帮手,
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
可是他们水平不高,天天加班也干不完,还说其实是喜欢。
这些新来的下属们加班总是帮倒忙,引入的bug比解决的bug多多了。
于是每天劳心劳力的去帮助他们,要求他们代码写好,那样可以少写注释。
终于发现他们的水平逐步提高了,注释写的越来越少,但是话也越来越少。
话说的少了,似乎办公室气氛变得有点压抑,终于下属告诉我已经辞职下月离职,这陌生的感觉仿佛换了一家公司。
于是更加忙了,总是幻想老了就可以轻松点,却发现脑门子越来越大,眼睛看不清楚了胳膊腿儿越来越细,肚子越来越大,原来已经提前老了,但是还要加加班。
如此循环往复…
感觉生活都没有了乐趣
看到这哥们儿的工作经历,再加上工作几年对这个行业的了解,我对以下几点有了深刻的感悟:
第一:每个行业都有各自的辛苦,只是你不知道,总觉得别人的就是最好的。
第二:我们需要控制欲望,做正确的事情,就不累。
第三:好的程序员并不累,他们乐此不疲,因为他们能从中获取成就感。
第四:如果你觉得很累,那就要回到原点问问自己为什么要做程序员,工作的方法是不是有什么问题,常用的基础知识点有没有掌握,是不是还不具备一个核心竞争力。
第五:程序员也需要不断提升自己的技术水平,有一个特别精通的东西,别等到有一天被劝退,那时候就措手不及了。
如何提升学习?
提升学习很大程度上就是为了跳槽涨薪,当然运气不好的情况可能是被劝退重新找工作,无论是哪种情况,自主学习的能力是要有的,而且得有一个方向,得有重点。
对于Android移动开发来说,热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架是进入大厂必须掌握的,也是面试中常常问到的,我这里整理了一份资料以及路径,长达1042页!相信看完这份文档,你将会对这些Android第三方框架有着更深入、更系统的理解。
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
不用未来,就现在,从加班文化(例如996,“狼性”)看,程序员早已是一个高度内卷化的职业。例如,在某个研发团队中,最早的时候,所有的程序员都不加班。在8小时工作时间里,大家有序竞争,谁想脱颖而出,谁就提高工作效率,在创意上下功夫。也就是说,在加班还没有成为“文化”之前,程序员之间的竞争只能是智力,而不是体力。同时,老板在分配工资的时候,参考的标准也是效率和创意,因为大家都不加班。假设这个团队有10个程序员,老板每月愿意支付的工资为10万元。因为原来大家都不加班,老板在分配这10万块的时候,参考的标准也只能是效率和创意。但是,突然有一天,某个程序员为了在竞争中赢得先机,开始主动加班。那么,接下来的一段时间里,这个首先加班的程序员就会暂时呈现出更好的业绩(或者说姿态)。之后,老板再分配同样的10万块工资的时候,自然会向这个首先加班的程序员倾斜。但是,这里有关键的一点,对老板来说,他的总支出并没有增加,还是原来的10万块钱,只是在内部调整了分配比例,向首先加班的程序员倾斜而已。在这种情况下,其他的程序员如果想保持收入,或者只是想保住工作,则只能跟进加班。但是不久,当团队中所有的程序员都开始跟进加班后,加班本身就不再具有竞争力,而成了标配。此时,那些不愿加班的人,想要回归效率和创意的程序员反而成了另类。这样的人,无论水平高低,因为“态度”有问题,在一个以加班为“文化”的团队中是没法生存的。最后,我们再回过来看老板。无论大家是否加班,老板在支付的工资的时候,总的金额还是10万块钱,还是在这个10个人之间。而现在,因为所有的程序员都开始加班了,劳动时间已经体现不出差异,老板在分配这10万块的时候,最终还得参考效率和创意。所以大家看,转了一圈,到最后,从每个程序员分配到的钱看,谁也没有增加,又回到了加班没有形成“文化”之前。但让人难以接受的是,对程序员来说,到手的钱没有增加,但却付出了成倍于原来的劳动。而整个过程中,真正的赢家只有老板,因为他付出同样的钱,却买来了更多的劳动。输家是劳动者,因为大家的收入没有变化,但却付出了更多的劳动。因此,从整个程序员团队的收益看,程序员们之间基于加班的竞争,就是一个零和游戏,是一个典型的内卷化竞争。而且,这还不是最可悲的。因为,加班“文化”不仅恶化了程序员的劳动环境。从长期看,还直接缩短了程序员的职业寿命,使中年危机成为程序员无法逃避的宿命。道理非常简单,在高强度的劳动下(例如996),技能和创意最终都变得没有意义。因为,随着年龄增加(不用太大,34岁),高强度的劳动会直接摧毁人的健康,即使你愿意“向死而生”,人家也不会给你机会。所以你看,从第一个加班的程序员开始,到加班成为文化,程序员们亲手摧毁了自己的劳动环境,了结了自己的职业生命。这个过程放大到整个行业依然成立。最早的时候,行业中所有的企业都不加班,大家展开良性的,基于科技和创意的有序竞争。同时,行业中所有劳动者都能兼顾家庭和工作,整个行业充满了温和幸福的氛围。但是,有一天某个企业突然开始提倡所谓的“加班文化”,首先开始加班。那么,在一段时间里,在行业竞争中,这个企业就会赢得暂时的优势。但很快,行业中的其他企业为了在竞争中生存下来,也开始学习“加班文化”,也开始加班。这样,整个行业的竞争又回到了之前。任何一家企业,要想在行业竞争中获取更大的市场份额,还得靠科技和创意。也就说,转了一大圈,企业的竞争格局并没有变,却整蛊出了一个所谓的“加班文化”、“996福报”。可叹息!!
每年,毕业季后面接踵而来的就是就业季,各位准备得怎么样了?准备Android面试的朋友记得收藏点赞哦,不是准备这个方向的面试也可以转发给你这个专业的朋友,助他一臂之力。
公司的需求
不同的公司,不同的需求现在的市场上,公司很多,大致上可以归纳为两个大类:大公司和小公司,他们招聘时对人才的需求也不一样。
#####小公司
小公司他们一般急需的是能够投入工作的人才,因为公司规模小,急需盈利扩张,需要投入工作生产,所以他们更加注重实践能力。一般情况,小公司面试比较集中安卓开发这一块,他们会比较注意你之前有没有做过类似的项目,或者是相似的工作经验,以及有没有遇到过他们所遇到的某些问题。准备这些公司的面试,除了一些基本基础知识点还需要关注安卓开发实际中经常遇到的一些问题,比如缓存,常见的开源框架问题等。
#####大公司
相对于那些才起步,或者起步不久的小公司,大公司已经有了比较深厚的资源积累,体系制度也比较完善了,他们更注重人才的综合能力还有未来发展潜力。
在面试中,大公司会提的差不多就是数据结构与算法,计算机网络,操作系统,Java这些。在这些点中,数据结构与算法应该是一个分水岭,这个问题的准备需要长时间的积累,临时抱佛脚可能有些困难,是骡子是马,拉出来遛一遛就知道了,是不是高手一试就知。
所以,很多公司都执于考算法,比如百度、美团,淘宝这些公司。整个面试下来可能让你手写5个算法题以上。这点主要是想告诉大家,这个门槛差不多决定了你最终所找工作的水准,所以我都会建议每一个找程序员相关工作的人,尽早准备这方面。比如多刷一些leetcode或是其他类似的题。
然后在剩下的几块知识中,我只想说你可以不用全部都懂,但是你必须要在某一块知识点是有深入研究的,能够回答面试官4到5个追加问题,“T”型知识结构的人才很吃香。如果所有知识点都只能答上一到两个,面试官会觉得你的水平就是这样了,还会觉得你没有探究精神。这个判定结果是很恐怖的,因为一个没有探究精神的人是做不了好的程序员的。
我觉得面试安卓的知识点按照重要程度可以做一个这样的排序:
1.数据结构与算法
2.java ,Android
3.计算机网络
4.操作系统
5.数据库或是设计模式之类
java这一块,比较重要的是多线程同步异步,java虚拟机内存回收,容器,面向对象这些知识点。就单单是多线程和虚拟机都可以看好几本专门讲解的书了,其他知识点就多啃啃java编程思想,遇到不懂在多翻翻博客加深理解。
Android这一块,异步机制,view的绘制,自定义控件,四大组件都非常重要。不管是android或是java都最好看一些源码,java可以看一些容器的源码,android可以看handler,looper,message等异步通信的源码或是一些开源框架的源码,会看源码绝对是加分项。
计算机网络可以注重看上面几层,传输层注重研究。一般来说,前面这几点掌握好了,足以聊好几轮面试,一般面试官你都可以引导他去聊一些你擅长的知识点。后面几块知识点,你可以先掌握一些比较重要的,不一定每次面试都会遇到,但是也得准备。
##上面是提供一些大概的思路,下面具体说一下每一块的知识点
一、数据结构与算法
推荐书籍:大话数据结构,数据结构与算法分析(java语言描述),剑指offer,进军硅谷。
推荐在线刷题网站:Leetcode(LeetCode Online Judge),Lintcod(LintCode - 主页),牛客网(在线编程_C++Java前端经典笔试面试题库)
推荐方案:主要做三件事
1, 先看一遍大话数据结构,熟悉一些基本概念,大话这本书只讲了一些基本的数据结构,像是B树,B+树,红黑树需要自己看一些博客或是网站,推荐一个讲解算法的网站-七月算法,另外海量数据处理也是一个经常考的专题,它结合了数据结构和操作系统的一些知识,这个需要进行针对性准备。
2,然后开始刷题,最推荐的肯定是leetcode,刷题建议按照标签进行刷题(比如队列,栈,哈希表),刷题从易到难,最好能够刷一百题左右,如果一天一题,至少要三个月以上,所以这个耗时比较长,要从比较早开始准备。进军硅谷这本书有按照专题进行编排,基本上的题目来自leetcode,可以作为一个参考。
2, 然后要分析一些常见数据结构的源码实现(比如队列,栈,hashmap之类的),数据结构与算法分析这本书有讲一些,可以结合一些博客进行准备。
二、Java
找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。
入门书籍:Java核心技术卷一,Head first in java(如果一点面向对象的概念都没有那就看这本)
提高书籍:Java编程思想
Java虚拟机:深入理解Java虚拟机
Java多线程:Java多线程编程核心技术,Java并发编程实践
其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。
总体来说java考察内容包括以下这些: 1,面向对象的一些基本概念:继承,多态之类的
2, 抽象类和接口
3, 静态类,内部类
4, Java集合类,同步和非同步
5, Java类加载机制
6, Java内存模型和垃圾回收算法
7, 线程同步机制(volatile,synchronized,重入锁,threadlocal),线程间通信(wait,notify)