`
庄表伟
  • 浏览: 1145659 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

算法算老几?

阅读更多
hurricane1026问到:我问的难么?
这个帖子,我就不跟了,说说自己的看法:

1、无论是做软件,还是任何其他行业,甚至包括做人,很多时候,都是在解决问题。遇到麻烦,想办法解决。

2、最简单的问题,就是能够在书上找到现成答案的问题。比如:哪种排序的效率更高。

3、如果一个问题,书上没有现成的答案,能够通过Google、查找相关论文等等手段,找到答案的,也是简单问题。

4、如果,搜索不到现成答案,但是能够找到询问的人,问出答案来。比如Google不到,只能到论坛来求人,哀告,冒着被隐藏的危险提出问题。无论当事人觉得如何困难,其实都是小Case。

5、如果无论如何都找不到答案,怎么办?自己找呀!比如,这是一个开放源代码的项目,那就看代码。如果源代码都不开放,那就Hacking。反编译、debug、单步跟踪、设断点、打log,用尽一切办法,找到答案。

6、有很多问题,根本就是左右为难,你也知道了整个困难的全貌。然后怎么去解决他呢?左思右想,反复权衡,尽可能找到最好的方案。甚至如果有创意的话,能够想到一个两全其美的解决方案。

7、更加困难的问题是:它根本就没有正确答案,没有最优解。连如何评价各种解决方案的好坏,都说不清楚。怎么办?你还是得做出决策,然后执行。

8、再进一步,它本来就没有问题。但是,一个原本已经解决了的问题,你现在来考虑,有没有可能存在更好方案。比如:新的切入点;新的框架;新的语言;新的开发模型。这就更加困难了。

不再把人的问题牵涉进去了,那是没底的。

那么,算法算老几?
分享到:
评论
16 楼 ray_linn 2007-03-27  
我不懂算法, 但我懂End 2 End performance和CBA,如果算法需要改进,那我就hire数学大牛...

我是放牛的....

PS:

只有熟悉业务流程的程序员最有价值,这个是一定要挽留的.其他都可以replace.
15 楼 庄表伟 2007-03-27  
昨天晚上的话比较冲,缓和一点,再说两句。

1、每个人都是从自己的工作经验出发,来总结的。所以,从我的经验来说,我的工作中需要算法的情况,的确是非常少。

2、hurricane1026做的网格计算;dreamhead做的XRuby,应该都是算法密集型的软件吧。

3、我先大而化之的论一下,软件至少可以像企业分为资金密集型、劳动力密集型一样,分为:算法密集型;业务逻辑密集型;使用体验密集型;他们面临的挑战是不同的。
算法密集型,典型的比如一个搜索引擎。
业务逻辑密集型,典型的比如一个ERP。
使用体验密集型,典型的比如一个全Flash站点。

4、任何软件,归根结底自然是数据结构、算法、逻辑这些东西。但是,我们做实际的项目,不是从根子上去做,而是从已有的基础上去做。
一个拿着榔头的人,看到任何问题都觉得可以把它作为钉子敲一敲。
而一个拿着锯子的人呢?

5、说实话,我的算法功底的确是不行,但是我也可以很负责的说,我的debug能力非常强。那么,当遇到一个问题的时候,我往往会第一时间想到用debug的办法来研究。
这既是我的长处,同时也会成为我的盲区。

6、hurricane1026你在算法方面下过苦功夫,因此,你在面试的时候,很自然的就会问人家算法方面的问题,而且,当人家不能回答那些“很简单”的问题时,你就认为他们不行了。

那么,反过来问一个问题:一个人要来你这里面试,你认为,他不知道,或者忘记了哪些东西,是可以接受的呢?

在我看来,如果他忘记的答案,能够借助电脑、网络,在五分钟内把答案再找回来的。那都不是要紧的知识。

7、上一次讨论应届生的问题时,我很强调完成任务的能力。交给你一个任务,如果这个任务需要你具备算法知识,那就去掌握算法知识。如果这个任务需要你具备debug的能力,那就去提高debug的能力。如果这个任务需要你....,那么,就想办法积累xxx方面的能力。

任他千难万险,我总能够搞定。才这是真的厉害了。

8、回过头来说学校阶段,摆在你面前的那些课程,无论他是否重要,无论你是否喜欢,搞定他。挂掉任何一门,都不算本事。至于通过之后,那些知识还是不是需要记在脑子里,我看也就不必了。
14 楼 叶子 2007-03-27  
目前只用到了一次,算目录树的...
13 楼 dovecat 2007-03-27  
anweixiao 写道
dovecat 写道
算法对于写出好的程序来说,确实是很重要的,我们每写段程序,抛开数学上定义的算法来说,我们都是在写算法,业务逻辑等等都应该是广义上的算法.但是光从数学上算法来考量一个人,也不能说就是一种全面的考核方式.对于理解实际事物、事理,以及一个人的逻辑思维能力等全面的考核才比较公正,培养逻辑思维的不应该仅仅是数学意义上的算法.
所以,我取中庸.呵呵~~

其实,算法和算法的实现还是不同的,我们应该说:算法算老几?算法的实现算老几?多多包含。



呵呵~~这到也是.
BTW:庄老大解决问题的流程属于最有效率的算法了吧.呵呵~~
12 楼 刑天战士 2007-03-27  
我学算法,学的是一种逻辑思维能力,遇到新问题时候的思考能力,抽象思维的能力,不是说所有东西都能在现实中找到答案的。
11 楼 anweixiao 2007-03-27  
dovecat 写道
算法对于写出好的程序来说,确实是很重要的,我们每写段程序,抛开数学上定义的算法来说,我们都是在写算法,业务逻辑等等都应该是广义上的算法.但是光从数学上算法来考量一个人,也不能说就是一种全面的考核方式.对于理解实际事物、事理,以及一个人的逻辑思维能力等全面的考核才比较公正,培养逻辑思维的不应该仅仅是数学意义上的算法.
所以,我取中庸.呵呵~~

其实,算法和算法的实现还是不同的,我们应该说:算法算老几?算法的实现算老几?多多包含。
10 楼 losing_fox 2007-03-27  
算法就是前人证明过的最优解法
9 楼 珂儿 2007-03-27  
呵呵,我觉得这样的争论其实没有太多意义,和讨论C++和JAVA哪个更有前途有着同质性。
算法重不重要,要根据自己的兴趣及将来的职业方向来定了,如果想一直在行业软件或一般软件公司做,算法确实并不太重要,在招聘者所考虑其综合素质中占的比重确实不大;但是如果要做GOOGLE、Microsoft、IBM、INTEL、ORACLE等研究院的工作来说,算法在应聘者中所占的比重就很大了。但如果你决定将来转做管理之类的工作或正在做管理的工作,算法也不一定要是你的强项,而是掌握怎样让具有这种强项的牛人更好地为你工作的能力就够了....
关键是看“你是否愿意沿别人的路走”,还是“想有独创性,发现一条新路让别人沿着它走”...
就像一朋友说的那样“不是越优秀的人越适合你们公司,而是要选择合适的人”,想想,还真是这么个道理...
8 楼 dovecat 2007-03-27  
算法对于写出好的程序来说,确实是很重要的,我们每写段程序,抛开数学上定义的算法来说,我们都是在写算法,业务逻辑等等都应该是广义上的算法.但是光从数学上算法来考量一个人,也不能说就是一种全面的考核方式.对于理解实际事物、事理,以及一个人的逻辑思维能力等全面的考核才比较公正,培养逻辑思维的不应该仅仅是数学意义上的算法.
所以,我取中庸.呵呵~~
7 楼 giscat 2007-03-27  
俺是逍遥派的,老庄可是我的偶像那
6 楼 anweixiao 2007-03-27  
当然,如果从广义的角度来讲:算法无处不在,从某一方面来说算法很重要:比如数值计算。但归根到底,算法的重要是建立在扎实的数学基础之上的,没有数学思想的算法,不管别人怎么说,我只会看看它的实现,不多说什么。以前我理解的搞计算机的都是数学大牛,现在发现搞数学的好多都是计算机大牛,而搞计算机的好多都不是数学大牛。介于此,如果要排名论辈份,我不敢说计算机算老几,但单单和数学相比,我把它放第二位。
5 楼 voff12 2007-03-27  
不搞研究,搞应用(二次开发),算法当然用得少啦。
当遇上强竞的竞争对手时,还是用点原创的算法好。
4 楼 winterwolf 2007-03-27  
几乎用不上.
3 楼 Elminster 2007-03-27  
算法这个东西比较奇怪,如果我们记算法的价值为 A ,那么:

1. A = 0 的可能性为 99.99%
2. 存在 0.01% 的可能性,A = ∞
2 楼 dreamhead 2007-03-27  
hurricane1026 写道

打个岔,m&(m-1)应该是判断2的幂数的最佳办法吧。


我所了解到的范围内是最佳了。
1 楼 dreamhead 2007-03-27  
这么说有些绝对,算法真的不重要吗?这取决于你所做的事情。

真正在工作中应用成熟算法的机会并不多,因为那样的算法多半是现成的,没有必要重写。但是,有些问题没有现成的方案怎么办?比如,我现在所做的一些关于并行计算的算法,真的是没有现成可以参考的内容,因为我们用到的东西暂时还是不公开的。你只能自己去设计。

算法的根基关键是给了人一个思考问题的方式。我曾经写过一篇《乱弹算法》,其中谈到一个简单的小例子,如何判断一个数是2的幂。其实,每个人都能给出一个解决问题的答案,但答案之间却差异很大。思考问题的方式就是在学习算法的过程中锻炼出来的。

我承认,很多程序中更多的是在解决业务问题,所以,算法的必要性显得没那么重要。但是,如果想做一个好的程序员,算法是必备的根基,就如同1+1=2一样。没有根基,大厦是不牢靠的。

如果还在质疑算法的重要性,可以问自己一个问题,你真的想做一个好的程序员吗?如果答案是否定的,那算法确实不重要。

老庄,或许你经过一些锻炼已经掌握了一些做事的方法,但JavaEye还是有不少新手在看的,你这个言论容易误导别人啊!^_^

相关推荐

Global site tag (gtag.js) - Google Analytics