j2se基础的重要性

大家都发表关于模式,框架的话题,难道对这些模式,框架掌握了就能把项目做好了吗?
模式,框架固然重要,最重要的还是基础,还是java语言本身,请banq老师回答我,你为什么关于基础这方面的东西说很少那,你不觉的这样会误导好多学java的人吗?你是不是觉的自己的水平很高了,不需要强调这方面了,我这不是书你给大家提的建议不好,而是说你应该多关注一下java的初学者,而不要一味地讲高深的东西,觉的自己的水平很高一样,你能采取我的意见吗?请尽快回贴,谢谢bang老师.

我不想说太多,我可以告诉你我目前的情况:

我已经几年没有去翻j2se了,这不是说我对j2se滚瓜烂熟,而是几乎都记不得,我自己做的系统都是基于我自己的API工具和框架。

当然,不是说开发不需要j2se,需要时会通过google来查,但是击中j2se API的几率很小。

所以,我们可能要反思一个问题,我们过去包括你的思维中关于软件基础的定义是否有误区?是J2SE API是基础?还是模式设计是软件基础?

传统教育和习惯都认为前者,而我认为是后者......这也可能是中国软件不能起飞的一个重要原因。

以上个人观点,仅供参考。

开一个新贴再谈继续深入探究:

既然模式设计是基础,为什么象楼主等很多初学者觉得复杂,不认为是基础呢?

我个人认为这和先入为主有关,也就是说:如果你首先接受的是一种“畸形”误导性教育:学习数据库 API等这些死记硬背的东西,养成认为死记硬背的知识是基础的习惯逻辑和思维。

很多软件大师一再强调,OO面向对象思想其实不需要培训,是符合人类最自然的想法,小孩不需要学习,可以知道飞机是交通工具的一种,交通工具是飞机 火车 汽车的一个抽象概况,这些都是与生俱来的OO基础认识却被我们的畸形教育排斥了,让广大程序员反而走上与OO背道而驰的编程生涯。

所以,J道试图通过社区形式“释真正OO自然之道”,拨解很多初学者心中迷雾,帮助他们找到真正的软件学习之道。

banq老师,你也是从大学过来的吧,象你那样说,对待OO面向对象的程序设计不需要学习,对小孩也知道飞机是交通工具的一种,交通工具是飞机 火车 汽车的一个抽象概况,如果小孩没受过教育他们能知道这些东西吗?你说的你的j2se的知识都忘了,并不代表你没看过啊,既然你看过了,你已经了解java的基础了,并且在你的工作中得到了实践,如果没有数据结构,操作系统,编译原理,数学等方面的基础知识,懂再多的设计模式又有什么用的,那还能称得上是个程序员吗?我真不知道你是怎么看待编程的?只能说你没有站在初学者的角度去看待编程,你说j2se不需要仔细的学,那为什么JAVA编程思想这本书销量那么大那,难道你没看过这本书,这不正是介绍java的基础知识和原理的吗?j2ee是搞高层开发的,相对来说对好多的基础知识还用的少点,要是搞底层开发,用java试试,要是没用一定的基础知识看看行不行.好多东西是不需要去死记硬背,但该记住的一定要记住,如果脑子里不积累一定的知识行吗?基础的知识也不一定非要死记硬背,但要理解吧,就是创新也要在前人知识的基础上去创新吧!


你保留你的观点,你可以继续依靠你的传统教育观点去“误人子弟”,或者你也认为我也是这样,但是我相信很多跟着J道成长的程序员已经完全明白我的意思。

顺便说一下:JAVA编程思想名称中思想的意思就是OO思想,就是设计思想,所以我们认为它是基础,观点一致,我还要批判一下这本书缺点:由于作者是从C转业过来的,很多思维还是从C标准来述说,无疑中会误导很多初学者的思维方式,其实Java和C是完全不同思维方式的语言了。

