Считается ли это ленивым, если я использую пакет линейной алгебры для C ++?


11

Во-первых, позвольте мне дать некоторую предысторию, прежде чем я действительно сформулирую вопрос. Я изучаю физику, и все мои классы программирования были на таких простых языках программирования, как MATLAB. Под легким я подразумеваю, что язык делает большую часть мышления для вас ... В течение следующих лет я буду посещать курсы информатики, и я думаю продолжить карьеру в программировании.

Учитывая, что многие курсы для колледжей написаны на C ++, будет ли использование пакета линейной алгебры (Armadillo) с синтаксисом, аналогичным MATLAB, считаться ленивым?

Я сейчас пишу генетический алгоритм, и, хотя он работал быстро в MATLAB, он занимал много времени в C ++ без помощи этих пакетов.

Как это работает в реальной жизни? Какие пакеты вы можете использовать?

Например, я не хотел бы расширять свои знания C ++ с помощью броненосца и не иметь глубоких знаний о других более широко используемых пакетах, таких как «vector.h», «алгоритм», «список» и т. Д.


9
Вам разрешено использовать все, что имеет лицензию, совместимую с вашим проектом. В противном случае вы просто тратите свое время. (Правильный вид) лень это хорошо
Ричард Тингл


Предполагая, что ваш учебный план включает их, я сомневаюсь, что использование пакета линейной алгебры само по себе не позволит вам изучить <vector>, <gorithm> и <list>.
Брандин

@RichardTingle: разрешено использовать что угодно, если начальство не запрещает это ;-)
Док Браун

Измените lazyна sensibleв названии, и ответ «да» (при условии, что вы выполняете задачу, которая включает линейную алгебру, конечно).
Джерри Гроб

Ответы:


21

Комментарий Ричарда - большая часть ответа уже. Всякий раз, когда вы программируете для чего-то, кроме упражнений в классе, вы захотите повторно использовать как можно больше существующего кода, с учетом всего лишь нескольких других соображений.

Преимущества повторного использования кода:

  • Вы работаете быстрее, потому что некоторая работа уже выполнена.
  • Существующий код имеет больше шансов быть лучше, чем все, что вы написали бы с нуля, потому что он, вероятно, был дольше, был лучше протестирован и лучше оптимизирован.
  • Довольно часто существующий код находится в области, с которой вы не очень знакомы. Например, вы выполняете физические симуляции, но это не значит, что вы знаете очень много о том, как сделать линейную алгебру эффективной для вычислений. Использование кода, написанного другими, означает, что вы можете опираться на их опыт.

Есть только несколько вещей для рассмотрения:

  • Лицензирование. Автор кода, который вы хотите использовать повторно, сохраняет за собой авторские права, и вы не можете использовать код без его разрешения. Библиотеки будут поставляться с лицензией, которая говорит вам, что вы можете с ними делать, и если вы хотите использовать библиотеку, вы должны соблюдать лицензию. Armadillo находится под публичной лицензией Mozilla 2.0, что означает, что вы можете использовать его бесплатно.
  • Интеграция. Если ваш проект больше, может быть довольно сложно интегрировать сторонние библиотеки. В зависимости от объема использования, которое вы получаете из библиотеки, оно может не стоить того.
  • Распространение. Если библиотека доступна только в виде DLL или требует некоторой регистрации в системе, но ваш метод распространения должен состоять из «скопировать этот исполняемый файл куда-нибудь», вы не сможете использовать библиотеку.

Как говорится, для программиста лень это добродетель.


1
Вы касаетесь этого, но поскольку в вопросе упоминается классная работа, важно не использовать пакет или библиотеку для той части, которую вы пытаетесь изучить. Если вы пытаетесь научиться строить нейронную сеть, не стесняйтесь использовать библиотеку для разбора аргументов, файл io, но пишите нейронную сеть самостоятельно.
Алан Шутко

3
Важный момент, отсутствующий в вашем списке, это будущее обслуживание. При рассмотрении вопроса о том, чтобы использовать стороннюю библиотеку, и она либо с закрытым исходным кодом, либо с открытым исходным кодом, но слишком сложна, чтобы позволить дальнейшее обслуживание собственной организацией, необходимо убедиться, что поставщик библиотеки предоставит будущие услуги по обслуживанию (включая развитие библиотеки). ) на определенное количество времени. Это одна из главных причин, по которой определенные компании-разработчики программного обеспечения не используют определенные библиотеки и предпочитают создавать свои собственные, даже если на первый взгляд это выглядит расточительно.
Док Браун

1

Что вы подразумеваете под «разрешено»? Думаю, я мог бы добавить кое-что, что могло бы помочь прояснить заблуждение некоторых начинающих студентов: вас просят написать свой собственный код, алгоритмы и т. Д. В университете, потому что вы изучаете курс и хотите объединить то, что вы узнали на уроках, фактически написав код самостоятельно. Такое кодирование является помощником в вашем процессе обучения . Например, после изучения конкретной структуры / алгоритма данных вы пишете свой собственный код, чтобы увидеть, как он на самом деле работает, и углубить свое понимание. Это имеет смысл.

Когда вы делаете реальный проект по программированию, вы не пишете код в качестве помощника в изучении некоторых концепций / знаний; Вы пытаетесь произвести инженерный продукт. Инжиниринг на самом деле не об изобретении, а о том, что уже заложено в основу, заложенную другими, для решения конкретной практической задачи. Есть поговорка, что программирование - это 80% чтения / повторного использования чужих библиотек / кодов и 20% написания своих собственных. Может быть, немного преувеличено, но вы получите дух.

В вашем случае, если вы делаете проект по программированию для курса и он явно просит вас написать собственный алгоритм, вы не захотите использовать внешние библиотеки. Если вы делаете свой собственный инженерный проект, то используйте как можно больше библиотек, прежде чем пытаться придумать свой собственный.

Проясните это различие, и вы поймете, что делаете.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.