算法还是最重要的

学习了2年多的java,设计模式,感觉小有所成,可是最近两个月的笔试和面试,我慢慢觉得原来算法是最重要的,无论是微软,亚马逊,百度还是豆瓣,笔试的都是大量的算法题,而且都是比较深入的那种,现在我买了本《算法导论》,自己重新慢慢看,哎,为了找份不错的工作,真是不容易啊。其实中国的很多java软件企业在开发中,很少使用设计模式和领域建模的,都是比较数据库化的,所以既然找到这样的工作,我也不想去干,因为明明知道是不OO的,还天天拼命的去做,哎。。。。
只能好好学习算法了,希望不久的将来能找份好工作~

>其实中国的很多java软件企业在开发中,很少使用设计模式和领域建模的

所以 中国软件落后啊,萧条啊,那些命题的考官都是过时淘汰的人,所以,这次危机淘汰的都是他们,如果你被他们的试卷录取进去,你会跟着他们一起淘汰。

设计模式 领域建模是世界潮流,是软件的本质,是将软件做的更易于维护,这才是软件专业。

至于算法当然重要,但那属于另外一个专业:数学。

这些企业之所以考算法,也可能有其他想法:是想一个人两个专业都做,就象找电工,最好水电都会做。


[该贴被banq于2008-11-27 15:44修改过]

>至于算法当然重要,这些企业之所以考算法,也可能有其他想法:是想一个人两个专业都做,就象找电工,最好水电都会做。

算法和面向对象是两种技术,它们一起改变了我们的世界。但是我觉得计算机的学生应该都学习一下,算法和面向对象都要学习,前些日子看李开复的文章《算法的力量》,使我深有感触,作为一个程序员,算法和面向对象技术应该是内功,都要学,而且都得学好,这样以后解决问题才能游刃有余。

我接触到的很多程序员的OO思想太差劲了,就知道增删改查,根本没有一点点OO思想,算法也很差,所以,哎。。。。

作为两项非常实用的技术,算法和面向对象都要学,不知道banq对此有何更高明的看法,我觉得对于一个计算机的学生,至少要有一个很不错的算法基础,这样以后解决实际问题会更好一些,当然面向对象的思想也要学习的。

我们所说的程序员通常是在描述业务过程的,包括那些JBoss之类的架构绝大部分功能都是在描述业务,在这个业务过程中算法的应用实在是很轻微的。

程序员需要有算法的思考,但是不能沉迷于此。现在最主要的问题是很多人知道算法的重要但是恰恰忘记了为什么需要算法,应用软件是为了解决现实中的业务过程问题这个才是软件的根本。

当然也有人专心的写算法比如那个SuperPi的计算程序就需要非常好的算法、数据基础,但是那些已经不是我们所说的范围了。

作为应用软件的作者我们时刻需要考虑的核心问题是:我的程序为谁提供了什么方便?

楼上:应用软件是为了解决现实中的业务过程问题这个才是软件的根本。作为应用软件的作者我们时刻需要考虑的核心问题是:我的程序为谁提供了什么方便?

说得太好了,看来不是一个人在这里穷吆喝,还惹得不少人反感我,现实和思想,你到底选择哪个?选择有灵魂的躯体还是混口饭的行尸走肉呢?

只要是思维总会有不同的角度,只要有角度总会有盲区,每个人思考的角度不同,也就各自有一片盲区了。交流的过程就是在化解彼此的盲区。任何人都可以反对我,我只是希望对方可以用平和的方式表达出来。

软件人就需要一种“俯视”思维方式,从本质上发觉自己的职责和价值。

遗憾的是我连口饭都还没混好呢。

应用软件是为了解决现实中的业务过程问题这个才是软件的根本。作为应用软件的作者我们时刻需要考虑的核心问题是:我的程序为谁提供了什么方便?

