显然,对低水平知识的了解在我们的工作中非常重要。
但是,如果您已经在高水平上开发商业软件,并且已经选择了方向但没有任何汇编技能,那么专注于研究与您的方向相关的内容是否更合理?还是有理由要花一些时间来学习低级基础知识?
什么时候为时已晚,什么时候不为时?而如果它是不是太晚了,那么如何将一个去学习最佳(在不花费过多的时间来得到一些深入和理解的意义上)?
显然,对低水平知识的了解在我们的工作中非常重要。
但是,如果您已经在高水平上开发商业软件,并且已经选择了方向但没有任何汇编技能,那么专注于研究与您的方向相关的内容是否更合理?还是有理由要花一些时间来学习低级基础知识?
什么时候为时已晚,什么时候不为时?而如果它是不是太晚了,那么如何将一个去学习最佳(在不花费过多的时间来得到一些深入和理解的意义上)?
Answers:
不敢相信没有人提到调试 ...
我已经很多年没有写过汇编代码了。但是我经常阅读。当您拥有源代码和符号信息时,高级调试非常有用,但是当您的高级库在客户计算机上引发未处理的异常时,要求将该许可证包含在许可中为时已晚...
但是我仍然可以打开反汇编程序,看看您的高级逻辑最终会做什么,将不良数据追溯到其起源,找出是谁更改了FPU控制寄存器...
这比我想的要多得多,节省了我的培根。而且它从来没有到老学到老-有很多伟大的参考和教程出来的“净,只是你的机器上运行任何程序都可以提供一个动手的环境。
您不需要学习汇编语言,只需要了解它的工作原理即可。您需要知道XOR是什么,并在睡眠中以二进制形式计数,等等。但是我从来没有在我的工作中使用汇编代码。
因此,正如您所说,低级知识很重要,但是汇编方面的实践知识并不重要。
如果您确实不具备底层编程技能,则强烈建议您在业余时间学习一些。您无需成为专家;只是达到一定水平。您必须自己做很多数学工作,而不是依靠编译器或库来完成。因为大多数汇编指令对应一个处理器指令,所以它将帮助您了解编程的可读性。您必须自己管理稍大的程序中的复杂性,而不能享受诸如之类的好处if...else
。这将帮助您编写更简单的高级程序,因为汇编经验会教您如何轻松阅读。
另外,请记住汇编不是一种语言!它是一个通用术语,基本上意味着已经抽象为符号语言的处理器的指令集。不同的处理器具有不同的指令集,因此具有不同的汇编语言。当您学习“汇编”时,您将学习一种过程,而不是一种语言。
是的 -持续的终身学习是软件开发事业的重要组成部分。如果您有兴趣继续学习编程以及如何提高技巧,那么可以,在某些时候您应该学习汇编,因为它将使您接触到全新的语言和编写代码的方式。基于相同的原因,我建议尝试多种语言/编程风格,包括Ruby / Python(动态语言),Haskell / F#(纯功能语言),Lisp / Scheme(功能语言)等。
我想说,如果您不再对学习编程技巧感兴趣,为时已晚。例如,如果您的职业生涯已经到了某个阶段,您可能很快就会从编程转移到另一个领域,例如管理,系统工程,销售/市场营销等。如果您认为自己想搬到一个新的领域,在接下来的几年中,我将专注于在该领域开发所需的技能,而不是编程技巧。
专注于研究与您的方向相关的东西是否更合理?还是有理由要花一些时间来学习低级基础知识?
回答:
在教学界,至少在英国,教师的资格必须远远超过他们的教学水平。期望一名中学(高中)教师具有他们所教课程的学位,而小学(小学)教师也具有学位,并且必须精通所有主要科目,并且达到GCSE的良好等级(高中退出考试?,没有与美国实际相当的水平)。
为什么?因为要教好一些东西,或者确实要好用一些东西,您必须理解它。这需要了解底层结构,以及与之相关的决策链。为了正确理解高级代码,您必须了解构建它的层次,其运行方式,优缺点所在。这是递归的,要了解下面的层,您还必须了解下面的层。
最后,这就是为什么计算机方面的体面的大学/学院课程要求比其他任何事物都要好的数学能力的原因,因为那实际上是最底层的。
Maths -> Physics ->
-> Chemistry -> Materials -> Hardware Design -> Microcode -> Assembler
-> Bus Interfaces -> Peripherals
... Assembler -> Low Level -> High Level ->
... OS / Drivers -> API Level -> Applications -> User
如果您在这些方面缺乏知识,那么您的理解就会受到影响。您越接近操作另一层的水平,则在其中接地就越重要。
那么:您是否需要将汇编程序理解为高级编码器? 我会帮你的。
在我作为超级计算机专家的前世中,这非常重要。那时,我觉得您直到至少写了几百行汇编器并进行修补以降低性能才了解一台机器。由于很少有程序员想深入研究,这使我真的不可或缺。与硬件设计师类型交流时,我仍然有共同语言。
但是,实际上,这的需要/益处大部分已经过去了几十年。在高级编译器和无序执行硬件之间,通过再编写汇编器可以发挥英雄的作用几乎没有余地。虽然我认为这对了解事物的工作方式很有用。我计划教我的孩子(法语专业的CS专业)在一个简单的虚拟机上以非常简化的汇编器进行编程,以使他们对正在发生的事情有所了解。希望我们可以处理诸如展开,软件流水线,缓存和预取,底部加载等工作。因此,至少他们会知道这种工作正在某种程度上进行。