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

算法算老几?

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

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

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

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

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

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

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

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

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

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

那么,算法算老几?
分享到:
评论
36 楼 weiqingfei 2007-03-27  
hurricane1026 写道
weiqingfei 写道
hurricane1026 写道
weiqingfei 写道
其实我觉得大家观点大方向应该是一样的,只是一“度”的区别。

算法需要不需要学,我觉得在一定程度上还是有必要学的,否则即使你google,都不知道该去google什么。

但是要不要记住,记到什么程度,因人而异,在我看来,只要知道什么算法能解决什么问题,就可以了。

至于算法的实现,不一定非要装在脑子里。

你说的这个也对。不过窃以为大多数问题都不是现成的答案,你去查书也找不到,世界上没有万能博士的存在的。需要你去利用现有方案去改进,去类比。你什么细节都不知道,你怎么类比?难道你去先看一遍,哦,原来这个样子,不能用,再去看下一个?不是说你要5分钟写出一个多么麻烦的算法。至少你脑子中要知道每个的思想是什么,这样你在用的时候才得心应手。
以前你的帖子里说,一部分人学的慢,但是扎实,一部分学的快忘得快。
要我说,我如果要人,要学的快记得牢的。如果找不到,也要扎实的。学的快忘得快的人没有用心学。


我同意你的部分说法,因为你和我说的不是一个领域的问题。
但是同样的,凡事有个度,我想大家都知道API这个东西,一般只要知道API是做什么的就可以了,用的时候再去查,我想没有人能够把API都背下来。
但是如果你打算在某方面做个东西的时候,至少你要在这段时间内,要把相关的API熟记在心,甚至于一点点微小的区别都要搞清楚,但是过了这段时间呢?你还能记得住么?

可能你喜欢的是那种学的慢记得牢的那种,确实那种人适合做窄领域的研究。
但是不代表学得很快忘得快的人,没有用武之地。(否则我不是要喝西北风了)


api不可能记住,也不回有人记。
我的意思是我问的东西相当于计算机领域中的1+1,难道一个人跟你说我1+1记不住,不过不要紧我可以很快查到,你会用他?
还有你说做过一段时间的东西,这么说吧。我现在做的东西,从2006年5月开始查外文资料。找领域课题,到现在为止,共翻阅参照的外文资料至少20-30篇了。我每个亲自看过的都可以给你随时讲解任何一个细节。
凡是我专心读过的书,你可以随时问我。比如我去年给GF辅导初等数学。发现自己还没有做不出来的高中题目。高中毕业7年了。解析几何拿来我还是能做,就是慢点。我的看法是认真学过的东西,是在脑海里有很深印记的。我相信大家应该有共识,你觉得老大们在javaeye上开坛论道的东西都是昨天才学的?越是学的久的东西越是经过消化的越多,越能够讲出其中的精髓。。。。
学了就忘要找找自己的原因,学习一下别人记忆的方法。不是什么值得夸耀的事情。。。。。


如果你像你说的那样的话,我真的很佩服你。

高中的东西,现在拿来让我做,我必须得翻书,否则我不敢保证我会做出来。
换句话说,你让我复习一段时间,我还是能够考上现在的大学的,但是就让我这样直接去考,我想我还是不要给学校丢脸了。

当时学得怎么样,这样说吧,我经常会被叫到办公室和老师讨论问题,当然如果是你说我老师笨的话,我无话可说了。
在高中时,我只要做过的数理化题,我到毕业都知道这题我做过。

至于说,我学了就忘(我只是忘记某种程度的细节),不是什么值得夸耀的事情,我承认。
但是我也不认为是什么值得惭愧的事情。

在前一个公司,我是做demo的。用到很多我从来没有接触过的东西,但是时间很短,必须要在第一时间做出demo向客户演示,否则就被别的公司抢先了。
仔细研究,当然可以,但是没有人有精力仔细研究那么多东西,这就要考验你的领悟能力。

当然,有超强的领悟能力,又有非凡的记忆能力自然更好。
可惜我只是个平凡的人。
35 楼 回帖专用 2007-03-27  
hurricane1026 写道
回帖专用 写道
个人提倡,对非数学专业人士来说,先解决肚子的温饱问题,先解决不加夜班的问题,先解决身边的MM问题,再来学习数学.

其实夜班和温饱都与数学不冲突。核心竞争力高了,进正规公司的几率也大。这样待遇上去了。加班变少了。。。
就mm这个看天分。。。

实则上我的意思是,数学是你第二个MM,需要花很多时间陪.
34 楼 winterwolf 2007-03-27  
非外包也很少用到算法 因为那个层次太低级了 距离应用开发太遥远了.