Java是注重向上思维,什么叫向上思维:就是站在前人肩膀上思考,我以前举过例子:以前“程序员”杂志刊登台湾一个软件大师关于“Collection字节码研究”,因为Java中Collection很神奇,有时好像J2SE中只需要掌握一个COllection就可以走遍天下了,所以,好奇的程序员希望打开Collection这个黑盒子,瞧瞧里面是什么东西,可能有人已经觉得很可笑了,里面能有什么呢?不过是汇编语言字节码罢了,COllection神奇不是它的内部,而是它的使用方式上,也就是模式使用上。

那种将技术分解,喜欢深入技术内部探讨的思维方式就称为向下思维,这种思维表现在:数据库连接池 线程池等等都要自己做,其实,我们重点是来如何应用这些组件的技术,就象如何堆积木,而不是研究如何制造一个个积木块。我相信,老板都不会允许象你这样浪费时间和精力来研究如何制造积木块,这是一个构件分工大生产时代,不是小作坊了。

向上思维就是拔高思维,拿来主义,一个新技术不必关心它是如何做出来的,而是重点研究是如何使用它,使用的场合和条件是什么,这些就是模式啊。


说到这里,如果我说不学习"数据结构,操作系统,编译原理,数学",照样可以作出架构优质的高性能Java系统,你可能不惊奇了,Collection和数据库技术已经就是依据数学结构做出来的,你学了数学结构,自以为懂了很基础知识,碰到COllection,你就会自然去打开看看,自豪运用你的数学结构理解它一番,可是这些对于你如何使用COllection根本是两个领域的知识(如何使用Collection是模式领域知识),这些都是先入为主造成浪费时间,能力不足的表现。

操作系统和编译原理 我更不要讲了,DSL语言出现,会讲领域专家画的类图直接编译成Java等高级语言,这是新的编译原理,但是这个编译原理和高级语言编译成汇编语言原理可是大相径庭,其中模式架构是主要的,数学等则退位其次。

关于数学是否要学,我以前说过:企业软件不是数学 和管理,企业软件是研究如何让自身更具生命性,伴随人共同成长的学科。数学和管理等只能是专业领域的,属于软件需求领域前端,很多人觉得做软件,好像数学一定要好,也是错误的,如果我们依次类推,做ERP软件所有程序员是不是都必须是企业管理专家?实际上一个好的管理软件是由管理专家加上软件架构专业人才和程序员共同分工完成的。

过多学习"数据结构,操作系统,编译原理",会让我们产生软件到底就是数学的思维,这是相当有害的,软件不只是数学,也是艺术,领域建模就是一门创新的艺术,你如何通过模型建立来模拟客观世界,这就很象绘画写生一样,越能抓住本质,你的软件系统就越具有生命性,否则东施效颦,软件模仿了客观世界的皮毛,客观需求一变化,软件就全部瘫痪,甚至重写,这些都已经深刻说明,软件是一种思维方式,是一种认识世界的过程。

以上这些观点,可散见到我以前各个帖子观点,收集在此,一直挂在首页,希望能够帮助更多Java初学者,如果你看到觉得,觉得自己世界观以及过去成长经历受到完全否定,思想接受不了,可以关闭这个帖子,希望没有打扰你“正常”编程生涯,对不起了。

banq老师,您好!
我认为人思维的转换真的是很难的,有时自己会怀疑,有时会受到阻力。听了你的意见,我的内心多的是“反抗”。
我听到大多是这样的:在编程方面,算法数据结构和编译原理这两门是重点,他们决定一个程序员编程能力。我是照这个思路一路走过来的。做了这两个课程设计真的让我提高了不少(编程)。
您说的“领域建模”——通过模型建立来模拟客观世界,我觉得它最多是方向上的指导,就目前来说,它还要在实际上能实现,不是吗?如果一个团体没有基础开发能力,还谈什么实现?
我的看法可能比搂主的差不多:没有编程基础的学习,做模式设计是“纸上谈兵”。搭建,测试,维护一个软件的能力从哪里得到的呢?如果初学者连J2SE(其他OOPL也一样)的基础都还没掌握好,就想去搞架构,我说他只能是心有余而力不足。
banq 老师,可能你的软件架构的境界太高了,你的观点一开始让我激动不以,但过后我立刻觉得这样真的很不踏实。你以上面的意见启发初学者,谢谢你!但我们现在更需要的是:一个软件大师的初始历练。
因为我是初学者,并且刚加入这个大家庭的,对Jdon的精神还不是很了解,所以我的想法可能不是很全面,甚至可能搭不着边。我看到老师你发了7k张帖,也就发表下我的看法,请不吝赐教!

