Coolyu0916,对不起,第一我现在没时间,第二我对你这个问题没兴趣,我有自己关心的领域。

不过我倒有一个建议,你可以到网上搜索一下,如果找到了答案,那就直接享用好了;如果没找到,那么恭喜恭喜,你可能已经发现了一个领域。既然你有需求,别人也可能有需求,你可以做一款好的公交查询向导软件,这就是你所拥有的企业资产了,有可能的话,我可以帮你推一推,好不好?

还有,千万别说向我学习,我来这儿是向别人学习的,拜托,请多多指教。

snowfeather 你的回帖很诚恳

你可以看看我的过去的帖子,我一直再说程序设计要与市场接轨。
不过这个帖子讨论的是程序员的基础与发展问题。
我只是想说说我的观点。
我天赋有限,能力不足,不过我希望中国能出现这样的人物。
十亿人口的大国难道不能出一个引领世界的应用么??

呵呵,zhouxu,知道你一定会这么说的,能不能做出来大家自己品吧。如果算法熟悉利用我提供的文件估计你做这个大约4个小时的时间。你还真是比较忙了。研究方向不是为了解决问题么??解决不了不是叶公好龙么??我第一没有要求界面好看,第二没有要求程序健壮,只要简单调试一下就ok了。java读取文件很容易吧,不管是array还是链表java都是现成的,这都不行??这个程序我做过,不需要google了,希望你自己反省一下自己了,不要到老说空话大话。

我们当程序员是在于解决问题,不是在于研究探索。框架再好,设计再完善,不能解决问题有什么用??

Coolyu0916,如果你已做过再问我那就没什么意思了。

你尽可以认为我的话都是大话空话,不错,99%都是书上的,只不过我把它们摘出来,是因为我有自己的理解。

我对算法的兴趣不如对软件的灵活性有兴趣,即使像录入单据这么简单的事好像没什么算法,能做的人性化也不易啊。

看的出你对算法很喜欢,中国也的确缺乏像样的算法专家,希望你坚持努力吧。

我是利用面对过程的方式做的
我希望你用oo的方式来实现,我想看看DDD的方式是如何做的。
我才疏学浅,希望你不吝赐教。

我不是算法专家。不过我却是不知道你用DDD方式怎么设计,我希望你让我学习一下。最好不需要算法的那种,我看看DDD如何解决这种问题的。
[该贴被Coolyu0916于2007年04月10日 13:27修改过]

j2se 其实就是写代码,

但是用OO分析与设计建立领域模型这个过程是在写代码之前,如果你不能把你的需求转换成领域模型, 代码怎么写? 除非不做设计,直接写.那只学j2se就可以了.j2ee都不需要了.

其实,如果真的建立的良好的领域模型,J2se 基本已经只用到继承,接口等一些面向对象语法. 象其他一些基本的IO操作等都要等特定应用时候才要写的.

学习j2se和OO分析与设计,前者只要一个月,后者一个月你都不知道OO是什么.
后者学习的难度比前者难的多, 掌握j2se 最多只能在写代码的时候具体实现快点,但是会用OO分析与设计建立领域模型 能让你在整个项目中起到关键作用.

j2se边做边学足够了,
用OO分析与设计建立领域模型 那可不是一日两天的工夫啊!

呵呵,今天看了这个帖子,看得很爽,所以也不得不发表一下自己的愚论。
我觉得,大家讨论着讨论着,就走错了方向!基本,永远是基本,你就算将API s背得滚瓜烂熟,那还是基本,就算你将算法,数据结构学得再好,那也只是空谈,难道进了IBM,Google,Microsoft这样的公司,他们还是让你去背API,诚然,基础好,对于进Microsoft这样的大公司会有很大的优势,但,那还只是基础,那只是建筑一个软件大厦的砖,如果没有这种软件开发上面的思想(暂且默认为就是OO思想)来指导,如何去构建一个软件大厦?所以我还是比较赞同Banq大哥的观点,但并不是说一味地贬低基础,我想Banq大哥也并非是贬低了那些基础。但是,当掌握了基础之后,得跳出来,往更深层的地方发展,也就是所说的设计模式。为什么国人不能够写出操作系统,为什么国人不能够有自己的IDE,为什么?因为国内的大学,一味地传授你基础的重要性,而忽视了在思想上面的指导,从而形成了Banq大哥所说的误区。