考算法还不如看看他会不会做测试性能.
33 楼 dovecat 2007-03-27  
hurricane1026 写道
回帖专用 写道
个人提倡,对非数学专业人士来说,先解决肚子的温饱问题,先解决不加夜班的问题,先解决身边的MM问题,再来学习数学.

其实夜班和温饱都与数学不冲突。核心竞争力高了,进正规公司的几率也大。这样待遇上去了。加班变少了。。。
就mm这个看天分。。。
学到那个程度,可以提供一个算法来算出在什么地方,什么公司,什么情景下碰到一个心仪MM的几率,以及成功的几率了.
哈哈!~
32 楼 simohayha 2007-03-27  
俺现在只是解决了温饱,其他的还没解决呢。
31 楼 robbin 2007-03-27  
我自己不是计算机专业出身的。但是从事软件行业以来,把计算机的基础课程也补的七七八八了,什么数字逻辑,抽象代数,系统结构,操作系统等等,唯独算法和编译原理两门基础课没有补,至今觉得遗憾。所以现在一旦碰到需要算法的场合,碰到需要语法分析的场合,就感觉非常窘迫。

不要说web编程里面不需要算法,其实用到算法的地方很多,例如你做web应用,如何保证用户每次访问,都返回随机结果,而且随机结果不会重复出现已经出现的结果,再例如你要防范别人扒你的信息,你如何提供好的混淆机制。JavaEye投票,使用什么算法能够提供最有效的方式,保证最大程度的论坛质量?如何根据帖子的点击总次数,不同人的不同点击权重,不同人的投票权重,计算帖子的质量?如何根据用户行为计算用户偏好程度?难道这些都不需要算法支撑?这些都还不算上全文检索了。如果需要中文的全文检索,那纯粹是算法的用武之地了。再考虑通过中文分词以后,统计关键词的重要性,关键词的关联度和反义度,关键词和文章的关联性算法,文章和文章之间通过关键词匹配程度计算出来的关联性,用户和用户之间通过关键词匹配,文章关联性计算出来的同好比例,处处都是算法。



30 楼 回帖专用 2007-03-27  
个人提倡,对非数学专业人士来说,先解决肚子的温饱问题,先解决不加夜班的问题,先解决身边的MM问题,再来学习数学.
29 楼 weiqingfei 2007-03-27  
hurricane1026 写道
weiqingfei 写道
其实我觉得大家观点大方向应该是一样的,只是一“度”的区别。

算法需要不需要学,我觉得在一定程度上还是有必要学的,否则即使你google,都不知道该去google什么。

但是要不要记住,记到什么程度,因人而异,在我看来,只要知道什么算法能解决什么问题,就可以了。

至于算法的实现,不一定非要装在脑子里。

你说的这个也对。不过窃以为大多数问题都不是现成的答案,你去查书也找不到,世界上没有万能博士的存在的。需要你去利用现有方案去改进,去类比。你什么细节都不知道,你怎么类比?难道你去先看一遍,哦,原来这个样子,不能用,再去看下一个?不是说你要5分钟写出一个多么麻烦的算法。至少你脑子中要知道每个的思想是什么,这样你在用的时候才得心应手。
以前你的帖子里说,一部分人学的慢,但是扎实,一部分学的快忘得快。
要我说,我如果要人,要学的快记得牢的。如果找不到,也要扎实的。学的快忘得快的人没有用心学。


我同意你的部分说法,因为你和我说的不是一个领域的问题。
但是同样的,凡事有个度,我想大家都知道API这个东西,一般只要知道API是做什么的就可以了,用的时候再去查,我想没有人能够把API都背下来。
但是如果你打算在某方面做个东西的时候,至少你要在这段时间内,要把相关的API熟记在心,甚至于一点点微小的区别都要搞清楚,但是过了这段时间呢?你还能记得住么?

可能你喜欢的是那种学的慢记得牢的那种,确实那种人适合做窄领域的研究。
但是不代表学得很快忘得快的人,没有用武之地。(否则我不是要喝西北风了)
28 楼 庄表伟 2007-03-27  
to:T1

我很同意你的观点。说两句题外话:

dreamhead担心我误导初学者。我就在想,要是个新手看到javaeye的这几篇关于算法的讨论以后,会怎么想,是不是会更晕?

当初我好像是跟你还是跟谁说过一句话:“初学者嘛,就是拿来误导的    ”

