>那在大学里应该打好哪方面的基础呢?面向对象
是的,软件基础教育在于告诉程序员,最好的软件应该是什么样?软件最大的追求是什么,现在大学四年或职业培训后,能够回答这个问题吗?恐怕会回答成如此:最好的软件就是用最好的数学模型做成的,所以,要让软件做得最好,就把数学学得做好,就把数学模型搞得更抽象,最好能象爱因斯坦的那个数学模型一样。

大多数人都是这么回答,有人甚至提出“程序 = 数据结构 + 算法”;中国软件业都是这样的非专业(非软件而是数学专业)从业人员,这个行业难道有救吗?

见CSDN一个关于算法和数据结构的讨论,从中可见大多数程序员对程序理解都被培养到数学思路上了:
http://topic.csdn.net/u/20080115/09/775ae34c-877b-401b-b3af-6d659dbde5ec.html

网友在帖子http://www.jdon.com/jivejdon/thread/33712.html提出中国软件八大问题,这些问题其实根子上出在我们的软件教育。试想:如果不是软件教育和培训,何以中国软件出现这些大问题?

1.中国软件产业真正拥有的是什么?
2.是什么一直阻碍中国软件的发展?
3.中国软件为什么一直停留在低水平不能前进?
4.中国和印度国情相仿,为什么印度就会成为软件强国?中国却不是呢?
5.就软件产业而言,中国和印度差的是什么?差距有多远?
6.中国和美国软件的差距有多大?和日本软件的差距又有多大?和西欧软件差距有多大?
7.为什么中国软件业一直被外国左右,而不是我们自己?
8.中国到底有没有真正能左右中国软件发展方向的人?


其他相关帖子:
http://www.jdon.com/jivejdon/thread/33717.html

[该贴被banq于2008-03-26 12:19修改过]

我认为发这样的帖子十分无聊,不如好好看点东西。如果技术上有问题可以向banq老师请教

是啊!!!
我已经明白啦.再怎么争也没什么用,我觉得我应该相信banq老师.
这个话题不要再讨论了吧,我还是去看我的thinking in java 吧.
不管怎么样,banq老师对我指引很大,我会朝着banq老师指引的方向发展的.
学了能不能在社会上用不重要,重要的是掌握自学的方法,在大学里这种能力再重要不过了.即使不成仁,出到社会也能快速的自学很多东西.
再次感谢!!

我也来凑凑热闹,说点我个人的看法。

我认为大学学《数据结构》、《离散数学》、《算法》等是没错的。

为什么这么说呢?首先你要清楚上面三门功课学了之后主要用在什么地方。《数据结构》、《离散数学》、《算法》(包括数学等)主要是用着计算机的基础科学研究方面。我当年在大学的时候,参加了一个教授的科研项目,我主要负责是单片机方面的开发。单片机上的应用开发和我们今天的应用开发完全是两个方向。在单片机上,你不但要开发应用系统,而且还要开发运行在单片机上的操作系统。里面的每一个操作都要用汇编语言来实现。这时,曾经学过的《数据结构》《算法》等就显示出其威力来了。比如当我们在内存中建立一个链表用于储存数据时,那么如何建这个链表,如何快速搜索到这个链表中的数据,就是《数据结构》和《算法》的知识。在单片机里面没有别人建好的底层代码给我们调用。所有的工作都必须自己写。而我们在做java开发时,我们只需要考虑使用那个链表,然后把数据丢进去就可以了,完全不需要关心里面是如何实现的。所以这时候,你懂不懂数据结构、懂不懂算法都无所谓。但一旦涉及底层的东西,你就必须懂那些东西。

举两个例子吧。

如果让你开发一个数据库软件,你不懂《数据结构》和《算法》,那你如何存储数据?如何实现快速检索数据?如何使用最少的空间存最多的数据?你难道还能开发出一个能够进行快速检索数据的数据库来?

又比如,象《编译原理》你们也要学吧。你平时做点简单的应用,当然不需要你懂啦。可是当你去自己开发一门语言时,如果你不懂《编译原理》,那你根本做不出来。又如上面的例子,如果让你去开发一个数据库软件,那你不懂《编译原理》,你怎么可能正确地翻译其中的sql语句,如何正确地翻译存储过程、触发器等内容?

那是不是如果不研究底层软件开发就不需要学上面所说的课程了呢?其实也未必。就以 jdon 框架及其应用举两个在应用开发方面用到上面所提知识的场合。在 jdon 框架中,有一个缓存数据以提高系统性能的地方。数据分块存储,并且根据一定的算法对旧的数据进行淘汰。如果算法和数据结构学得不错的话,这些就可以很快地看懂,也可以开发出很好的缓存系统来。否则可能会看得非常吃力!更不用说懂得如何开发了。而在 jivejdon 这个应用中,里面就有一个论坛版面是用树形结构来实现的。那么这个树形结构的如何存储、如何检索其中的数据都要求你懂得一定的数据结构和算法知识才能做出好的设计来。尤其里面的那个数据存储和检索方法,我现在还是稀里糊涂的。我想仿照来做都做不了,只好使用最笨的办法来做自己的树型结构。