这个帖子很强,非常值得深入探讨,很多高人都:::非常认真:::地发表了自己的观点,我也来掺呼两句。

首先说个故事,我们公司招聘程序员,有一道笔试题是(泄密,以后就不能用了:)):

--------------------
数字1、2、3、、、、10排成一圈,首尾相连。从1开始从中取数,每隔两个数取一个,如1、4、7、、、,直到取完为止。要求写个程序把取数序列打印出来,可以用任何熟悉的语言或伪代码。
--------------------

这是我中学时在AppleII上做的练习题,easy吧?。就这个题,60%以上的应聘者交白卷;能写出代码的应聘者中,大部分又存在逻辑错误;做对的只是个别,算法好的压根就没见过。而这些应聘者中,绝大部分人的简历上罗列着J2EE,EJB,UML,设计模式,IOC,Strust,Spring,MVC,Hibernate,ADO,XML。。。一大堆名词,很多还写着精通Java,OOP!!! 我很纳闷,怀疑这些人的简历都是抄的、学历证书都是买的,于是每次都挑几个答题差的面试,结果发现人家对这些技术还真不怵,说起来个个都如数家珍,头头是道。99年至今,我基本上每年都要面试很多程序员,个人的感觉是:从事JavaWeb开发的程序员一代不如一代,JavaWeb开发社区的教育学习是:::彻底失败:::。

===============================
看了上面的故事,有点智商的都应该看出的我的第一个观点:任何时候基础都是第一位的,再好的翅膀插在猪的背上,猪也飞不起来。
zjlzjlzjl、Coolyu0916认为基础很重要,banq兄其实也没有说基础不重要,这一点大家是有共识的,不必多说,如果有人认为基础=基础知识,那他一定飞不起来,咱们就不和他讨论了。

===============================
智商再高点应该可以发现我的第二个观点:软件技术的基础是数理逻辑,猪飞不起来,不是因为骨骼肌肉不够强壮,而是猪太笨重,看问题要看问题的本质。
zjlzjlzjl本意想说的应该是java语言是基础,但标题写成了j2se是基础;banq兄估计没细看zjlzjlzjl的正文,顺着标题就反驳说j2seAPI不是基础,其实是关公战秦琼了。java语言和j2seAPI是什么关系,大家应该都清楚,不清楚的就别看什么J2EE、设计模式等等高深武功了,省得走火入魔。
banq兄提出模式设计是基础,zjlzjlzjl认为java语言是基础,Coolyu0916等延伸出数据结构和算法是基础,我认为都没有错,按我的意思,数理逻辑才是真正的基础;再往下推,智商才是终极基础,要不猪怎么就不能玩Java?

banq兄认为模式设计和数据结构是两条并行、对立的东西,这一点我有自己的看法。我认为数据结构的本义并不单是堆栈链表二叉树之类具体的东西,而是一个软件实现的数学模型,从这个角度说,设计模式其实也是一种数据结构,面向对象的数据结构(不是说OO表达的堆栈链表二叉树之类)。连最简单的程序都要有数学模型,就像上面的笔试题,因此,在数理逻辑之上,数学模型的抽象能力才是软件技术的基础,堆栈链表二叉树、设计模式都是数学模型的例子而已。因此数据结构不是就那么几种,而是你想不到的多;设计模式也不是就那么几种,也是你想不到的多,对于真正掌握语言的人来说,前人总结的模式和数据结构不过是一些语言应用的例子而已,无非是“熟读唐诗三百首,不会作诗亦会吟”,离真正的思想原创还有很大距离。大学软件专业课程设置的一个缺陷就是把<<数据结构>狭义化(或者说没有设置专门的<<数学建模>>课程)。