你的观点可能适合那些在别人研制出来新产品的基础上进行学习,创新的人,拿来主义确实很省时间和金钱,并且开发效率也很高.但长此下去,程序员会变的越来越没激情.永远跟在别人的新技术的后面跑,最后只会越跑越慢,中国为什么没有自己的让用户能广泛使用的操作系统,为什么没有自己的开发工具?大家好好想想,到底为什么?基础不好,还想设计自己的东西,那行的通吗?数据结构,操作系统,编译原理,数学等方面的基础知识不学好,只能做一个应用方面的人才,想搞点什么的研究根本行不通.不搞深入的研究怎么提高自己的编程水平那.象banq老师那样说,我国的大学也不需要开这些课程了,甚至说大学也在“误人子弟”,我国的计算机科学研究院也可以关闭了,还研究什么啊?底层的东西都不需要研究,拿来用就行了,(看看日后中国的计算机方面的发展是什么样子,肯定是一塌糊涂).对计算机有兴趣学生们都初中毕业就去研究模式设计,框架的开发,搞oo面象对象程序设计,看看最后有几个能成功的.
没有面向过程的程序设计哪来面向对象的程序设计,没有数学的知识哪来的计算机应用,人的知识都是一步一步的向前发展,不可能一下就有什么创新的.banq老师,你要是没有从小学一直到大学毕业积累的基础知识,没有sun公司的java语言的诞生(为什么中国没有设计出java语言啊,向你那样不需要对底层进行研究,中国永远都不可能,设计出什么语言).你能有今天那么大的成就吗?
banq老师,你说那些话适合搞应用型开发的人才,拿来主义+改造+自己的开发,对公司对个人效率都很高,可你别忘了,中国还有一大批博士,硕士在搞底层的研究,开发,并且大学里也有一大批学生以后想搞底层开发,你说的那些对这些人有什么好处那,你应该针对一些人说一些对他们有用的话,而不能一概而论.基础对任何人来说都是很重要的,有些人想搞高层开发,有的人想搞底层开发,对他们的基础要求不同而已.

banq老师您好
我只想说说我的看法,作为一个刚刚入门,或者说是刚刚参加工作的人,他们对于你说的
“建模领域“确实是接受不了,虽然这思想是很好,我也很喜欢,但是您认为像我刚才说的那俩种人能接受得了吗?这些对您来说可能是很简单,但是对于我们这些人来说确实很深,我相信在这个论坛里的人,有很多人理解不上去,更别说实现了,我只是说像我们这个层面的人,您总是说一些设计模式之类的东西,我知道,这些非常非常重要,我也学习了,我在这个论坛确实也学到了不少,但是,毕竟工作经验欠缺,还没有运用到.有很多东西我们是接受不了的,这些东西固然好,但是不是每个人都能一下全都能接受的.SORRY

多谢zjlzjlzjl认真和我探讨,我知道不可能说服你,但是应该明白我的观点,也可能我还是没说明白。

我想说的是:没有学过计算机的人(包括大学课程)应该直接从OO语言以及设计开始学,不要以为OO是基于传统面向过程和数据结构等基础知识的,OO是和这些传统基础知识并行的,是水火不容,是两个路线问题,非此即彼,是相克的,是黑与白,是不匹配的,是mismatch的。

极端一点,我认为大学直接从OO语言和设计开始学习,国外不少大学已经开始只学习Java和GoF设计模式,这是趋势,国内大学课程和培训课程早就应该更换了。

正因为OO设计和传统基础知识是矛盾的,是两个不同方向,如果你走上传统基础知识这个学习方向,那么就很难理解OO这个方向的东西,甚至觉得高深,就出现楼上各位和我争论的现象。

