j2se基础的重要性
模式,框架固然重要,最重要的还是基础,还是java语言本身,请banq老师回答我,你为什么关于基础这方面的东西说很少那,你不觉的这样会误导好多学java的人吗?你是不是觉的自己的水平很高了,不需要强调这方面了,我这不是书你给大家提的建议不好,而是说你应该多关注一下java的初学者,而不要一味地讲高深的东西,觉的自己的水平很高一样,你能采取我的意见吗?请尽快回贴,谢谢bang老师.
我已经几年没有去翻j2se了,这不是说我对j2se滚瓜烂熟,而是几乎都记不得,我自己做的系统都是基于我自己的API工具和框架。
当然,不是说开发不需要j2se,需要时会通过google来查,但是击中j2se API的几率很小。
所以,我们可能要反思一个问题,我们过去包括你的思维中关于软件基础的定义是否有误区?是J2SE API是基础?还是模式设计是软件基础?
传统教育和习惯都认为前者,而我认为是后者......这也可能是中国软件不能起飞的一个重要原因。
以上个人观点,仅供参考。
既然模式设计是基础,为什么象楼主等很多初学者觉得复杂,不认为是基础呢?
我个人认为这和先入为主有关,也就是说:如果你首先接受的是一种“畸形”误导性教育:学习数据库 API等这些死记硬背的东西,养成认为死记硬背的知识是基础的习惯逻辑和思维。
很多软件大师一再强调,OO面向对象思想其实不需要培训,是符合人类最自然的想法,小孩不需要学习,可以知道飞机是交通工具的一种,交通工具是飞机 火车 汽车的一个抽象概况,这些都是与生俱来的OO基础认识却被我们的畸形教育排斥了,让广大程序员反而走上与OO背道而驰的编程生涯。
所以,J道试图通过社区形式“释真正OO自然之道”,拨解很多初学者心中迷雾,帮助他们找到真正的软件学习之道。
顺便说一下:JAVA编程思想名称中思想的意思就是OO思想,就是设计思想,所以我们认为它是基础,观点一致,我还要批判一下这本书缺点:由于作者是从C转业过来的,很多思维还是从C标准来述说,无疑中会误导很多初学者的思维方式,其实Java和C是完全不同思维方式的语言了。
Java是注重向上思维,什么叫向上思维:就是站在前人肩膀上思考,我以前举过例子:以前“程序员”杂志刊登台湾一个软件大师关于“Collection字节码研究”,因为Java中Collection很神奇,有时好像J2SE中只需要掌握一个COllection就可以走遍天下了,所以,好奇的程序员希望打开Collection这个黑盒子,瞧瞧里面是什么东西,可能有人已经觉得很可笑了,里面能有什么呢?不过是汇编语言字节码罢了,COllection神奇不是它的内部,而是它的使用方式上,也就是模式使用上。
那种将技术分解,喜欢深入技术内部探讨的思维方式就称为向下思维,这种思维表现在:数据库连接池 线程池等等都要自己做,其实,我们重点是来如何应用这些组件的技术,就象如何堆积木,而不是研究如何制造一个个积木块。我相信,老板都不会允许象你这样浪费时间和精力来研究如何制造积木块,这是一个构件分工大生产时代,不是小作坊了。
向上思维就是拔高思维,拿来主义,一个新技术不必关心它是如何做出来的,而是重点研究是如何使用它,使用的场合和条件是什么,这些就是模式啊。
说到这里,如果我说不学习"数据结构,操作系统,编译原理,数学",照样可以作出架构优质的高性能Java系统,你可能不惊奇了,Collection和数据库技术已经就是依据数学结构做出来的,你学了数学结构,自以为懂了很基础知识,碰到COllection,你就会自然去打开看看,自豪运用你的数学结构理解它一番,可是这些对于你如何使用COllection根本是两个领域的知识(如何使用Collection是模式领域知识),这些都是先入为主造成浪费时间,能力不足的表现。
操作系统和编译原理 我更不要讲了,DSL语言出现,会讲领域专家画的类图直接编译成Java等高级语言,这是新的编译原理,但是这个编译原理和高级语言编译成汇编语言原理可是大相径庭,其中模式架构是主要的,数学等则退位其次。
关于数学是否要学,我以前说过:企业软件不是数学 和管理,企业软件是研究如何让自身更具生命性,伴随人共同成长的学科。数学和管理等只能是专业领域的,属于软件需求领域前端,很多人觉得做软件,好像数学一定要好,也是错误的,如果我们依次类推,做ERP软件所有程序员是不是都必须是企业管理专家?实际上一个好的管理软件是由管理专家加上软件架构专业人才和程序员共同分工完成的。
过多学习"数据结构,操作系统,编译原理",会让我们产生软件到底就是数学的思维,这是相当有害的,软件不只是数学,也是艺术,领域建模就是一门创新的艺术,你如何通过模型建立来模拟客观世界,这就很象绘画写生一样,越能抓住本质,你的软件系统就越具有生命性,否则东施效颦,软件模仿了客观世界的皮毛,客观需求一变化,软件就全部瘫痪,甚至重写,这些都已经深刻说明,软件是一种思维方式,是一种认识世界的过程。
以上这些观点,可散见到我以前各个帖子观点,收集在此,一直挂在首页,希望能够帮助更多Java初学者,如果你看到觉得,觉得自己世界观以及过去成长经历受到完全否定,思想接受不了,可以关闭这个帖子,希望没有打扰你“正常”编程生涯,对不起了。
我想说的是:没有学过计算机的人(包括大学课程)应该直接从OO语言以及设计开始学,不要以为OO是基于传统面向过程和数据结构等基础知识的,OO是和这些传统基础知识并行的,是水火不容,是两个路线问题,非此即彼,是相克的,是黑与白,是不匹配的,是mismatch的。
极端一点,我认为大学直接从OO语言和设计开始学习,国外不少大学已经开始只学习Java和GoF设计模式,这是趋势,国内大学课程和培训课程早就应该更换了。
正因为OO设计和传统基础知识是矛盾的,是两个不同方向,如果你走上传统基础知识这个学习方向,那么就很难理解OO这个方向的东西,甚至觉得高深,就出现楼上各位和我争论的现象。
正因为我走过那么多弯路,庆幸自己思维转过来了,但是回头看看对岸那么多没有能够过河,跨到OO这边的初学者,我也很着急,一直在探究为什么那么难,就是一个捅破窗户纸的事情,,,通过J道社区和很多人交流下来,才得出“面向过程面向数据库的传统过程思维才是阻碍我们转变的罪魁祸首”,而且越是经验程序员,如果缺乏自我挑战革新的决心,更难。所以,我认为,如果一开始学习软件时,就从OO就入手,一切就容易多,而且OO是那么自然,比所谓用数据结构表达方式要自然多。
当然,争论是好的,因为开始思考了,总比被那些所谓计算机教授权威蒙蔽,一直以为是正确的要好得多。
[该贴被banq于2007年04月05日 15:52修改过]
>再面象对象,对象里面总有方法,及用的数据类型吧!那用的不正是算法,
你看到的是算法,而我看到的是符号,是类似UML类图的另外一种实现方式,model包下面类代码其实都是可以用UML画出,现在这种双向工程软件很多,你使用together或rose再打开jivejdon3.0看看,你看到的是图,表达对象可以有多种方式:UML图 Java代码 C#代码.
为什么我们两个看同样的东西,得出结论不一样,就是因为传统基础知识蒙蔽了你的眼睛,让你带上了数据有色眼镜.
所以,我们两个带的是不同颜色的眼镜,你说是黄色,我说是红色,你说还有什么好争论,所以,思维方法不同,就很难对话.
>可没有以前的传统基础知识有多少人能一下转过来啊.
如果没有以前的传统基础知识,可能全部都能转过来了(包括你),正是以前的传统基础知识阻碍了转变.
[该贴被banq于2007年04月05日 18:44修改过]
这个帖子:
http://www.jdon.com/jivejdon/thread/30976.html
这里一个帖子很有借鉴作用,作者没学过你说得那些传统基础知识,但是对OO依然有自己的认识:
http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=29282&message=23104782#23104782