为什么程序员还在做最基础的工作(那些能工作到455060的程序员们)
为什么程序员还在做最基础的工作(那些能工作到455060的程序员们)什么是裸编程能力?但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。我一直认为编程的本质其实类似解数学题,那么算法就是最难的数学题。码皇MIT教授Erik Demaine的建议更为直接:If you want to become a good programmer you can spend 10 years programming or spend 2 years programming and learning algorithms.如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用。
程序员行业新技术发展迅猛,可以说是日新月异。也正是这个原因,中年危机成为我们必须面对和攻克的问题。
思考一个问题:那些能工作到45、50、甚至60的程序员们,究竟具备了哪些过人的能力?
就我过去的经历和观察来说,我认为:他们掌握了一些硬核技能。这些硬核技能帮助他们克服了年龄带来的劣势。
1.算法能力很多程序员朋友觉得:如果我不从事算法相关工作。算法可能对我没有价值。虽然大多数程序员可能在工作中用不到算法,但这一点都不妨碍算法的重要性。培养算法能力,就是训练了我们的编码能力、解构能力和超强的逻辑能力。
我一直认为编程的本质其实类似解数学题,那么算法就是最难的数学题。码皇MIT教授Erik Demaine的建议更为直接:
If you want to become a good programmer you can spend 10 years programming or spend 2 years programming and learning algorithms.
如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用。
但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。
2.裸编程能力什么是裸编程能力?
处理程序实际实现部分的子任务,实现函数或者算法之类的能力。
听起来很简单对吧?实际上很多程序员缺失这样的能力。
不知道大家有没有见过「复制粘贴工程师」,Review他们的代码甚至会发现一些网上的注释,又或者其他人的编写错误。
并不是所有程序员都具备利用必备的基本编程结构有效的实现某个产品或者某个模块。
不少工作多年的程序员甚至连一个简单算法排序都没有考虑,当然这并不影响普通工作的输出。
充当代码世界的搬运工,如同搬砖工人一般,完全可以在职业生涯初期求得苟存。
但在面临调优或者攻坚,这类型的程序员的表现甚至比刚毕业的优秀程序员还要糟糕。
当他们步入中年,当他们承担越来越复杂的任务之际,无力感会与日俱增。
3.Debug能力调试能力某种程度上比编码能力更重要。
在工作中,编码只占据了我们一部分时间,查找和解决BUG会占用更多时间。
查找BUG产生的根源不是一件简单的事情。需要整体的分析和经验的沉淀,同时还需要对各种调试工具熟练应用。
团队的架构师除了架构设计,最重要的工作就是去解决那些其他人解决不了的BUG。
4.底层系统知识处理复杂任务或解决复杂BUG时,具备深厚的底层系统知识非常重要。比如数据结构、网络协议、操作系统相关知识,等等。
程序的很多问题都是源于对计算机工作原理的误解。即使是使用高级语言开发的程序也一样。另外,一些更偏应用层的架构或框架,基础一定是更底层的系统。
了解了底层原理,我们才能看穿眼花缭乱的技术背后的东西,不被层出不穷的新技术所累。
比如Docker技术兴起,改变了CI/CD的方式,推动了云原生技术的发展。
那么Docker到底是什么东西呢,其底层无外乎:CGroups进行资源限制、Namespace对进程视图修改、rootfs为容器进程提供隔离后执行环境的文件系统。
了解了Docker的底层原理,才能在实际工作中更好的驾驭Docker。
以上四点,作为程序员,需要深耕取得突破。
大家可能会注意到,我并没有推荐任何一门语言作为基础能力。
对于真正的程序员大牛,语言只是工具,并不是本质。
这些大牛可以很轻松的熟练使用多种语言来实现业务目标。
作为身处开发类岗位的本人,我觉得技术深耕是个很重要的事,因为身处于同岗位的开发人员有很多,我相信技术比自己差的没有多少,而技术能力比自己高的应该也不少,所以不管在什么行业中都是核心竞争力的,只有不断的提升自身的能力才是王道,即便相信找个稳定高薪岗位的也不是一件什么难事
在深耕技术前,首先要给自己制定一个成长曲线图,按照路线来合理的学习;不要东拼西凑的去学,那就是在浪费自己的时间,而且很容易忘去;下面是对标腾讯 T10 级 Android 高级进阶学习路线,为了让你能够告别繁琐的技术需求而制定,里面记录的都是 Android 工程师必备技能和现主流技术的学习成长路线
希望以下的学习路线能对你有帮助
对标腾讯 T10 级 Android 高级工程师成长曲线图这套 对标腾讯 T10 级 Android 高级工程师成长曲线图 也对其配套了一份学习手册;这里面包括了从接触互联网的基础内容开始,再到了解一部分如 Java 基础,Android 基础的语言,最后进行学习其他底层,NDK、跨平台的相关技术知识;相信可以给大家提供一些帮助,有需要的朋友们也可以领取一下,随时查漏补缺;需要完整版的朋友,可以私信发送 "进阶" 即可 直达获取
工程师必备基础技能- 架构设计必入技能-泛型、注解
- 架构动态编程技术原理
- Android 虚拟机指令
- Android 虚拟机垃圾回收
- Android 虚拟机类和对象的结构
- 并发内存模型
- synchronize 机制
- 深入并发原理之线程池
- 高效数据序列化
- 启动优化
- 内存优化
- 启动速度优化
- 卡顿优化
- 布局优化
- 崩溃优化
- Android 应用启动全流程分析
- Framework 通信
- Android Binder
- Android Handler
- Framework 底层服务
- Android Framework 源码解析 AMS、PMS IMS WMS 及绘制流程
- Framework 事件分发机制
- 通过三种方式绘制图片
- 使用 Audio Record 采集音频 PCM 并保存到文件
- 使用 Audio Track 播放 PCM 音频
- MPEG-4/H 264 AVC 编解码标准
- AAC 音频编解码技术全解
- 流媒体协议RTMP 多媒体文件格式 MP4 FLV M3U8 PCM WAV
- FFmpeg 命令行工具全面阐述
- 架构师通用技能
- 网络访问
- 图片加载
- 注入解耦
- 架构师必备设计思想
- 数据库管理框架
- 开发汽车媒体应用
- 构建 Android Auto 即时通信应用
- 构建车载导航和地图注点应用
- 测试 Android 车载应用
- 分发 Android 车载应用
- Android Auiomotivs OS 通知服务
- Flutter 之环境搭建
- Flutter 之 初始 Dart
- Flutter 之 Dart 语法基础
- Flutter 之集合、控制流程
- Flutter 之函数、类继承、异步操作、弹框、网络请求
- Flutter 之基本布局、容器、组件、列表
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