banq兄将OOP思想绝对化(也是很多OO大师的主流倾向),我认为也是可探讨的。站的高一点说,软件的目的是为了解决问题,即软件的本质是工具,没必要把工具意识形态化。站的低一点说,“面向对象”符合人认识世界的自然天性,而“面向过程”其实也符合人认识世界的自然天性,比如说“打酱油”,我们首先想到的是“两毛钱交过去,一瓶酱油拿回来”,而不是先想到“钱包”、“钞票”、“哪条路走”、“哪家店”、“哪个瓶子”、“让谁去打”,因为这些对我们“打酱油”这个“业务”不重要,所以自然地被大脑至于次要的位置,甚至忽略,如果硬要OO方式去建模,只能把问题复杂化。再退一步说,OO也不能解决所有的软件问题,你可以把这个论坛的数据库替换成XML(XML也不是OO),但你不能能把目前绝大多数应用系统后台的Oracle、DB2。。。都换成XML。OO数据库概念叫唤了这么多年,产品也推出不少,就没见有成功的,我看不是因为技术不行,而是方向根本就不对;其实目前Java后台开发的主要问题就是OO编程与RDBMS访问之间的mismatch问题,EJB,Hibernate等都是在这个地方折腾,目前看这个折腾还远没到消停的时候。

===============================
我的第三个观点,需要和智商很高的朋友:)一起探讨:JavaWeb开发不应该走现在的高端路线,既然没办法让猪飞起来,那就让猪跑起来。

我猜想zjlzjlzjl提出这个问题的出发点之一,应该含有对目前各种不断更新的j2ee开发技术的厌倦;banq如果没有自己的框架,而是不断跟随这些新东西,也一定会厌倦;对于初学者或者天资不够的程序员,他们连厌倦的资格都没有,只有迷茫:学海无崖,何处是岸?这么点破事,做起来怎么就这么费劲?

j2ee开发为什么这么费劲?j2ee社区的开发效率为什么远低于.net、php?

千条万条,不如一条:j2ee程序员的包袱太重,要学的东西太多,时间精力过于分散,导致基础薄弱,能力很难提高。

既然总是找不到足够数量、足够水准的程序员做j2ee项目,我们就有理由怀疑主流的J2EE开发模式本身是否有问题。一个地方的老百姓都成了刁民,那地方一定是穷山恶水,或者官府腐败、苛捐杂税太多。在我看来,j2ee的苛捐杂税就是太多了。

各中J2ee开发框架或技术,包括EJB、Struts、Spring、Hibernate、JSF等等,还有banq兄的这个jdon:),都明确地告诉你:我这东西很simple,你这样这样就行。但很少有告诉你:你必须先这样这样,才能用好我的东西。我认为,一个好的开发框架或技术应该是三流程序员也会用,二流程序员用起来很爽,一流程序员用起来叫绝的龙泉三尺剑,而不是一个只有优秀程序员才挥舞得动的青龙堰月刀。如果不懂设计模式就做不好j2ee应用的话,那么大量j2ee应用项目的拖延和失败也就是理顺成章的事了。

基于降低j2ee开发门坎、提高开发效率的思路,我很早以前就设计了一个JavaWeb开发框架:http://www.xjawa.org/ (打个广告,呵呵)。 该框架只要求程序员掌握基本的Java、SQL、JavaScript、HTML、简单ServletAPI,其他所有技术都不是必需。当然,由于j2ee开发社区的浮躁气氛,开发人员对主流新技术的狂热追求,以及客户被大厂商严重忽悠,我这框架在公司内部也不能全面推广;具有讽刺意义的是,数年之后,居然跑出来一个Ajax,而这东西仅仅是我框架中的一部分而已,这两年居然成了技术热门。

总的感觉起来,国内的技术环境确实很浮躁,大部分程序员不注重技术基础,更谈不上计算机科学素养。因为根基不稳,所以特别容易跟风,而j2ee的风又是东南西北的胡吹,开发者,尤其是初学者搞不清方向也就很正常了。

李柏 @ http://www.xjawa.org/

leebai ,您好,看了您的帖子,我大体上理解为“思想”在软件开发中的重要性,不知道对不对。
> 如果有人认为基础=基础知识,那他一定飞不起来,咱们就不和他讨论了

