Чи вважається лінивим, якщо я використовую пакет лінійної алгебри для C ++?


11

По-перше, дозвольте мені ознайомитись із тим, перш ніж я фактично викладу це питання. Я вивчаю фізику, і всі мої уроки програмування проходили на легких мовах програмування, таких як MATLAB. Легко я маю на увазі, що мова робить для вас багато думок ... Наступні роки я буду приймати курси інформатики, і я думаю про те, щоб продовжувати кар'єру з програмування.

Зважаючи на те, що багато курсів коледжів перебувають на C ++, чи вважатиметься лінивим використання пакету лінійної алгебри (Armadillo) із синтаксисом, схожим на MATLAB?

Я зараз кодую генетичний алгоритм, і, хоча він швидко пройшов у MATLAB, його зайняття багато часу займає C ++ без допомоги цих пакетів.

Як це працює в реальному житті? Які пакунки ви можете використовувати?

Наприклад, я не хотів би будувати свої знання C ++ за допомогою armadillo і не маю глибоких знань про інші більш широко використовувані пакети, такі як "vector.h" "алгоритм" "список" тощо.


9
Вам дозволяється використовувати все, що має ліцензію, сумісну з вашим проектом. Інакше ти просто витрачаєш час. (Правильний вид) лінь - це добре
Річард Тінгл


Якщо припустити, що ваша навчальна програма включає їх, я сумніваюся, що використання лінійного пакету алгебри саме по собі не дозволить вам вивчити <вектор>, <алгоритм> і <список>.
Брандін

@RichardTingle: дозволено вживати що-небудь до тих пір, поки начальство не забороняє цього ;-)
Doc Brown

Змініть lazyна sensibleсвою назву, і відповідь "так" (якщо, звичайно, ви виконуєте завдання, що включає лінійну алгебру).
Джеррі Труну

Відповіді:


21

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

Перевагами використання коду є:

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

Є лише кілька речей, які слід врахувати:

  • Ліцензування. Автор коду, який ви хочете повторно використовувати, зберігає авторські права на нього, і ви не можете використовувати його код без його дозволу. Бібліотеки матимуть ліцензію, яка повідомляє, що ви можете зробити з ними, і якщо ви хочете користуватися бібліотекою, ви повинні відповідати ліцензії. Armadillo перебуває під Mozilla Public License 2.0, а це означає, що ви можете вільно користуватися нею.
  • Інтеграція. Якщо ваш проект більший, інтегрувати сторонні бібліотеки може бути досить складно. Залежно від обсягу використання, який ви отримуєте з бібліотеки, можливо, це не варто.
  • Поширення. Якщо бібліотека доступна лише у вигляді DLL або потребує певної реєстрації в системі, але ваш метод розповсюдження повинен складатися з "копіювання цього виконуваного файлу кудись", можливо, ви не зможете використовувати бібліотеку.

Як говориться, у програміста лінь - чеснота.


1
Ви торкаєтесь цього, але оскільки в цьому питанні згадується класна робота, важливо не використовувати пакет або бібліотеку для того предмета, який ви намагаєтеся навчитися. Якщо ви намагаєтеся навчитися будувати нейронну мережу, сміливо використовуйте бібліотеку для розбору аргументів, файлу io, але запишіть нейронну мережу самостійно.
Алан Шутко

3
Важливим моментом у вашому списку є майбутнє технічне обслуговування. Розмірковуючи про використання сторонніх джерел, і це або закрите джерело, або відкритий код, але занадто складний, щоб забезпечити майбутнє обслуговування власною організацією, потрібно переконатися, що постачальник бібліотеки надаватиме майбутні послуги з обслуговування (включаючи розвиток лібу) ) протягом певного часу. Це одна з найважливіших причин, чому певні компанії з програмного забезпечення не використовують певні лайки та вважають за краще створювати свої власні, навіть якщо це здається марним на перший погляд.
Doc Brown

1

Що ви коли-небудь розумієте під "дозволеним"? Я думаю, я можу додати тут щось, що могло б допомогти з'ясувати помилкове уявлення студентів-початківців: вас вимагають написати власний код та алгоритми тощо тощо в університеті, тому що ви вивчаєте курс і хочете закріпити те, що ви дізналися на уроках, власне написавши код. Таке кодування є помічником у вашому процесі навчання . Наприклад, вивчивши певну структуру / алгоритм даних, ви пишете власний код, щоб побачити, як він насправді працює, і поглибити своє розуміння. Це має сенс.

Коли ви робите проект програмування в реальному житті, ви не пишете код як помічник до засвоєння деяких понять / знань; ви намагаєтеся виготовити інженерний продукт. Інженерія насправді не є винаходом, але будуючи на фундаментах, закладених уже іншими, для задоволення певної практичної потреби. Є приказка, що програмування - це 80% читання / повторне використання інших бібліотек / кодів і 20% написання власних. Може бути трохи перебільшеним, але ви отримаєте дух.

У вашому випадку, якщо ви робите проект програмування для курсу, і він явно просить вас ввести власний алгоритм, ви не хочете використовувати зовнішні бібліотеки. Якщо ви займаєтесь власним інженерним проектом, то використовуйте якомога більше бібліотек, перш ніж намагатися придумати власну.

Очистіть цю відмінність, і ви зрозумієте, що ви робите.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.