绝对佩服这句话,曾经我使用一些非常华丽的技术做出来的产品没有人使用,竞争对手使用一个个难看的HTML界面却完整描述了客户的业务需求。OO与其他任何技术一样,是服务于业务的。

感觉现在都是你用什么做,怎么做都不重要,而重要的是客户说好,行,可以。所以咱做软件开发的感觉都是啊那个啥样的整哦,整出来完事。
当然客户说好是硬道理是对的,但是做的时候乱来,就会给维护造成相当大的麻烦,特别是遇到原班人马已经不在的情况做二次开发,那个难度可想而知。而牵涉到程序效率问题的时候,如果没有设计好,那么要达到一个理想的效果,也是很难的。

楼主肯能还没搞清楚自己是做什么的.

从前我们用账本或纸张描述业务问题或记录业务数据.

现在我们用电脑,用互联网,我们系统所描述的东西就是现实中存在的业务流程.

现实中的业务流程是用算法描述的吗?

OO之所以提出,不就是让我们运用现实的眼光来看待抽象的系统的吗?

OO不就是让我们用人类自然的语言来和计算机交流吗?

你去找个源代码看看吧,看看我们编写的是什么代码,具有OO思想吗?

看看我们的大学生学了算法、通过程序员考试,编写的却是什么代码?
-
我想中国还是少些您这样的牛人得好,在软件应用领域中。

其实我很不赞成李开复的“算法的力量”,先抛开文章篡改概念不谈,就谈李开复本人,如果他的技术思维正确,他就不会从研发架构第一线淘汰到总裁管理位置。

中国学生包括成人总是很纯洁(大陆文化导致),总是会被来自台湾的这些过气的所谓技术专家忽悠,对此我非常生气,我宁可背着做人很差的名声,再骂骂他们,省得他以为大陆人都是傻冒。

