您的位置:  首页 > 技术杂谈 > 正文

编码之道(五):变化的术,及永恒的道

2021-08-24 11:00 https://my.oschina.net/lingenliu/blog/5200473 御剑_lingen 次阅读 条评论

在我们的编码过程中,处于经常性变动的,就是术。与之相反的是,基本处于一种变化很小的状态或几乎不会变化的,则是道。

对于一个程序员来说,理解编码的道就是至关重要的。

举例说来,编程语言从出现以来,可以基本归为三大类:面向过程的语言,面向对象的语言以及面向函数的语言。无论编程语言如何发展,新的语言层出不穷,始终没有脱离这三大类。

道就是这样,它的变化非常小,甚至不会变化。

本周,继续编码之道,这是第五篇,本系列其它文章为:

  1. 编码之道(一):程序员的"圣经"
  2. 编码之道(二):软件的价值
  3. 编码之道(三):编码的困境,失衡的价值
  4. 编码之道(四):编码有术,术中有道

理解道与术

术是易变的,道是难以变化的

我们使用的各种编程语言也好,流行的框架也好,一个明显的特点就是:它们都非常容易改变。

今年流行的东西,可能明年就不再流行了,被另一种新的语言或框架给取代了。这几乎是一种必然。

术是易变性,具体表现在:

功能及特性易于改变

包括语言或框架也好,不可能存在一种不会改变的的版本,基本隔多久就会更新一个版本,这就是表现为术的功能及特性是非常易于改变的。

比如Java 8出了很多函数式风格的特性,lambda,流等,这些特性深受喜好,但它们是新的功能特性。

术的东西非常容易被取代

还记得前些年非常流行的JQuery么,今天在前端编码中,已经比较少见到它的身影了。再比如iOS的OC编程语言,大家都清楚它被新的Swift语言替换掉了。

这就是术,无论是语言还是框架,几乎没有常青树,被取代或替换只是时间的问题。

就算是一直常青的Java语言,有谁能保证它不会有一天被取代?

没有人能保证,因为术是易变的。

而与之相对应的则是,道几乎是难以变化的,而且很难被取代。

比如设计模式的二十多种模式,它几乎是永恒存在的,无论你使用的是什么编程语言,这个语言是十年前,今天或是十年后,设计模式基本永远存在并且不会过时。

这便是道,几乎所有的道都具有这样的特性,比如面向对象的三大基本特性,它几乎不会被取代。

再比如重构,无论何时,编程发展到何种地步,重构都是编程的应用之道,你都得去不断的重构。

术是具体的,而道是抽象的

我们编码的过程,几乎完全是在使用术来编写我们的代码。我们使用各种各样的语言,技术框架,来实现我们的目标。这实现我们的目标这个过程中,与我们直接打交道的是术,它是具体的东西。

比如我们使用JPA来做数据存储,使用Swift来编写新的iOS客户端,或是使用TypeScript做前端编程语言,这一切的一切,都是具体的东西。

而在这些背后,当我们说设计模式的时候,它则非常抽象,类似的还有重构,一些架构风格或模式,它们并不是指的某种特定的技术或语言,而是一种思想或方法论的抽象。

这意味着,道更具普遍性与适应性。

测试驱动开发(TDD)没有限定限定任何语言对吧,无论你使用的是何种语言,它们几乎都可以使用这个理念。

术是可替换的,而道则不可替换

无论你从事的是什么编码,几乎没有任何一种语言或框架是不可替换的对吧。

在后端,就算最流行的Java,也不是不可替换的,比如我更喜欢用Kotlin。

在前端 ,React或Vue,没有说哪个是非用不可的。

术基本具有类似的特性,它是可轻易替换的,或者更本质的谈论它,术只是工具。工具这种东西,意味着我今天可以用这个,明天则可以用那个,并不需要被限定或束缚住。

而道则不同,它无法替换,并且是不可或缺的。

当然你可以说你不用设计模式,不去重构你的代码,不用TDD的模式来编码,不遵守面向对象的五大基本原则 ,不选择一些架构风格或模式。

确实可以这样做,但坦率的说,这样编码的价值何在,这样能写好的代码么?

所以,用更确切的说是:

想要编写出好的代码,则道是不可替换的东西,而术则是可轻易替换的

术不是决定性的,道才是决定性的

所以,我们可以很容易的思考下,对我们写的代码的好坏,具有决定性的因素是哪些?

是你选择的技术的优劣?还是熟悉程度?抑或是更深层次的东西?

想像下,一个程序员因为使用了很多年的React,所以它用React能写好代码,如果让他去学习新的Vue,他就没有办法写好代码了?

这种可能性有多大?

或是更有可能的情况是:一个程序员,能用熟悉的React写好代码,同样也能快速的学习Vue,并且能写出同样好的代码?

哪一种更具可能性?

当然是后一种,没有任何一个优秀的程序员的优秀是因为某种特定的语言或框架,虽然确实有些技术或框架的程序员的深入有较高的要求,但大部分应用级开发语言或框架则远未到这种程度。

如果一个程序员能做到会使用重构,测试驱动开发,使用符合需要的设计模式,使用恰当的架构风格,并致力于编写简洁优雅的代码,很显然这样才更容易产生好的代码。

这些才是决定性的吧,一个程序员能做到这些,显而易见是优秀的程序员,那我们可以信任他,无论是使用何种语言,选用何种技术框架,都同样能写出好代码才对。

做优秀的程序员

所以,决定一个程序员的编写代码的好坏的关键就在于,一个程序员是否能理解并开始去学习编码的道的东西。当你能对编码之道有更好的理解,很自然的,你会去尝试

  • 更想编写出简洁优雅的代码,并愿意不断尝试
  • 会接受并使用TDD,因为你知道它能保证你的代码的可维护性
  • 会经常性的重构你的代码
  • 会将设计模式灵活的与业务需要结合起来
  • 会思考哪一种架构风格或模式适合你当前的项目
  • 不拒绝任何一种新技术或新框架,也会很容易的学会它们,因为术只是道的具体化与延伸而已。

这样的程序员,很显然才是我们程序员该有的目标与追求。

那如何才能成为一个这样的程序呢,这并不依赖于天分,我觉得更多的依赖于你的观念,就是你是否意识到了,原来有更重要的东西需要你去刻意的学习与修练。而当你这样做时,很显然,你就会变成一个能写出更好的代码的程序员。

下一篇,编码之道(六):程序员的修"道"之路


关注【微言码道】公众号或访问【微言码道】官网 https://taoofcode.cc : 用我们微小的力量传播编码之道

访问【myddd-全栈式领域驱动】官网: https://myddd.org

  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接