本文讨论的的是编程语言,但并不是具体的某门编程语言的学习,仅仅代表作者的个是观点。作者提出的观点并没有任何标题党的意思,而是观点就是这样的,在大学编程语言不是用来写代码的。作者常用的语言是java,所以在本文中会用java举一些例子进行论述,并且会分享自己在学习过程中走过得的一些弯路和经验。
首先来看看大学计算机专业教了什么?
我认为我们的课程中除去那些为了素质教育而设置的大家广泛认可的水课外,基本可以分成三类,一类属于基础科学范畴,如高等数学,大学物理等;一类属于计算机理论,如数据库原理,计算机网络等;另一类是最渺小的编程语言。由于本文讨论的是编程语言,因此有必要说一下为什么编程语言是最渺小的,首先是因为学习编程语言太简单,甚至不能把其当做知识,其次我们的的确确忽视了编程语言的内在作用,而仅仅停留在使用层面。
其次要认清编程语言在计算机相关专业的学习过程中扮演的是什么角色。
回顾一下大学的课程,大学将会教给我们三门语言C,C++,java。为什么大学最先学习C语言呢?因为C语言语法足够简单,而且是面向过程的语言,是可以用最短的时间上手的,记得作者高中时代启蒙老师仅仅用了两三节课而已。学生学完C语言才可以把之后学到的算法转化为代码了。为什么之后学C++而不是更简单的java,因为大家之前已经学过C语言了,而C++是完全兼容C的,这样对于大部分同学来说,接触的就不再是一门全新的东西了,顺便还可以接触一下面向对象的思想,知道封装继承和多态的概念。然后为什么是java呢?因为大学生将来也是要吃饭的,绝大多数没有自主学习能力的大学生依靠C和C++是就不了业的,因为太难了,所以只能选择简单上手、运用广、需求量大的java了,毫无疑问java教的当然是增删改查的java web了,为什么?因为所有人都学的会,学好了有饭碗,学完java就是大三了,如果不考虑考研的话,离就业也就越来越近了。从C到C++再到java,我们的思想里都认为这些编程语言是一门门独立的课程,可是作为课程,课堂上又并没有深入讲解,试想一下,把大学教的这些语言教给一个初中生,能不能学会?我想是能的,因为编程语言不是知识,学习编程语言只不过是阅读某样工具的说明书而已。因此在大学的学习中,对于编程语言的学习,绝对不能停留在为了考试而已。然而很多人就是这样做的,仅仅是为了考试而已,再好一点则是讲编程语言当做一门工具,用来写代码写算法题。本文的观点是编程语言在大学阶段不是用来写代码,它是帮助我们学习的一门工具。这是本人的一个观点,编程语言是一种学习的工具,相信这个观点读者从来没有听过,也很奇怪我们学习了几个学期的东西不是知识居然只是学习的工具,接下来我会以java为例讲为什么编程语言是学习工具而不是知识。
大学计算机专业最核心的课程是什么?毫无疑问是数据结构与算法,数据库原理,计算机网络,计算机组成原理,操作系统等,这些课程都偏向于理论。再列举一下java的技术栈里有那些东西,java的集合,jdbc,servlet,jvm。学过java的可以联系一下这些内容与我上面讲的东西有什么联系。java的集合中有链表,队列,栈,哈希的封装,jdbc会帮助你使用数据库,servlet是java web的基础,jvm会涉及到内存的管理。他们似乎真的有联系。当你学习完java的集合、jdbc、servlet、jvm还想深入学习,你会做什么。假如你已经熟练使用数据库了,再学数据库原理和从来不知道数据库是什么再去学数据库原理的感觉有什么差别呢?
作者曾经在大一浏览过数据库原理和计算机组成原理方面的书籍,之所以说浏览是因为那个时候真的没有学会,那个时候的感觉是,这都是什么玩意儿,学了有什么用,好难呀,因为当时只是知道这些是计算机中十分重要的基础知识而且大一课余时间实在太多了,水课实在太多了。但是随着后来接触了java(本文没有任何为java打广告的嫌疑),玩过数据库,增删改查熟练以后,有时候在想,这些东西是不是甚至不用人都可以写的出来(事实证明这些代码还真的是可以机器自动生成,真的不需要人去写)那么数据库原理的意义在哪里呢?大学为什么还要学习数据库呢?可是在后面的项目中,却遇到了许多值得思考的场景,如何提高查询的效率,这样建表是否合适......遇到的问题都在告诉我:数据库原理很重要,为什么很重要 不再是因为考试要考,而是我的的确确要用这些理论去解决我遇到的问题,我需要知道原理。作者接触过学校的一个项目,并为socket部分贡献了部分代码,最早接触socket的时候是大一上学期,那个时候在折腾linux平台下的C语言程序设计,接触了linux提供的socket接口,自己也产生了不少疑问,数据是怎么从一台电脑发送到另一台电脑的,数据传输过程怎么保证不会出错。寒假自己抽空在看计算机网络的视频,似乎一点点的明白了整个过程。还有很多,编程语言里的多线程怎么实现的,jvm怎么管理内存的,这些问题都在告诉自己,那些理论课程很重要,不是因为考试,而是真的很重要。同时大学的课,大家都懂得,所以日后接触这些课程,千万不要就听了课堂里讲的那些。我举这些例子的目的其实想告诉读者的是,计算机基础理论最后都会落地在实际的应用中,而应用的实现靠的是代码,写代码就离不开编程语言,我们接触这些理论最简单的方式就是调用编程语言已经为我们封装好的各种接口,那么编程语言势必拥有对基础原理的封装,看到这里我相信读者明白了编程语言在大学阶段并不仅仅用来写代码而已。一门优秀的语言可以流行起来,最重要的原因之一是他足够的简单,简单则说明他暴露的底层很少,比如我们看java的持久层框架,甚至连sql语句都不用写就可以操作数据库。
与其将编程语言当做写代码的工具,不如将他当做一个可以看到计算机底层原貌的窗户,当你不断使用它的时候,你就已经接触到了那些底层的应用了,如果可以保持好奇,去琢磨为什么,不知不觉编程语言将把你带入更广阔的世界。
遗憾的是在大学的课堂里,实在是花费太多的时间编程语言的语法部分,好比C++,还有很多人甚至连STL是什么都不知道,假如当初可以带我们去用一用那些库,我相信很多人会对编程语言有不同的认识,然后产生更大的兴趣。