大学是一个学习基础功课的综合的地方,所以开设类似上面的课程是非常必要的,而在校学生也应该把它学好。如果你只想开发最表层的应用软件,那上面那些基础功课考试通过就可以了。但如果你想将来做操作系统开发等基础软件开发,或想为成为高手中的高手打下基础,想成为带领中国软件业冲向世界的人,那就一定要把上面那些东西学精学透!

以上是个人的一点浅见,大家共同探讨。

我也谈谈 banq 在上面谈到的八大问题。这些问题我水平所限,无法谈多少。但我一个感觉是,造成中国软件业水平底下的原因不是教育或单纯哪个方向的问题,我认为是我们中国这个整体社会风气造成的。我们现在这个社会上的人们绝大多数都比较浮躁,不愿意安下心来踏踏实实做事情,而对一些真正做事情的人,又喜欢指手画脚、冷言冷语。所以在我们国内,一个想真正做点事情的人,不但要克服自己身上那些浮躁的缺点,还要顶住这个社会中的凄风冷雨。在这种环境下,想出来一个高人,实在是不容易。

我们国家过去远的不说,就是七八十年代也曾经出过一些影响世界的人,比如数学家陈景润、当年两弹一星的研究人员等,这些无不是低头默默做事的人。陈景润在搞研究的时候,据说走在路上撞上电线杆还跟电线杆说对不起。而如果陈景润生活在今天,这样搞法,只怕回家后连老婆的床都上不了了。所以自从上个世纪90年代以来,我好像就没听说过在中国国内有哪个人可以做点影响世界的研究来。倒是听说北京大学,我们国家的最高学府的教授,竟然去剽窃外国人的论文,真是斯文扫地,丢尽我们国人的脸面!连我们国家最高学府都如此,实在不敢想象其他地方如何了。

而真要做出点事来,那件不是必须踏踏实实、认认真真、脚踏实地做出来的呢。就比如说现在 bang 的这个 jdon 框架吧?如果没有 banq 的开始顶住很多人的冷言冷语,安下心来踏踏实实做好这个框架,只怕这个框架早就夭折了。大家看看《回顾2006: 对话Jdon 一个开源人的孤独告白》等文章和论坛里面的一些帖子就可想而知,当时 banq 做这个事情的时候是如何艰辛的了。

我们的国人为什么会这样?难道我们一直就如此吗?我想应该不是。原因我能想到的不多。我想造成这些现象出现的原因之一,很大与我们现在整个社会的道德观念、价值观念息息相关,而恰恰是这些东西,组成了我们这个社会的灵魂。这个灵魂、这个无形的东西在主宰着我们整个国家、社会的走向,也最终决定了我们整体上能够做出什么事情来,我们能够做出什么东西来,我们的未来路在何方。现在人们无论学什么、做什么,有意无意都被钱和名带着走。要想做出点真正的好东西来,只怕很难。

大家想一想,如果我们都能认认真真、踏踏实实学东西,做事情,我们就真的比老外差吗?我们在软件也就真的不能搞出一些比老外好的东西来吗?我看未必。我们想一想,比如现在常用的持久层框架 hibernate 的开发,这个东西真的很难吗?我想这个东西开发本身其实也不是很难,而是烦。我们谁愿意去分析各个数据库之间的异同,找出其差异从而实现数据持久化?如果有人分析好了,设计好了,让我们写其中的代码,并不是很难吧?其实难就难在谁愿意去做这个事情,谁能克服自己身上的浮躁去做这个事,而且没有名利的驱动。但我们现在的国人,我相信就算有人想到要做持久层,知道怎么做持久层,但也基本上也不会去做这个事情,去做也很难做成这个事情。主要是我们的灵魂堕落了。

因此我的看法是,要改变我们的未来,只有先改变我们的观念。观念改变了,行为就会跟着改变,新的习惯会形成,最后导致结果必然出现。观念变好了,自然会有好的结果产生。我们一个个人改变了,这个社会的整体就必然会慢慢变好,我们的国家和社会才会变得更好,当然,作为其中的一部分,软件业自然也会变好。大家说呢。

lqixv说得很好,他认为大学学《数据结构》、《离散数学》、《算法》等是没错的,而且列举了这些用处。

但是lqixv还是没有明白我的意思:
大学学《数据结构》、《离散数学》、《算法》等是没错;但是如果不学设计模式就错了。

我们再思考一下:离散数学算法和设计模式哪个更是软件本质特点?

