对于很多职业来说,简单基本的事情重复做,可以达到很高的熟练度和丰富的经验。而这种熟练度和经验本身就是一种有力的竞争力。比如运动、弹钢琴等。当然,这些职业活动也需要科学方法的辅佐才能更加高效。
但是编程有些特殊。不同之处在于,编程技术是不断迭代着的,不像其它职业通过熟练度和经验就能建立职业竞争力。编程是:无论你对一门技术达到多高的熟练度,有多丰富的经验,只要新的技术和工具产生和实用,原来掌握技术的熟练度将会快速贬值,经验也会失效。软件技术的更替发展已经一次次证明了这点。
简单基本的事情重复做,并不利于程序员的提升。程序员需要始终寻找新鲜的东西来填充自己的血液。这是我从事十年软件开发的感悟。
那么,什么样的事情才能真正提升程序员的能力呢?
-
始终保持学习新鲜东西的动力。比如性能分析,使用 Python 生成直方图,使用 arthas 生成火焰图。难度系数:1-10。
-
学习和汲取经典书籍里的智慧。 比如 计算机专业及软件开发推荐书籍 。难度系数:1-6。
3. 开发功能,简单的事情重复做。难度系数:1-5。
4. 写技术博客。难度系数:2-5。
5. 开发自动化工具,提升工作效率。比如 订单导出的预发和线上的自动化对比工具 。难度系数:3-4。
6. 学习和应用不同的语言和编程模型。 比如 混合使用ForkJoin+Actor+Future实现一千万个不重复整数的排序(Scala示例) - 琴水玉 - 博客园。难度系数:3-5。
7. 学习和观察资深工程师、技术专家、架构师在思考和关注什么问题、如何思考问题。难度系数:3-6。
8. 业余做点有意思的事情。比如 批量下载网站图片的Python实用小工具 - 琴水玉 - 博客园, 连点成图:享受创建图形的乐趣 - 琴水玉 - 博客园、搭建个人网站。难度系数:3-6。
- 解决线上疑难杂症。可以帮助你获得稀缺经验。稀缺性是职业竞争力的重要来源之一。比如 CPU 飙高、内存崩溃、超时阻塞、订单导出应对大流量订单导出时的设计问题 - 琴水玉 - 博客园 等。难度系数:4-6。
10. 踩过的坑,及时记录和总结经验。比如 我的四年踩坑史以及思考 、故障常见原因归类分析及预防和应对措施 。难度系数:2-7。
-
实用算法、性能、可用性、通用可扩展、大流量、数据迁移,有难度的新鲜的技术挑战。比如使用 jsPlumb 绘制拓扑图 -- 异步加载与绘制的实现,有赞订单导出的配置化实践 - 琴水玉 - 博客园,webshell cdc 检测流程性能优化实战及经验教训 。难度系数:4-7。
-
将高效完成简单基本的事情,提炼成方法论,从而能够指导别人去做。比如 建立开发方法:我如何完成一个功能需求 - 琴水玉 - 博客园,琴姑娘:理解和驾驭软件开发的那些事儿 。难度系数:5-7。
-
培养判断力和设计能力。比如给你一个模块,你如何设计和实现它?需要考虑哪些关键需求?需要考量哪些系统质量属性?如何在冲突的利益中达到平衡?有哪些技术重难点?如何攻克这些技术重难点?难度系数:6-7。
-
探本溯源,系统思考。比如 软件设计要素初探 - 琴水玉 - 博客园、互联网应用服务端的常用技术思想与机制纲要 - 琴水玉 - 博客园。难度系数:7-8。
-
关注系统架构和项目全局。比如 琴姑娘:从系统整体观思考系统构建 ,琴姑娘:《架构师修炼之道》读书笔记。难度系数:8-9。
-
深入原理,广泛阅读源码、构建软件大厦和殿堂,融会贯通,登顶之旅。难度系数:8-10。
以上是从我个人的职业生涯中提炼出来的。几乎也是自己的技术成长史。目前我处于7-8的层级。
这些是真正能够提升程序员的能力到下一个层次的事情。当然,需要长时间积累。
而 CRUD ,就算做一万遍,也就是个随时可能被取代的熟练工。不过,换个角度看,如果能把 CRUD 做到既深且广,那也是很厉害的。