Free Hit Counters
http://www.dellasdeals.com

海天小阁

一个生于70年代的IT人,高不成低不就,与君共勉

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  65 随笔 :: 0 文章 :: 793 评论 :: 18 引用

早晨突然的一个感觉。

在程序员的世界里,存在着数学家和物理学家。

先看看百度百科的相关解释:

数学:

数学是研究数量、结构、变化以及空间模型等概念的一门学科。透过抽象化和逻辑推理的使用,由计数、计算、量度和对物体形状及运动的观察中产生。数学家们拓展这些概念,为了公式化新的猜想以及从合适选定的公理及定义中建立起严谨推导出的真理。

物理:

在物理学的领域中,研究的是宇宙的基本组成要素:物质、能量、空间、时间及它们的相互作用;借由被分析的基本定律与法则来完整了解这个系统。物理在经典时代是由与它极相像的自然哲学的研究所组成的,直到十九世纪物理才从哲学中分离出来成为一门实证科学。

数学对应于算法。物理对应于面向对象。

算法大师精于从数据里面通过精巧的计算,得到我们所预期的结果。

而OO大师则精于构造一个完美的系统,充斥着类、属性、方法、事件。

数学是人类最古老的一门科学了。物理是后辈。同样,在计算机世界里,算法是从这个世界被创造的那天起就存在并且将永远存在下去的。

离开了数学,物理可能就变成了哲学,甚至不能算上一门科学了。同样,离开了算法,面向对象也会失色很多。

之所以发这个博文,以及早上会出现的这个想法。因为一直以来有一个问题:

算法 + 数据结构 = 程序

这个老套的、经典的,你又无法证明他不对的公式,驱使一代又一代的程序员从学习编程的第一天就去努力学习算法。驱使一代又一代的程序员从一开始就认定一定要学通数据结构。

但是世界早已经改变了。

我们已经有面向对象这个东西了。“物理时代”已经到来了。

很明显,物理学专家的数学能力一定比一般人要强。拥有较强数学能力的物理学家可能会有更大的成就。

但是多数物理学家一定不会是大数学家。毕竟大家术业有专攻的。

同样,一个人同时有较高的算法和OO能力是可能的。但是同时是算法和OO大师是很难的。因为这两者在看待客观世界的时候,眼睛里看到的东西是不同的。

学习编程,不能不学习算法。只是看清楚自己的能力、兴趣和特长。

然后选择自己成为一个数学家,或者物理学家。

最后:一家之言,仅供参考。呵呵。

posted on 2011-06-16 08:46 徐少侠 阅读(3515) 评论(39) 编辑 收藏

评论

#1楼 2011-06-16 08:54 博客园团队      
文中的链接有问题,建议处理一下。
 回复 引用 查看   

#2楼 2011-06-16 08:57 汤菜蚂蚁      
创造一个程序员家
 回复 引用 查看   

#3楼 2011-06-16 09:02 Artech      
"大师"和“大家”是不是被滥用了。
想起了《南渡北归》的一句话:大师远去再无大师。
 回复 引用 查看   

#4楼 2011-06-16 09:05 h_j_l      
科学家吧,哈哈
 回复 引用 查看   

#5楼 2011-06-16 09:09 云和山的彼岸      
这种的文章是相当的打击俺,我数学物理都不好,哈哈
 回复 引用 查看   

#6楼 2011-06-16 09:10 leslie_      
码侬
 回复 引用 查看   

#7楼[楼主] 2011-06-16 09:44 徐少侠      
引用博客园团队:文中的链接有问题,建议处理一下。

额,谢谢指出。直接粘贴百度的。我立刻去删了这些链接。
 回复 引用 查看   

#8楼 2011-06-16 09:51 aspnetx      
程序员?你是数学家还是物理学家? 其实更多的时候是个军事学家或者政治家。在公司之外对客户,你也许是军事家,在公司内部,你不做个政治家就很难混下去。
 回复 引用 查看   

#9楼 2011-06-16 09:53 《YY》      
敲键盘砖家
 回复 引用 查看   

#10楼 2011-06-16 10:02 xuefly      
没有证据表明数学先于物理出现在人类的概念中,相反大众普遍认为人类对物理学的研究不晚于(早于或等于)数学。众所周知,数学是从物理学中分离出来的科学,是用来辅助物理学的研究的(化学也是从物理学分离的),数学是无法直接创造生产力。我们认为在文明的早起,所谓的哲学和物理两个概念其实是一回事。

