普通本二生渴望做出的改变 :编程语言从 “学一而通十” 到 “学十而精一”

前言

直接切题,在我看来,大多数人学习语言都会经历这两个阶段。
其一,从学一而通十,也就是从第一门入门语言开始不断学习新语言的过程,
其二,学十而精一,也就是在日常学习实验中,或被动或主动的接触了不少的语言,虽然技多不压身,但是奈何精力有限,在对于未来的规划下,我们开始选择自己感兴趣一个领域,深耕其中的一门语言。

从大一接触编程语言到如今大二下,将近两年的时间里我前前后后学习的编程语言有python,c,javascript,php,java,这些语言都是按照接触时间排序的,学习这五门语言我不敢说有多深入的研究,毕竟接触时间不够长,和正真的程序员从业者一定是没法比的,不过好在我学生的身份,可以从学生这个角度切入,总结一下自己学习语言的一些的经验和误区,希望对一些正处在迷茫期的计算机大学生有所帮助。

学一而通十

第一阶段,从学一而通十,当你第一次接触编程语言,或许是家里有互联网的从业者,可以从小就学习到一些语言,但大多数人应该都和我一样到了大学并且选择了互联网的专业,从大一开始在学校的课程安排下才学习了自己的第一门编程语言,绝大多数是c,java,少数有python,我第一门语言就是python

在这个阶段下,当你第一次接触这个领域,无非是三种情绪

对编程一见钟情,觉得我天生就是干这行的,钟爱独立思考和钻研问题。
对编程深恶痛绝,讨厌码代码的感觉,一看到密密麻麻的代码就头大,在一些普通的二本三本(包括我的学校)讨厌代码的同学大有人在。
最后,就是对代码即不讨厌也不喜欢,就是不感冒,跟着学校的学习进度完成学校的任务,慢慢的过日子。

我就属于最后一种,绝大多数人都不是天生,或者说在大学之前就喜欢编程喜欢计算机的(这里的喜欢计算机不包括打游戏),在大学之前我甚至都没怎么碰过电脑,碰了也是在4339打洛克王国(这是在初中,高中几乎没玩过电脑),就是我这样一个平凡的人,怎么可能就对编程一见钟情,我说出来就问你信不?

一开始,我对编程真的不感冒,即使我学的是号称最容易上手的python,对于其中的知识完全是跟着老师走,说什么就是什么,比如元组值不可变,不可变就不可变呗,那我用列表,不考虑元组存在的意义(保护数据,充当dict的key,较list遍历速度更快,自动打包解包的特性等等),人的本能就是用自己熟悉的,我也不例外

这样子的情况一直持续了小半个学期,我感觉自己什么都没学到,学校python课程的进度已经到了文件读写,界面图形化,我还停留在缩进报错的水平(python编程作业喜欢到网上搜,复制黏贴,可是python有缩进,所以每次复制别人的代码都一堆报错)。

第一次编程有玩游戏的感觉,那是在大一的寒假,实在是在家闲得无聊,刚刚退出steam,望着电脑里的idle心里灵光一闪,反正python都学了这么久了,应该能做个什么东西出来了吧,那就做个游戏呗,可是这半年还真感觉没学到啥,图形界面用的也不行,那就做一个交互式的文字游戏吧,就像课上讲的猜数字游戏demo一样,在此基础上扩充成一个生存游戏,嗯,就叫它僵尸世界大战吧(果然,男孩子的中二不需要理由)。

我是真的没想到,这不是三分钟热度,我竟然能坚持下来,对自己的第一个游戏作品像对孩子一样上心(真是奇怪的想法,我那是还小),游戏迭代了三个版本,总代码数接近一千行,开发周期长达两周,每天都是像打了鸡血一样的码代码,那种感觉就像是,像是在肝副本。

编程原来可以给我带来这种奇妙的感觉,我就像是,像是一个上帝,一个造物主,我不是在编程,我是在创世!(中二到了极点,但的确是我的真心感受)

我开始主动学习编程了。

因为我发现,我的python语法学的太烂了,从头到脚都是if,elif,啧啧,难以想象这样的代码我写了一千行,我开始觉得我是一个不负责任而且技术贼烂的上帝。(我甚至还觉得自己是个上帝,欧,我的上帝)

之后,我去了菜鸟教程,我到了b站刷python视频,我去把学校教材重新自学了一遍,我开始买书,啃pdf。我不断地码代码,我可能是有点上瘾了。

我认识到了自己的渺小,认识到除了python还有其他很棒的语言,像c,它更接近底层,而且跑的贼快。像java,它结构简单安全而稳定,应用也很广泛。像php,这个被成为是世界上最好的语言,的确有自己的长处,在建站方面,又快成本又低。像javascript,它运行在浏览器,是前端必学必会的语言。

我知道了语言有动态,静态,python是一个动态语言,它可以像胶水一样粘合c。我开始知道解释型语言和编译型语言的区别,并且疑惑java这种先编译成字节码而后又用jvm虚拟机逐行解释的语言,到底是编译型还是解释型。

当我接触到的语言越来越多,我开始思考,语言是种类繁多的,光光是比较火,使用基数比较多的编程语言就多达十几门甚至更多,我要是一门一门学不累死了,还有我学的多了,把它们搞混了怎么办。

