20165310_获奖感想与Java阶段性学习总结

时间:2021-05-20 03:32:47

获奖感想与Java阶段性学习总结

一、Learning By Doing

​ 在此之前,其实我并没有想到能够成为小黄杉的第一批成员之一,喜悦之余,也感受到了许多的压力。小黄杉一方面代表了老师对于我这一阶段学习成果的肯定,但同时也是对我的督促与要求,使我更加不敢在学习上懈怠,以免成为反面教材,贻笑大方。

​ 回忆这一阶段的学习历程与经验,其实正应了小黄杉上印的字:Learning By Doing。

二、课程学习

​ Java首先是一门专业课程,在专业课程的学习中,我认为理论、实践的学习都缺一不可。

1、语法基础

​ 学习一门编程语言,语法是基础。书本的意义正在于此,每一章的书本学习与代码练习正是一个扎下基础的过程。

​ 书本越往后内容愈发艰深,甚至有些同学前五章内容还没理解就试图钻研后面的内容,打算“遇到了前面的基础部分再回过去学习”,但其实,在我看来,前五章的基本语法反而比后续的更加深奥的内容更加重要,正如老师所说:学好前五章的内容后,后面的内容临时用到了再去学习也不迟,很快就能掌握。

​ 例如一直看书觉得不太能掌握的的第八章的I/O令我很是头疼,但在四则运算的结对编程中,由于需要实现文件的输入输出功能,不得不对每种输入输出方法进行更加集中深入的学习、理解,再进行优缺点选择出最适合需求的输入、输出流,最后进行语法的学习从而实现这一功能,效果比当初单纯的看书要好上许多。

​ 倘若没有前五章的基础,是无法一步登天学会更加深奥的语法的,回头学基础未免不成体系太过零碎,所以不可忽视这一基础。而仅仅把学习一门语言定义为语法的学习,从客观来讲,一周两章的内容学习任务的压力其实很大,个人来讲只能囫囵吞枣,不如“以用促学,学以致用”,从而进步。当然,若是精力能力足够完成学习任务的同学,也可以将书本所有内容细细学习一番,或许基础会更加的扎实。

2、实践巩固

​ 所谓“纸上得来终觉浅,绝知此事要躬行”。书本是基础但不能拘泥于书本,所有的语言学习都是为了实践而服务的。

​ 不知道有没有同学跟我有一样的感觉:单纯看书,不去使用,很多新学的东西过了一周,最多两周就会忘记,这时候实验的作用就会体现出来。

​ 但是每次的实验其实都不是一个一帆风顺的过程,往往要耗费大量的时间、精力去设计、调试,每当千辛万苦写完的代码甚至无法运行的时候,我的内心其实也是崩溃的:连个单步的机会都不给我。但正是一次次不厌其烦的调试,一次次地单步运行,才会使我们发现一些看书忽略的细节,发掘自己思维的漏洞,这是书上的东西才会变成你自己的东西,每次完成一个实验之后的成就感也会成为你继续学习的动力,而多次试验后你会发现实验过程越来越顺畅,最起码代码无法运行的情况减少了很多。

​ 例如,以前的我喜欢有个大体框架后就开始写程序的坏习惯,一些情况的判断与细节喜欢“到时候遇到了/想到了/运行出bug再写”,而这往往是逻辑错误的来源,后来多次碰壁后慢慢改正了这个习惯,更多的去将整个流程详细思考构建过后,再进行整体的书写,血与泪的教训下我的实验已经高效了许多。

三、元知识

​ 那么按照这个说法,我们学完前五章,定时写写实验,那么我们早在开学前几周就完成了Java课程的学习,我们之后的课程岂不是没有意义了?

​ 答案是否定的。我记得开学第一堂课,老师就提到过元知识这一概念,我们后续的学习在我看来,就是不断学习元知识的过程。

​ 这一过程是超脱Java课堂的过程,是可以用于其他领域的能力,这一能力使我更加受益匪浅。

1、工具的掌握与学习

​ 我的电脑是MacOS系统,班里和我用同样系统的同学对于一项事情大概心有戚戚焉:安装软件工具有时候真是太麻烦了。

​ 的确,不使用虚拟机的话,MacOS安装使用一些工具的教程其实并不多,它和Linux很多部分可以共通但也有很多不同,和Windows系统更是截然不同,每次安装新的工具都会使我们耗费很多的精力,例如上次的XAMPP的安装,端口、环境、配置等各种因素影响下,耗费了我一个周末的时间研究,才能正常运行使用。

