|
|
#9
kai2006-02-20 07:08
LouisXIV, SQL 我确实在学习中, 尚未入门, 当我有了一个算法, 却还是表达不清楚, 或者说, 总觉得在表达上有点别扭. 我7楼的阐述中所写的代码确实类似于C/C++. 其实这只是逻辑的代码表达而已. 从逻辑的表达顺序上来讲, 我的表达是由上而下的, 这也是符合人的正常思维方式的, 我认为人的正常思维方式为递进式的,所谓递进式, 就是一个接着一个执行, 你从一个起点出发, 一步一步往前走, 你在当前这一步的时候, 你考虑你下一步该如何走, 或者说下一步应该发生什么, 如果某一步的操作所产生的状态需要在后续步骤中进一步操作, 那么我们就需要 变量来存储 这个状态, 这就是变量的作用. 如果思考一下SQL的逻辑方式, 你觉得是我所说的递进式的吗? 我们来看你8楼的代码: select * from 学生成绩表CJ t1 where (select count(*) from 学生成绩表CJ t2 where t1.总成绩<t2.总成绩 and t1.班级=t2.班级)<10 order by 班级,总成绩 desc
这是一种嵌进式的思维方式, 所谓嵌进式, 形象一点来讲好比你造房子, 你已经知道某个部位安装窗, 你造的时候把某个部位空着, 事后再来安窗. 在你的代码中那个 subquery 就好比那个窗, 而整体就是那个房子, 这种思维方式是尽量不需要存储中间状态的, 所以你几乎看不到变量的存在, 变量的存在是因为后续代码中需要用到, 既然后续代码发生在前序代码之前, 那么当然没有必要用什么变量了.
当今的数据库世界里, 的的确确采用的是SQL 语言, 虽说基于制造商的不同, sql的命令库也或多或少的有所不同, 比如那个 limit 函数. 通常学习的人, 也不会去想我所想的问题, 我也不明白,为什么全世界的人都没有像我这样从另一个角度来思考问题, 而是老老实实的跟着一块儿学. 当然我承认, SQL肯定能你所需要的询问, 以及建表等.
但是我这里所讨论的, 或者说我所观察的是语言的自由性. 自由这两个字的分量很重, 对于一门语言, 什么是自由性, 那就是这门语言提供了一种机制, 使得任何一种思维方式都能得以表述出来, 也就是说它不要求你局限于某种固定的思维方式.
当今世界有很多编程语言, 任何一门语言的出台都很大程度上受到了该语言设计者的思维方式的影响, 每个人都会有他自己所习惯的某种思维方式. 如果某种语言的能量很大, 但是却局限于某种思维方式, 也就是说限制了程序员的自由思维, 那么它必定不能成为主流语言.
你也许或问, 那为什么SQL 在数据库世界里成为无可动摇的标准? 我也觉得奇怪, 我想这或许与其从业人员占编程人数的比例不够大有关, 当然我也没有具体数据来说明.
我想应该会有一种语言来挑战SQL, 这种语言对你的思维方式不做约束. 比如通过这种语言可以写出我7楼的代码.
说些题外话, 之所以C/C++, Java 能成为当今的主流语言, 正是因为它是自由式语言, 只要你能在逻辑层面合理表达, 那么你就可以用 Java 来表达你的逻辑代码. 我这里没有说C/C++, 是因为C/C++ 是与操作系统无关的.
我们所学的仅仅是学了 how, 但不是 why. 我觉得如果你知道语言为什么是这样的, 那么你也许或考虑一下, 是不是它从一开始就错了. 或者说,他从一开始就注定成为一条小溪流, 虽然也美丽. 但却缺乏大海的能量.
|