我慢慢认识到编程语言始终只是一个工具,一个各有优缺点的工具,它们火不火,有多少人用,是会随着市场来波动的,我不可能专门学一门语言学到老(我之前有一直学python,学个30年成为业界大佬的想法,现在想想,着实幼稚,语言学到深处,那就不仅仅是一门语言了,而是整个计算机思想理论的结晶)。

在以后的工作学习中我必然会突然接触某一新的编程语言,或许只是作为一个中间件使用,无需深究。但是我该如何以最快的时间,学习它的语法招式呢。

我猛然发现,编程语言是有共性的,编程不就是获得数据,处理数据,返回数据,最终解决现实中问题的么。

那么什么是数据呢,编程语言必然有对于数据的定义吧,那不就是数据类型嘛,在python中,包括了int,float,complex的数字类型,str的字符串类型(本质还是字符数组),bool类型,list,tuple,set,dict,frozenset等容器类型。在java中,包括了type,short,int,long,float,double的数字类型,boolean类型,char字符类型,string,array,class等引用数据类型。数据类型无非是两大类嘛,基本数据类型,复杂数据类型,复杂数据类型就是基本数据类型的集合。

对于数据类型,各个语言都是大同小异的,本质不会变,你可以用自己的标准分个类,可变类型和不可变类型,容器类型和非容器类型,有序类型和无序类型…

数据来自哪里又如何反馈呢,每一门语言必然都有output和input,也就是输入输出,你可以用户输入,或者随机数据,或者读取文本,数据库等一切数据的载体。需要反馈给用户,最简单的就是控制台打印,复杂一点就是写入文本,存到数据库(由此引申出一系列内置库或者是已经封装好的组件用来收集和反馈数据)。

再者到了数据的作用域,全局作用域和局部作用域,你敢说哪一个语言没有这类区分的么。

有了数据又如何操作呢,那么只要是编程语言,那必然都有基本逻辑语句吧,有if,else的判断,有while和for的循环(由此引申出各种复杂数据类型的方法,java的.length,.size();python的len()函数)。

有了大量的数据操作代码,那么考虑到代码的复用,资源的避免浪费,必然会有函数式编程思想吧,函数是几乎每个语言都会出现的结构吧,有了函数式编程怎么可能没有面向对象编程呢,现在火热的编程语言几乎都是支持面向对象思想的,这个思想几乎在各个语言中都是通用的吧。

最后,每一个语言都有自己的生态圈吧,都有前人给我们封装好的各种方法组件吧,像date日期,random随机数,re正则表达,等等之类的,你敢说哪个语言没有么。

以上这些东西你完全可以通过一门语言的学习牢牢掌握,这些语言的互通性你只要了解了,那么不管你今后遇到什么语言,你都心里有底,就单纯的语法招式基本思想基本类库,学起来自然是很快的。这就是学一而通十,每一门语言都有让我们熟悉的影子

学十而精一

学一而通十,为的是让刚接触编程的同学,把握编程的核心本质,培养自己的兴趣,你掌握了方法学的比别人快,新语言的接受能力更加强,自然会慢慢对编程有好感,人总是偏向于自己熟悉的东西和领域,当你发现你在编程领域更加得心应手,只要不是特别讨厌编程,这种感觉会让你慢慢接受编程,热爱编程

但是,学一而通十,通的仅仅是招式,以及一些基本思想,一门语言的内核是博大而精深的,牵一发而动全身,一门语言牵扯出的是整个计算机思想的结晶,当你想更加深入编程的领域,你能从中看到,数据结构与算法,数据库,计算机网络,操作系统,计算机原理,等等基础学科的影子。这些是我们需要精通的内功。

从学一而通十到学十而精一。

编程语言是计算机思想的产物,计算机本质为了服务于人,为人解决实际生活生产中的问题。就像面试中常出现的一个问题,业务和技术你更看重哪一个?

问题的本质是,业务和技术的关系,技术是为了给业务服务的,否则你技术再好也没有施展的地方,技术服务业务,反过来,业务的发展推动技术的进步,因为业务中的数据越来越多,所以人们改进数据库,让它读写更快,所以人们研究网络,减少信息传输的时间,所以人们调整算法,用更少的资源计算更多的数据。

技术服务业务,业务推动技术。编程语言和计算机思想又何尝不是这样一种你中有我,我中有你,循环互利的关系?

所以学十而不精一,你始终只能在编程的外围游走,是个只会招式的门外汉。知其然不知其所以然

学十而精一,这个一,不单单是一门编程语言,更是一个突破点,是你借助编程语言向计算机核心领域进发的突破点。这个一就是计算机基础学科,基础的才是最重要的。

在大学,千万不能只扎深于所谓的技术,蒙头编程,这些始终是招式,没有内功的招式就是花架子,千万不能忽视了基础学科的重要性,因为这些东西是几乎不变的本质,当你工作十年二十年后,它依然深远的影响着你。

我看到社会上各种各样的编程语言的补习班,4个月或者6个月就能将一个领域的知识灌输给你,它们源源不断的向互联网行业输送人才,这让不少大学未毕业的计科生倍感压力。

然而,这些培训结构教给学生的始终只是招式,因为思想的灌输是潜移默化,是需要时间的,这不能在短短几个月里让你有所悟。

这也是大学生相较于他们的优势所在,大学四年,学的不是也不应该是花花绿绿的招式,更应该是计算机基础的沉淀,这是让你今后几十年工作学习都受益的好东西。

学十而精一,当你深耕这个一,语言就不仅仅是一门语言了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章