如果时间精力允许,当然学得越多越好,如果时间精力就那么点,既然选的是软件专业,当然要学软件本质的东西,其他如离散数学 算法涉及其他学科和应用都可以作为副科选学。

大学或职业学校不学习软件本质学问,导致大量程序员把握不住编程序的重点和方向,甚至认为最NB程序=数据结构+算法,因为在这些人知识范畴里只有数学,没有设计模式,属于井底之蛙。

不知道设计模式,就无法设计程序,只能“编”程序,中国软件就永远停留在“编”这个原始阶段(类似手工编织时代,现在纺织已经是机器批量生产时代);

在一个人刚刚入一个行业时,不告诉他这个行业的本质是什么,最好的软件应该是什么样的,这就是当前软件教育方向的失误。

这个失误导致很多程序员进入社会后要么补课,要么下课,留下无知无畏的就搞乱中国软件行业,让中国软件业一直停留在手工编织作坊时代,不能进入高级设计时代。


[该贴被banq于2008-03-26 12:55修改过]

哇,高手发言真是面面俱到.
对我来说好深澳啊,不知道怎么接着发言了.^_^..
先闪了......

banq老师:
我已经看Thinking in java 看到I\O System了,总感觉不够巩固。
看了的有很多java特性都忘了,我不知道下面该怎么做。
  如果是继续看的话,那么我想把TIJ的练习和例题都做一遍,但是这样要花费很大的时间。
  我的想法是学JSP和设计模式,然后再看一些开源项目,我认为这样能更加巩固我所学的知识,。您认为呢?
  我是该继续看TIJ还是朝老师您所给的方向努力?!
  还有,我今天以外发现TIJ的UML给了我很大的启示,书中的那个图体现了很多JAVA的特性,我是不是应该把UML也给弄懂了啊?

大学里大多是Computer Science这个专业吧?你说的这些应该主要是指“软件学院”吧?

要看你编什么软件了。编点访问数据库的mis系统可能用不到,但是你不能说整个软件行业都用不到。

最近TSS的一篇 When to use an Embedded ODBMS

http://www.theserverside.com/tt/articles/article.tss?l=EmbeddedODBMS


其中也提到面向对象OO和关系数据库是两个方向,是两个不同的世界观。
The OO Language Consideration
OO语言的观点
One extremely good reason for considering an ODBMS - perhaps the best, in fact
- is one so obvious as to be possibly overlooked.
The reason can be put simply:
you might want to use an ODBMS if you're writing your application in an
object-oriented language.
考虑使用ODBMS对象数据库非常简单:如果你使用OO语言,那你就要用ODBMS

The reasons why are fairly fundamental in nature,

and are summed up in a phrase that has been orbiting the database world for well over a decade:
"the object-relational impedance mismatch." Borrowing terminology from the electronics world,
this phrase highlights the significant differences between systems built along object-oriented lines, and those built along relational lines.
It is not too far off the mark to say that the two paradigms - object-oriented and relational - are two very different world-views.
这个理由是非常自然非常基础的,这其实归结于一句在数据库世界流行多年一句话:the object-relational impedance mismatch.
"对象和关系的不匹配",这是来自电子世界一个技术用语,这个词语高调标明了两者巨大的差异:面向对象路线和关系路线,
同时也说明,OO和关系 是两个不同世界观。

(注:谈到不同世界观,就非常严重了,有神论和无神论是两个不同世界观,上帝和无上帝论的就是两种完全不同世界观的路线)

http://www.theserverside.com/tt/articles/article.tss?l=EmbeddedODBMS

我在以前帖子中说了,Thinking in java 是骗人的,题目取得是Java思想,但是它更多谈的是Java语法,所以,不要把钱和精力浪费在这些无良书籍上。

设计模式 Evans DDD 无疑是你正确的OO世界知识。

其实我和你的情况差不多,我是去年11月才开始学习JAVA的,在看TIJ之前看了一些其他的有关JAVA的书,刚开始学习的时候和你一样,觉得在学习这个时还应该还要学习很多其他的东西。这样并行的学习感觉效果不是很好,干脆就先看TIJ吧!如果学习开始浮躁了,就容易做一些效果不好的决定。静下心来一样一样的搞。

心我倒是静得下!.因为我是学生,有很都的时间给我拿来用!
不过我也没有感觉到内容好多而产生浮躁.我只是想问问前人,希望前人的经验能够帮助我.那么我就能把大部分时间花在有益的地方去.而不是背道而驰.
希望大家能多提点自己的经验及建议.!谢谢!

ding

心我倒是静得下!.因为我是学生,有很都的时间给我拿来用!
不过我也没有感觉到内容好多而产生浮躁.我只是想问问前人,希望前人的经验能够帮助我.那么我就能把大部分时间花在有益的地方去.而不是背道而驰.
希望大家能多提点自己的经验及建议.!谢谢!