程序员是否一定要学习C和汇编

zhangxuguang2007 2009-11-11 11:15:09
我不认为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也可以认为是对以前的一种抽象,只是为了解放生产力。
...全文
692 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arkzenith 2012-03-20
  • 打赏
  • 举报
回复
写内核,引导-->汇编
写硬件操作,数据结构-->用c
写应用程序 -->用c++ ,java , .net
写网页 --> 用php asp
写互交操作程序 ---> 用perl python

没有哪个语言是白给的, 就看你干什么了

精通只在一种阶层内的,叫码奴, 两种的叫前辈, 三种的叫高手,四种的大师, 五种层次都精通的.....请问你的生命中中除了代码,还有啥?
Michael_gmr 2011-07-06
  • 打赏
  • 举报
回复
1.谁能告诉我编写驱动要经常用到什么语言?Java, .net么?
2.谁能告诉我写BIOS, EC要用什么语言? Java, .net么?
3.谁能告诉我怎样在纯属winpe下写程序用什么语言?.net么(不知道MS怎么想的,自己搞个.net还不支持自己)
4.谁能告诉我Android的app用什么语言?c, asm么?
其实语只是用于不同的开发平台,没有谁好谁不好。
个人觉得搞底层一定要学好C ASM,还要懂电路。
上层的话最好学java, .net 真不怎么样。
但是再上层的软件开发最终编译后都是ASM, 想逆向研究的也必须学好ASM(用IDA就知道了)
所以,不要诋毁哪一种语言,它们在各行领域都有非常高的存在价值。
qinliu0425 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 cybertitan 的回复:]
其实不管是C也好、Java也好,抑或是其他的高级语言也好,都是工具而已,只不过这个工具是用来码代码的,每种工具都有其适用场合,当然如果你仅仅满足于会用某种工具,你只能是一个程序员而已,我们要懂得程序架构设计,以及选择合适的工具语言,需要用什么工具就用什么工具,否则你就是一个代码工人,永远达不到设计师的境界
“存在的即是合理的”,C或汇编之所以还能生存到现在,就是因为它们还有价值的,他们更接近底层,是真正的架构设计师必须要了解的
[/Quote]
no!架构设计师才根本不需要C和汇编,除非你是设计操作系统的架构。
这个世界上没有什么必学的语言,很多人在自己的行当钻时间长了,总觉得自己搞的奥妙无穷,实际上山外有山,还有比你更高的。下象棋的说象棋变化无穷,殊不知围棋更加变化多端。
很多C程序员觉得C是王道,java简单。实际上java是最复杂的,早已演化成巨无霸。
__________________ 2009-11-12
  • 打赏
  • 举报
回复
地基的深度决定楼房的高度。
IMAGICE 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 bigpeon 的回复:]
楼主把广大嵌入式领域都屏蔽掉了,得出这个结论所以也很合理
[/Quote]
也不合理。
bigpeon 2009-11-12
  • 打赏
  • 举报
回复
楼主把广大嵌入式领域都屏蔽掉了,得出这个结论所以也很合理
cx419075909 2009-11-12
  • 打赏
  • 举报
回复
嗯嗯嗯,解惑啦
WizardOz 2009-11-12
  • 打赏
  • 举报
回复
一定程度上同意LZ的言论。
但是,对于在校学生来说,汇编和C语言课程也是帮助起理解学科的两门很好的课程!
电路基础->模拟电路->数字电路->计算机组成原理->汇编语言->C语言
如果C与汇编都没必要学,那么学那些乱七八糟的电路与原理就更没有意思啦。

实际上,我个人觉得 高中物理 课程给我带来的帮助是最大的,直接影响我思考问题的方式。
但是,高中物理学习的那些知识,未必真的会用到,是吧?
学习知识全部都要为了使用才学,学了马上就能用的那种知识,生命力往往也是不够的。
river80 2009-11-12
  • 打赏
  • 举报
回复
楼主的思想有误导嫌疑!
cybertitan 2009-11-12
  • 打赏
  • 举报
回复
其实不管是C也好、Java也好,抑或是其他的高级语言也好,都是工具而已,只不过这个工具是用来码代码的,每种工具都有其适用场合,当然如果你仅仅满足于会用某种工具,你只能是一个程序员而已,我们要懂得程序架构设计,以及选择合适的工具语言,需要用什么工具就用什么工具,否则你就是一个代码工人,永远达不到设计师的境界
“存在的即是合理的”,C或汇编之所以还能生存到现在,就是因为它们还有价值的,他们更接近底层,是真正的架构设计师必须要了解的
qinliu0425 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rainstorey 的回复:]
一句话就可以概括:想做真正的程序员那就必须要会.只想完成项目或只想赚钱做跳板以后发展成管理人员那就不必学(甚至可以不必走技术路线).
[/Quote]
学了C不是真正的程序员,是真正的眼高手低。我们公司一大半都是用C的(所谓真正程序员),其实都是菜鸟,只有一两个强的。
比如微软开发win2000操作系统,人数达2500,能都是大师吗?大多数人水平很一般,甚至就是菜鸟,有些人忙了一年只写一个小界面或者一个小算法,甚至还被否定不用。
如果非要划分出真正程序员来,那么能搭建架构、描述需求的人才是真正程序员,别人分给你一个任务,你循规蹈矩做完,不管你是什么语言,都是假程序员。
csl_TMDGOD 2009-11-12
  • 打赏
  • 举报
回复
都JB 学机器语言 回到原始社会去……
ruanchao 2009-11-11
  • 打赏
  • 举报
回复
楼主的这篇帖子说的非常到位!

4楼的所言极是!
feethink 2009-11-11
  • 打赏
  • 举报
回复
同意.想做真正的程序员.那玩意儿.必须会..
IMAGICE 2009-11-11
  • 打赏
  • 举报
回复
6楼说的非常好,“想做真正的程序员那就必须要会。”
IMAGICE 2009-11-11
  • 打赏
  • 举报
回复
如果你只是满足于应用,只学学.NET和JAVA应该也没什么问题。
如果想了解.NET或JAVA是怎么运行的,或者想编写一套类似的东西,我认为是必须要学习的。
VistaKobe 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rainstorey 的回复:]
一句话就可以概括:想做真正的程序员那就必须要会.只想完成项目或只想赚钱做跳板以后发展成管理人员那就不必学(甚至可以不必走技术路线).
[/Quote]

有一定的道理。
企-鹅 2009-11-11
  • 打赏
  • 举报
回复
人各有志,人各有好~
Rainstorey 2009-11-11
  • 打赏
  • 举报
回复
一句话就可以概括:想做真正的程序员那就必须要会.只想完成项目或只想赚钱做跳板以后发展成管理人员那就不必学(甚至可以不必走技术路线).
zhangxuguang2007 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 daxinghuangdi 的回复:]
一切程序语言归根结底都是机器语言,一切自然科学归根结底都是数学
不过这是科学家的境界  凡人嘛,各取所需  何必强求
[/Quote]

有道理
加载更多回复(34)

594

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