感悟:谈谈编程中的哲学,数学,基础,理论,思考与经验

做为一个新人,我是无上尊崇理论的,很遗憾,我却看到不少人对理论和书本嗤之以鼻。
今天在一个web群里,突然又有人问到,md5(a)=b,那么已知b,那么如何解密出a.针对这个问题,却掀起了轩然大波,这本来是一个很没有讨论价值的东西,遗憾的是,很多人还对此争论个不休,却鲜见明白人。

首先,MD5不是一个加密函数,这点我还看到很多人在争论,吵个喋喋不休。说是加密函数的理由是他们在做网站中一直用MD5加密的,如果它不是加密函数那是什么。那么,我用我刷牙的杯子舀水洗菜,那是否可以断然说我的口水杯就是炊具呢?很简单的逻辑,其实,逻辑上的混乱是基础的不扎实。稍微学过信息安全学的人,都知道在信息安全领域,存在各种安全算法,如非对称加密,信息摘要等。这些概念都是很清晰的,都是有定论的,是没有任何争论的价值和必要的。

其实,询问如何MD5从密文还原到明文的,这就已经不是有没有学过信息安全的事,而是有没有用哲学和数学的逻辑思维来思考的问题了,一个人的悟性就往往体现在这里我们都知道,MD5的结果是128位(不是16位,也不是32位,这个问题不该再争论了。),它可以表现为一个长度为16位或者32,甚或24位的16字符串。但是基本的形式是长度为16的字符串。好了,假如说MD5可以还原的话,我们就可以把它看做一个压缩函数。那恭喜你,你的硬盘可以装下10亿部高清电影了,因为我可以把一个1G多的高清电影MD5“加密成”只有16个字节的“密文”,我要看电影,那我只要把这16个字节还原了就可以了。这么看来,这个世界真是美妙。但这是不可能的,所以MD5还原时不可能的,就这么简单的逻辑。
很快,又有人提出反驳意见,说到04年王小云教授的报告,甚至还截图网上的报告,报告中清晰地写着王小云破解了MD5,以此来反驳我。并以数学不是绝对的来反驳我的数学分析。也有人提到只要计算机的性能足够,就可以做到破解密码。在这里,首先我们要明白,其一,媒体总喜欢故意夸大说辞来吸引眼球;其二,破解的定义,什么是破解,什么能叫做破解。我们学习,万万不能涉浅不涉深。至于王小云教授的破解到底是怎么回事,我也不想再细说,这又是一个长篇大论了。可以了解下强无碰撞和弱无碰撞,有限集的概念。至于破解网站,那都是暴力字典比对。


其实,大多web程序员都是非科班出身,抑或半路出家,大多没有系统的学习,在基础的算法,数学和数据结构上都是弱项。但是,就针对MD5的是否可还原,可破解,我只是用了一个很简单数学模型就证明了这是荒谬的。我一直在强调数学。是的,数学。作为一个经济专业的我,尤其看重数学的重要,但也要注意到一些数学形式主义的存在。

很多编程中的问题,困惑,我们只要拿出数学和哲学这两个宝贝,就能迎刃而。对于一些不能理解的基础性问题,多从数学和哲学的角度来理解,我们就清楚这其中的道理了。
还有一个就是理论和经验。有不少同学都很鄙视书本和理论知识,唯经验至上。这里我要大声地告诉你,你错了。何解?

首先,理论的定义应该是:理论=教科书+课外书(参考书)+工具书(手册)+Google+知识分享。而不是单纯的书本。即使是书本,那也是蕴含了极大的智慧的,尤其是教科书。至少写技术类的教科书的都是专家教授。理论不存在有没有用,只存在你到不到那个境界,用不用得上的问题。有很多我们自以为debug了半天才解决的问题,自以为得到了经验而沾沾自喜的时候,其实这些所谓的“经验”大多已经在手册上明晃晃地摆着了,或者早就被人描述过了而90%的情况大多如此.理论来自于实践,我们多花时间和精力把理论学好,那就可以少花点“经验”,也就是工作时间了。当然,我的观点不是否定经验的重要性,因为一个人很难在不长的时间内学完所有的理论,他需要在工作中学以致用和不断调整,不断比对经验和理论。能重视起理论来,那我的长篇大论的目的就达到了。

另外的一点就是多思考。我不是很赞同有人问基础的问题,除非遇到我也解决不了或者很困惑,或者我认为应该讲解一下的时候,一般我都是六个字回答“看手册,找谷歌”。网上也有《提问的智慧》一问,也提到了,除非你花了两个小时的努力,还没解决一个问题点的时候,那你就可以提问了。这样的方式虽然看似冷酷和缓慢,但是在经历一个略微漫长的爬升后,你就会迅速起步,掌握更多的基础和调试技术。而这,就是你的经验了。

至于说我是做web的,该不该去碰其他东西呢?是不是要专呢?我的回答是,要先把基础牢固了,基础不是歪门邪道,不要把比如凡是和PHP无关的全部视作旁门左道。算法,数学,英语是所有程序员的基础,他们不是旁门左道。另外,对于其他知识呢?我的观点是,你可以不懂,但你至少得理解或者听说过,起码知道有这个东西。web程序员也可以完全花点时间关注下架构,操作系统,数学啊,英语啊,seo啊,营销啊,经济啊这些东西。不要怕它们害了你。

其实我也是个菜鸟级的新人,一个半路出家的土八路,花和尚。之所以提到这些,也正是在自己的发展中也有类似的问题和误区。也是自己经常困在代码领域中的困惑。谨在此交流愚见,欢迎切磋。

一个在程序员道路上奔跑的童鞋。欢迎切磋交流。

文章来自:http://bbs.phpchina.com/thread-203020-1-1.html

Comment

  • Trackback are closed
  • Comments (1)
  1. 你奔跑的很畅快哦么?

Comment are closed.