​ 但是正是每次这一并不简单的过程,使我掌握了如何通过网络,快速寻找解决方法的能力,如何独自解决开发环境与工具的安装使用问题,这一能力,并不仅仅局限于Java的开发使用,而是在别的学习过程中也大有用处。

2、思维的学习

​ Java和C语言最大的不同在哪里?在于其思维的不同。在开始学习Java的过程中,我经历了一个很长的思维转变过程,通俗来讲,C语言更多的是解决一个问题,而Java更多的是解决一类问题。

​ 说来惭愧,其实直到现在我有时候的程序依然没能完全满足O·L·D·I·C·L的原则,但是我一直在努力改变自己思维,也在不断修正以往写过的程序努力靠近这一原则,虽然还没有完全达成目标,但是这一过程本身就是一种进步,思维的进步比语法的学习其实是更为重要的收获。

​ 其实我并不反对上网查询、借鉴别人的代码,因为我也常常有逻辑上的疑问需要解答,每一次解决的困惑都是经验与思维的积累,但是我并不赞成直接的复制粘贴,因为不会的语法可以查询,可以借鉴,但是别人的思维是无法借鉴的,不掌握它,下一次依然不能独立解决问题。

3、不要重复制造车轮

​ 上述的感想似乎将Java描述成了一个艰苦卓绝的学习过程,但其实你要是能够寻找到正确的省力方式,这个过程会简单很多。

​ 正如我上文所说,我不反对遇到瓶颈的时候去阅读别人的代码以求启发,而能够引用别人的库更是一种轻松而又简单的做法,众所周知重复的制造车轮并不是一种聪明的行为。当然,在引用别人库之前为了加深自己的理解与学习进行的实现编程也是一个必须的过程,正如我们在用sort方法之前自己理解并且实现过快速排序、冒泡排序等一系列的功能,但是若是次次都“反复制造*”,未免就有些费力不讨好了。

​ 例如之前老师课上讲到的密码学算法的库,就可以在接下来的密码学实验中一展身手。能够正确的“偷懒”,相信大家也是喜闻乐见的。

四、元知识的应用

这些元知识的应用其实往往是并不显眼的潜移默化的学习能力的增强,但是由于这段时间连续的比赛,我的感受较为深刻一些。

在比赛的时候,你遇到的往往都是你不曾接触过的内容,涉及程序的题目,也不会只有C语言、Java相关的程序需要你去解读,你看到更多的是Python、JavaScript、PHP……

但是你从来不会听到一个选手说:这个语言我没有学习过,题目我不做了。取而代之的是你必须抓紧时间,去学习新语言的新语法,尽快读懂题目的代码与意义,这时候你的元知识就会派上用场:你能否利用搜索引擎快速寻找到合适的编程、运行环境?你能否结合你学过的东西尽快理解新的语法?……这个时候你会发现,所有的语言都只是一种工具与载体,同样的题目可以用不同的语言来编写,但本质其实并没有改变。即便是相对了解的语言,例如Java,你也需要重新学习并不常见的类,例如上次比赛出现的BigInteger类也是一次新的学习,随后的密码学计算方法实验的大数运算中,就派上了大用场。

与此同时也不代表对于你掌握的语言,能看懂就足够了。例如上文提到的Java的面向对象的思维,使我面对类似思维的Python等有所熟悉,就是一种经常运用、思考带来的好处。但此时能否将陌生语言的题目重写成你熟悉的语言进行改写、运行,也是十分需要功底的,倘若你编写、调试代码的时间就需要好几个小时,就会错过做题的时机。所以对于已经学过的语言,我们依然要精益求精,有所进益。

五、小结

​ 每个人的学习形式并不相同,有的人适合系统的理论知识学习再进行实践体会,有的人适合边学边做例如我,只要是适合自己有所收获的方式都是值得鼓励的,我的学习方法上也依然存在许多需要改进的不足,更需要在学习中逐步调整方向与方式,不断改进,也希望能和老师同学进行交流,接受意见,汲取经验与教训。

​ 但是最重要的是,我们要清晰明确自己的目标,对于元知识硬知识软知识加以学习分析并且灵活运用,努力向目标前进,不是一昧做题、练习,而是有所思考、感悟,学会融汇贯通式的学习,能够“举一反三”,相信不只在Java,而在任何领域上都会学有所成。