高手就是高手,说的好多东西俺都不能深刻去体会其中的含义,只能感叹俺的知识浅薄啊,真想自己能很快弄懂很多东西,好和大家一起来争论争论!
本人本不是学计算机专业的,可是对程序和计算机很感兴趣。我那个专业教我们学习jsp,老师建议我们学学j2ee,以后可以去做企业级开发,当出于兴趣的原因,刚刚看了《数据结构与算法》的第一章,觉得还是很有收获的,就讨论的问题我说一说自己的心得。
算法有广义和狭义之分,从广义上看,它是对特定问题的求解步骤的描述,至于用什么语言来描述没太大的关系,重要的是算法的正确性。程序本身体现的就是一种人类的逻辑思想,在复杂的程序也无非是很多个小逻辑组成的复杂的大逻辑,而这些逻辑的过程就是算法。(本人个人观点)从狭义上看,算法就是方法或者说函数的内容,在基本数据类型的基础之上构建心得数据类型。c中的结构体和共用体,java和c++中的类不都是具有新的数据结构的数据类型。无论你再怎么面对对象,cpu执行时只有指令和数据,书中有一句话我觉得很经典,“c语言可以看作是一个执行c指令和c数据类型的虚拟处理器”。说到底,算法和面对对象等架构软件设计思想并不是两个独立的两个思想,也并不冲突,甚至在面对同一个问题时二者是互补的,对哪一个的领悟不足都会可能成为瓶颈,所以对二者的认识程度就意味着你达到怎样的境界,二者也许不是平衡发展,比如说在企业级开发方面,对算法的要求不是很高,对架构就会高要求。在os,嵌入式系统方面,对算法的要求就会很高。至于该加强哪一方面就要看自己的情况了。
以上纯属个人观点,呵呵,还不够成熟,在大家面前献献丑。现在自己也遇到了瓶颈,对于一些软件设计的概念也不是很理解,希望高手指点指点。以前学jsp觉得只是在做网页,现在觉得实质在做java,学了struts,学会用struts做登陆注册,可不知道该怎么提高了,在系统架构方面不知该怎么办,不知道该怎么从敲别人的代码转变成自己去搞设计,比如说用struts+hibernate+spring组合等等,希望高手指点指点,指一条明路,解解自己的燃眉之急!!

banq 我是很佩服的,但对于大学教育的看法有些片面。

我觉得算法、OS、DB等基础教育还是最重要的。模式诚然也重要,但不应该凌驾于基础之上。有道是勿在浮沙筑高台,基础一塌糊涂,其它再牛也终究难成大家。

中国计算机教育的问题不是学什么的问题,而是大学教育本身的问题。中国的大学是个让人不思进取的温室,里面很多学生都不怎么学,只是考试前应付一下拉倒。这样你跟他开什么课都没用——开数据结构最后他不知道啥叫堆栈,开设计他也说不清啥叫模式。

相比之下,国外的大学是另一番景象。以前听一个美国过来的教授说起过,大学入学时美国学生的水平比中国学生低一两年,但毕业后水平差不多。他说的是比较客气了,其实毕业后我们要落后人家一两年。原因就是我们高中绷得非常紧,大学又放得非常松。

关于大学计算机教育,我认为有两个方面需要改进:

第一是增加学习的动力,真正形成学习的气氛,不为了应付考试而学。这个适用于所有学科,不只是计算机。当然,说来容易做来难,我也不知道到底怎样才能给温室里的学生增加动力。

第二是增加实践。我们课上的不少,但基本只是听老师在上面讲,最后没几个真正能写程序的。计算机是实践性非常强的学科,理论跟实践应该1:1才对。

关于设计方面,诚然也有增加分量的必要,但教育的失败并不是因为缺少设计。

我一直认为算法才是王道。。。
做一般的程序员你可以抛开算法
但是你想做得很好的话,算法还是必不可少的
中国教育真的很缺少算法这种东西
ACM这东西推广的范围不够广啊

新人报到。向大伙学习

banq的观点可以理解,因为那是基于他多年的架构的经验。但对于初入职场的人来说,确实还是需要一些硬功底作为敲门砖的。因为没有人去听一个面试者大谈架构之类。我是一个在美读书的学生,现在也在面试和找工作。我的感想就是无论大公司还是小公司,面试时还是非常注重基础的,也就是算法和java等语言的基本特性。只是我们工作以后不要忘记自己更高的关注点应该放在架构上。

今天第一次来J道,才看了一个帖,感觉这里高手很多,很想参与进来。我在加拿大干了快10年的JAVA 开发工作了。3年前我才认为我真的明白点OO了。 大概几年前,我从一个论坛偶尔读了一个帖子。"你还在用if else吗?",其实是从这里转过去的。我当时就觉得这帖子的作者水平很高。 但显然帖是转的,我想同楼主交流,可总也没有回音。 今天闲来无事,GOOGLE了一下那篇文章,发现出处在这里。 随便看一下,发现这里有很多高手。 BANG的观点我非常赞成。 说说我的几个观点。
1,如果大家在用JAVA的话,说明大家90%在做企业应用,企业运用非常少机会用到算法,可是如果你真正的懂了OO,你会发现你经常能用到。
2,G OF FOUR DESIGN PATTERN也是微观级的运用,可能能常用用到一些,但这种代码重用的机会很小。我的意思是CODE RE-USE,真正常重用的是OBJECT。
3,如果你的系统能画出漂亮的SEQUENCE DIAGRAM,每个OBJECT 合作完成一个任务,而不是一个CLASS 发出很多信息,那就说明你在用OO。
4,我在很多公司做过很多项目,到现在为之,我只见过一个人真的在用OO,这个人我还没有见过,我只看见了他的CODE,那时,我也不懂OO,看到他的CODE,我很奇怪,找他的逻辑在那里,我得看几个对象。 但是我又感觉很妙。后来我读了MARTIN FOWLER的PATTERN OF ENTERPRISE APPLICATION ARCHITECTURE,才明白了OO的理念。在加拿大,决大部分人还是把JAVA当PROCEDURE 语言在用。 我看了很多项目很成功,可是没有用到OO。 可是当你明白什么是OO的时候,你会觉得做应用软件是个美妙的事。越是复杂的系统,也妙。简单的系统你都没有机会用OO。
5,从我明白OO后,我常想如果我面试别人,我怎么能甄别他懂不懂OO,我觉得很难,唯有面对面的面试才能发现。考算法来招人做企业系统,我真觉得没有用,可是你能让人家考什么呢? 再说面试的人八成自己也没用好。

