在我们的编码过程中,处于经常性变动的,就是术。与之相反的是,基本处于一种变化很小的状态或几乎不会变化的,则是道。
对于一个程序员来说,理解编码的道就是至关重要的。
举例说来,编程语言从出现以来,可以基本归为三大类:面向过程的语言,面向对象的语言以及面向函数的语言。无论编程语言如何发展,新的语言层出不穷,始终没有脱离这三大类。
道就是这样,它的变化非常小,甚至不会变化。
本周,继续编码之道,这是第五篇,本系列其它文章为:
理解道与术
术是易变的,道是难以变化的
我们使用的各种编程语言也好,流行的框架也好,一个明显的特点就是:它们都非常容易改变。
今年流行的东西,可能明年就不再流行了,被另一种新的语言或框架给取代了。这几乎是一种必然。
术是易变性,具体表现在:
功能及特性易于改变
包括语言或框架也好,不可能存在一种不会改变的的版本,基本隔多久就会更新一个版本,这就是表现为术的功能及特性是非常易于改变的。
比如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
{{m.name}}
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/103773.html