至少基础,我觉得大部份人还是会局限于基础知识上面,从上面的讨论中也可以这样认为,而您将“思想”也归根于基础,首先我是赞同的,可以说,“思想”是一切的基础,这一点,换成哪行哪业,都可以这样说,所以,我觉得,光说“思想”,是不是太笼统了?(所以我有可能飞不高了,呵呵),所以还是回到比较实在的内容上来说比较好一些。

我经常过来,可是很少说话,看到这里我也想瞎掰上几句;
我赞同leebai 的大部分观点,我经历这两年的开发工作,虽然都是在小公司做,可是我还是觉得计算机基础知识很重,现在正在补习ing。
特别是一些要求比较高的软件开发对基础知识要求还是很高的

简单、高效、低成本==僵化、高维护、不可重用
DDD一书中论述过这种智能UI技术,不想学成猪的人一定要小心。

leebai 看待问题比较全面,我很赞同。

>>简单、高效、低成本==僵化、高维护、不可重用
>>DDD一书中论述过这种智能UI技术,不想学成猪的人一定要小心。

呵呵,可是号称可维护,可重用的人连我的问题都无法做出来有什么用??软件不就是为了解决问题的么??我们争论的那么多,我们就实际用个例子来说明最好。你说你有理,我说我有理,我能够实现目标,你要是能实现我就心服口服,如果做不出来,我们讨论这个就是没有意义的,事实就证明谁对谁错了。

btw:那些号称oo设计师们,你也可以做做我的题目,我想看看oo设计是如何解决实际问题的。
[该贴被Coolyu0916于2007年04月11日 09:23修改过]

我没有说oo不重要,只是说什么最重要。

软件是为了解决问题,能够实现是第一目的。客户提出一个需求不是让你说我使用什么框架,用了什么设计模式,最终用户只关心你最终的东西实现了没有。

我copy代码虽然不好维护,但是对用户体验是一样的,只是可能对我后来修改的程序员不负责了。但是相对客户跟程序员那个更加重要那??诸位想过么??

oo的好处在以可移植性,算法的功用在于实现,也就是说oo可以让一个Array.sort可以到处都来用,可是前提是必须存在Array以及sort,不存在这个讨论就没有任何的意义。

可以有人说sdk里面都提供了这种东西,根本不需要我关心。可是sdk通常是为了最差情况准备的,即是一个平均效率的最佳值,并不是一个实际的最优值。可能有人说现在内存,cpu很便宜无所谓,可是这是你程序员应该说的么??程序员不追求性能还能称之为程序员么??有人说我们叫设计师,你想没想过一个裁缝连做衣服都不会怎么称之为时装大师那??我刚一毕业的时候也觉得算法无用,但是我当我看见一个算法的改进可以让原来需要14个小时的清算程序只需要不到2个小时,那种震撼是非常强烈的,我才重新捡起我大学的书,重新去学习这些东西。

也许我回的帖子可能跟一开始的说得东西不一样了,我只是想说明算法的重要性。而且这个帖子里面很多人把基础等同于语言基础,认为所谓基础就是学会一个语言,熟悉API。如果有精力熟悉API是一个非常有必要的事情,如果没有时间掌握一点语言特性就可以了,不必说死扣那个部分。如果你真的对一种语言包括库都很熟悉的话,那就是专家了,也有发展前途,如果你作全才,都有涉猎,那么抓住主要的东西,核心的东西,什么东西熟悉两天就能上手也是人才。两种都是公司需要的人。但是不管你选择成为哪一种人,算法都是基础,没有这个你可以干活,就象街头小混混,也能打人,可是永远成不了武林高手,张无忌练就了九阳神功,其它的招式不过信手拈来,看别人用龙抓手,看两遍就能上手,而且会比别人用的更好,因为他更清楚中间的奥妙,什么原理,怎么存储的,那里可能存在瓶颈,都在指掌之间。

oo设计说玄妙也玄妙,说不玄妙也不玄妙,为什么你定义一个interface,然后有个class实现了他就能当interface用那??希望大家想一想。
[该贴被Coolyu0916于2007年04月11日 09:37修改过]

to flyinghuang :

你说的对,但不准确。“思想”和“逻辑”还是不同的,中国人不缺思想,但缺逻辑,这也是中国近代以来落后于世界的根本原因,题外话了,呵呵。