最近莫名其妙跟VB又扯上了点关系……倒是引发了些感慨。

前几天远在美利坚的柱子突然留言要我电话。后来得知他选修Visual Basic,然后作业遇到问题于是跑来问我……越洋在Q上语音了两个多小时搞定。说起来问题其实不难,只是柱子锅第一节课有事儿没去听……但是值得注意的一点是,他用的是Visual Basic 2005。

而再往前推一段时间,我记得魔都某人在选修课上学的是VB6。

差距啊……Visual Studio 6确实是个经典的版本,但是不管是VB6还是VC6我TM从小学一直用到现在了啊……我亲爱的老师们咱能与时俱进一下吗?

————————————————————————————————————————————————

其实我是非常反对使用Visual Studio进行教学的。VS是面向真正的软件开发环境的,在一个软件的生命周期里面,编写代码根本算不上大头。VS里面大量的功能在教学中都不会用到。

而且用VS来教“C语言”、“C++语言”这样的课程容易给学生一个错觉。我学完这个课程就可以写出Windows程序了吗?如果你说的是那种带窗口的,不好意思,不能。

因为在这门课程里,你根本没学如何使用VC。你只学习了语言而已。你不知道如何设计一个窗体,不知道如何把你的代码和窗体结合在一起。甚至很多情况下,你只知道VC6工具栏上那个按钮可以让程序运行,但是根本不懂什么叫编译器,什么叫编译和链接。

————————————————————————————————————————————————

我希望能确立这样一种观点,学习编程其实分三个部分:思想,语言,和工具

————————————————————————————————————————————————

思想,包含很多内容。比如数据结构,比如算法,比如面向对象的思想。这些东西是一个程序的灵魂。

一本小说,你读英语版,读汉语版,读法语版,读俄语版,只要翻译不是太笨,你所读出的作者想表达的实际内容不会有差异。这就是一个小说的灵魂,它不因你表达所使用的语言而有差异。

一个程序,它能做什么,它是如何做的,是由一个程序最核心的逻辑所决定的。这个逻辑来自于哪里?来自于这些思想。

————————————————————————————————————————————————

语言,就是编程语言。比如C,比如C++,比如Java。

面对一个问题,你利用上面学习的思想剖析它,总结出解决的办法,整理成机械化的、计算机能进行的步骤,然后你需要一种语言来向计算机表达这些东西。这就是编程语言的作用。(尽管从实际的角度上,计算机还是不理解高级编程语言,但是这些高级编程语言可以通过固定的方法转化成计算机能够理解的1010110。)

顺带说一句,编程语言有很多很多很多很多很多……不同层次,不同应用环境,不同的性能表现,不同的擅长与缺陷等等等等。在实际的应用中要懂得选择,不是你懂甚至吃透一门C就可以横行天下了。

————————————————————————————————————————————————

工具,就是在实际环境中进行编程、进行开发,制作出能够投入实际使用的程序所使用的工具。比如Visual Studio之类的集成开发环境,比如MFC、wxWidgets之类的组件,甚至包括Git、svn这样的代码管理工具,JUnit、CUnit这样的测试工具等等。

你要编写一个程序,尤其是带界面的程序,能够拿出手用的程序,你要关心的东西实际上远超出程序的内在逻辑本身。很多时候,程序的逻辑很简单,但是做出能用的程序就要处理和考虑很多额外的东西。

如果是参与一个软件的开发,小组协同工作,那么管理整个程序的代码也要有工具。而且作为一个“软件”(我没有太强调程序和软件之间的区别,但是这是很值得体会的),必然需要经过测试和调试等等,也需要工具。

————————————————————————————————————————————————

这三者分离开,是因为互相之间没有太强的联系。不管你怎么编程,依靠的思想永远是那些。你选择了某种语言,你可以使用的工具也很丰富。当然,你所使用的工具往往是受前两者以及环境的限制的。

————————————————————————————————————————————————

个人觉得……在教学的时候应当把这三者明确分开,纯语言就是纯语言,编程思想就是编程思想,专门编程工具课其实也是很有必要的。

从另一个方面讲,思想和语言方面的课程,应当使用更纯粹的工具来辅助学习。比如学C语言,我宁可你让我用Turbo C。《计算机程序设计艺术》这套巨著里,Knuth更是使用类汇编语言的一种伪代码作为书中算法的描述语言。

————————————————————————————————————————————————

编程这个东西,不管是有人教还是自学,都有很长的路要走