Czy uważa się za leniwe, jeśli używam pakietu algebry liniowej dla C ++?

11

Po pierwsze, pozwólcie, że przedstawię trochę tła, zanim faktycznie zadam pytanie. Studiuję fizykę i wszystkie moje zajęcia z programowania prowadzone były w łatwych językach programowania, takich jak MATLAB. Przez easy rozumiem, że język w znacznym stopniu myśli o tobie ... Przez następne lata będę uczęszczał na kursy informatyki i zastanawiam się nad kontynuowaniem kariery programistycznej.

Biorąc pod uwagę, że wiele kursów w college'u jest w C ++, czy używanie pakietu algebry liniowej (Armadillo) o składni podobnej do MATLAB będzie uważane za leniwe?

Obecnie koduję algorytm genetyczny i chociaż w MATLAB-ie poszło szybko, zajmuje dużo czasu w C ++ bez pomocy tych pakietów.

Jak to działa w prawdziwym życiu? Z jakich pakietów możesz korzystać?

Na przykład nie chciałbym budować mojej wiedzy o C ++ za pomocą pancernika i nie mam głębokiej wiedzy o innych, bardziej powszechnych pakietach, takich jak „vector.h”, „algorytm”, „lista” itp.

DLV
źródło
9
Możesz używać czegokolwiek, co ma licencję zgodną z twoim projektem. W przeciwnym razie marnujesz czas. (Właściwy rodzaj) lenistwo jest dobre
Richard Tingle
Zakładając, że twój program nauczania je zawiera, wątpię, aby samo użycie pakietu algebry liniowej uniemożliwiło naukę <vector>, <algorytmu> i <list>.
Brandin,
@RichardTingle: wolno używać czegokolwiek, o ile przełożeni tego nie zabraniają ;-)
Doc Brown
Zmień lazyna sensiblew tytule, a odpowiedź brzmi „tak” (zakładając, że wykonujesz zadanie wymagające algebry liniowej).
Jerry Coffin

Odpowiedzi:

21

Komentarz Richarda jest już odpowiedzią. Ilekroć programujesz tylko dla ćwiczenia klasowego, będziesz chciał wykorzystać tyle istniejącego kodu, jak to możliwe, z kilkoma innymi względami do zrównoważenia.

Zalety ponownego użycia kodu to:

  • Pracujesz szybciej, ponieważ niektóre prace zostały już wykonane.
  • Istniejący kod ma większą szansę na bycie lepszym niż cokolwiek, co napiszesz od zera, ponieważ prawdopodobnie istniał już dłużej, został lepiej przetestowany i zoptymalizowany.
  • Często istniejący kod znajduje się w domenie, której nie znasz. Na przykład wykonujesz symulacje fizyki, ale to nie znaczy, że wiesz bardzo dużo o tym, jak sprawić, by algebra liniowa była wydajna w obliczeniach. Używanie kodu napisanego przez innych oznacza, że ​​możesz polegać na ich wiedzy specjalistycznej.

Jest tylko kilka rzeczy do rozważenia:

  • Koncesjonowanie. Autor kodu, którego chcesz użyć ponownie, jest właścicielem praw autorskich i nie możesz używać kodu bez jego zgody. Biblioteki będą dostarczane z licencją, która mówi ci, co możesz z nimi zrobić, a jeśli chcesz korzystać z biblioteki, musisz przestrzegać licencji. Armadillo objęty jest licencją publiczną Mozilla 2.0, co oznacza, że ​​możesz z niej swobodnie korzystać.
  • Integracja. Jeśli Twój projekt jest większy, integracja bibliotek stron trzecich może być dość skomplikowana. W zależności od stopnia wykorzystania biblioteki, może nie być tego warte.
  • Dystrybucja. Jeśli biblioteka jest dostępna tylko jako biblioteki DLL lub wymaga rejestracji w systemie, ale twoja metoda dystrybucji musi polegać na „skopiowaniu gdzieś pliku wykonywalnego”, możesz nie mieć możliwości korzystania z biblioteki.

Jak to się mówi, u programisty lenistwo jest cnotą.

Sebastian Redl
źródło
1
Dotykasz go, ale ponieważ pytanie wspomina o pracy w klasie, ważne jest, aby nie używać pakietu lub biblioteki dla elementu, którego próbujesz się nauczyć. Jeśli próbujesz nauczyć się budować sieć neuronową, możesz użyć biblioteki do analizy argumentów, plik io, ale napisz sieć neuronową samodzielnie.
Alan Shutko
3
Ważnym punktem na twojej liście jest konserwacja w przyszłości. Rozważając użycie biblioteki innej firmy i jest ona albo zamkniętym źródłem, albo otwartym, ale zbyt złożonym, aby umożliwić utrzymanie przez własną organizację w przyszłości, należy upewnić się, że dostawca biblioteki zapewni przyszłe usługi konserwacji (w tym rozwój biblioteki) ) przez określony czas. Jest to jeden z najważniejszych powodów, dla których niektóre firmy programistyczne nie używają określonych bibliotek i wolą tworzyć własne, nawet jeśli na pierwszy rzut oka wygląda to na marnotrawstwo.
Doc Brown,
1

Co rozumiesz przez „dozwolone”? Myślę, że mogę tu dodać coś, co może pomóc w wyjaśnieniu nieporozumień niektórych początkujących studentów: jesteś proszony o napisanie własnego kodu i algorytmów itp. Na uniwersytecie, ponieważ uczysz się kursu i chcesz skonsolidować to, co nauczyłeś się na zajęciach, pisząc sam kod. Takie kodowanie pomaga w procesie uczenia się . Na przykład po nauczeniu się określonej struktury danych / algorytmu piszesz własny kod, aby zobaczyć, jak to działa, i pogłębić zrozumienie. To ma sens.

Kiedy realizujesz rzeczywisty projekt programistyczny, nie piszesz kodu jako pomocy w nauce niektórych pojęć / wiedzy; próbujesz wyprodukować produkt inżynierski. Inżynieria nie polega tak naprawdę na wynalazkach, ale na fundamentach już określonych przez innych, aby zaspokoić szczególną potrzebę praktyczną. Jest takie powiedzenie, że programowanie w 80% czyta / wykorzystuje ponownie biblioteki / kody innych, a 20% pisze własne. Może być trochę przesadzone, ale masz ducha.

W twoim przypadku, jeśli robisz projekt programistyczny dla kursu i wyraźnie prosi cię o kodowanie własnego algorytmu, nie chciałbyś używać bibliotek zewnętrznych. Jeśli pracujesz nad własnym projektem inżynieryjnym, użyj jak największej liczby bibliotek, zanim spróbujesz wymyślić własny.

Wyraźnie to rozróżnienie, a zrozumiesz, co robisz.

Xji
źródło