JAVA编程思想名称中思想的意思就是OO思想,就是设计思想,所以我们认为它是基础,观点一致,我还要批判一下这本书缺点:由于作者是从C转业过来的,很多思维还是从C标准来述说,无疑中会误导很多初学者的思维方式,其实Java和C是完全不同思维方式的语言了。
Java是注重向上思维,什么叫向上思维:就是站在前人肩膀上思考,我以前举过例子:以前“程序员”杂志刊登台湾一个软件大师关于“Collection字节码研究”,因为Java中Collection很神奇,有时好像J2SE中只需要掌握一个COllection就可以走遍天下了,所以,好奇的程序员希望打开Collection这个黑盒子,瞧瞧里面是什么东西,可能有人已经觉得很可笑了,里面能有什么呢?不过是汇编语言字节码罢了,COllection神奇不是它的内部,而是它的使用方式上,也就是模式使用上。
那种将技术分解,喜欢深入技术内部探讨的思维方式就称为向下思维,这种思维表现在:数据库连接池 线程池等等都要自己做,其实,我们重点是来如何应用这些组件的技术,就象如何堆积木,而不是研究如何制造一个个积木块。我相信,老板都不会允许象你这样浪费时间和精力来研究如何制造积木块,这是一个构件分工大生产时代,不是小作坊了。
向上思维就是拔高思维,拿来主义,一个新技术不必关心它是如何做出来的,而是重点研究是如何使用它,使用的场合和条件是什么,这些就是模式啊。
说到这里,如果我说不学习"数据结构,操作系统,编译原理,数学",照样可以作出架构优质的高性能Java系统,你可能不惊奇了,Collection和数据库技术已经就是依据数学结构做出来的,你学了数学结构,自以为懂了很基础知识,碰到COllection,你就会自然去打开看看,自豪运用你的数学结构理解它一番,可是这些对于你如何使用COllection根本是两个领域的知识(如何使用Collection是模式领域知识),这些都是先入为主造成浪费时间,能力不足的表现。
操作系统和编译原理 我更不要讲了,DSL语言出现,会讲领域专家画的类图直接编译成Java等高级语言,这是新的编译原理,但是这个编译原理和高级语言编译成汇编语言原理可是大相径庭,其中模式架构是主要的,数学等则退位其次。
关于数学是否要学,我以前说过:企业软件不是数学 和管理,企业软件是研究如何让自身更具生命性,伴随人共同成长的学科。数学和管理等只能是专业领域的,属于软件需求领域前端,很多人觉得做软件,好像数学一定要好,也是错误的,如果我们依次类推,做ERP软件所有程序员是不是都必须是企业管理专家?实际上一个好的管理软件是由管理专家加上软件架构专业人才和程序员共同分工完成的。
过多学习"数据结构,操作系统,编译原理",会让我们产生软件到底就是数学的思维,这是相当有害的,软件不只是数学,也是艺术,领域建模就是一门创新的艺术,你如何通过模型建立来模拟客观世界,这就很象绘画写生一样,越能抓住本质,你的软件系统就越具有生命性,否则东施效颦,软件模仿了客观世界的皮毛,客观需求一变化,软件就全部瘫痪,甚至重写,这些都已经深刻说明,软件是一种思维方式,是一种认识世界的过程。
因为我们陷入了传统基础知识里面跳不出来了,没有创新开拓勇敢的精神,传统又学得不精,老子很早就说了: 为学日益,为道日损. 学得越多,要跳得出来,跳不出来,就死了.
探究这些现象,说大点:说明国人丧失了大智慧的哲学意识,说近点:这是死读书封闭的教育科研体制造成的.
Jdon这个网站就是在研究Java的道,如果你看了老子或庄子的道家思想,就会理解banq为什么会有如此的观点和论调,“跳出来,站在身外看世界”,好象说两国之争也只在蜗牛的角上,如果我们只是想抓只蜗牛来玩儿,又怎么会在乎里面的血战?有用与无用是在于得到他的人如何看待而已。
面向对象模式等与编译原理什么的何为基础,这个问题我想举个例子来说,就好象我们日常所用的各种电器、手表、电脑等,你说其中的机械原理、电子原理等是基础一定没错,没有这些知识哪能造出这些东西,但如果banq说如何更好地用手表计时间、更正确地使用冰箱存储食物、用电视收取信息、用电脑帮助工作才是基础,那对于自然界中的我们——人,来说,可能就更加自然和容易了。
本人大学学的是药学,可以说跟电脑没有一点关系,因为从小的爱好,后来工作中不断从平面设计到网站建设最后到BS结构软件,觉得接触到Java的面向对象非常高兴,这样的程序才象是有生命的,原本跟我想的就一样嘛,后来懂了接口的概念,觉得是一种提升,将行为进行抽象就更妙了,再后来看到模式,很是兴奋啊,觉得这才真的是在编程序,好象孙悟空学会了七十二般变化(见《Java与模式》闫宏著)。至于很多程序员,特别是C、C++系统的所提到的数据结构、编译原理、内存指针,对我来说确实是相对陌生的,在我觉得那才真的是高层次的东西,我打算哪天需要做一些底层的、工具性的软件时再去研究吧。就好象说我先把家里这些日常生活需要用的电器搞得会用,正常运转并且能科学合理充分利用,帮助我解决平常的难题再说,以后哪天如果觉得哪个电器不够好用,需要有所改进,再考虑是不是自己研制一台新的,可能这种可能性会相当小,更多的可能还是找到制造这台机器的厂家,给他们提出改进的建议,他们可能会解决得更加好。
一切辩论的本初是追寻事物的本质,当知道了本质后,就不要再玩语言游戏了,辩论不在于分出高下,而在于明白真理,如果你明白了对方的意思,就不必再争论了,呵呵……
有些教育的误导,常常培养人们的辩论能力,而不是理解对方,寻找与对方合作可能的能力,感觉也就好象我们的软件教育,常常把一件简单的事情搞得复杂。
以上问题,看过的人都已经清楚了,已经不必再争论下去了,各自可以思考各自的方向,不可能每个人通过一次辩论后,都变成一样的观点,走一样的路。
道可道,非常道
软件编程之道,恐怕也不是一句两句能说得清楚的。
始终无法解释为什么注重算法与数据结构的企业发展要比注重架构的企业要好。
我们用手指头数一下
IBM - 提出了java架构,可是从400主机到9000、6000主机都很少有jdk。websphere还需要自己来装。
microsft - 提出了.net平台,可是赚钱的是office与windows
google - 提出了ajax,主营业务是搜索引擎以及广告,用了什么framework?
oracle - 数据库的老大,关系型数据库的基础是什么大家都知道吧,用了framework??
borland - 我曾经最喜欢的企业,现在开始做企业整体解决了,可是效益跟影响力怎么却日益减退那??
还需要举例了??
如果你打算当蓝领工人,那么请努力学习那些framework,因为你的公司需要它们,需要他们来做项目。但是如果真的想发展,走入软件的核心,进入ibm,microsoft,google,去进入到核心,请仍然回到算法与数结构上。