本文续上一篇简单 谈谈编程语言(一),继续谈谈编程语言。在简单了解编程语言的跳跃性历史后,接下来应该怎么去看待编程语言?以及怎么去解释很多人对编程语言的一些评价?然后,我们进一步谈谈编程语言。
从历史回到现实中,其实我们不难看出:随着时间的推移,编程语言的逐步完善,语义化和思维模式已经给很接近我们平时的思考问题的模式。然而,随着我们需求的增大,越来越多领域开始使用编程语言去优化、简化工作。
起初,会有很多大神用他们超强的代码能力,自己手动敲代码去完成各种工作。但是随着时间的推移,在做不同的工作的时候,总会有一些操作很类似,最简单的方式就是将之前的代码复制过来,做相应的修改以适当当前的工作需求。相信这样的操作,很多人都会用到,也是多做项目多写代码的优势所在,相同的问题能够通过之前已经解决的方式做简单的修改从而应用到新的项目中,大大提高工作效率。但是,在做这样的操作的时候,你是否想过对这些代码进行优化、抽象,尤其是经常要用到的代码段,让这段代码独立成一个函数,并且做好适应大多数的情况,当用到这个函数的时候,直接调用而不需要对函数内部做任何修改。这其实就是我们常说的API/接口。
而当我们从某一个操作逐步延伸到一类操作的时候,我们就可以将这些接口函数归入一个专门的文件中,形成一个代码库,专门供我们去调用。这样我们在面对这一类操作的时候就不需要,重复去写了。尤其是一些配置类的函数,每次配置都会很折磨人,有了这样一个库,我们直接去调用库中的API函数,简化了我们很多工作,不用再重复地去编写、修改。而如果我们将库继续拓展延伸到某一类工作的时候,我们就可以考虑在已经完成的这类工作代码中,抽离出一些共性操作,形成一个半成品。我们只需要在这个半成品中,针对我们当前项目做一些逻辑和数据处理,修改一些配置,按照我们预设的一些标准去命名文件、类名、函数名,这个半成品就会自动根据本身的逻辑运作起来,去调用这些文件和函数。为了提高我们项目完成的速度,这个半成品还需要一些必要的API供我们去调用。因此,我们只需要根据项目需求,更加专注地去做应用逻辑的内容。讲到这里,相信大家也猜到,这个半成品是什么了,没错,就是我们常说的框架。
当然,上面提到的API、库、框架,很多都是基于现实应用中抽离出来的共性代码,因此,会有一个不断完善和优化的过程。越是成熟、优秀的代码,用户群就越大,优化的就越好。库/框架的层出不穷,原因很多,但是一个很重要的原因,找到了更优的方案。所以,当我们真正去理解这个框架的时候,我们自然在看待其他框架,我们就更加看重他们的优势在哪里,能不能提高我们的开发效率,能不能让我们的程序性能更好,这就需要我们自己去判断。当然,很多时候,从流行的程度来看,一般来说,比较流行的框架都会有其过人之处。然而,我们不应该盲目地去跟风,选择一个你喜欢的,习惯的相对用熟悉,相对深入地去理解这个框架为什么这样写,为什么有了这个框架还会有新的框架出现。当理解了这两个问题的时候,即使框架再层出不穷,你也能做到心如止水了。
当框架被大量运用,进一步拓展到某个领域的时候,代码量会很大,就会开始不满意当前这种语言的种种限制,以及不适应的代码方式和习惯,更深层地来说,对性能的优化。然后就会有人希望从更加底层的方式去改变这种情况,根据这个领域的需求去做优化,根据这个领域的人的代码习惯,建立属于这个领域的代码机制,去除不必要的语言库,建立更完备的适应当前领域的编程语言。这样的编程语言有自己的解释/编译机制,从性能上来说会有更大的优化,或者换种说法,这门编程语言是专门用于xxx领域的,又或者说,这种语言更擅长做xxx方面的。毕竟,该语言的诞生就是为了更方便这个领域的编程者,自然会有这样的说法出现。
所以,我们经常会看到做某一方面开发的人会习惯使用某一门语言。但是,是不是这个领域一门语言就够了呢?当然不是,一门编程语言往往只代表着某个团体的解决方案,他们将自己的方案,同时将解决问题的思路、思想,写成一门语言。但是解决问题的方案肯定不止一种,当在某个应用场景更占优势并且需要更大的时候,为了竞争或者更加方便地工作,很有可能便会诞生一门新的语言。但是真正做的出色并且能在大量编程语言中成为佼佼者并不容易,但是能流行起来肯定是有优势的。比如Python拥有大量的人工智能方面的第三方库,借着人工智能的火热,火了起来。又如PHP借着简单易用,轻量级,得到大量个人小站长和中小型企业的拥护,比较终于可以抛下笨重的JavaEE。当然,JavaEE和PHP之间还是非常友好的,前者擅长大型、企业级网站,PHP则中小型网站,几乎是互不干涉,起码目前是这样。
而编程语言的诞生也不纯粹是我谈到的那些方式,也可能有商业竞争情况,比如JavaScript的诞生;也可能是为了替代某种语言,比如Kotlin,等等。但是无论是什么原因归结起来,其实就只有一点——需求。我认为,需求是语言诞生的根本动力。上一篇文章中提到的简单易用,也是一种需求,只是我们谈的角度不一样。
谈到这里,我相信大家对编程语言有了新的认识,对待层出不穷的编程语言,也许能更冷静地对待了。无论编程语言怎么变化,在绝大多数情况下,都会对使用者的习惯做出让步。比如最常见到的条件、分支、循环语句,变量定义,数据结构,代码块,他们可能在编写时候会有差别,但是都是类似的,个别的改动,是语言创造者认为的优化方案,但是,优与不优每个人看法可能会不一样。比如,Python的代码块抛弃了大括号采用了缩进的方式,go语言将变量类型放到变量名后面,PHP用$作为变量名前缀来区分保留字,javascript用var来声明支持的所有类型变量。从更深层次去看,你也许就会看到编程语言的解决问题的方案,看到对内存的调度等等,到了这个层次,往往就能感觉到语言创造者强大的思维能力,以及对这门语言灌输的思想,更甚者有其灵魂精髓所在。当然,不一定要达到这样的层面,看自己的需求,以作判断。
我们不评价这些的好与坏,我们只需要去看待共性,了解了共性,在接触一门新语言或者新框架、新的代码库的时候,我们就能很快上手,并且花更多的精力去学习不同的方面,了解其优势所在。当我们了解这一点后,我们就会顿悟:
学好一门语言,学懂一个框架/代码库,有了自己的编程习惯和解决问题的编程思维后,就足以应对不断更新的技术方案,然后做出自己的选择。跟风,不是最好的归宿,要有自己的判断。
后记:
又是长长的一篇,不知道能否表达得清楚,还有一些想表达的,但是放进去,这一篇又太长了,可能略微有点乱,期待下一篇吧。第三篇已更新,简单谈谈编程语言(三)
不定时更新文章,尽可能坚持下去。