Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该学习汇编语言还是C语言来理解;“真实编程”;作品_C_Assembly_Computer Science_Theory_Low Level - Fatal编程技术网

我应该学习汇编语言还是C语言来理解;“真实编程”;作品

我应该学习汇编语言还是C语言来理解;“真实编程”;作品,c,assembly,computer-science,theory,low-level,C,Assembly,Computer Science,Theory,Low Level,我是一名web开发人员,主要从事Ruby和C# 我想学一门低级语言,这样在我的(计算机科学专家)老板面前我就不会像个傻瓜 我听过很多关于汇编语言是学习计算机如何实际工作的唯一方法的纯粹主义者的议论,但另一方面,C语言作为一种语言可能比理论更有用 所以我的问题是 学习C语言能教会我足够多的计算机科学理论/低级编程,让我看起来不像一个普通的花花公子(完整的工具)? 谢谢 丹尼尔 谢谢大家 一些非常好的答案 我想我学习C只是为了掌握内存管理,但我认为你是对的,我最好多学习我使用的语言 首先学习实际的

我是一名web开发人员,主要从事Ruby和C#

我想学一门低级语言,这样在我的(计算机科学专家)老板面前我就不会像个傻瓜

我听过很多关于汇编语言是学习计算机如何实际工作的唯一方法的纯粹主义者的议论,但另一方面,C语言作为一种语言可能比理论更有用

所以我的问题是

学习C语言能教会我足够多的计算机科学理论/低级编程,让我看起来不像一个普通的花花公子(完整的工具)?

谢谢

丹尼尔


谢谢大家

一些非常好的答案


我想我学习C只是为了掌握内存管理,但我认为你是对的,我最好多学习我使用的语言

首先学习实际的理论。如果你不能用C语言做任何有意义的事情,那么学习C语言的语法就毫无意义。在您掌握了算法和数据结构的工作原理之后,这些知识将适用于您可能使用的大多数语言

如果你打算在C#和Ruby中工作,我不认为仅仅为了学习汇编程序而学习汇编程序有什么意义

你只要学C就可以了,因为它是C


你可以用任何语言进行“真正的编程”,只要你做得对

学习C将为您提供所需的所有信息,并能够在合理的时间内完成任务


我建议你用C语言做一些有意义的项目,然后用汇编语言做一两个,也许是为了一个微控制器或是专门研究SSE/MMX。

我不认为汇编语言的知识会让你成为一个更好的Ruby/C程序员

您可以使用磁化针将数据写入磁盘,但如果您的程序不工作或不安全,您将不会从中获得任何好处


学习一种“新”语言的语法不会帮助你获得更多编程深度的知识。

真正的编程不是关于一种特定的低级编程语言。要了解计算机的工作原理,了解一些CPU指令以及硬件如何处理它们并不坏


要成为一名优秀的程序员,绝对不需要知道硬件是如何工作的,除非你想为硬件编程。

如果你的老板认为你不是傻瓜的话,我不会担心在老板面前看起来像傻瓜

如果你想学习计算机科学,C和汇编语言不是最好的语言。正如你所知道的Ruby和C#我想你知道一些面向对象的知识

学习C能教我足够多吗 计算机科学理论/低水平 编程使其看起来不像普通的 丹迪(全套工具)

你使用的是C++,它可以执行非托管指针操作,而不是在C++中可以实现的。例如,游戏可以在C语言中成功编程,虽然大多数游戏都是C++。 汇编程序基本上是在移动内存位,如果您不知道自己在做什么,有时也会做得很糟糕。C++/C编译器在底层创建了相当好的汇编代码,所以除非您必须编写低级驱动程序软件,否则您为什么要自己编写呢。在我们200万行混合C++/C#代码中,汇编程序的唯一功能就是检测VMWare

我不认为在这个现代时代,根据你对工作的描述,你需要知道处理器上可以使用多少寄存器。当然,学习C++,但正如前面所提到的,学习语法和学习如何应用它是不一样的。 至少要学习和理解模式(),OO设计,了解不同测试方法的含义和好处,以及所有这些对业务成本的影响。

“真正的编程”在每种语言中都是一样的,这才是您真正应该担心的。也就是说,用C语言编写一些东西是一个非常有用的练习/

学习C不一定会教你太多关于计算机如何工作的知识,但考虑到它仍然是系统编程的首选语言,它是一扇通向计算机工作的好大门


学习ASM当然也很有用,但是如果你想把它应用到你的工作中,它可能是不必要的。不过,它可能会教给您一些有用的概念,或者至少帮助您更好地理解CLR的工作原理(或者一般来说,字节码编译和字节码编译代码是如何工作的)。也许你可以尝试在一个更老/更简单的平台上学习ASM;仍然有大量的Atari 2600场景,由于该平台固有的局限性,他们在游戏中压缩一些额外功能所做的一些黑客行为非常棒。现代的x86_64体系结构非常复杂,有些毛茸茸的,尽管这更多的是个人观点,而不是事实。学习使用微控制器也可以完成这项工作,但需要注意的是,许多(大多数?)使用哈佛体系结构(即独立的程序和数据存储器),这与典型的通用CPU不同。

最终,所有这些都归结为操作码、寄存器和寻址模式,而C完全不教你任何东西。然而,汇编程序与其平台紧密耦合;当您在Sparc或PA-RISC设备上工作时,学习如何在x86上编写汇编程序并没有多大帮助

从理论上讲,C语言不会教你很多其他语言学不到的东西。关于C,除了裸指针和字节流之外,它没有提供很多工具或抽象。您必须滚动所有自己的容器(列表、堆栈、队列等),如果您希望它们是通用的,您必须找出如何将需要识别类型(赋值和比较)的代码与通用算法分开。你必须管理自己的记忆。文本处理是个麻烦事(C不是e