在我找工作的过程中,我也问了一些面试官,为什么面试算法。面试官的意思是大家在学校都会学习算法这门课程,考算法对于大部分应届生来说是比较公平的,他们考的算法也不是很难,就是用算法来考察一下面试者,如果单纯的考察设计模式,这对于很多应届生是不公平的,毕竟如果你学习过设计模式,是可以忽悠一下的,要是没看过,就是一点都不会。

banq是很看重OO的,但是我还是认为学习一些算法,计算机基础的东西还是对自己的发展大有裨益的

楼上dennischen 做了10年的Java企业软件,他的经验供大家参考。

由于软件行业发展迅猛,存在时间又比较短,有10年企业软件开发经验的人在中国都很少,那么相应的老师教授更少,所以,他们不可能把真相教给学生,因为他们自己都没有认识到,包括那些考试官。

象china-pub.com这些售书网站还在搞: 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境),这7种武器中,正则表达式/数据库/算法都不属于真正软件核心部分,学了这些,不学模式,编出的都是僵尸程序,维护成本很高,扼杀软件的生命,所以,个人认为都是误导,就象中药,吃多了也不死人,就是耗时间,走弯路。

这里再次重复强调:模式是软件基础,如果非得要问算法和模式哪个是最重要,唯一的,那么无疑是模式,当然,知识学多了不坏,技不压身,但是关键你要能跳得出来,跳不出来,你就成了书呆子,与其成为书呆子,不如少学点,学精要的。

[该贴被banq于2009-02-24 12:06修改过]

个人认为OO无法真正区分一个好的程序员和一个差的程序员,但却能够区分一个好的架构师和一个差的架构师;
反之,算法却能区分一个好的程序员和一个差的程序员,却无法区分一个好的架构师和一个差的架构师

>>>个人认为OO无法真正区分一个好的程序员和一个差的程序员,但却能够区分一个好的架构师和一个差的架构师;
>>>反之,算法却能区分一个好的程序员和一个差的程序员,却无法区分一个好的架构师和一个差的架构师

哈哈,有见解~

banq说的是对的,关键看能不能跳出来,毕竟技不压人啊,我面试的时候,有时候会问一下面向对象的问题,我就会把设计模式这些忽悠一下,还是很有效果的

另外,我还是很喜欢敏捷开发和xp实践,像测试驱动开发就相当的好,不知道banq对这些方法持有什么想法

>>>个人认为OO无法真正区分一个好的程序员和一个差的程序员,但却能够区分一个好的架构师和一个差的架构师;
>>>反之,算法却能区分一个好的程序员和一个差的程序员,却无法区分一个好的架构师和一个差的架构师

哈哈,有见解~

banq说的是对的,关键看能不能跳出来,毕竟技不压人啊,我面试的时候,有时候会问一下面向对象的问题,我就会把设计模式这些忽悠一下,还是很有效果的

另外,我还是很喜欢敏捷开发和xp实践,像测试驱动开发就相当的好,不知道banq对这些方法持有什么想法

都是牛人啊,不过对于bang的观点不认同,“正则表达式/数据库/算法都不属于真正软件核心部分”,那么请问你你的模式再好,设计的再合理,结果系统性能不好,客户也不会用你的产品。bang说的一些观点主要针对企业级开发,我也认同,在企业级开发中模式相对用的多。但是做为一个IT的人也不能说出上面这句话。

算法和模式,楼上有几位说得很好了,其实它们不冲突的,没有谁轻谁重。想学什么,看你以后做什么。
算法、数据结构和模式都是软件核心技术的,但开发新的算法和数据结构不是我们每个人都能从事的。以前上大学时听老师说过,计算机软件中最难的是“编译器,数据库,操作系统”三个软件的开发,这三个软件没有合理的算法和数据结构是不行的,还有个说明算法很重要的就是当前的搜索引擎技术。
[该贴被sunsetwind于2009-03-04 11:04修改过]

我很喜欢BANQ的真实,直白,敢爱敢恨。

很多的人做到一定水准了就装起来了。

既然要有水准那么就沉默是金,就说话文绉绉的。

认为自己已经够牛,没必要来和你们讨论这讨论那!

去他妈的。

为什么中国的软件业上不去,缺乏沟通和交流是原因之一。

这里讨论到算法实际上针对的对象是技术人员。

好公司当然得要有好的技术人员,但是反之并不成立。

我倒并不认为这种不断地学习是一种负担,而是一种快乐。

当你每每发现一片处女地得时候,你会欣喜若狂。

从大家的讨论学到很多

不过这句话真的很雷!

说李开复从“研发架构第一线淘汰到总裁管理位置”

淘汰到总裁管理。。。。。

《DDD》里面5.6章有对非对象建模范式也有论述,不过现在是oo的世界了