我是一位主要使用Ruby和C#进行工作的Web开发人员。
我想学习一种低级语言,所以我看起来不像我(计算机科学专家)老板的蠢蠢蛋。
我已经听到很多纯粹的嗡嗡声,关于汇编语言是学习计算机实际工作方式的唯一方法,但是另一方面,C可能作为一种语言有用,而不仅仅是理论上。
所以我的问题是..
学习C会教给我足够的计算机科学理论/低级编程,以使其看起来不像是普通的花花公子(完整的工具吗?] 谢谢!
丹尼尔
谢谢你们!
一些非常好的答案,
我认为我将学习C只是为了掌握内存管理,但是我认为您的权利,而且我会更好地学习更多我使用的语言!
我是一个主要使用Ruby和C#进行工作的Web开发人员。我想学习一种低级语言,所以我看起来不像我(计算机科学专家)老板的蠢蠢欲动。我听过很多关于...
首先学习实际的理论。如果您无法对C进行有意义的学习,那么学习C的语法就没有任何意义。在对算法和数据结构的工作方式有了扎实的了解之后,这些知识将适用于您可能会使用的大多数语言。
如果您打算使用C#和Ruby进行工作,那么仅出于此目的,我认为学习汇编程序并不重要。
我想学习一种低级语言,所以我看起来不像我(计算机科学专家)老板的蠢蠢蛋。
学习C是否能教给我足够的知识计算机科学理论/低级编程看起来不常见dandy(完整工具)?
学习C语言将为您获取所需的所有信息,并能够在合理的时间内完成任务。
[我建议您用C做一些有意义的项目,然后用一个汇编方言来做一两个,也许是为了一个微控制器或专门研究SSE / MMX。
最后,所有内容都归结为操作码,寄存器和寻址模式,而C绝对不会教您什么。但是,汇编器与平台紧密耦合。当您在Sparc或PA-RISC机器上工作时,学习如何在x86上编写汇编程序不会有太大帮助。
C真的不会教您太多其他语言从理论上讲的东西。关于C的事情是,除了裸露的指针和字节流之外,它没有提供许多工具或抽象。您必须滚动所有自己的容器(列表,堆栈,队列等),如果希望它们是通用的,则必须弄清楚如何将需要类型识别的代码(赋值和比较)与通用算法。您必须管理自己的内存。文本处理非常麻烦(C甚至不提供专用的字符串类型)。
您可以像使用磁化针向磁盘写入一样低的级别,但是如果您的程序不起作用或不安全,那么您将无法获得任何收益。
学习“新”语言的语法不会帮助您获得更多有关编程深度的知识。
要成为一名优秀的程序员,除了要编程硬件外,绝对没有必要知道硬件的工作原理。
如果您想学习计算机科学,C和Assembler不是最好的语言。如您所知Ruby和C#,我想您知道一些面向对象的知识。
学习C不一定会教给您太多有关计算机如何工作的知识,但是考虑到它仍然是系统编程的首选语言,因此它是一扇通向科学的好门。
当然,学习ASM也很有用,但是如果您想将其应用到工作中,可能就不需要它了。但是,它可能会教给您一些有用的概念,或者至少可以帮助您更好地了解CLR的工作原理(或通常来说,字节码编译和字节码编译的代码是如何工作的)。也许您可以尝试为较旧/较简单的平台学习ASM;仍然有沉重的Atari 2600场景,并且由于平台的固有局限性,他们为挤压游戏中的某些额外功能所做的一些黑客工作相当出色。现代的x86_64架构非常复杂,有些毛茸茸,尽管这更多是个人观点,而不是实际事实。学习使用微控制器也可能会完成工作,但要警告许多(大多数?)使用的是哈佛架构(即独立的程序和数据存储器),该架构不同于典型的通用CPU。