首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件工程师真的需要知道低水平的东西了吗?

软件工程师真的需要知道低水平的东西了吗?
EN

Software Engineering用户
提问于 2011-03-25 14:44:30
回答 16查看 13.8K关注 0票数 24

随着高级编程语言(如C#、Java等)的发展,许多人声称它们将取代汇编语言和C/C++等语言,使您可以访问和控制计算机硬件,因为程序员应该专注于创建程序和解决问题,而不是浪费时间来处理计算机。随着硬件的不断改进,C/C++和Java之间的性能差异不会很大,大型游戏可以用Java这样的语言编程。

这就是我在互联网上看过这个话题后,简要总结的一般想法。你认为它在不久的将来会变成现实吗?这是否意味着我们学到的关于低水平的东西不再适用于软件行业了?这是否意味着汇编语言和C/C++将只与电气工程师相关,因为他们将是唯一需要为其电气部件编程的人?

多少学习就足够了?如果我们学到太多低水平的东西,我们最终会变得更倾向于电子工程,或者如果我们学了太多的数学,我们可以学习成为数学家,而不是程序员。我只想知道我学到的数学知识(我修了一门数学课程,涵盖了与这本书类似的材料(他们使用了不同的课本):离散数学及其应用)是否与我们的编程技能集一样有用。很多数学练习可能花我们大部分时间来做,如果你认真的话,你就没有时间去学习编程了。在我们的gamedev论坛上,即使是数学和物理也只有一个部分,因为它与编程部分相比。

现在我刚开始读“计算机编程的艺术”。数学只占书的四分之一,但对我们这些非数学家来说,这个练习是很难的。即使是这样的“初等”数学,我们在职业生涯中也使用过它吗?有些人可能会告诉我,读TACOP是在浪费时间,而且应该花时间在其他更实用的东西上,尽管这本书都是关于编程的(比起书中解释类似的东西来说,更多的是学术上的比较)。但我认为作者花了很大的时间和精力来制作它。他甚至可以写完整的5本书,而我们--观众--只有读它的使命。为什么不行?

EN

回答 16

Software Engineering用户

回答已采纳

发布于 2011-03-25 16:10:09

有趣的问题。我是一个很长时间的C++程序员,现在在C#中工作(在性能关键方面有一些非托管C++ ),而且历史上不得不添加偶尔的汇编代码,通常是因为性能方面的原因。

在准备对问题的答复时,应注意以下几点:

  • 为了进行比较,我建议您所提到的语言C#和Java与另一组程序集C/C++的主要区别是前者使用托管运行时来提供垃圾收集。还有其他不同之处(例如二进制可移植性、框架大小和可移植性),但在比较性能差异时,这是一个(?)主要贡献者。
  • 汇编、C和C++远远不是“低层次”。我认为您将汇编语言和C语言与硬件/固件/驱动程序开发人员联系在一起是正确的,但是C++通常在更高的层使用,而仍在大量使用中 --尽管根据TIOBE的索引,C#/Java显然在使用它。
  • 在C++层中,我会添加Objective,因为它更类似于C++,而不是C#/Java。最后,我要指出的是,随着shared_ptr<>和其他自动资源管理特性的增加,这些语言支持类似垃圾收集的东西。

好的-关于你的主要问题:软件工程师真的需要知道低水平的东西吗?

我的回答是:是

原因:

  • 即使使用C#/Java,您也可能遇到需要显式资源管理的框架实体,并且/或在任何重要的应用程序上遇到“固定”内存图的问题。您需要了解这些系统如何有效地避免和调试这些问题。
  • 移动平台的资源更有限,尽管在某些方面支持有限版本的Java和.NET,但iOS和Objective目前的主导地位意味着它将延续很长时间。
  • 性能:每当您碰到性能墙时,您可能需要插入一个本地编译的代码块来绕过它。
  • 遗留支持:每当您需要互操作以访问托管代码中未公开(尚未公开)的特性时,您都需要这样做。

问得好--但我不认为非托管语言会在短期内消失。

票数 18
EN

Software Engineering用户

发布于 2011-03-25 14:48:00

  • 有些人会合法地不了解和不理解较低层次的功能,并且仍然是一个非常有效率和有价值的开发人员,这已经是事实了。
  • 没有人需要学习或理解较低层次的功能,这将永远是浪费时间,永远不会是这样。

与任何工程学科一样,到最终产品有许多步骤,所有这些步骤都很重要,需要专业知识,而且很有价值。特别是在软件工程中,我们有许多抽象层。所有这些都是必需的,没有人能成为所有这些问题的专家。

也就是说,我们需要更多的C#/Java/Ruby开发人员,而不是Assemby/C开发人员。对于我们“更高层次”的开发人员来说,更多地了解“幕后”发生的事情是有帮助的,并将使我们更好地开发人员。但是很多其他的事情也是如此。作为一名.NET开发人员,对于exmaple来说,我可以学到的东西太多了,这将使我更有效率,学习我们的中间语言 (更不用说C++/C/Assmebly),尽管它非常有用,但常常不得不靠边坐。

票数 43
EN

Software Engineering用户

发布于 2011-03-25 15:01:07

今天,你可以作为一名程序员谋生,而不知道低水平的东西。我认为这只会让你成为一个更好的程序员。

然而,用低水平的东西来保持高水平的能力变得越来越不重要了。我的意思是,我已经有20年没有在装配中做任何事情了,在我重新开始工作之前,我可能需要一个认真的复习,但是关于在这个层次上工作的总体概念仍然是我意识的一部分,我发现它不时地帮助我,即使是在更高层次的语言中工作。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/61936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档