简单谈谈编程语言(三)
本文续上一篇简单谈谈编程语言(二),最后再谈谈编程语言。这篇很有可能是最后一篇了,也是时候整理一下我之前的一些文档了,这篇谈谈对编程语言专精的必要性,或者选择一精多涉猎的战术,谈谈一些学习心路,而,共性,就是我这篇文章表达的核心。第一篇文章谈历史,第二篇文章谈历程,都是第三篇的基础,之后就靠大家自己去实际学习中感受文章中所表达的了。
经过前两篇对编程语言不同层面的描述,其实大概对编程语言学习的畏惧心理可能已经没有那么大了,也可能也因为编程经验相对少感受不深,也可能因为编程经验丰富而觉得我的文章稚嫩,也可能会出现飘飘然觉得学好一门编程语言没有那么难,等等。当然,我的立场可能更多地代表着我现阶段的看法,并且以相对容易理解的方式去讲述,至于适不适合比较高层次的编程者去看,需要时间去说明问题,毕竟我现在水平有限。
也许,看完前两章,就开始跃跃欲试去尝试接触一门新的语言,然后还是碰了一脸灰,即使有了前两篇文章的理解,还是没能够很快地去适应、学习一门新语言。当然,这很正常,毕竟每个人的学习能力(这个需要去磨练)、现有水平不同,学习和适应的时间会不一样。前两篇文章所表达的思维,是需要你一点点在实践中去感受,才会真正懂得的,文章的目的是在你学习的路上有这么一个心眼,去关注编程语言的共性,而不单纯去学。
寻找共性,我个人觉得是,快速转型从事其他方面工作的最快捷方式。寻找共性,技术迁移,思维迁移,思维适应,接着融入新的环境。其实,我们也不难发现,当我们去接触新的东西的时候,发现了自己熟悉的,会倍感亲切。就好像背井离乡到外面工作,一开始的恐惧,突然碰到老乡一样,然后有了老乡的帮助,适应新的环境,接触新的人,也就相对容易了。当我们经常出差到外地,习以为常的时候,我们就慢慢有了一种适应环境的能力,这便是经验值。这时候的我们就不需要有老乡带入门了,我们自己能找到路,知道怎么找地方注吃、玩。
编程语言也一样,我们一开始从自己相对熟悉的语言,去学习新的语言也是这样。但是,我们总能遇到“老乡”,比如if…else…,for,while,switch等等,这些会让我们倍感亲切,它们能帮助我们写出一些简单的程序,让我们相对容易适应新的语言。然后,当我们渐渐熟悉的时候,慢慢地发现共性越来越多,即使是面向过程和面向对象这两大常见阵型,再深层次一点就是抽象,再抽象,只是解决问题的思路不一样。接着,会发现新的语言有一些很好用的API/库函数,用着很舒服。当我们再接触第三、第四种……语言的时候,我们就开始一上来就看看属于哪种类型的语言,之前有没有接触过类似的,看看变量声明、数据结构、常见的条件循环语句,然后打印个hello world什么的,然后做点简单的小应用,比如常见的计算器之类的,接着开始根据需求去做应用开发,边做边学,开发周期明显之前短了。原因就是,我们已经知道了共性,然后形成了自己的学习思路,也就是有较强的适应能力/较高的经验值,即使我们在开发中没有很好地利用好当前语言的API/思路,写的不是最优代码,但却能做开发了。这个时候,我们可以很骄傲地举出很多语言的共性,甚至包括通用的数据结构、编程思想、应用开发思路等等,更高层次的共性。
富有成就感之余,却开始发现自己写了不少东西,却没能拿出很优秀的作品出来,因为自己对一门语言的了解过于浅层。除此之外,当接触大项目的时候,就发现自己的代码出现了各种奇奇怪怪的问题,想不明白,自己对底层了解不清楚,同样的功能,别人的代码却性能很好,而自己的一塌糊涂,对内存分配、一些好用的API、一些数据结构的巧妙用法等等,还停留在浅层。回头想想,自己花了过多的时候,不停地跟潮流、跟项目、跟着内心的成就感,却忽视最基本的基础知识。然后自己便开始选择一门适合自己、用着舒服的编程语言,去深入学习,学习高级应用,深入去了解编程思想,理解底层内存分配,任务调度,操作系统等等,开始从应用层到底层,目的是开发出优秀的应用,而不是可用的应用。这时候,对代码的优化,有了自己的洁癖,有自己的代码风格,开始谦虚,心态开始平稳。渐渐地,自己能构建出优秀的代码架构,能和团队做出稳定的第三方库,开发框架。这时候的自己,对编程语言已经没有很明显的忧虑,开始理解编程语言只是工具。面对一个新的项目,开始有自己的判断,选择哪一门编程语言更合适、开发周期更短,哪个框架更好,不再人云亦云,不再跟着潮流,跟风学习某某流行语言、框架。因为这时候的自己,有了扎实的基础知识,看破了编程语言、框架的本质,甚至能自己和团队一起开发出新的编程语言和框架,学习编程语言已经轻车熟路,迅速上手还能写出不错的代码。
随着经验的提升,对底层的理解越来越清晰,渐渐开始不做功能的实现,更关注整个代码的架构,可以严谨考虑整个应用的运行周期,前期的代码编写,中期的功能测试、代码,后期的应用维护。慢慢地,自己也能比较清晰地判断每个人的能力和潜力,将他们分配到合适的位置,放心地将一线的代码架构、编写、测试、维护工作,交给他们,自己更多地做可行性的判断、规划等等,正式退出第一线代码工作,离开了自己喜欢的代码编写工作,步入管理层。这时候的自己,已经可以对很多知识做出更成熟理论的描述,开始偏理论层面的工作的。
后记:
已经超过两千字,上面描述的内容,只代表着我目前的一些见解和看法,如果有错欢迎指出。以上都是基于我目前的水平和见解,以自己的看法编写的,接下来,写一篇续编,记录一下自己的学习心路。
不定时更新文章,尽可能坚持下去,转载请注明出处。