ps:历史上我们学校,物理系有和数学系使用同样数学教材同样老师的传统。我们数学老师说过:“历史证明,历年来考试第一名几乎都是来自物理系。”
对我们来说,数学只是工具,有时候因研究问题的需要搞物理的人也会提出问题和创造数学问题的解。
 回复 引用 查看   

#11楼 2011-06-16 10:14 地狱门神      
OO不就是一个类型系统么。
定义一堆概念,然后在之间做运算。数学里这叫代数系统。
跟物理关系不大。
虽然说现在这方面的实践还很初级,但是这些仍然和物理(或者说科学)的实验是不一样的。所有的概念都是人造的。
整体来看,这属于方法论。不是科学。
数学也是科学方法论,不是科学。
物理是对于客观现实的描述。由于是通过实验方法来判断这些描述是否正确,所以是科学。
所谓的计算机科学,总体感觉,只有逆向工程之类可以算科学,不过还是研究人的作品,应该是不算自然科学。
 回复 引用 查看   

#12楼 2011-06-16 10:17 吾爱孟夫子      
比喻的很好!

但是,大家要正确理解楼主的意思,不要教条。不要把物理等同于OO,把所有物理和数学的差别都映射到OO和算法上。
 回复 引用 查看   

#13楼 2011-06-16 10:25 陈年老生      
me.物理本科,自学编程,教书十年后,转软件开发。老鸟新作,家多多房产网,新上线,欢迎批评交流。
初级程序员,试着编程编程解决问题。
物理程序员,应用编程解决问题。
数学程序员,高效地应用编程解决问题。
政客程序员,如何玩转上述所有人员。
boss,来者不惧,用最少的鱼饵,钓最大的鱼。
gov,只要给钱,我就让你们玩玩。
 回复 引用 查看   

#14楼 2011-06-16 10:27 地狱门神      
对了……前面说的OO现在的实践很初级是指,我现在还没见过可以自己定义语法概念的语言。比如我想定义“纯类”:只有方法没有字段的类。或者定义什么“数据表类”,要求每个字段有两个名字,一个正常的名字,一个是数据表中的名字。这类东西现在都只能通过Attribute什么的来做,还不能静态检查。
 回复 引用 查看   

#15楼[楼主] 2011-06-16 10:32 徐少侠      
@地狱门神
泪奔了,老大你太专业了。
当年看过几页形而上学的文章,立刻断定自己不是搞那个的料。
 回复 引用 查看   

#16楼[楼主] 2011-06-16 10:47 徐少侠      
@地狱门神
我的理解是:
算法只关注一切事物被抽象后的数据,以及这些数据之间的函数关系。
而面向对象往往只关注如何正确得去抽象事物以及事物之间的关系。

在面向对象的世界里,能实现一个算法是因为有了对事物正确的抽象以后自然会出现的结果。

若干个正负电子在理想空间内互相吸引和排斥的情况,用纯数学算法和OO的方式去解,会有完全不同的代码出现。
而且当我们的数学能力不足的情况下,有时候能给出OO的解,却无法写出算法的解。

这其实就是面向对象的优势之一。
用模拟客观世界的方式,解决数学上不能完美解决的问题。
数学格老子是容不得一点点不完备的,差一点点,可能就是无解。



 回复 引用 查看   

#17楼 2011-06-16 10:54 Seen_      
切。。
一个破码农,还好意思说自己是数学家,物理家。。
我大笑。
 回复 引用 查看   

#18楼 2011-06-16 10:57 Seen_      
没过40的小屁孩,千万不要称自己为XX家。
 回复 引用 查看   

#19楼 2011-06-16 11:00 陈年老生      
语言是工具,编程是思想。熟练运用工具,努力提高思想。to ooad or oop beginer. books: the object primer or design pattern ,maybe a good choice.try it.
 回复 引用 查看   

#20楼 2011-06-16 11:10 深蓝医生      
初级程序员,试着编程编程解决问题。
物理程序员,应用编程解决问题。
数学程序员,高效地应用编程解决问题。
政客程序员,如何玩转上述所有人员。
boss,来者不惧,用最少的鱼饵,钓最大的鱼。
gov,只要给钱,我就让你们玩玩。
------------------
顶这个!
 回复 引用 查看   

#21楼 2011-06-16 11:38 mark in working      
深有体会。
 回复 引用 查看   

#22楼 2011-06-16 12:31 huyong      
科学家没错,呵呵。
 回复 引用 查看   

