C ++에 선형 대수 패키지를 사용하면 게으른 것으로 간주됩니까?


11

먼저, 실제로 질문하기 전에 약간의 배경 지식을 드리겠습니다. 물리학을 공부하고 모든 프로그래밍 클래스는 MATLAB과 같은 쉬운 프로그래밍 언어로되어 있습니다. 나는 언어가 당신을 위해 많은 생각을한다는 것을 쉽게 의미합니다 ... 다음 몇 년 동안 나는 컴퓨터 과학 과정을 수강 할 것이며 프로그래밍에서 경력을 쌓을 생각입니다.

많은 대학 과정이 C ++에 있다고 생각하면 MATLAB과 비슷한 구문의 선형 대수 패키지 (Armadillo)를 사용하는 것이 게으른 것으로 간주됩니까?

나는 지금 유전자 알고리즘을 코딩하고 있으며 MATLAB에서 빠르게 진행되는 동안이 패키지의 도움없이 C ++에서 많은 시간을 소비했습니다.

실생활에서 어떻게 작동합니까? 어떤 패키지를 사용할 수 있습니까?

예를 들어 armadillo로 C ++ 지식을 구축하고 싶지 않고 "vector.h" "algorithm" "list"등과 같이 더 널리 사용되는 다른 패키지에 대한 깊은 지식이 없습니다.


9
프로젝트와 호환되는 라이센스가있는 모든 것을 사용할 수 있습니다. 그렇지 않으면 당신은 단지 시간을 낭비하고 있습니다. 게으름이 좋다
Richard Tingle


커리큘럼에 포함되어 있다고 가정하면 선형 대수 패키지를 사용하면 <vector>, <algorithm> 및 <list>를 배우지 못할 것입니다.
Brandin

@RichardTingle : 상사가 그것을 금지하지 않는 한 무엇이든 사용할 수있다 ;-)
Doc Brown

변경 lazysensible제목, 그리고 대답은 "예"(당신은 물론, 선형 대수를 포함하는 작업을하고있는 가정)입니다.
Jerry Coffin

답변:


21

Richard의 의견은 이미 대부분의 답변입니다. 클래스 연습 이외의 용도로 프로그래밍 할 때는 균형을 맞추기 위해 몇 가지 다른 고려 사항만으로 가능한 많은 기존 코드를 재사용해야합니다.

코드 재사용의 장점은 다음과 같습니다.

  • 일부 작업이 이미 완료되었으므로 더 빠르게 작업 할 수 있습니다.
  • 기존 코드는 처음부터 작성했을 때보 다 더 나아질 가능성이 높습니다. 아마도 더 길고 테스트가 잘되고 최적화되어 있기 때문일 것입니다.
  • 종종 기존 코드는 익숙하지 않은 도메인에 있습니다. 예를 들어, 물리 시뮬레이션을 수행한다고해서 선형 대수를 효율적으로 계산하는 방법에 대해 많이 알고있는 것은 아닙니다. 다른 사람이 작성한 코드를 사용하면 전문 지식에 의지 할 수 있습니다.

고려해야 할 몇 가지 사항이 있습니다.

  • 라이센싱. 재사용하려는 코드 작성자는 해당 코드의 저작권을 보유하며 허가없이 코드를 사용할 수 없습니다. 라이브러리에는 사용 가능한 작업을 알려주는 라이센스가 제공되며 라이브러리를 사용하려면 라이센스를 준수해야합니다. Armadillo는 Mozilla Public License 2.0에 따라 자유롭게 사용할 수 있습니다.
  • 완성. 프로젝트가 더 큰 경우 타사 라이브러리를 통합하는 것이 상당히 복잡 할 수 있습니다. 라이브러리에서 사용하는 사용량에 따라 그만한 가치가 없을 수 있습니다.
  • 분포. 라이브러리가 DLL로만 사용 가능하거나 시스템에 일부 등록이 필요하지만 배포 방법이 "어딘가에이 실행 파일 복사"로 구성되어 있으면 라이브러리를 사용하지 못할 수 있습니다.

프로그래머가 말한 것처럼 게으름은 미덕입니다.


1
당신은 그것을 만지지 만 질문에는 수업이 언급되어 있기 때문에 배우려는 작품에 패키지 나 라이브러리를 사용 하지 않는 것이 중요 합니다. 신경망을 구축하는 방법을 배우려는 경우 인수 구문 분석, 파일 io에 라이브러리를 사용하고 신경망을 직접 작성하십시오.
Alan Shutko

3
목록에서 누락 된 중요한 점은 향후 유지 관리입니다. 써드 파티 라이브러리 사용을 고려하고 있으며 폐쇄 소스이거나 공개 소스이지만 자체 조직에서 향후 유지 보수를하기에는 너무 복잡한 경우 라이브러리 벤더가 향후 유지 보수 서비스 (lib의 진화 포함)를 제공하도록해야합니다. ) 일정 시간 동안 이것이 특정 소프트웨어 회사가 특정 라이브러리를 사용하지 않고 언뜻보기에 낭비적인 것처럼 보이더라도 자신의 라이브러리를 만드는 것을 선호하는 가장 큰 이유 중 하나입니다.
Doc Brown

1

"허용"이란 무슨 뜻입니까? 나는 초급 학생들의 오해를 분명히하는 데 도움이 될만한 것을 여기에 추가 할 수 있다고 생각합니다 : 당신은 코스를 배우고 있고 무엇을 통합하기 때문에 대학에서 자신의 코드와 알고리즘 등을 작성하라는 요청을받습니다. 실제로 코드를 직접 작성하여 수업에서 배웠습니다. 이러한 코딩은 학습 과정에 도움이됩니다 . 예를 들어, 특정 데이터 구조 / 알고리즘을 학습 한 후에는 실제로 코드가 실제로 어떻게 작동하는지 이해하고 이해를 심화시키는 고유 한 코드를 작성합니다. 이것은 말이됩니다.

실제 프로그래밍 프로젝트를 수행 할 때는 개념 / 지식을 배우기위한 보조 수단으로 코드를 작성하지 않습니다. 엔지니어링 제품을 생산하려고합니다. 공학은 실제로 발명에 관한 것이 아니라 특정 실제 요구를 해결하기 위해 이미 다른 사람들이 마련한 기초 위에 구축합니다. 프로그래밍은 다른 사람의 라이브러리 / 코드를 80 % 읽거나 재사용하고 20 %는 자신의 것을 작성한다는 말이 있습니다. 약간 과장 될 수도 있지만 그 정신을 얻게됩니다.

귀하의 경우, 코스에 대한 프로그래밍 프로젝트를 수행하고 있고 자신의 알고리즘을 코딩하도록 명시 적으로 요청하는 경우 외부 라이브러리를 사용하고 싶지 않습니다. 자신의 엔지니어링 프로젝트를 수행하는 경우 가능한 한 많은 라이브러리를 사용하여 자신의 프로젝트를 만들어보십시오.

이 차이점을 분명히 이해하면 현재하고있는 일을 이해할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.