编程江湖中的道与术

Posted on Fri 29 November 2024 in Journal

Abstract 编程江湖中的道与术
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2024-11-29
License CC-BY-NC-ND 4.0

在软件开发的江湖中,C/C++ 和 Java 就像少林与武当,一个偏向“硬功夫”,刀枪棍棒样样能打;另一个更讲究“以柔克刚”,推崇灵活多变的内功。而 Python、Go 和 Rust 则是近年崛起的少年高手,一个擅长速成、一个拥抱云原生,还有一个以内存安全闻名,都在争夺编程江湖的“武林盟主”之位。

尤其是在企业开发的武林中,Java 堪称“中原武林盟主”,它的招式(术)浩如烟海,从简单的“打狗棒法”(工具类库)到深奥的“九阴真经”(分布式架构)。门下弟子修炼轮子(第三方库)无数。然而,纵然 Java 的术法浩如烟海,如果只沉迷于术,终究如蜻蜓点水,难入武道真谛。只练招式不修内功,就像拿着绝世神兵却没有力气挥动,最终难逃江湖纷争的淘汰法则。

正如古人所言:“术乃器,道为心。器可换,道难变。”

术是什么?术是刀枪剑戟的武器。

术是工具、框架、库、配置文件。你可以把术看成是你手中的菜刀,某个问题来了,直接拿出来用,快速解决,效率拉满。

比如:

  • Spring:一个开箱即用的武林秘籍,简直是厨师的多功能锅,煎炒烹炸样样行。
  • MyBatis:数据库操作的助力,能让你用 SQL 潇洒如风,甚至可以用 XML 来写代码。
  • Spring Security:防盗、防抢、防 SQL 注入三件套。
  • WebFlux:响应式编程的“闪电五连鞭”,性能杠杠的。

术学起来很爽,用起来很炫,解决问题很快,但如果你只会用术,可能就像一个拿着高级武器但内功薄弱的武者,风吹草动就可能翻车。

道是什么?道是你的内功心法。

道是一种理念、一种本质,超脱于术之上。它是程序员的大局观,是问题背后的普适法则。懂得了道,你就能从根本上理解术为什么存在、怎么优化甚至怎么重写它。

比如:

  • 依赖注入和控制反转(IoC) 是道,理解了它,你就能明白 Spring 为何如此设计。
  • ORM 的本质 是道,懂了它,你就知道 JPA 和 MyBatis 的优劣。
  • CAP 理论 是道,掌握了它,分布式系统中的“妥协艺术”尽在掌握。
  • 响应式编程的多路复用原理 是道,搞懂了它,WebFlux 也不过是一个工具而已。

道是术背后的哲学,掌握了道,即使换个框架,你依然游刃有余。

举几个“术与道”的栗子 🍂

  1. Spring 是术,IoC 是道

Spring 就像一家饭馆,你点菜,厨师按菜单(配置)做好端上来。而 IoC 是“为什么饭馆能这么高效”的管理哲学,厨师只负责炒菜,采购和打扫分工明确,各自高效。

  1. JPA 是术,ORM 是道

JPA 提供了一种操作数据库的便利方式,而 ORM 的道告诉你,为什么我们需要对象和关系之间的映射,手写 SQL 和自动生成的代价如何权衡。

  1. REST 是术,资源导向是道

REST API 是一种具体实现,资源导向告诉你,应该把一个系统的核心抽象成什么,为什么资源更容易扩展和维护。

  1. Hystrix 和 Sentinel是术, 而分流、限流、降级的思想是道

Hystrix 和 Sentinel 这些断路器是术,而分布式系统中“保全核心、牺牲次要”的哲学才是道。

为什么道比术重要?

术可以学,但道需要悟。术是流水线上的操作步骤,谁都可以学会。而道则是深度思考的结果,它需要你站在更高的层次看问题。

  • 学术的人,可能成为熟练工,但无法应对新问题;
  • 学道的人,能够快速掌握新的术,甚至创造新的术。

学术的人容易被工具绑架:A 框架好,B 框架烂。学道的人只会说:“看需求,这个场景用 A,那场景用 B。”

如何修炼道与术?

  1. 先练术,后悟道:术可以快速解决问题,带来成就感;悟道则需要时间积累。
  2. 多问“为什么”:术是结果,问清它背后的道,才能学会举一反三。
  3. 阅读经典:不管是《算法导论》还是《设计模式》,这些经典就是道的总结。
  4. 实践加思考:项目经验是悟道的最好土壤,每踩一个坑,悟道一级。

写在最后:道与术的辩证法

术是表,道是里;术是径,道是路;术是工具,道是方向。学术之人,是码农;悟道之人,是工程师;把道与术融合的人,则是大师。

程序员的成长之路,就是从拿着术的“猿人”,一步步走向参透道的大师。希望程序猿们能以术入道,在编程的江湖中练就自己的“九阳神功”!

🧑‍💻 大道至简,祝你早日得“道”!


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。