余下的话还没想好怎么说...
27 楼 回帖专用 2007-03-27  
从招聘的程序上看,我同意Robbin的这个说法,问这些问题事实上是一个reference check.

  从数学对解决日常工作上来说,个人的看法是,一个好的程序员最好是要高标准严要求.一个人选择什么,同时你也必须放弃什么.熟悉API,熟悉Framework,当然能够让你赚个3/4千块钱图个温饱.但是你要说我知道这些就够了,我debug能力强就够了,那么你最好也就放弃去google去MS拿着1/2万的月薪的打算.当然也有人会说,赚钱也不一定要学算法吗,学数学吗.那些炒股的大户学过算法?事实上任何赚钱的行当都是不进则退,我一个朋友是私人老板以炒港股和纳斯达克为生.他告诉我他每天看的中外文报纸期刊都有机箱那么高一摞.上次我和他聊很多关于PushMail方面的问题,他说的都是头头是道几乎是这方面的专家.他说不管哪方面你要想赚钱,首先要成为那方面的专家.
  再回到数学上来,你要成为程序方面的专家,那么数学最好学习.数学能干什么?锻炼思维,训练感觉.这些能讲得都已经讲了.我这里只想说的就一句"功夫在诗外".其他的不说,你要想成为程序方面的专家,那么你必须追赶最新的计算机发展方向,而不是等人翻译出<Programming XXX>再来学习,那实则上已经是二把刀了,国内外可能已经有无数的人在你之前已经看准了这个方向.你要学习最先进的发展趋势,最重要的就是能读Paper.国外和国内不一样,但凡一个开天辟地的伟大应用都是从大学里孵化出来的.你能不能读懂各种Paper,就决定了你能不能跟到跟对计算机发展的心跳.但是学术Paper不是news Paper,光英文好还不行,你必须有数学基础,必须能把那些数学牛人的理论与现实联系在一起.新技术成千上万,那个好,那个不好,那个有前途,那个没前途.完全看对于技术上的知觉.这种知觉不是说你熟悉多少API就能得到的,你必须知其然,知其所以然.好怎么个好法,又好在哪里?
比如说我在研究Erlang的时候,读HPE compiler创始人写的Erlang VM的优化报告时,他就提到什么是图色法,Erlang的Private Process模型对GC效率算法的影响.这些我都不懂然后去和Elminster,Potain讨论,然后再回过来看那份Paper的时候豁然开让,终于知道Erlang为何性能高,高又高在哪里?跟踪一个新技术,第一关就是要说服自己.

满足于任何已经学到的知识和经验,成天想着建造这个壁垒那个壁垒的人既不能成为一个专家,也不能成为雇佣专家的人.最好的壁垒是自己,最大的壁垒的也是自己.

26 楼 weiqingfei 2007-03-27  
其实我觉得大家观点大方向应该是一样的,只是一“度”的区别。

算法需要不需要学,我觉得在一定程度上还是有必要学的,否则即使你google,都不知道该去google什么。

但是要不要记住,记到什么程度,因人而异,在我看来,只要知道什么算法能解决什么问题,就可以了。

至于算法的实现,不一定非要装在脑子里。
25 楼 ahuaxuan 2007-03-27  
庄表伟 写道

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

没错没错,尤其是做外包,算法涉及的就更少了,但是我们涉及的少是因为我们在做外包,对不同的人,需要的东西是不一样的,就象robbin说他的网站需要算法来做会员同好功能一样,他有他要的理由,我们不能指望一个工具能满足我们所有的需求,钳子有钳子的作用,榔头有榔头的作用,不能说我们不用榔头就否认榔头的价值。
但是从市场份额来看应该还是做外包的多,也就是说大多数的程序员都用不到算法

24 楼 ray_linn 2007-03-27  
庄表伟 写道
robbin 写道
比如说,我现在想给JavaEye做全文检索,文章关联性,和会员同好功能,我就发现算法很重要。

以我个人观点来看,作为一个程序员来说,也许在自己的职业生涯当中,未必有用到算法的那一天,但是学习算法可以锻炼抽象的逻辑思维能力,间接的提高程序员解决问题的能力。

抛开这些不谈,如果是计算机系的研究生面试,连最基本的算法概念都答不出来,无论如何说不过去,你本来就是搞计算机理论的,连最基本的理论都不会,有什么资格被录取?就好像老庄要面试一个程序员,给他一个任务,让他用eclipse现场开发,结果他说我不会用eclipse,那你会不会录取他?



我会帮他打开eclipse,然后坐在他的旁边,一言不发。看他如何从头熟悉一个过去没有用过的IDE。