#23楼 2011-06-16 14:10 +-+      
物理自从牛顿以后才有的概念(文艺复兴开始-》牛顿高潮)。物理(近视的产物)是哲学的前身。。。。。。别不懂装懂了。。。。。。
数学是从物理学中分离出来的科学 ?内有满面,感觉秀才遇到兵。。。。。
什么叫物理,你懂吗?像LZ说的,以哲学为思考出发点,用数学去构建,证明这个理论。
历史证明,历年来考试第一名几乎都是来自物理系? 你们老师火星的吧。。。。。 我可以说凡是竞赛考试,最年轻获奖者,基本是学数学的。
其他先不说,就浙江这次的ACM冠军来说,主力是就是搞数学的,而非搞计算机或物理的。
看过物理的都知道,物理注重分析数,四大分析+二大代数基本是物理主攻方向了。其他的数学分支学物理的真的不怎么样。。。。。

引用xuefly:
没有证据表明数学先于物理出现在人类的概念中,相反大众普遍认为人类对物理学的研究不晚于(早于或等于)数学。众所周知,数学是从物理学中分离出来的科学,是用来辅助物理学的研究的(化学也是从物理学分离的),数学是无法直接创造生产力。我们认为在文明的早起,所谓的哲学和物理两个概念其实是一回事。

ps:历史上我们学校,物理系有和数学系使用同样数学教材同样老师的传统。我们数学老师说过:“历史证明,历年来考试第一名几乎都是来自物理系。”
对我们来说,数学只是工具,有时候因研究问题的需要搞物理的人也会提出问题和创造数学问题的解。

 回复 引用 查看   

#24楼 2011-06-16 14:21 xuefly      
@+-+
先生的理解和表述让我观察出了你思想和知识结构的狭隘。
 回复 引用 查看   

#25楼 2011-06-16 14:26 地狱门神      
@徐少侠
“在面向对象的世界里,能实现一个算法是因为有了对事物正确的抽象以后自然会出现的结果。”
我觉得这个并不是非常正确。
抽象的方式取决于抽象的目的。
以“若干个正负电子在理想空间内互相吸引和排斥的情况”这个为例。
纯数学方法,应该是指推算出一个公式,给定这些电子的运动轨迹之类的东西。这种一般叫代数方法。
而你说的OO方法,应该是指通过电磁引力的公式来模拟电子运动,最后生成一个近似运动轨迹。这种一般叫数值方法,其实也不一定非要用面向对象的方式来写程序。

这其实要看你想要的结果是什么。
代数方法,非常复杂,虽然可能得到一个精确结果,但是和实际情况不一定一致。因为实际情况下肯定有别的因素干扰,而这个问题的结果是一个不稳定系统。(不稳定系统是指对于一个较小的干扰,导致的结果变化较大。有专门的数学理论研究一些系统在什么样的干扰下是不稳定的。)
数值方法,运算简单,但问题是,算出来的结果有误差。而且这个是不稳定系统,误差随时间会迅速积累。

于是这里需要看你想要什么样的结果。
如果只是纯粹想得到一个公式,那么只能用前一种方式。现在很多符号计算的软件,自动算出公式也是可能的。
如果是要模拟实际情况,则两种方法都是可以用的。实际情况下,由于问题不稳定,路径是几乎不可预测的。但是往往我们并不关心路径是怎样的。我们可能关心对于大量正负电子,它们会在多长的时间内对撞到剩下不到某个量级的电子数。
此时,用纯代数方法的话,可能可以通过一些概率统计的东西,来得到一个解。这里可能会遇到很多奇怪的积分、微分之类的很难弄的东西。而用数值方法,则得到解比较容易,一般从实践来看,解的可信性也是比较大的。但是这里的可信性也只是一种猜想。如果要得到真正严谨的结果,可以通过用数值理论里的误差分析来得到误差范围,这个过程是代数的。

另外,“电子”本身并不是客观世界的东西。从现在的量子理论来看,电子是一团概率云。“电子”的概念是经典力学里的东西。这种东西在计算“在多长的时间内对撞到剩下不到某个量级的电子数”这种问题的时候,结果也许比较精确。但在一些其他问题里,就是有大问题的。

所以我的观点是算法、抽象都是为了目的服务。面向对象是一种抽象方法。
算法和抽象都是方法论。抽象所针对的事物并不一定是客观世界的事物,有可能是针对已经被抽象过的事物,比如数字、电子。
算法依赖于抽象,抽象限制算法。一个好的抽象能够使得算法简单,一个垃圾抽象可能导致算法无法实现。
两种东西虽然可能在一个人会各有长短,但是完全分离是不可行的。
 回复 引用 查看   

