> banq 我是很佩服的,但对于大学教育的看法有些片面。
不,他在算法问题上,和大学教育一样片面。在这方面他是中了大学教育的毒。


这篇文章和里面的评论说的很好

banq能否在看完回复后评论一下??

看了各位的讨论以后,有点迷惑,我以前做过的一个系统(排课)核心功能,主要是用回溯算法实现的,如果不懂算法的话,怎么实现,我想复杂点的系统还是要用到一些算法吧!当然我也同意各位所说的算法不是一切,也不是相当重要,只是会一些就ok了....

美国大公司面试考的都是算法题。不重视算法的后果就是美国有一堆世界级的大公司,而大多数中国公司只能用别人开发出来的技术做“企业应用”。

算法代表的是解决问题的能力,尤其是在面对一个全新的,没有现成解法的问题的时候,你能不能自己找出算法?

算法才是一个公司核心竞争力。懂了编译器构造的算法,即使是使用面向过程的语言,也能写出编译器;不懂编译器构造的算法,即使OO,模式再牛,也写不出编译器。世界上懂OO,模式的公司多了,有几个能挑战微软,SUN,Google?

>>架构是一个公司的特点,不可能有两个公司有相同技术架构,因为每个公司业务特点不一样。

用面向服务的思想做面向对象的软件,是不是有点道貌岸然。

越来越感到算法需要加强了。很多人无法脱离数据库的原因就在于数据库将本来程序员应该掌握的算法隐蔽掉了,计算和的时候很多人第一时间想到了sum,而不会自己去累加,想到了排序马上反应为order by而没有想到quick sort。算法跟OO是天然的阻抗么??许多人正是因为算法不行,所以才不敢放弃数据库这个工具。算法是基础,是一个程序员区别于程序爱好者与混口饭吃的人的真正区别。

今天参加了微软一个recruiter组织的calling conference,有关微软的招聘和面试。Recruiter首先强调微软招聘看重解决问题的能力,主要就是对算法和数据结构的理解,和设计的能力。回答问题期间,有个人问拿一个.NET的认证有没有帮助,他很果断地回答说“No, don't do that!”

让我给你们做个总结性的回答:需求最重要!
这个社会化大生产是需要分工的,大家该搞算法的搞算法,该做应用的做应用。散了吧。

哈哈,你学了两年java才开始学算法啊,我学了7个月就急着去书店买《算法导论》了,小吹一下~~
总结:算法是写出文章的关键,而设计模式只是练了一副好字而已

算法真的是一切吗?

有钱人选择有灵魂的躯体,没钱人还是选择混口饭的行尸走肉。这就是现实,没有饭吃,什么都是空话。灵魂在高,也怕被饿死。
企业需要我们是什么,我们就应该学什么,不然你就去创业,自己当领导。人就是这样在活着。
[该贴被lei55022033于2009-10-20 23:43修改过]

目标是一堵墙,较早的时候没有水泥和砖的概念,于是从山上取一面墙那么大的石头,当然这是很费力的,并且要有其他需要砌墙的地方,这石头也不好挪来用。后来有人发明了砖和水泥,有了很多的砖厂来生产各种各样的砖,并且可以自己来烧。砖的好处在于:1 只要不是太旧可以拆来砌新的墙 2 要是某一块旧了(实际上是有了更新更好的砖所以显得旧)可以换块新的。
另外,同样是砌墙不同的工匠砌的墙是不一样的,可以砌出豆腐渣,也可以砌的坚固耐用,甚至砌出了艺术品(个人觉得能坚固耐用就很不错了)。这里砖当然是很重要的(没有砖,没有墙),但是希望不要把砖烧到墙那么大,主要是太费力。当然烧砖的技术要是进步了对墙的质量提升是很有帮助的,要是对这个有兴趣也要发扬,还是挺佩服有人能静下心来做基础,服务大众。不过现在制砖的工艺已经很难提升了(就像CPU的主频),因此现在大家的主要话题是如何砌墙。

个人觉得算法很重要,但是模式也很重要,现在如果光懂得模式,没有一定逻辑-比如算法基础,很难设计出高质量高效的程序,现在很多企业都在搞模式,效率很低,也有很多这种情况,懂算法不会运用。。。杯具。。。所以我个人认为两个都很重要,当自己领悟到一定程度的时候就会发现,一切都是那么的美妙。。。

同意bang的观点,不是说算法不重要,而是对大多数搞应用的人来说,把有限的时间花在架构的理解上绝对比去深究算法更有效。也可以这么说,对一个搞应用的人来说,0+10或者10+0都是不可取的,但7分架构+3分算法绝对比3分架构+7分算法的效果要好。
举个排序的例子好了,你可能把堆啊,快排啊,希尔啊都研究的很透彻,能根据数据的分布能选择最适合的方法并实现。但站在应用的角度这并不够:考虑到排序是一个普遍的操作,对于不同的场景可能需要选择不同的方法,所以我们需要一个可以自适应又可以扩展的排序框架(这里用framework大了点),这就需要抽取出Comparable接口;进一步,假设User一般比较少,适合bubble sort,而Order很多,用quick sort合适,HotTopic又适合heap sort,这又需要抽取出一个 SortingAlgorithmSpecfiable接口来。
以上过程中,好的架构可以更好的封装算法,为引入新的算法打下了一个良好的基础。而软件开发中,对需求的实现也可以认为是一种算法,并且这种算法是注定会随着对需求的深入理解而改进的。这种情况下,对整个系统来说,组织好实现,通过开闭原则使得改进算法的影响尽可能封闭,其重要性要大于某个具体的算法效率有了多少提升。而这也是模式啊,架构啊所追求的re-usability。
一个比喻,软件就是PC,架构就是主板,算法就是芯片。有一块好的主板,以后可以通过升级CPU啊显卡啊什么的来提升机器性能。但一个差的主板,就是CPU再快,内存再大,还是能天天给你折腾出蓝屏来。

现在中国就是这样。一个人当一个团队使。能剩则剩。。。还是都学吧。。好好学。。