首页 文章

我应该学习汇编语言或C,了解“真正的编程”是如何工作的吗?

提问于
浏览
2

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

我想学习一门低级语言,所以我看起来不像我(计算机科学专家)老板面前的屁股 .

我听过很多纯粹的嗡嗡声,关于汇编语言是学习计算机实际工作方式的唯一方法,但另一方面,C语言可能更有用,而不仅仅是理论 .

所以我的问题是......

Would Learning C teach me enough computer science theory / low level programming to not look like a common dandy (complete tool)?

谢谢!

丹尼尔


多谢你们!

一些非常好的答案,

我想我会学习C只是为了掌握内存管理,但我认为你的权利,我会更好地学习更多我使用的语言!

10 回答

  • 2

    最后,它归结为操作码,寄存器和寻址模式,其中C绝对没有教你什么 . 但是,汇编程序与其平台紧密耦合;学习如何在x86上编写汇编程序对于使用Sparc或PA-RISC框时无济于事 .

    C真的不会教你很多其他语言在理论上也不会 . 关于C的事情是它不提供除裸指针和字节流之外的许多工具或抽象 . 您必须滚动所有自己的容器(列表,堆栈,队列等),如果您希望它们是通用的,您必须弄清楚如何将需要进行类型识别的代码(赋值和比较)与一般算法 . 你必须管理自己的记忆 . 文本处理是一种痛苦(C甚至不提供专用的字符串类型) .

    这对于了解日常工作或给老板留下深刻印象是否有用?也许 . 我不确定如何在C#或Ruby代码中应用这些知识,这些代码在虚拟机中运行(而不是从C生成的本机二进制文件) .

    您希望通过计算机科学知识给您的老板留下深刻印象,阅读图灵机和马尔可夫算法 .

  • 1

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

    要成为一名优秀的程序员,除了您想要编程硬件外,绝对没有必要知道硬件的工作原理 .

  • 1

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

    如果您打算使用C#和Ruby,我认为只是为了这样做而学习汇编程序的重点 .

    你可以很好地学习C,因为它是C.

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

  • 0

    如果这是你老板不傻的标准,我不会担心在老板面前看起来像个傻瓜 .

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

  • 1

    “真正的编程”在每种语言中都是一样的,这就是你应该真正担心的 . 话虽如此,用C语言处理一些非常有用的练习/

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

    学习ASM当然也很有用,但如果你想将它应用到你的工作中,它可能是不必要的 . 它可能会教你一些有用的概念,或者至少可以帮助你更好地理解CLR是如何工作的(或者一般来说,字节码编译和字节码编译代码如何处理它们的东西) . 也许你可以尝试为更老/更简单的平台学习ASM;还有一个沉重的Atari 2600场景,由于平台的固有局限性,他们在游戏中挤出一些额外功能所做的一些黑客攻击非常棒 . 现代的x86_64架构非常复杂,有些毛茸茸,虽然这更像是个人观点而非实际情况 . 学习使用微控制器也可以完成工作,但要注意许多(大多数?)使用哈佛架构(即独立的程序和数据存储器),这与典型的通用CPU不同 .

  • 11

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

    我建议你用C语言做一些有意义的项目,然后用汇编语言做一两个,可能用于微控制器或专攻SSE / MMX .

  • 1

    首先问你的老板,而不是他告诉你的,最后再次询问反馈和审查你将要做的练习 . 按指示行动 . 重复直到他说“你现在比我更了解” . 这是利用你有幸运的真正专家的专业知识的更有效方式,并将永远留下非常积极的印象 . 这将是在业余时间单独学习C或汇编程序一样困难 .

  • 2

    我不认为Assembler的知识会让你成为一个更好的Ruby / C#程序员 .

    您可以使用磁化针写入磁盘的低级别,但如果您的程序不工作或不安全,您将无法获得任何东西 .

    学习“新”语言的语法无助于您获得有关编程深度的更多知识 .

  • 3

    好吧,“Real Programming”并不是指特定语言或低级语言 . 在我看来,“真正的编程”是分析任务,决定解决它的最佳方法,将该方法放入一系列简单步骤,然后根据需要进行修改和编辑直到达到目标的过程 . 从那时起,语言并不重要,这一切都在思考过程中 . 此外,高级语言没有任何问题,我一直使用python并喜欢它 . 但是,学习低级语言确实可以帮助您开发理解程序和计算机 . 会建议c,因为它是c#和c源于的地方,并且将为理解这两种语言提供基础 .

  • 1

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

    您正在使用可以执行非托管指针操作的C#,而不是在C land中可以实现的目标 . 例如,游戏可以在C#中成功编程,但大多数游戏都是C语言 .

    如果你不知道你在做什么,汇编程序基本上会移动一些内存,有时也会做坏事 . C / C编译器在下面创建了非常好的汇编代码,为什么你自己会这样做,除非你必须编写低级驱动程序软件 . 我们的2,000,000行混合C / C#代码中唯一的汇编程序是检测VMWare .

    我不认为在这个现代时代,鉴于您对工作的描述,您需要了解可以在处理器上使用多少寄存器 . 通过各种方式学习C,但如前所述,学习语法与学习如何应用它不同 .

    至少学习和理解模式(Gang of four),OO设计,了解不同测试方法的含义和好处以及所有这些对业务成本的影响 .

相关问题