正因为我走过那么多弯路,庆幸自己思维转过来了,但是回头看看对岸那么多没有能够过河,跨到OO这边的初学者,我也很着急,一直在探究为什么那么难,就是一个捅破窗户纸的事情,,,通过J道社区和很多人交流下来,才得出“面向过程面向数据库的传统过程思维才是阻碍我们转变的罪魁祸首”,而且越是经验程序员,如果缺乏自我挑战革新的决心,更难。所以,我认为,如果一开始学习软件时,就从OO就入手,一切就容易多,而且OO是那么自然,比所谓用数据结构表达方式要自然多。


当然,争论是好的,因为开始思考了,总比被那些所谓计算机教授权威蒙蔽,一直以为是正确的要好得多。


[该贴被banq于2007年04月05日 15:52修改过]

谢谢banq老师耐心的回帖:
你说面向过程,算法数据结构,数据库是和oo水火不容,不能并存,那你看看这个论坛的源代码,是不是基于数据库,算法的,难到这就算是完全面向对象了吗?再面象对象,对象里面总有方法,及用的数据类型吧!那用的不正是算法,数据结构吧!你做出来过完全脱离数据库的系统吗?你说你做的系统都是基于你自己的API和工具,那你公开一下你的API,让大家看看你的API和sun公司的用什么不同. 计算机教授权威蒙蔽这也许不太正确吧,哪个教授愿意蒙蔽自己的学生啊,你不需要说服我们,只需要拿完全脱离数据库,算法数据结构的系统来证明.
windows系列,linux强吧,还不照样用传统的知识来做的吧,就算以后可以用完全面向oo的来实现,也是一个预测吧.有多少编译系统是用纯java,纯oo做出来的.知识之间都是相互联系的,谁也不能脱离谁,只有联系紧密程度而已,你说这对吗?纯oo是很好,可没有以前的传统基础知识有多少人能一下转过来啊.
什么事情都要做到了,再传授给大家,不能只预测,即使是预测,也不能说的太绝对了,否则会让好多人不知道该怎么做,作为一个学习的论坛,就要务实.要是有说的不对的地方,请banq老师多原谅.

up

>你看看这个论坛的源代码,是不是基于数据库,算法的
不是基于数据库的,是基于OO的,你看到的数据库只是持久层一个实现,明天我可以跳换使用XML文件来实现.

>再面象对象,对象里面总有方法,及用的数据类型吧!那用的不正是算法,
你看到的是算法,而我看到的是符号,是类似UML类图的另外一种实现方式,model包下面类代码其实都是可以用UML画出,现在这种双向工程软件很多,你使用together或rose再打开jivejdon3.0看看,你看到的是图,表达对象可以有多种方式:UML图 Java代码 C代码.

为什么我们两个看同样的东西,得出结论不一样,就是因为传统基础知识蒙蔽了你的眼睛,让你带上了数据有色眼镜.

所以,我们两个带的是不同颜色的眼镜,你说是黄色,我说是红色,你说还有什么好争论,所以,思维方法不同,就很难对话.

>可没有以前的传统基础知识有多少人能一下转过来啊.
如果没有以前的传统基础知识,可能全部都能转过来了(包括你),正是以前的传统基础知识阻碍了转变.

[该贴被banq于2007年04月05日 18:44修改过]

banq老师,既然可以不学算法,数据结构,编译原理等基础知识,可以直接学习面向对象程序设计,请你说一下详细的学习面向对象程序的过程,从对程序设计一点都不懂到成为一个合格的程序员,就拿java这门语言来说.谢谢.

我们知识要一天一天的更新,但切忌盲目追求新技术,要知道咱们有没有基础?新技术也是国外那些大师们在传统基础知识上开发出来的,咱们怎么就开发不出来?(banq老师能回答我这个问题吗?)是咱们没oo思想吗?难道他们的oo思想比咱们强吗?不见得吧!应该是咱们缺乏基础知识,对底层的研究精神吧!没基础上去就玩oo,玩模式,可能以后的程序员会越来越少.