现在是凌晨 2:32。早到了该睡觉的时候,只是我怕睡了一觉之后我就把这一切都忘记了。所以趁着还多少有些记忆,记录下来。

由一件事引入

这是一个最近发生在我身上的真实故事:我在给一个朋友提供《Web程序设计》附加题题目建议的时候我提议让她做一个公文通爬虫。她开始的时候很愣,因为觉得爬虫是个很神奇。最后我把实现的思路告诉了她,她就基本自己完成了爬虫程序。

其实很多时候,很多我们觉得很神奇的东西,很可能是我们早就明白的东西,只是我们还缺少一步“思考”,思考如何去运用这些知识,思考如何去创新。也许是长期的应试教育,使得我们教一是一,教二是二,所有的“创新”都是“零分”,慢慢地就失去了创新的能力。

这篇文章,是希望能够给身边的朋友们带来一些启示,以及提示自己不要忘记如何“创新”与“思考”。

我们学了什么

现在我已经是一名大二的计算机专业学生。回想这大学的近两年学习,我学到了什么?

(1) 过去的课程(除去例如体育、文史哲等课程): - 高数 - 线性代数 - 程序设计基础(真的很基础) - 计算机导论(这个我不算学过) - 电路相关的一切课程 - 离散数学 - 面向对象程序设计(真的?) - 数据结构 - 概率论 - Java(皮毛)

(2) 目前在学的课程: - 计算机组成原理 - 图论 - 计算方法 - 计算机网络 - 数字图像处理 - Web程序设计(JSP)

就目前学所过的知识,其实很多知识都是非常基础。例如 C/C++ ,课本上的、课堂上的,都不是未来实际中真正常用的。例如我们辛辛苦苦创建一个数组,对,一个数组。你需要考虑需要静态分配,还是动态分配,考虑分配的内存空间大小等等问题,然而课堂上从来没有教过我们使用 “vector”。又例如《数据结构》,我们只是在重复实现别人的轮子,#include<stack>

我们学到了什么,我们学到了“世界上有这么一个东西”。至于“这是一个什么东西”则需要依靠自己的主动,才能明白。正如美国励志短片《Did You Know》中所提及,大一学会的知识到了大三就过时了。更何况现在所学的是多少多少年前的东西了。当然这里不否认这些课程不重要,只是缺少与时代的同步。

我们可能做出什么

从引入的故事继续说吧。一个实用的应用:“网络爬虫”。爬虫是在网络上按照一定算法拉取网络上的信息并保存到数据库中的程序。也许我们做不到 Google 那样复杂的爬虫,但是至少我们能做出一个简单功能的爬虫,例如拉取公文通信息的爬虫。

简单爬虫实现思路:

  1. 获取目的 URL 的 HTML
  2. 分析 HTML,提取目的信息
  3. 数据持久化

再具体:

  1. 下载公文通的 HTML
  2. 分析每一条数据的 HTML 特点,通过正则表达式匹配出所需要的信息
  3. 保存这些信息到数据库中

我们来看看这个爬虫涉及到的知识:

  1. 下载公文通 HTML -> 《Java实用教程》,"Java 网络编程",获取HTML。
  2. 分析每一条数据的特点 -> 《Java实用教程》,“Java 字符串”,正则表达式。
  3. 保存数据 -> 《Java实用教程》,“Java 与 数据库”。

所有知识都在同一本书里所涉及,但是缺很少人知道如何去实现。那么,现在你已经知道爬虫的实现思路,可以实现了吗?剩下的,就是自己的动手能力。

四部曲

大学四年,光凭学校所学的课程,老师所授的知识是不够未来折腾的。更多地需要我们去“思考”怎么应用知识。我把学习知识归纳为 “KWWH”:

  • "K": Know,你知道有这么一个东西。
  • The first "W": What, 然后你知道了这是一个什么样的东西。
  • The second "W": Why, 你知道为什么这个东西会是这样。
  • "H": How, 怎么去用这个东西

只有明白“How to use”,你才敢真正地说你懂了。

我们还能做出什么

我们还能做什么,我们还能做的事有很多很多。But, What we must to do first is "think deeply"。深入思考所学的,然后你就会发现你能做什么。