“算法的力量”一文中,支持算法就是力量的最有力证据就是Map and Reduce算法,其实(开源代码Hadoop 已经实现Map and Reduce算法了,那么文中所谓的google核心优势是否没有了呢?google是否就此倒闭了呢?Yahoo用了Hadoop是否就超过google了呢?肯定不是,所以,Map and Reduce算法只是google优势的一种而已,而不是全部。没有一家公司靠自己独特算法秘方取得制胜的力量,这是关键。Google取得王者地位肯定不是完全来自算法,只有李开复这个从算法角度吹嘘的人才会得出google这样所谓算法的力量。

再说了,Map and Reduce算法只是云计算的一种,我在“云计算以及成为现实”一文中已经介绍很多不同架构结合不同算法的云软件技术。总得来说:公司技术核心力量来自:架构+算法,如果这些算法有现成开源,比如Hadoop我们就可以拿来使用,如果没有,我们可以创造它。

但是如果只有算法,没有平台架构,算法怎么会自己跑到计算机里运行呢?架构是一个公司的特点,不可能有两个公司有相同技术架构,因为每个公司业务特点不一样。

我们再来看看,李开复如果实施招聘,肯定处于其算法就是力量的思想出大量算法题目,如果是这样,我不知道他怎么想,难道他想在中国google这样应用前线,培养出Google最资深的计算机科学家Jeff Dean这样的人物?其实一个公司只需要几个象Jeff Dean这样算法大师、架构大师或者需求分析师就可以,可能只要求是创业者或者核心股东人物,根本不需要每个程序员都成为这三个大师的一种。

所以,你招一些只懂皮毛算法的程序员有屁用?能给你李开复再整出个Map and Reduce来?如果算法的创新可以靠人海战术搞出来,中国早就在计算机上显示无穷的力量了,因为中国过去软件教育就是算法教育,结果如何呢?不但算法上不如老外,应用上更加落后。算法同样靠灵感和创新,宣传算法就是力量,和号称全民练钢有什么区别!

>总得来说:公司技术核心力量来自:架构+算法

举双手同意!!!!!!

在J道的讨论每次都让我受益匪浅啊~~


> 楼主肯能还没搞清楚自己是做什么的.

你不要误解我,我看过很多设计模式的书,领域驱动设计也在我的床头。但是我还是认为一个程序员肯定是要懂算法的,我想banq肯定知道很多算法的。我自己现在这么认为,一个成功的软件应该是OO+算法。我们程序员至少应该懂得一些最基本的算法把,我面过微软,百度,亚马逊等公司,他们不会问你特别深的算法,如果能把《算法导论》看明白,他们的面试应该能过的(现在我正在看)。所以,我认为算法是一定要学的,学算法当然要有好的数学基础,呵呵

>感觉现在都是你用什么做,怎么做都不重要,而重要的是客户说好,行,可以。所以咱做软件开发的感觉都是啊那个啥样的整哦,整出来完事。

唉,这就是中国软件的最大悲哀啊~,有时候明知山有虎,偏向虎山行~

>遗憾的是我连口饭都还没混好呢。

好不容易要毕业了,结果赶上经济危机了,眼泪哇哇地,现在工作还没个着落~~

读过很多书并不代表对计算机文化的理解会深。对于算法,我依然同意它的重要性,但对于企业应用而言,更重要的,的确是业务。

算法,可以当作一种修为,而对架构和业务的理解,却是深层次的。

给企业做软件,对企业的了解才是最重要的。

我觉得算法还是很重要的,企业开发中业务逻辑断然重要,但是我们不能知其然而不知其所以然,数据结构和算法以及OO思想都很重要,我觉得没有必要为了一个而抛弃另外一个,不要从一个极端走向另一个极端,banq说有他的道理,但不能就这么抨击现在的计算机教育,如果现在大学都从OO思想开始讲起,估计中国也不会培养大师级的任务,
个人意见,仅供参考

>>所以 中国软件落后啊,萧条啊,那些命题的考官都是过时淘汰的人,所以,这次危机淘汰的都是他们
这是真的吗?是发生在中国吗?如果是发生在中国,那公司招2009届毕业生应该着重考设计模式,领域建模才对呀,但现实不是这样,所以它没有发生在中国,所以楼主,我,毕业生们,老老实实的搞算法和数据结构吧,不然你没有机会!

今天面试了,帖几个面试问题:
1,你简历上的ORM是什么意思?
2,你认为Java工程师应该具备的基本素质是什么?(这个还稍微是个问题)
3,spring是用来干什么的?
4,你会写oracle的存储过程吗?
5,请比较一下struts和spring (有可比性吗?)

最后一个,也是我永远不会忘记的:Java里面创建对象有几种方式?我说,new和反射,面试官又问,那工厂模式和spring呢?我无语了,但还是答道,它们底层不还是new或者反射吗?面试官是不是都很反感被反问?由此对我非常不爽,后来基本上都是话不投机,我直接闪人了。

也许真的是年少轻狂吧,又或者是在jdon上混过,我现在都不想找工作了,不过也许多面试几次,多被打击几次或者多被这个社会抛弃几次就醒了,醒过来之后继续啃算法导论和数据结构。

最后提一个小小的要求,banq老师,如果你要面试一个人,针对我们应届毕业生,你会问一些什么问题?谢谢!

[该贴被oojdon于2008-11-29 18:30修改过]

我下周五有百度的面试,想都知道,技术面肯定是算法方面的,所以,只能继续加油好好看算法导论了。其实banq所说的那些东西,让我的视界开阔了很多很多,使我对软件有了一个更新的认识,但是通过这次找工作,我发现那些架构还是比较虚的,做为一名计算机学生,应该像李开复说的那样,打牢自己的基础知识,把数据结构,算法,编译,离散数学,数据库原理这些基本功都好好学学。

有了这些基本功,在学习OO,设计模式和更高深的架构,将使你更加游刃有余。我相信如果学好算法对以后自己解决问题方面还是大有裨益的,所以算法对我们还是很重要的,这就是为什么google,百度,微软都在考算法。