奔三女程序员不禁三思,“中年危机,kotlin 常量
工人:
关键词:加班、久坐、听话、重复劳动
这一类程序员就如流水线上的工人,每天主要工作就是完成老板布置的各种任务,每做完一个任务,就意味着迎接下一个任务。永无休止,循环往复。
匠人:
关键词:完美主义、责任心、享受突破
这一类程序员热爱编程,追求将每一件任务都做到最好。他们会为每一个变量、每一个方法的命名绞尽脑汁。对他们来说,每一段写出来的代码都是一件艺术品。他们看到丑陋的代码会愤怒,在带学徒时会非常严格。
艺术家:
关键词:快乐、沉浸、高技术、创意
这是程序员的最高境界,这类程序员对于软件的构架、模块设计都有独到的想法,他们不仅仅思考软件本身的稳定性、功能是否强大,还追求代码、构架是否优美。他们通常会有自己开源软件,用自己的库、框架或者插件来满足世界的需求,帮助他人提高效率。他们享受关于程序、逻辑的一切,即便写出无法带来任何经济收益的软件,也乐在其中。
中年危机幕后的第一推手
绝大部分人印象中的程序员一定是第一类。的确,这是市场最需要的一类程序员:能像机器一样大量产出代码,能加班加点,用高于市场平均水平的速度完成一套软件,能快速上手,无需过多培训费用,能熟悉多种技术,最好是有最优秀的学习能力。最后,工资嘛,最好是市场平均水平或者低于市场平均水平。
这么描述完,你们大概已经注意到了,上哪儿去找这么好用的工人呢?大学毕业生,或者更好的是,有那么几年工作经验,年龄又不大(市场潜规则,35 岁以下)。
程序员中年危机的第一幕后黑手呼之欲出:市场!!!
曾经看到过一段很有意思的话:母亲生子还要怀胎十月,国内投资人对于创业公司的期望却是最好三个月 IPO 上市。投资人的期望和市场的竞争将这条生产线逼到了极致,甚至出现 " 程序员激励师 " 这种奇葩职业。
然而,当市场上充满了工人型程序员并不是一件好事。众所周知,我们正期望从“中国制造”向“中国智造”转型,就是因为靠低价、重复劳动、批量生产并不是长久之计,这些只靠产量、订单生存的程序员,正是在用青春和健康换取“中产阶级”收入。
令人意想不到的是,这个市场上其实是非常缺乏具有匠人精神和艺术家气质的程序员的!只有有他们,才会产出高质量的软件。在世界顶级的 IT 企业如微软?、谷歌?中,具有大量拥有匠人精神和艺术家气质的软件工程师,而这些工程师是一定不会在乎 35 岁、45 岁的,只要他们还热爱这个行业,就会一直做下去,学习下去。不过,这样不靠批量生产、而是靠有技术专利或者平台存活的 IT 公司毕竟是少数。绝大多数程序员注定会成为市场竞价的牺牲品。
中年危机幕后的第二推手
杀死中年程序员的,其实是欲望。
大家都知道,软件工程师在社会众多职业中,绝对算是收入不错的职业。虽然有的行业,如金融业也有不少高净值人士,但是 IT 行业整体薪水较高是有目共睹的,尤其是大学毕业的起薪。
在我看来,起薪高并不是一件好事。
高起薪意味着两件事:第一,它是打开欲望的潘多拉盒子。第二、高收入背后一定有隐形的成本,很多年轻的程序员们并没有清醒意识到自己将为此付出的代价。
正因为程序员起薪高,家人(老婆)很容易成为家庭主妇,将经济压力完全转嫁到一人身上。他们也很容易形成高消费习惯,例如购买贵的房产、汽车等等。消费习惯一旦上去,就很难以下来。然而,高起薪背后本身就意味着对健康等未来成本的损耗。这不是一种可持续(尤其是持续 20 年及其以上)的资源。
《未来简史》中说,人类的欲望一旦打开就停不下来了,比如所谓的“升职加薪”。当人们习惯于升职加薪,某一天没有能力升职加薪将意味着什么:生活坍塌。
其实,有很多家庭的收入远远小于软件工程师家庭的收入,但是稳定的收入和没有过度的贪欲,让他们很幸福。反倒是不断的追求升值加薪,或者社会对程序员不切实际的期望(如“不转管理就是失败者”),让程序员这样一种原本应该是具有匠人精神的职业,变成了和保险销售一样靠“画饼”或者“利益诱惑”升值的行业,实在是一种悲哀。
我相信,很多 IT 行业的创业者、领导者和招聘人员,其实是非常希望能够招到技术过硬、具有匠人精神的编程艺术家的,因为,他们很清楚,这样的资源有多么稀缺!那么,社会是不是应该更加宽容,不要期望每一个程序员都会成为巧舌如簧的管理者?塑造一个匠人、甚至是艺术家,是需要时间的沉淀的。
程序员如何生存
对于许多人来说,编程不仅仅是一份职业。最近,我在阅读一些相关的文章时发现,许多 50 岁以上,甚至 60 岁以上的开发人员仍在从事编程。
他们中的一些人也有其他的工作机会,但是他们都拒绝了,因为他们喜欢编程。
其实,能够从事自己喜欢的工作,是人生一大幸事!但是,无论你喜欢与否,如果想长期从事这个职业,就需要牢牢记住一些忠告。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃。
①紧跟年轻人的思想
除了便宜以外,各个公司喜欢招募年轻开发人员的原因还有两个:
他们渴望学习。他们很好奇,喜欢学习新鲜的事物。他们学习的知识都很先进。
他们可以激发很多新想法,并分享新的观点。
因此,请紧跟年轻人的思想。只要有年轻的心态,年龄无关紧要。
②放下“技术包袱”
许多程序员都有技术“包袱”。请放下包袱,对新技术保持开放的心态。
如果某个程序员长期从事某个特定的编程语言,而没有任何其他方面的工作经验,则一些招聘人员会视之为危险信号。
高龄开发人员都会担心工作的稳定性。他们往往会承担很大的心理压力。我认为如果提前做好准备,就可以避免这种情况。
**新的编程语言、框架和库层出不穷,因此要不断地学习。**有时技术人员常常会忽略这一点。但现实情况是,这些技术很快都会过时。
进阶之路
为何会想起写这么一篇文章呢,一方面很多程序员对于技术精进仍然十分困惑,不知道该如何学习进阶,以至于提前陷入中年危机的困惑之中。
作为一名 Android 开发近十年的老码农或许可以分享一些自己的心得体会,刚好这几天工作需要,组内想规划 Android 技术路线,简单来说就是目前我们组处在什么样的水平程度,目前所做项目用的技术处在什么阶段,在未来一年内,项目技术迭代该如何走,走到什么程度。
最后是从事 Android 开发这几年,一直也没好好规划自己的技术路线,想认真整理下未来进阶之路。我们都知道 Android 技术体系一直很庞大,刚开始学的时候基本是从一个点一个点开始,没有系统全局观概念,同时也是学不过来,从做上层应用开始,到做 Framework 层,然后再到系统层做驱动开发各个层面的开发者都有,绝大部分开发者都是从应用层开发,往往做到 Framework 层就浅尝辄止了,一直以来,做 Android 开发有这么两个说法,如果是做应用开发,往应用架构方向发展比较合适,如果是做系统层开发,往往底层驱动比较合适。
看张图:
挑些图中几个点简单来谈谈自己的一些想法。
移动架构:
移动架构是 2017 移动技术年度 TOP5 话题之一,从中就体会到架构是有多火,记
得刚开始学 Android 时候,哪有现在那么框架,那时候谈架构的更多是在服务端开发,比如多层架构,有展示层、业务逻辑层、数据访问层这就是最简单的三层模式,Android 系统则是基于事件驱动响应机制设计的单页面架构,其实跟浏览器中的窗口页面是一样的, 系统中一直有个消息轮询监听机制,哪个事件被触发了,相应的响应代码进行处理,这些处理操作是被提前注册到系统中。
最早开始的开发模式基本是基于 Android 系统自带 MVC 模式,Activity 基本类似于 Control 的作用了,View 和 Mode 互相耦合,后来才演化出现在主流的 MVP、MVVM 模式,顺便提一句,MVVM 模式其实是在微软 WPF 技术体系中提出来。
图中显示两个方面:
展示层: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components
架构层:模块化->组件化->插件化->沙盒/双开技术,比如可以双开微信,类似 Docker, 每个页面都是插件,类似 Vue.js 中每个页面都是组件。
性能优化:
简单来说,一个 APP 是需要从三个方面被关注的,业务功能、符合逻辑的交互、性能响应。如果我们在使用一个 APP 时候,经常滑动时经常卡顿、时不时崩溃、有些功能设计简直非常规,比如在 Web 网站有树层级等面包屑点击,你非要在手机也搞一个类似树级点击加载,那是不是有点强人所难了,我上拉下拉、左滑右滑不行吗,非要通过点击才行吗?那么性能优化核心是什么呢?追求快、稳、省、小,关注卡顿、内存泄漏和崩溃、代码质量和逻辑、安装包大小四个方面。
技能储备
Android 学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一个大概的思路:
**架构师筑基必备技能:**深入 Java 泛型+注解深入浅出+并发编程+数据传输与序列化+Java 虚拟机原理+反射与类加载+动态代理+高效 IO
**Android 高级 UI 与 FrameWork 源码:**高级 UI 晋升+Framework 内核解析+Android 组件内核+数据持久化
**360°全方面性能调优:**设计思想与代码质量优化+程序性能优化+开发效率优化
**解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava 响应式编程框架设计+IOC 架构设计+Android 架构组件 Jetpack
**NDK 模块开发:**NDK 基础知识体系+底层图片处理+音视频开发
**微信小程序:**小程序介绍+UI 开发+API 操作+微信对接
**Hybrid 开发与 Flutter:**Html5 项目实战+Flutter 进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
**帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。**无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
1.2020 大厂面试高频知识点
图片
网络和安全机制
数据库
插件化、模块化、组件化、热修复、增量更新、Gradle
架构设计和设计模式
性能优化
Android Framework
Android 优秀三方库源码
2.Jetpack 架构组件从入门到精通
Android Jetpack - Navigation
Android Jetpack - Data Binding
Android Jetpack - ViewModel & LiveData
Android Jetpack - Room
Android Jetpack - Paging
Android Jetpack - WorkManger
Android Jetpack 架构组件之 Lifecycle
Android Jetpack Compose 最全上手指南
3.Framework 精编内核解析
主要内容包含:
深入解析 Binder
评论