전산 방법을 배우기위한 우선 순위, 언제 자신의 코드를 작성해야합니까?


10

공학을 전공하고 컴퓨터 과학 프로젝트를 진행하고 있습니다. 나는 당신의 자신의 알고리즘을 구현하는 장점과 단점에 대한 논의가 있었다 것으로 나타났습니다 여기 . 초보 대학원 생일 때 자체 알고리즘 구현과 라이브러리 사용에 대한 비용-이익 분석이 다른가?


2
나는 긴 대답을했지만 다른 모드와 토론 한 후에 그것을 삭제하고 귀하의 질문에 대한 설명을 요청하기로 결정했습니다. 질문의 요점은 무엇입니까? "학습을 강조하는 곳은 어디입니까?", "학습 우선 순위를 정하는 방법을 모델링하는 방법은 무엇입니까?", "자체 구현 코드를 통해 라이브러리를 선택하면 해결되는 문제에 따라 달라 집니까?"또는 "장점은 무엇입니까? 내 경력의 훨씬 초기 단계에서 자체 알고리즘을 코딩하는 데 따른 단점은 무엇입니까? " 제 답변은 너무 광범위해서 더 집중된 질문에 집중적으로 답변하는 것이 좋습니다.
제프 옥스 베리

나는 대담한 섹션을 추가하여 내가 무엇을 요구했는지를 명확히했지만 나머지는 그대로 두었습니다. 다른 부품을 제거해야한다고 느낀다면 자유롭게 느끼십시오.
Godric Seer

감사합니다. 질문에 초점을 맞추기 위해 몇 가지 사항을 수정 한 다음 답변을 게시하겠습니다.
Geoff Oxberry

답변:


10

내 생각에, 시작하는 대학원 학생 데이비드 Ketcheson하여 답을 변경하지 않습니다되고 여기에 당신이 게시물에 연결 한 질문에.

배우고 자하는 최소 버전의 알고리즘을 코딩하십시오. 그런 다음 옆에 두십시오. 자체 알고리즘을 코딩하는 것이 학습에 가장 유용하지만, 연구 목표가 최신 라이브러리를 개선하는 소프트웨어를 작성하는 것이 아니라면 연구 (또는 생산) 코드에 유용합니다. 라이브러리를 사용하는 것이 좋습니다. 라이브러리는 코딩에 능숙하지 않거나 코딩에 능숙하지 않으면 직접 코딩 한 것보다 문서화되고 확장 가능하며 강력합니다. 또한 라이브러리는 테스트 및 디버깅 될 가능성이 높습니다 (물론 라이브러리를 작성한 사람에 따라 다릅니다 ...). 논문 작성을 위해 작성한 코드를 지원, 디버깅 및 테스트해야하며 시간을 절약하면 작성해야하는 코드의 양을 최소화하는 데 도움이됩니다.

내가 생각할 수있는 유일한 다른 시나리오는 다음과 같습니다.

  • 필요한 기능을 제공하는 라이브러리는 없습니다. 기존 오픈 소스 라이브러리에 기여하거나 자신의 오픈 소스 라이브러리를 작성하여 다른 사람들이 혜택을 볼 수 있도록하십시오.
  • 추가 성능이 필요하고 특별한 문제 구조를 활용하여 얻을 수 있습니다. 그런 다음 기존 라이브러리를 문서화하고 수정하거나 고성능 구현을 직접 작성하십시오.
  • 감독자는 사용자가 자신의 소프트웨어를 굴려야한다고 주장합니다. 글쎄, 당신은 거기에 있지만, 라이브러리를 사용하는 것이 더 나을 것이라고 확신하게하기 위해 위의 요점을 제시하는 것이 좋습니다 (모든 상황에서 가능하다면).

10

나는 Geoff의 사려 깊은 답변에 더 폭을 넓히고 싶습니다 . 특히, 초기 학업에서의 연구 노력과는 달리 프로그래밍 노력의 가치에 대해 조금 더 많은 관점을 제시하고자합니다.

과학 연구를 보강하기 위해 소프트웨어를 작성할 수 있으면 거의 모든 연구 팀의 귀중한 구성원이 될 것입니다. 그러나,이 시간이 학계 동료 나 학업 직책을 맡은 직원이 반드시 "가치있는"것으로 간주하지는 않습니다.

프린스턴에서 실시한 2011 년 조사 조사에서 "전산 과학 실무 조사" :

과학자들은 프로그래밍에 상당한 양의 연구 시간을 소비합니다. 평균적으로 과학자들은 연구 시간의 35 %가 소프트웨어 프로그래밍 / 개발에 소비되는 것으로 추정합니다. 처음에는 코드를 새로 작성하는 데 약간의 시간이 걸리지 만 많은 지루한 활동에 상당한 시간이 소요됩니다. 예를 들어, R / Stata를 사용한 정치 및 사회학 연구자들은 인구 조사 데이터를 R / Stata의 개별 패키지가 이해하는 형식으로 개조하기 위해 상당한 프로그래밍을 수행해야했습니다. 화학 공학의 일부 연구진은 코드를 새로운 연료에 적용하기 위해 최초의 저자가 졸업 한 후 오랫동안 화염 시뮬레이션을 수행 한 문서화되지 않은 레거시 코드를 리버스 엔지니어링해야했습니다. 프로그래밍보다 더 많은 시간을 보내야합니다. "