更有甚者,如果我正好有空的话,假设他说他用过Eclipse,那么我就给他一个NetBeans,看他怎么样去熟悉一个从来没有用过的IDE。

weiqingfei,握手。



我打开一个Visual Studio, 在里头大写java source code....
23 楼 simohayha 2007-03-27  
忘了是spring嘟嘟,还是老庄说过的,面试的时候,就问他什么东西最不擅长,然后让他做,看能做成什么样子.
22 楼 庄表伟 2007-03-27  
robbin 写道
比如说,我现在想给JavaEye做全文检索,文章关联性,和会员同好功能,我就发现算法很重要。

以我个人观点来看,作为一个程序员来说,也许在自己的职业生涯当中,未必有用到算法的那一天,但是学习算法可以锻炼抽象的逻辑思维能力,间接的提高程序员解决问题的能力。

抛开这些不谈,如果是计算机系的研究生面试,连最基本的算法概念都答不出来,无论如何说不过去,你本来就是搞计算机理论的,连最基本的理论都不会,有什么资格被录取?就好像老庄要面试一个程序员,给他一个任务,让他用eclipse现场开发,结果他说我不会用eclipse,那你会不会录取他?



我会帮他打开eclipse,然后坐在他的旁边,一言不发。看他如何从头熟悉一个过去没有用过的IDE。

更有甚者,如果我正好有空的话,假设他说他用过Eclipse,那么我就给他一个NetBeans,看他怎么样去熟悉一个从来没有用过的IDE。

weiqingfei,握手。
21 楼 weiqingfei 2007-03-27  
robbin 写道
比如说,我现在想给JavaEye做全文检索,文章关联性,和会员同好功能,我就发现算法很重要。

以我个人观点来看,作为一个程序员来说,也许在自己的职业生涯当中,未必有用到算法的那一天,但是学习算法可以锻炼抽象的逻辑思维能力,间接的提高程序员解决问题的能力。

抛开这些不谈,如果是计算机系的研究生面试,连最基本的算法概念都答不出来,无论如何说不过去,你本来就是搞计算机理论的,连最基本的理论都不会,有什么资格被录取?就好像老庄要面试一个程序员,给他一个任务,让他用eclipse现场开发,结果他说我不会用eclipse,那你会不会录取他?



如果说,现在急需一个人能够立刻用eclipse来开发项目的话,这个人自然不能要。
如果不是,我会给他几分钟让他熟悉以下eclipse,看看他能在最短的时间内,掌握到什么程度。
因为将来的工作不可能只用一种东西,关键还是这个人的接受能力怎么样。
20 楼 robbin 2007-03-27  
比如说,我现在想给JavaEye做全文检索,文章关联性,和会员同好功能,我就发现算法很重要。

以我个人观点来看,作为一个程序员来说,也许在自己的职业生涯当中,未必有用到算法的那一天,但是学习算法可以锻炼抽象的逻辑思维能力,间接的提高程序员解决问题的能力。

抛开这些不谈,如果是计算机系的研究生面试,连最基本的算法概念都答不出来,无论如何说不过去,你本来就是搞计算机理论的,连最基本的理论都不会,有什么资格被录取?就好像老庄要面试一个程序员,给他一个任务,让他用eclipse现场开发,结果他说我不会用eclipse,那你会不会录取他?

19 楼 lordhong 2007-03-27  
Readonly 写道
lordhong 写道
ray_linn 写道
我不懂算法, 但我懂End 2 End performance和CBA

弱弱的问一句...CBA是...Chinese Basketball Association?

NBA下属的一个北美范围内的篮球联赛的名称的简写也是CBA,全名是Continental Basketball Association

根据上下文,这里的CBA应该是Cost Benefit Analysis...


老王,出来换气啊!

CBA还有很多解释哦...
California Bluegrass Assocation
Center for Backyard Astrophysics
Commercail Banks Association

晕翻~~~~~~~~~~~~~~
18 楼 Readonly 2007-03-27  
lordhong 写道
ray_linn 写道
我不懂算法, 但我懂End 2 End performance和CBA

弱弱的问一句...CBA是...Chinese Basketball Association?

NBA下属的一个北美范围内的篮球联赛的名称的简写也是CBA,全名是Continental Basketball Association

根据上下文,这里的CBA应该是Cost Benefit Analysis...
17 楼 lordhong 2007-03-27  
ray_linn 写道
我不懂算法, 但我懂End 2 End performance和CBA

弱弱的问一句...CBA是...Chinese Basketball Association?

相关推荐

Global site tag (gtag.js) - Google Analytics