如果我对C ++使用线性代数包,是否认为它是懒惰的?


11

首先,在实际陈述问题之前,让我提供一些背景知识。我学习物理学,所有编程课程都使用MATLAB等简单的编程语言。简单来说,我的意思是该语言为您完成了很多思考。在接下来的几年中,我将学习计算机科学课程,并且我正在考虑从事编程职业。

考虑到很多大学课程都是用C ++编写的,使用具有类似于MATLAB语法的线性代数包(Armadillo)是否被认为是懒惰的?

我现在正在编写一种遗传算法,尽管它在MATLAB中运行很快,但在没有这些软件包的帮助下,在C ++中花费了大量时间。

它在现实生活中如何运作?您可以使用哪些套餐?

例如,我不想使用armadillo构建我的C ++知识,并且不了解其他更广泛使用的软件包,例如“ vector.h”,“算法”,“列表”等。


9
您可以使用具有与项目兼容的许可证的任何内容。否则,您只是在浪费时间。(正确的一种)懒惰是好的
Richard Tingle


假设您的课程包括它们,我怀疑本身使用线性代数包将阻止您学习<vector>,<algorithm>和<list>。
Brandin

@RichardTingle:只要上级不禁止就可以使用任何东西;-)
Doc Brown

更改lazysensible标题,答案为“是”(当然,假设您正在执行涉及线性代数的任务)。
杰里·科芬

Answers:


21

理查德的评论已经是大多数答案了。每当您要进行除课堂练习以外的任何事情的编程时,您都希望尽可能多地重用现有代码,并且要兼顾其他一些注意事项。

代码重用的优点是:

  • 您的工作速度更快,因为已经完成了一些工作。
  • 现有的代码很有可能比您从头开始编写的代码都要好,因为它可能存在的时间更长,经过了更好的测试以及得到了更好的优化。
  • 通常,现有代码位于您不太熟悉的域中。例如,您正在进行物理模拟,但这并不意味着您对如何使线性代数高效地进行计算非常了解。使用他人编写的代码意味着您可以依靠他们的专业知识。

有一些事情要考虑:

  • 许可。您想重复使用的代码的作者拥有其版权,如果没有他的许可,您不能使用该代码。库将附带许可证,告诉您可以使用它们做什么,如果要使用库,则必须遵守许可证。Armadillo受Mozilla Public License 2.0约束,这意味着您可以自由使用它。
  • 积分。如果您的项目较大,则集成第三方库可能会相当复杂。根据您从库中获得的使用量,这可能不值得。
  • 分配。如果一个库仅可作为DLL使用,或者需要在系统中进行一些注册,但是您的分发方法必须包括“将该可执行文件复制到某处”,则您可能无法使用该库。

俗话说,在程序员中,懒惰是一种美德。


1
您可以轻触一下,但是由于该问题确实提到了课堂作业,因此对于要尝试学习的作品,请不要使用包或库,这一点很重要。如果您想学习如何构建神经网络,请随时使用库进行参数解析(文件io),但自己编写神经网络。
艾伦·舒特科

3
您列表上缺少的重要一点是将来的维护。当考虑使用第三方库时,它要么是开放源代码,要么是开放源代码,但由于过于复杂而无法由自己的组织进行将来的维护,因此需要确保图书馆供应商将提供未来的维护服务(包括库的演进) )持续一定的时间。这就是某些软件公司不使用某些库而更喜欢创建自己的库的最重要的原因之一,即使乍一看看起来很浪费。
布朗

1

您所说的“允许”是什么意思?我想我可能会在这里添加一些内容,这可能有助于澄清对一些初学者的误解:由于您正在学习一门课程,并且希望巩固所学内容,因此要求您在大学中编写自己的代码和算法等。您是通过亲自编写代码在课程中学习的。这种编码有助于您的学习过程。例如,在学习了特定的数据结构/算法之后,您可以编写自己的代码以查看其实际效果并加深理解。这是有道理的。

在进行现实生活中的编程项目时,您并不是在编写代码来帮助您学习一些概念/知识。您正在尝试生产工程产品。工程并不是真正的发明,而是要在其他人已经奠定的基础上,满足特定的实际需求。俗话说,编程是80%的人读取/重用他人的库/代码,而20%的人编写自己的库/代码。可能有点夸张,但您会精神振奋。

在您的情况下,如果您正在为课程进行编程项目,并且它明确要求您编写自己的算法,则您不想使用外部库。如果您要执行自己的工程项目,则在尝试提出自己的库之前,请使用尽可能多的库。

清楚区分这一点,您就会了解自己在做什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.