今天看了一篇文章说的是编程知识体系的分类,大致说的是我们应该投资什么?只说技术类的,工作中技术类的知识可以分为大致下面这五种。
原理性知识。程序之所以能运行的基本原理和编程设计理念。万变不离其宗。
通用性的常用使用知识。比如 linux 命令。只要 linux 不倒,这些知识一直有效,除非有更好的工具更换。
不太通用的易变性使用知识。比如某个库、框架、中间件的配置和编程。由于场景不断变化、技术更替,这类的使用知识很容易失效,甚至可能面临大面积更替。然而,很多程序员(包括我在内)在大部分时间都是跟这些打交道。
稀缺性的经验性知识。比如 CPU 飙高、内存满、IO 抖动或尖刺、高并发的解决,这类知识是不过时且比较稀缺的知识和经验。
稀缺性的判断力和设计能力。比如一个系统要成功,要具备哪些质量属性,如何去达成这些质量属性,如何在这些质量属性中作出取舍。如何解决棘手的性能问题、如何保证系统的容错能力、稳定性和可维护性,如何增强可扩展能力和通用能力,如何做到高可用?这类属于判断力和设计能力。
我们技术上应该投资什么?工具类的不要贪多,稀缺性的经验性知识、稀缺性的判断力和设计能力需要在项目中和工作中不断的积累。原理性的知识多积累多和应用关联在一起。
比如说:怎么保证高并发下的系统可用性?你可能知道:发布策略、容错设计(消除单点)、服务分级,超时重试、逻辑和物理隔离,租户隔离、熔断和限流、故障演练、熔断限流、全链路追踪 全链路优化、自动扩容,水平增加节点、压测确保目标实现、http请求重试+幂等、mq消息防丢、Redis 集群、监控报警--dynamic tp。
怎么设计?怎么落地?原理是什么?都有实战过?实战过有哪些坑?是怎么排查定位?以及解决的?这些事情确实需要自己私下多花时间解决,任何一个问题想结合自己的业务优雅的解决都是一件有意义的事情。未来的程序员只做CRUD的事情,肯定会被淘汰,提升系统设计、分析、架构、以及实战能力才是王道。
精进自省:静下来思考和学习,被应用的知识才是力量。