#26楼 2011-06-16 14:36 xuefly      
简单的说物理就是指整个宇宙的规律,大无穷小无穷。简单的说数学是描述宇宙规律的一种手段,数学不可能准确的描述这个世界(虽然似乎不存在比数学更好的方法)尤其在遇到“无穷”的时候数学往往显得力不从心,数学更加适合描述假定离散的世界。
为了跳的更远以越过前面的沟渠,马儿会提前助跑,动物分明知道“动量”的存在,但是它们分明不是使用数学描述这种“宇宙规律”的。
 回复 引用 查看   

#27楼 2011-06-16 14:38 +-+      
引用xuefly:
@+-+
先生的理解和表述让我观察出了你思想和知识结构的狭隘。


思想和知识结构的狭隘 这个我承认,只要是个人都会,除非你不是。
不是吗?
 回复 引用 查看   

#28楼 2011-06-16 14:40 +-+      
引用xuefly:
简单的说物理就是指整个宇宙的规律,大无穷小无穷。简单的说数学是描述宇宙规律的一种手段,数学不可能准确的描述这个世界(虽然似乎不存在比数学更好的方法)尤其在遇到“无穷”的时候数学往往显得力不从心,数学更加适合描述假定离散的世界。
为了跳的更远以越过前面的沟渠,马儿会提前助跑,动物分明知道“动量”的存在,但是它们分明不是使用数学描述这种“宇宙规律”的。

终于遇到极品了。。。无穷小数学数学往往显得力不从心。。。。。真是笑死我了。。。。没学过极限论和无穷分析论的孩子伤不起。。。。
 回复 引用 查看   

#29楼 2011-06-16 15:14 xuefly      
@+-+
我们知道你学过所谓的高等数学了。
我们断言:倘若无法消掉无穷,那么这个数学公式必定不正确。我说数学在遇到无穷的时候往往显得力不从心,这是因为数学是基于离散世界这个前提假设之上的理论。数学上的极限跟“连续性”不是一回事。极限的能力不可能给出等号左面等于等号右面的证明,然而整个数学的概念都是基于“相等”这个最原始的假设的(但是我们甚至可以证明相等是不存在的)。数学无法把一个无限趋近于1的数与1划等号。0.9999……(n个9)不等于1,因为无论n等于几,都有比n+1更趋近于1。
 回复 引用 查看   

#30楼 2011-06-16 15:17 xuefly      
数学可以先定义2>1,1<2 但是定义1=1是荒诞的!因为只有一个1,自己跟自己比较没有任何意义。
 回复 引用 查看   

#31楼 2011-06-16 15:51 Rick Carter      
嗯,说的有道理!!
 回复 引用 查看   

#32楼 2011-06-16 15:56 Rick Carter      
数学和物理是我最喜欢的两门学科,哲学拿来跟人扯蛋吹牛B的
 回复 引用 查看   

#33楼 2011-06-16 17:12 xuefly      
平面直角坐标系中给一条处处可导的连续曲线,如果我们说“每一个x都在线上对应一个y的话”,这就是在主观的割裂连续。线就是线,它不是由点组成的,由点组成的线无法描述线的全部信息。
 回复 引用 查看   

#34楼 2011-06-16 18:57 无证小贩      
码畜
 回复 引用 查看   

对于物理来说,数学是用来描述物理现象,物理过程的工具。
高深的物理确实有种哲学的感觉。物理学的越深,越能发现自然的美妙
,自己也就越渺小。当从那种思考的过程中回到现实的时候,生活没有物理那么美好,还是现实点的好
 回复 引用 查看   

#36楼 2011-06-17 08:27 think8848      
知道自已是什么,然后呢?
 回复 引用 查看   

#37楼 2011-06-17 11:47 卡通一下      
我觉得它首先是个作家,呵呵!
 回复 引用 查看   

#38楼 2011-06-17 17:38 岁月w      
有时间感觉程序员挺可悲的,
 回复 引用 查看   

#39楼 2011-09-17 22:13 @无止境      
引用aspnetx:程序员?你是数学家还是物理学家? 其实更多的时候是个军事学家或者政治家。在公司之外对客户,你也许是军事家,在公司内部,你不做个政治家就很难混下去。

这个好像也对
 回复 引用 查看