그렇다고 핵심 라이브러리 나 응용 프로그램을 구현하거나 재 설계하는 것은 좋은 생각이 아니라 심각한 소프트웨어 개발 (코드 작업 시간의 25 % 이상)을 수행하려는 경우이 세 가지를 유지하십시오 생각을 염두에 두십시오.

  • 프로젝트 규모와 개발자 수에 따라 복잡성과 위험이 기하 급수적으로 증가합니다. 실험실을 뛰어 넘는 더 큰 규모의 소프트웨어 또는 개발자 팀을 작성하거나 작업 할 때까지이를 잘 이해하고 노력을 정확하게 예측하기가 어렵습니다.

  • 잘해야합니다. 유용한 소프트웨어를 작성하려면 프로그래머 와 응용 과학자로서 어느 정도 성숙 해야합니다. 중요한 기능이 무엇인지, 수치 적 위험이있는 위치를 알고 특정 기능과 견고성에 대한 프로그래밍 노력을 예측할 수 있어야합니다. 물론, 이익을 얻는 유일한 방법은 당신이 주도하지 않거나 안전하게 실패하거나 지연 될 수있는 프로젝트에 시간을 투자하는 것입니다.

  • 많은 연구 실험실과 산업계에서 높은 프로그래밍 경험을 보유하고 있지만 과학 프로그래밍은 논문보다 과학에 더 많은 이점을 제공하더라도 과학 커리어에 잠재적 인 피해를 줄 수 있습니다. 잘 프로그래밍하는 법을 배우고, 코드를 문서화하고, 강력하게 만드는 방법은 글이 아닌 논문으로 번역됩니다. 고문은 항상 학생의 최선의 이익을 염두에 두지 않습니다. 이것은 학생의 인용 횟수에 영향을주지 않고 고문 그룹에 도움이되는 업무를 제공 할 수있는 경우 중 하나이기 때문입니다. 관심있는 분야에서 하나 이상의 신뢰할 수있는 멘토를 찾고 귀중한 기여가 무엇인지 명확하게 이해해야합니다. academia.stackexchange.com 이에 대한 후속 질문을하기에 훌륭한 장소입니다.


각주 : 계산 분야를 크게 발전시키는 일인 노력 프로젝트의 수는 꾸준히 감소하고 있습니다. 응용 분야 또는 밀도가 높은 선형 대수와 같은 기술적 인 것이기 때문입니다. 계산 연구의 "빵과 버터"를 형성하는 소프트웨어 패키지의 수가 점점 10 년 이상이되었습니다. 이 수준의 성숙도에 도달하지 못한 과학 코드는 버그가 많고 기능이 적으며 희박한 문서가있는 경향이 있습니다. 오래된 코드에 관계없이 적극적으로 지원되지 않는 미성숙 코드 작업을 피하십시오.


나는 이미 종이 수에 대해 걱정했다. 나는 많은 실험 학생들의 전산 학생이 될 것이기 때문에 많은 2, 3 저자를 가질 것입니다. 또한 시작시 다른 프로그램 (실험실의 0D 코드, 다른 대학의 2D 코드, 대학의 다른 실험실의 메시 소프트웨어) 만 결합 할 수 있습니다. 확실히 이것에 들어가는 것에 대해 많이 생각하십시오.
Godric Seer

6

비용-편익 분석은 당신이 공부하는 동안 달성하고자하는 원하는 과학적 컴퓨팅 능력에 달려 있다고 생각합니다.

과학 컴퓨팅에 능숙한 컴퓨터로 작업하는 대부분의 과학자에게는 충분합니다. 사용되는 주요 알고리즘에 대한 높은 수준의 (추상적 인) 이해와 소프트웨어 라이브러리 (소프트웨어 구축, 연결, 사용)를 효과적으로 사용할 수있는 프로그래밍 기술이 필요합니다. 메일 링리스트).

반대로 과학 컴퓨팅 분야의 전문가가 되려면 수치 방법, 부동 소수점 산술 및 컴퓨팅 기술에 대한 깊은 이해가 필요합니다. 책에서 이러한 주제의 이론을 배울 수는 있지만 고급 기술을 구축하고 유지하려면 실습을 통한 경험이 필요합니다. 따라서 배우는 동안 사용하는 모든 프로그램을 프로그래밍하는 것이 좋습니다.

올바른 능력 수준은 경력에 달려 있습니다. 해당 분야의 일하는 사람들이 사용하는 기술 수준을 확인하십시오.

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