【转】程序员是否一定要学习C和汇编?

我不认为C和汇编是所有后来程序员都应经过的路(虽然我也走过)。我想大家肯定都学过牛顿的运动3大定律,但又有几人阅读过牛顿的《自然哲学之数学原理》(这本书对3大定律进行了完整推论),如果您没有阅读过,我是否可以认为大家根本就没有理解3大定律呢?您肯定不会同意我的看法,因此,并不是所有后来人都有必要把前人走过的路再走一遍,好像不这样就对世界理解的不够深刻似的。所有现代的知识(不仅是计算机)一定是建立在前人研究的基础上,也只能在一定抽象基础上继续研究,如果我们不这样做,什么事都要打破沙锅问到底,那么人类的知识根本无法传承下去,因为一个人穷其一生都未必能够修完某个学科小学一年级的知识。

好多人言必谈 C和汇编,好像这才是计算机的本质,但它到底是吗?难道就没有比C和汇编更底层的东西?我们都好好想想。以我的经历,我之所以认真学习汇编和C,并不是因为在实际工作中(我是做.NET的),能给我带来什么特殊的价值,只是为了满足我的好奇心,我甚至从未用C和汇编写过一个真正的程序。

我也坚决反对把C和汇编宗教化、神圣化,我们应该还原它的本质:它就是一个工具。我们当然可以继续学习C和汇编,但那不应该是为了信仰,而是为了应用(毕竟在很多领域,C和汇编的效率使其成为满足条件的唯一选择)。再让我们抛开宗教化的争论,谈论纯粹的技术:.NET和Java要比C++(更罔提C了)设计的优美的多,.NET和Java的演进事实上也是对C++的一种改进,而且我也相信.NET和 Java不是终极语言,在将来肯定会有更优美、更实用的语言来取代.NET和Java,到那时候再回过头来看.NET和Java,我们会不会也带有一种宗教般的神圣呢?

因此我认为是否要掌握汇编和C++,要看下面两种情况

  1. 如果是为了学习,C和汇编并不是必要的,我们也没有精力对所有的知识穷其根源。
  2.  如果是为了特殊领域应用(例如系统开发),还是要学习的,因为C和汇编就是目标工具。 

最后用一句诗来结束我的发言:“沉舟侧畔千帆过,病树前头万木春”。

下面是我从别的地方摘抄的一段文字,可以验证我的观点:在现在的软件业中,每个人的工作都是建立在一定的抽象层次之上,现在计算机系统已经复杂到任何一个人凭头脑都无法完全理解的地步,我们所能依赖的是软件工程以及建立在其之上的抽象。无论是汇编语言还是C,都是对相对以前的一种抽象,根本的动力来自于对生产力的提高。当然,如果我们按照这种思路,.NET和Java也可以认为是对以前的一种抽象,只是为了解放生产力。

posted @ 2009-11-11 11:08  张旭光  阅读(581)  评论(1编辑  收藏  举报