从安装Java的JDK到目前共历时1.5个月左右,对最基本的句法、OOP基础加上个别简单的算法已经有了了解。选择Java作为IT入门语言是经过慎重思考的,这个选择在学习后两周后更加坚定了,这个信心很大部分源于『Guide to java a concise introduction to programming』这本书,这是Springer CS本科书系中的一本,个人认为是难得的适合真正初学者的好书。
我所遇到的大部分教程和文章虽然声称“适合初学者”“不要求有编程经验”但全是一个套路:先HelloWorld轻松一下,“是不是很简单呢?”,然后“我们谈谈变量和赋值、条件结构和循环、递归、字符串和数组”,然后“好的,再下面基本的面向对象编程——重载和过载、继承和多形态。。。。”——“是不是都很简单呢?编程就是这么好学”,Springer里同一套的『A Concise and Practical Introduction to Programming Algorithms in Java』(同书作者有研究著作在国内出版)就是这个典型,的确不要求有(Java)编程经验,但读者最好非常熟悉C++、Python等语言的语法并编写过1万行以上的代码;的确适合初学者,适合的是对其他编程语言以及数据结果和算法都比较了解的Java初学者? 原书基于在大学的讲义,一共10节课,每节课1.5小时,最后一章exam部分把能考的基本都考了而且是以具体的科学计算为入手点。
对于没有任何语言的编程经验,也没学过计算机理论基础的真正初学者,『Guide to java a concise introduction to programming』这本书展现了细腻、循序渐进和全面讲解风格,每一章都有前言和总结,按内容划分小节每节都不太长,最后以一个以本章知识为主但同时巩固其他章节并对后续章节有提示作用的实例作为主体内容的总结,个别长后习题有答案。和Learn Java the Hard Way这种先把Java当计算器和C语言用想学基本的OOP要买同作者第二本书的教程相比,这本书把普遍的编程/计算机语言原理、Java的基本语法和基本的OOP知识和个别初级算法/数据结构融为一体。第2章的主题是Objects: An Introduction讲了多类并存、public和private变量类型、静态和动态方法、构造器,一开始看到一个object调用另一个感觉非常新奇,但随之而来那两三处的参数和引用就卡住了整整一周,然而理解了之后就再没有出现这样系统性的困难了。作者在靠前的部分讲object为后续基本的oop原理和一些算法/数据结构的实现做了非常好的铺垫,实际上这些内容是互不可分的。在以文件读取和创建为最后一章后,书以简单的GUI、异常处理和Java文档为三个附录供读者选学及拓展。
所谓鸡与蛋的问题在我的例子上表现为切口顺序问题,没编过任何程序也不懂高深的计算机术语,如何既能学到基本的编程又能借此对计算机系统有一个侧面但具体的理解。正如本书前言所提,市面上大部分教程要么蜻蜓点水虽然适合初学但过于单薄,要么无所不包读起来眼花缭乱而且随着障碍积累常常戛然而止完全达不到“入门”的作用。这本书正是为真正的初学者提供一个中间道路的尝试,对我而言非常成功。
鸡与蛋这种问题模式常常在专业书籍领域出现,人们刻意制作出信息不对称的障碍,一方面炫耀,一方面尽可能提高初学者的入门难度,Springer的数学著作/教程就是典型,很多人常用它的研究生数学书系代表繁难艰深的数学著作并以能读懂此类书作为炫耀,但实际上不论具体内容,这套书可以简省辅助阅读部分(比如概念注释、符号说明)甚至关键信息如知识组织结构必然给读者造成很大障碍,有些内容只有在对相关内容非常了解的人指导下才能充分解压这些高度凝缩甚至不连续的信息,而如何获得这种指导呢?找作者本人或者圈子内的中间人。数学这个学科人少且抽象,同时门派林立、等级森严,充满了只有求助“学阀”及其马仔才能充分解读的“暗号”。
『Guide』通过Java句法讲解字里行间所提及的涉及内存、编译等方面的信息让我体会到程序语言和程序设计的一些真正考虑,比如硬件性能的制约。以前不了解时常常有“程序设计越来越不需要考虑硬件性能”的误解,实际上一个简单程序在单次运行时硬件性能制约不大但作为软件整体包含很多程序而且要考虑其他软件(Windows操作系统自己把4G内存占一半就是例子),再加上高级语言符号转化成二进制所造成的体积暴增,这时候节约内存、节约CPU就成为9012年程序设计仍然必须时时考虑的情况。
这本书的作者也有意思,两个作者都是美国一个小型文理学院的老师,有另一本合著的『汇编语言基础教程』中文版在国内出版。第二作者是日本人,应该对本书内容有很大贡献甚至可能是真正作者,以前听人介绍日本IT行业情况,说日本培养码农能力和体系都特别差理应让基础编程工作让中国人来接手,恐怕说的就是太充满这种循序渐进句法和原理一并讲解的教学模式吧?掌握一些机械性的内容不需要了解为什么,重复练习就行。在劣币驱逐良币的当下,这种书真是难得。