과학적 환경에서 프로그래밍하는 방법? [닫은]


91

배경

작년에 저는 대학의 물리학 연구 그룹에서 인턴쉽을했습니다. 이 그룹에서 우리는 주로 LabVIEW 를 사용 하여 설정 제어, 데이터 수집 및 데이터 분석을위한 프로그램을 작성했습니다. 처음 두 가지 목적으로는 꽤 괜찮은 편이지만 데이터 분석에서는 정말 고통 스럽습니다. 게다가 모든 사람이 대부분 독학을했기 때문에 작성된 코드는 일반적으로 상당히 엉망이었습니다 (모든 박사가 모든 것을 처음부터 다시 작성하기로 결정한 것은 당연합니다). 버전 제어는 알려지지 않았으며 IT 부서의 엄격한 소프트웨어 및 네트워크 규정으로 인해 설정할 수 없었습니다.

자, 실제로 모든 것이 놀랍도록 잘 풀 렸습니다.하지만 자연 과학자들은 어떻게 소프트웨어를 개발합니까?

질문

몇 가지 구체적인 질문 :

  • 과학 소프트웨어, 특히 데이터 분석을 개발하는 데 어떤 언어 / 환경을 사용 했습니까? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)
  • 프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?
  • 버전 관리 및 버그 추적과 같은 것이 있습니까?
  • 개별 과학자들 (특히 물리학 자들은 고집이 센 사람들입니다!)을 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까?

지금까지의 답변 요약

지금까지의 답변 (또는 나의 해석) : (2008-10-11)

  • 가장 널리 사용되는 것으로 보이는 언어 / 패키지 :
  • 버전 관리는 거의 모든 응답자가 사용합니다. 버그 추적 및 기타 프로세스는 훨씬 덜 일반적입니다.
  • Software Carpentry 과정은 과학자에게 프로그래밍 및 개발 기술을 가르치는 좋은 방법입니다.
  • 개선하는 방법?
    • 사람들이 엄격한 프로토콜을 따르도록 강요하지 마십시오.
    • 환경을 직접 설정하고 다른 사람들에게 이점을 보여주십시오. 버전 관리, 버그 추적 등을 직접 시작하도록 도와주세요.
    • 다른 사람의 코드를 검토하는 것이 도움이 될 수 있지만 모든 사람이 그것을 고맙게 여기는 것은 아닙니다.

답변:


27

과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

저는 SciPy 의 주요 기업 후원자 인 Enthought 에서 일했습니다 . 우리는 맞춤형 소프트웨어 개발을 위해 Enthought와 계약 한 회사의 과학자들과 협력했습니다. Python / SciPy는 과학자들에게 편안한 환경 인 것 같습니다. 소프트웨어에 대한 배경 지식이없는 과학자라면 C ++ 또는 Java를 사용하는 것보다 시작하는 것이 훨씬 덜 위협적입니다.

Enthought 파이썬 유통은 모든 과학 연산 라이브러리 등, 3 차원 visualation, 음모를 꾸미고, 분석을 포함되어 있습니다

프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?

Enthought는 SciPy 교육을 제공 하며 SciPy 커뮤니티는 메일 링리스트에있는 질문에 답하는 데 매우 좋습니다.

버전 관리, 버그 추적과 같은 것이 있습니까?

예, 예 (Subversion 및 Trac). 우리는 과학자들과 (일반적으로 원격으로) 협력하고 있었기 때문에 버전 관리와 버그 추적이 필수적이었습니다. 일부 과학자가 버전 제어의 이점을 내재화하도록하려면 약간의 코칭이 필요했습니다.

개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!)

그들이 도구 체인에 익숙해 있는지 확인하십시오. 선행 투자가 필요하지만 더 친숙한 것 (Excel)에 찬성하여 거부하려는 경향이 줄어 듭니다. 도구가 실패하면 (그리고 그렇게 될 것입니다) 메일 링리스트, 사용자 그룹, 기타 과학자 및 조직의 소프트웨어 개발자와 같은 도움을받을 수있는 장소가 있는지 확인하십시오. 그들이 물리학을 더 잘 수행하도록하는 데 더 많은 도움이 필요합니다.


21

Software Carpentry 과정 은 특히 ​​과학 컴퓨팅을 수행하는 사람들을 대상으로하며 소프트웨어 엔지니어링의 기본과 교훈을 가르치고이를 프로젝트에 가장 잘 적용하는 방법을 가르치는 것을 목표로합니다.

버전 제어, 디버깅, 테스트, 스크립팅 및 기타 다양한 문제와 같은 주제를 다룹니다.

8 ~ 9 개의 강의를 들어 봤는데 적극 추천 할 만하다고 생각합니다.

편집 : 강의의 MP3도 사용할 수 있습니다.


16

여기 핵 / 입자 물리학.

  • 주요 프로그래밍 작업은 주로 CERNLIB (PAW, MINUIT, ...) 및 GEANT3를 사용하여 Fortran 에서 수행되었지만 최근에는 ROOTGeant4를 사용 하여 대부분 C ++로 수행되었습니다 . 특수 용도로 사용되는 다른 라이브러리와 도구가 많이 있으며, LabVIEW 는 여기저기서 일부 용도로 사용됩니다.
  • 이 사업에서 데이터 수집은 종종 상당히 낮은 수준의 작업을 의미했습니다. 종종 C에서, 때로는 심지어 어셈블리에서도 그러나 하드웨어가 더 많은 능력을 가지면서 사라지고 있습니다. 반면에 많은 보드는 이제 게이트 트위들 링이 필요한 FPGA로 제작되었습니다 .
  • 일회성, 그래픽 인터페이스 등 은 대부분 입자 물리학 커뮤니티 내부에 존재하는 여러 패키지를 포함하여 거의 모든 것을 사용합니다 ( 예전에는 Tcl / Tk 가 크며 최근에 더 많은 Perl / Tk 및 Python / Tk를 보았습니다). .
  • 코드를 작성하는 많은 사람들은 공식적인 교육이 거의 없거나 전혀 없으며, 프로세스는 구전 전통에 따라 매우 고르지 않게 전달되지만 대부분의 소프트웨어 그룹 리더는 프로세스를 진지하게 받아들이고이 영역의 결함을 보완하기 위해 필요한만큼 읽습니다.
  • 주요 도구에 대한 버전 제어는 어디에나 있습니다. 그러나 많은 개별 프로그래머는 작은 작업 때문에이를 무시합니다. 정식 버그 추적 도구는 야간 빌드, 단위 테스트 및 회귀 테스트와 마찬가지로 덜 일반적입니다.

개선하려면 :

  1. 지역 소프트웨어 리더의 좋은면을 얻으십시오.
  2. 자신의 영역에서 사용하려는 프로세스를 구현하고 허용 한 사람들도 사용하도록 권장하십시오.
  3. 기다림. 물리학 자들은 경험적인 사람들입니다. 도움이된다면 (결국!) 알아 차릴 것입니다.

개선을위한 한 가지 더 제안.

  1. 직접 함께 일하는 사람을 돕는 데 약간의 시간을 투자하십시오. 그들의 코드를 검토하십시오. 그들에게 알고리즘 복잡성 / 코드 생성 / DRY 또는 어떤 교수가 Fortran 책을 한 번 던지고 "작동 시키십시오"라고 말했기 때문에 그들이 배운 적이없는 기본적인 것에 대해 이야기하십시오. 프로세스 문제에 대해 교육하십시오. 그들은 똑똑한 사람들이고 기회를 주면 배울 것입니다.

11

이것은 약간 접선적일 수 있지만 관련성이 있기를 바랍니다.

저는 NI RF 및 통신 툴킷 용 소프트웨어를 작성하는 National Instruments, R & D에서 일했습니다. 우리는 LabVIEW를 꽤 많이 사용했으며 다음과 같은 방법을 따랐습니다.

  1. 소스 제어. NI는 Perforce를 사용합니다. 우리는 개발 / 트렁크 브랜치, 지속적인 통합, 작업 등 일반적인 작업을 수행했습니다.
  2. 우리는 자동화 된 테스트 스위트를 작성했습니다.
  3. 우리는 신호 처리 및 통신에 대한 배경 지식을 가진 소수의 사람들이 있습니다. 우리는 정기적 인 코드 검토와 모범 사례 문서를 통해 코드가 기준에 부합하는지 확인했습니다.
  4. 코드 검토에도 불구하고 저와 같은 "소프트웨어 전문가"가 효율성을 위해이 코드의 일부를 다시 작성해야하는 경우가있었습니다.
  5. 완고한 사람들에 대해 당신이 무엇을 의미하는지 정확히 알고 있습니다! 우리는 코드에서 잠재적 인 성능 향상을 지적하는 것이 직접적인 개인적 모욕이라고 생각했던 사람들이있었습니다! 이것이 좋은 관리를 요구한다는 것은 말할 필요도 없습니다. 나는 이러한 사람들을 다루는 가장 좋은 방법은 변화를 위해 강하게 압박하지 않고, 필요하다면 더러운 일을 할 준비를하는 것이 아니라 천천히가는 것이라고 생각했습니다. [예 : 코드에 대한 테스트 스위트 작성].

9

나는 정확히 '자연적인'과학자는 아니지만 (나는 교통을 연구한다) 데이터 분석을 위해 내 자신의 소프트웨어를 많이 작성하는 학자이다. 저는 파이썬으로 최대한 많이 작성하려고 노력하지만, 기존 소프트웨어 도구를 확장하거나 사용자 정의 할 때 다른 언어를 사용해야하는 경우가 있습니다. 내 분야에는 프로그래밍 교육이 거의 없습니다. 대부분의 사람들은 독학이거나 이전에 듣거나학과 밖에서 수강 한 수업에서 프로그래밍 기술을 배웠습니다.

저는 버전 관리의 열렬한 팬입니다. 논문의 모든 코드에 대해 홈 서버에서 실행되는 Vault를 사용했습니다. 지금은 부서에 Subversion 서버를 설정하도록 노력하고 있지만 적어도 처음에는이 서버를 사용하는 유일한 사람이 제 생각입니다. 나는 FogBugs를 약간 가지고 놀았지만 버전 관리와 달리 1 인 팀에게는 거의 유용하지 않다고 생각합니다.

다른 사람들이 버전 제어 등을 사용하도록 장려하는 것은 지금 제가 직면 한 문제입니다. 저는 대학원생들에게 그들이 저를 위해하고있는 연구 프로젝트에 그것을 사용하도록 강요하고 그들 자신의 연구에 그것을 사용하도록 장려 할 계획입니다. 프로그래밍과 관련된 수업을 가르치면 아마도 학생들에게 버전 제어를 사용하도록 강요 할 것입니다 (저장소에있는 항목에 대해 등급을 매김). 동료들과 대학원생이가는 한, 제가 할 수있는 일은 서버를 사용할 수있게하고 부드러운 설득과 좋은 모범에 의존하는 것뿐입니다. 솔직히,이 시점에서 나는 그들이 소스를 제어하는 ​​것보다 정기적 인 백업을하는 것이 더 중요하다고 생각합니다 (일부 사람들은 그들의 연구 데이터의 유일한 사본을 USB 플래시 드라이브에 가지고 다니고 있습니다).


7

1.) 스크립팅 언어는 더 나은 하드웨어로 인해 요즘 대부분의 경우 인기가 있습니다. Perl / Python / Lisp는 경량 애플리케이션 (자동화, 가벼운 계산)에 널리 사용됩니다. 저는 Unix / Linux를 좋아하기 때문에 제 작업 (컴퓨터 EM)에서 Perl을 많이 봅니다. 성능 문제의 경우 일반적으로 C / C ++ / Fortran이 사용됩니다. 병렬 컴퓨팅의 경우 일반적으로 프로그램이 암시 적으로 수행하는 것과 달리 EM에서 실행을 수동으로 병렬화합니다 (예 : 레이더 단면을 계산할 때 룩 앵글로 작업을 분할).

2.) 우리는 사람들을 여기에 섞어 놓습니다. 우리가 가지고있는 많은 코드는 매우 지저분하지만 과학자들은 일반적으로 그런 종류의 것을 신경 쓰지 않는 산발적 인 무리입니다. 이상적이지는 않지만 우리는 할 일이 있고 직원이 심하게 부족합니다. 우리는 천천히 나아지고 있습니다.

3.) 우리는 SVN을 사용합니다. 그러나 버그 추적 소프트웨어는 없습니다. 버그 특정 버그가 어디에 있는지 알려주는 txt 파일이 우리에게 도움이됩니다.

4.) 과학자를위한 모범 사례를 구현하기위한 나의 제안 : 천천히하십시오 . 과학자로서 우리는 일반적으로 제품을 배송하지 않습니다. 과학계의 어느 누구도 깨끗하고 유지 보수가 가능한 코드를 가지고 자신의 이름을지었습니다 . 일반적으로 해당 코드의 결과에서 인식을 얻습니다. 그들은 소프트웨어 관행을 배우는 데 시간을 할애하는 것에 대한 정당성을 볼 필요가 있습니다. 새로운 개념을 천천히 소개하고 따르도록 노력하십시오. 그들은 과학자이기 때문에 자신의 경험적 증거가 버전 제어와 같은 것의 유용성을 확인한 후에 항상 그것을 사용하기 시작할 것입니다!



5

저는 응축 물질 물리학 분야에서 일하는 물리학 자로서 고전 및 양자 모델을 구축합니다.

언어 :

  • C ++-매우 다재다능 함 : 어떤 용도로든 사용할 수 있고, 속도는 좋지만 MPI에 관해서는 약간 불편할 수 있습니다.
  • 옥타브 -일부 추가 계산에 적합하며 매우 편리하고 생산적입니다.

도서관 :

  • 아르마딜로 / 블리츠 ++ -C ++를위한 빠른 배열 / 행렬 / 큐브 추상화
  • Eigen / Armadillo-선형 대수
  • GSL-C와 함께 사용
  • LAPACK / BLAS / ATLAS- 매우 크고 빠르지 만 덜 편리합니다 (그리고 FORTRAN으로 작성 됨).

제도법:

  • GNUPlot 매우 깨끗하고 깔끔한 출력을 제공하지만 가끔 생산적이지 않습니다.
  • Origin- 플로팅에 매우 편리합니다.

개발 도구 :

  • 정력 + 플러그인-저에게 잘 작동합니다.
  • GDB -C / C ++로 작업 할 때 훌륭한 디버깅 도구
  • Code :: Blocks- 한동안 사용 해봤는데 꽤 편안했지만 Vim이 제 생각에는 여전히 더 좋습니다.

C ++가 C보다 느리게 실행되는 경우 잘못 사용하고있는 것입니다. '과정, 그것은하기 쉽지만 그것은 또 다른 문제입니다. :: 칠년 지금 년경에 대한 C ++ 작업, 여전히 새로운 것을 항상 :: 학습
dmckee --- 전 사회자 고양이를

저는 C ++의 열렬한 팬이지만 C 또는 Fortran보다 "훨씬 느릴 수있는"방법을보기는 어렵습니다. UPC 및 CUDA 용 C와 같은 HPC 용 C 변형을 포함하지 않는 한.
Suugaku

4

저는 영국 대학에서 물리학 자로 일하고 있습니다.

아마도 나는 다른 연구 분야가 프로그래밍에 대해 다른 강조점을 가지고 있음을 강조해야 할 것입니다. 입자 물리학 자 (예 : dmckee)는 컴퓨팅 모델링을 거의 독점적으로 수행하고 대규모 소프트웨어 프로젝트에서 협업 할 수있는 반면, 내 자신 (응축 물질)과 같은 분야의 사람들은 비교적 드물게 코드를 작성합니다. 나는 대부분의 과학자들이 후자의 진영에 속한다고 생각합니다. 코딩 기술은 일반적으로 물리학에서 유용하지만 필수적인 것은 아닙니다. 물리학 / 수학 기술이 프로그래머에게는 유용하지만 필수는 아닙니다. 이를 염두에두고 ...

  • 과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

일반적으로 데이터 분석 및 플로팅은 'Excel plus'라고 생각할 수있는 IGOR Pro , ORIGIN , Kaleidegraph 와 같은 일반 데이터 분석 패키지를 사용하여 수행됩니다 . 이러한 패키지에는 일반적으로 자동화에 사용할 수있는 스크립팅 언어가 있습니다. 더 많은 전문 분석은 일반적으로 오래 전에 작성되었을 작업에 대한 전용 유틸리티를 가질 수 있으며 아무도 소스를 가지고 있지 않으며 꽤 버그가 있습니다. 더 많은 기술 유형이 언급 된 언어를 사용할 수 있습니다 (Python, R, MatLab with Gnuplot for plotting).

제어 소프트웨어는 일반적으로 LabVIEW에서 수행되지만 실제로는 다소 특이한 Delphi를 사용합니다.

  • 프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?

저는 제가 다닌 두 대학에서 제공하는 그리드 컴퓨팅, 3D 시각화, 학습 부스트 등에 관한 세미나에 다녀 왔습니다. 학부 때 Excel 및 MatLab 용 VBA를 배웠지 만 C / MatLab / LabVIEW가 더 일반적입니다.

  • 버전 관리, 버그 추적과 같은 것이 있습니까?

아니요, 사람들은 개인 개발 설정을 가지고 있습니다. 우리의 코드베이스는 동기화 도구로 최신 상태로 유지되는 '서버'의 공유 폴더에 있습니다.

  • 개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!)

한 번에 한 단계 씩! 공유 폴더를 좀 더 견고한 것으로 바꾸려고합니다. 아마도 현재 동기화 도구 동작을 모방 한 SVN 클라이언트를 찾는 것이 도움이 될 것입니다.

전반적으로 대부분의 자연 과학 프로젝트에서는 일반적으로 연구에 시간을 쓰는 것이 더 낫다고 말하고 싶습니다!


의견을 공유해 주셔서 감사합니다! 나는 "일반적으로 연구를하는 데 시간이 더 낫다"는 데 동의하지만, 버전 제어 및 프로그래밍의 기본 교육과 같은 것의 부족으로 인해 얼마나 많은 시간이 손실되는지를 보면 과학자들이이 문제를 과소 평가한다고 말할 수 있습니다.
onnodb

4

전 학계 물리학 자이자 현재 산업 물리학 자 영국 :

과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

요즘에는 주로 MATLAB을 사용 합니다 (시각화 함수와 수학에 쉽게 액세스). FortranIDL을 많이 사용했습니다. . 나는 C (하지만 나는 C의 작가 라기보다는 독자이다), 엑셀 매크로 (추하고 혼란 스러움)를 사용했다. 저는 현재 Java와 C ++를 읽을 수 있어야하며 (하지만 실제로 프로그래밍 할 수는 없습니다) Python도 해킹했습니다. 내 엔터테인먼트를 위해 C #으로 프로그래밍을하고 있습니다 (주로 이식성 / 저비용 / 예쁜 인터페이스를 얻기 위해). 나는 내가 제시하는 거의 모든 언어로 Fortran을 작성할 수 있습니다 ;-)

프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?

대부분의 (모두?) 물리학 과정은 일반적으로 C, Fortran 또는 MATLAB에 대한 소규모 프로그래밍 과정을 갖지만 실제 기본 사항입니다. 어느 시점에서 소프트웨어 엔지니어링에 대한 교육을 받고 싶습니다 (수정 제어 / 테스트 / 중규모 시스템 설계).

버전 관리, 버그 추적과 같은 것이 있습니까?

비교적 최근에 Subversion / TortoiseSVN을 사용하기 시작했습니다. 이전에 함께 작업 한 그룹은 개정 제어를 사용했습니다. 공식적인 버그 추적 소프트웨어를 사용하는 학술 그룹을 모릅니다. 나는 여전히 어떤 종류의 체계적인 테스트도 사용하지 않습니다.

개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!)

학부 수준에서 몇 가지 소프트웨어 공학 아이디어를 소개 한 다음 대학원 수준에서 실습을 통해 강화하고 위에서 언급 한 Software Carpentry 과정과 같은 리소스에 대한 포인터도 제공하려고합니다.

나는 학계 물리학 자의 상당 부분이 소프트웨어를 작성하고 (반드시 전부는 아님) 소프트웨어 공학에 대한 아이디어에 대한 소개가 절실히 필요합니다.


4

과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

Python, NumPy 및 pylab (플로팅).

프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?

아니요,하지만 저는 멀티미디어 연구실에서 일하고 있었기 때문에 거의 모든 사람들이 컴퓨터 과학 배경을 가지고있었습니다.

버전 관리, 버그 추적과 같은 것이 있습니까?

예, 버전 제어를위한 Subversion , 버그 추적 및 wiki를위한 Trac . TOS가 프로젝트에 맞는 경우 http://www.assembla.com/ 에서 무료 버그 추적기 / 버전 제어 호스팅을 얻을 수 있습니다 .

개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!).

인프라가 설정되고 잘 유지되는지 확인하고 소스 제어의 이점을 판매하십시오.


3

저는 영국에있는 대학의 통계 학자입니다. 일반적으로 여기 사람들은 데이터 분석을 위해 R을 사용합니다. C / Perl을 알고 있다면 배우기 쉽습니다. 그 진정한 힘은 대화식으로 데이터를 가져오고 수정할 수있는 방법에 있습니다. 여러 CSV (또는 Excel) 파일을 가져 와서 병합하고, 다른 열을 기반으로 새 열을 만든 다음 GLM, GAM 또는 다른 모델에 던지는 것은 매우 쉽습니다. 플로팅도 사소하고 완전히 새로운 언어 (예 : PGPLOT 또는 GNUPLOT)에 대한 지식이 필요하지 않습니다. 물론 기본 제공 기능 (평균, 표준 편차 등과 같은 단순한 것에서 온 것)을 갖는 이점도 있습니다. 신경망, 스플라인 및 GL 플로팅 방법)

이것을 말했지만 몇 가지 문제가 있습니다. 매우 큰 데이터 세트의 경우 R은 매우 느려질 수 있습니다 (실제로는> 50,000x30 데이터 세트에서만 보았습니다). 해석 되었기 때문에이 점에서 Fortran / C의 이점을 얻지 못합니다. 그러나 (매우 쉽게) R이 C 및 Fortran 공유 라이브러리를 호출하도록 할 수 있습니다 (netlib 또는 직접 작성한 라이브러리에서). 따라서 일반적인 작업 흐름은 다음과 같습니다.

  • 무엇을해야할지 결정하십시오.
  • R에서 코드를 프로토 타이핑합니다.
  • 몇 가지 예비 분석을 실행합니다.
  • 느린 코드를 C 또는 Fortran으로 다시 작성하고 R에서 호출합니다.

저에게 아주 잘 작동합니다.

나는 내 부서 (100 명 이상)에서 버전 관리를 사용하는 유일한 사람 중 한 명입니다 (내 경우에는 githuib.com에서 git 사용). 이것은 다소 걱정 스럽지만 시도하는 데 열중하지 않는 것 같습니다. 밖으로 zip 파일을 전달하는 것에 만족합니다 (yuck.)

제 제안은 인수를 위해 LabView를 계속 사용하는 것입니다 (그리고 아마도 동료들이 획득을위한 도구 세트에 동의하도록하여 모두가 사용할 수 있도록 함). 그런 다음 데이터를 CSV (또는 유사)로 내보내고 R에서 분석을 수행합니다.이 점에서 바퀴를 재창조하는 데는 거의 의미가 없습니다.


2

과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

제 학부 물리학과는 LabVIEW 수업을 가르쳤고 연구 프로젝트에서 광범위하게 사용했습니다.

다른 대안은 MATLAB 이며 경험이 없습니다. 두 제품 모두 캠프가 있습니다. 각각의 장점 / 단점이 있습니다. 해결해야하는 문제의 종류에 따라 한 패키지가 다른 패키지보다 더 선호 될 수 있습니다.

데이터 분석과 관련하여 원하는 모든 종류의 숫자 크 런처를 사용할 수 있습니다. 이상적으로는 X 언어로 어려운 계산을 수행하고 출력을 형식화하여 Excel, Mathcad , Mathematica 또는 어떤 종류의 플로팅 시스템이든지간에 멋지게 플로팅 할 수 있습니다. 여기서 표준화를 기대하지 마십시오.

버전 관리, 버그 추적과 같은 것이 있습니까?

돌이켜 보면 우리는 그렇게하지 않았고 그렇게했다면 우리 모두에게 더 쉬웠을 것입니다. 모든 것을 부수고 그것을 고치기 위해 몇 시간 동안 고군분투하는 것과 같은 것은 없습니다!

모든 공통 코드에 대해 소스 제어를 확실히 사용하십시오. 개인이 더 일반적으로 만들 수있는 방식으로 코드를 작성하도록 권장합니다. 이것은 실제로 코딩 모범 사례입니다. 정말, 당신은 그들이 기초를 배울 수 있도록 컴퓨터 과학 수업을 가르치거나 듣게해야합니다.

개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!)

데이터 수집 (DAQ)과 데이터 분석 간에는 분명한 구분이 있습니다. 즉, DAQ에서 표준화 한 다음 과학자가 선택한 프로그램에서 데이터를 가지고 놀 수 있도록 할 수 있습니다.


2

또 다른 좋은 옵션은 Scilab 입니다. LabVIEW 에 따라 그래픽 모듈 이 있고 자체 프로그래밍 언어가 있으며 Fortran 및 C 코드를 포함 할 수도 있습니다. 대기업을 포함한 공공 및 민간 부문에서 사용되고 있습니다. 그리고 그것은 무료입니다.

버전 관리에 대해 일부는 Mercurial을 선호 합니다. 저장소를 관리하고 정의하는 데 더 많은 자유를 제공하기 때문입니다. 그러나 나는 그것에 대한 경험이 없습니다.

플로팅을 위해 Matplotlib을 사용 합니다. 곧 애니메이션을 만들어야 하는데 MEncoder 를 사용하여 좋은 결과를 보았습니다 . 다음은 오디오 트랙을 포함 하는 입니다.

마지막으로, 모듈화하는 것이 좋습니다. 이것은 주요 코드를 다른 파일에 보관하는 것이므로 코드 수정, 이해, 유지 관리 및 개선이 더 쉬울 것입니다. 예를 들어 파일 무결성 테스트 용 Python 모듈, 이미지 처리 시퀀스 용 Python 모듈 등을 작성했습니다.

또한 인쇄 줄을 사용하는 대신 코드의 설정 가능한 중단 점에서 변수 내용을 확인할 수있는 디버거를 사용하여 개발하는 것도 고려해야합니다. Python 및 Fortran 개발 용 Eclipse를 사용했습니다 (Fortran 짧은 프로그램을 컴파일하는 잘못된 버그가 있지만 구성이 잘못되었을 수 있음). 그리고 Python 용 Eric IDE 를 사용하기 시작했습니다 . SVN을 사용하여 디버깅하고 버전 관리를 관리 할 수 있으며, 콘솔이 내장되어 있으며, Bicycle Repair Man으로 리팩토링을 수행 할 수 있으며 (다른 하나도 사용할 수 있음) Unittest 등이 있습니다. Python을위한 더 가벼운 대안은 IDLE입니다 . 버전 2.3부터 Python으로.

몇 가지 힌트로 다음을 제안합니다.

  • 단일 문자 변수를 사용하지 않습니다. 외모를 검색하고 싶을 때 모든 곳에서 결과를 얻을 수 있습니다. 어떤 사람들은 괜찮은 IDE가 이것을 더 쉽게 만든다고 주장하지만, IDE에 대한 영구적 인 액세스에 의존하게 될 것입니다. ii, jj 및 kk를 사용해도 충분할 수 있지만이 선택은 언어에 따라 다릅니다. (예를 들어 코드 주석이 에스토니아어로 작성된 경우 이중 모음은 유용하지 않습니다.)

  • 처음부터 코드를 주석 처리합니다.

  • 중요한 응용 프로그램의 경우 이전 언어 / 컴파일러 버전 (주 릴리스)에 의존하는 것이 더 낫고 더 안정적이고 더 잘 디버깅되는 경우가 있습니다. 물론 이후 버전, 수정 된 버그 등에서 더 최적화 된 코드를 가질 수 있지만 2003 대신 Fortran 95, 3.0 대신 Python 2.5.4 등을 사용하는 것에 대해 이야기하고 있습니다. (특히 새 버전이 이전 버전과의 호환성이 깨질 때.) 많은 개선 사항은 일반적으로 많은 버그를 유발합니다. 그러나 이것은 특정 응용 사례에 따라 다릅니다! 이것은 개인적인 선택이며 많은 사람들이 이에 반대 할 수 있습니다.

  • 중복 및 자동 백업을 사용하십시오! (버전 관리 포함).


2

확실히 Subversion 을 사용 하여 소스 코드의 현재 진행중인 안정적인 스냅 샷 복사본을 유지하십시오. 여기에는 자체 개발 한 소프트웨어 도구를위한 C ++, Java 등과 일회성 처리를위한 quickie 스크립트가 포함됩니다.

과학에 대한 강한 기대와 "고독한 카우보이"개발 방법론에 대한 응용 엔지니어링으로 인해 저장소를 트렁크, 태그 및 그 밖의 모든 것으로 구성하는 일반적인 관행-신경 쓰지 마십시오! 과학자와 실험실 기술자는 손잡이를 돌리고 전극을 흔들고 진공 누출을 추적하는 것을 좋아합니다. Python / NumPy 라고 말 하거나 명명 규칙을 따르는 등 모든 사람이 동의하도록하는 것으로 충분합니다 . 그들이 신비한 소프트웨어 개발자 관행과 관례를 따르도록 만드는 것을 잊으십시오.


2

소스 코드 관리의 경우, Subversion 과 같은 중앙 집중식 시스템 은 명확한 SPOT (Single Point of Truth)로 인해 과학적 사용에 더 적합합니다. 변경 사항을 기록하고 파일을 찾을 수있는 위치를 추적하지 않고도 모든 파일의 버전을 리콜하는 기능은 기록 유지에 큰 이점이 있습니다. GitMonotone 과 같은 도구 : 오, 이런 혼란이 뒤따를 것이라고 상상할 수 있습니다! 힉스 보손이 지나갔거나 초신성이 폭발했을 때 새로운 센서를 가지고 놀면서 어떤 버전의 해킹 스크립트가 사용되었는지에 대한 명확한 기록이 있으면 행복으로 이어질 것입니다.


분산 버전 관리 시스템을 사용해 본 적이 있습니까?
Andrew Grimm

1
거의 모든 분산 시스템은 중앙 집중식 시스템만큼 쉽게 만듭니다. 수정 번호 (SVN에서와 같이) 대신 커밋 ID (Git 용어로)를 기록하기 만하면됩니다.
Phil Miller

2

과학 소프트웨어 개발에 사용한 언어 / 환경은 무엇입니까? 데이터 분석? 어떤 도서관? (예 : 플로팅에 무엇을 사용합니까?)

숫자 및 음질 관련 항목에 사용한 언어 :

  • C (느린 개발, 너무 많은 디버깅, 재사용 가능한 코드 작성이 거의 불가능)
  • C ++ (그리고 나는 그것을 싫어하는 법을 배웠습니다. 개발은 C만큼 느리지는 않지만 고통 스러울 수 있습니다. 템플릿과 클래스는 처음에는 멋졌지만 잠시 후 나는 항상 그들과 싸우고 해결책을 찾고 있다는 것을 깨달았습니다. 언어 디자인 문제
  • Common Lisp는 괜찮 았지만 Sci 컴퓨팅에 널리 사용되지는 않았습니다. C와 통합하기 쉽지는 않지만 (다른 언어에 비해) 작동합니다.
  • 계획. 이것은 나의 개인적인 선택이되었습니다.

내 편집기는 Emacs이지만 구성 파일 편집과 같은 빠른 작업에 vim을 사용합니다.

플로팅을 위해 일반적으로 텍스트 파일을 생성하여 gnuplot에 제공합니다.

데이터 분석을 위해 일반적으로 텍스트 파일을 생성하고 GNU R을 사용합니다.

여기에 많은 사람들이 FORTRAN (대부분 77 개이지만 90 개 정도), 많은 Java 및 일부 Python을 사용하는 것을 봅니다. 나는 그것들이 마음에 들지 않으므로 사용하지 않습니다.

프로그래밍에 대한 특별한 배경이없는 사람들을위한 교육이 있었습니까?

제가 CS를 졸업 한 이후로 이것은 저에게 적용되지 않는다고 생각합니다.하지만 제가 일하는 곳에서는 공식적인 교육이 없지만 사람들 (엔지니어, 물리학 자, 수학자)이 서로 돕습니다.

버전 관리, 버그 추적과 같은 것이 있습니까?

버전 관리는 절대적으로 중요합니다! 저는 제 코드와 데이터를 Git 리포지토리에있는 세상의 두 가지 다른면에있는 세 대의 다른 컴퓨터에 보관합니다. 나는 그것들을 항상 동기화한다. (그래서 나는 버전 제어 백업을 가지고있다!) 버그 제어는하지 않는다. 하지만 제 동료들은 BTS 나 VCS를 전혀하지 않습니다.

개별 과학자를 너무 많이 방해하지 않고 프로그래밍을위한 적절한 환경을 만들려고 노력하는 방법은 무엇입니까 (특히 물리학자는 완고한 사람들입니다!)

첫째, 나는 그들에게 가능한 한 많은 자유를 줄 것입니다. (내가 일하는 대학에서는 누군가가 Ubuntu 또는 Windows를 설치하거나 내 OS를 설치하도록 선택할 수 있습니다. 내 OS를 설치하기로 선택했습니다. 나는 그들로부터 지원을받지 않으며 관련 문제에 대해 책임을집니다. 보안 문제를 포함한 내 기계이지만 기계로 원하는 모든 작업을 수행합니다.)

둘째, 나는 그들이 익숙한 것을보고 그것을 작동하게 할 것입니다 (Fortran이 필요합니까? 우리는 그것을 설정할 것입니다. C ++가 필요합니까? 문제 없습니다. Mathematica? 좋아, 라이센스를 구입할 것입니다). 그런 다음 그들 중 얼마나 많은 사람들이 생산성을 높이는 데 도움이되는 "추가 도구"를 배우고 싶어하는지 확인하십시오 ( "다른"도구라고 말하지 마십시오. "추가"라고 말하십시오. 그러면 누구도 "잃어 버릴"것 같거나 이동 "또는 무엇이든). 편집자부터 시작하여 VCS를 사용하여 작업을 동기화하려는 그룹이 있는지 확인합니다 (집에 머물면서 SVN 또는 GIT를 통해 코드를 보낼 수 있습니다. 좋지 않습니까?). 강요하지 마십시오-이러한 도구가 얼마나 멋진 지 보여주는 예를 보여주십시오. R을 사용하여 데이터 분석을 수행하고 얼마나 쉬운 지 보여주세요. 멋진 그래픽을 보여주고 어떻게 만들 었는지 설명하세요 (하지만 간단한 예부터 시작하세요.


2

F #은 수학적 구조와의 강력한 의미 관계를 고려할 때 과학 관련 조작을 수행 할 수있는 잠재적 후보로 제안합니다.

또한 여기에 작성된 측정 단위에 대한 지원 은 수학적 모델과 구현 소스 코드 간의 적절한 변환을 보장하는 데 많은 의미가 있습니다.


1

우선, 저는 스크립팅 언어를 사용하여 많은 추가 사항을 설명 할 필요가 없습니다 (예를 들어 수동 메모리 관리는-대부분-저수준의 성능에 민감한 내용을 작성하는 경우 괜찮지 만 업그레이드 된 공학용 계산기로 컴퓨터를 사용하고 싶어합니다. 또한 귀하의 도메인에 특정한 것이 있는지 살펴보십시오 ( 통계의 경우 R ). 이것은 이미 사용자가 익숙한 개념으로 작업하고 특정 상황에 대한 특수 코드를 가지고 있다는 장점이 있습니다 (예 : R의 경우 표준 편차 계산, 통계 테스트 적용 등).

보다 일반적인 스크립팅 언어를 사용하려면 Python을 사용합니다. 두 가지 방법은 다음과 같습니다.

  • 실험 할 수있는 대화 형 쉘
  • 명확한 (때로는 길지만) 구문

추가 이점으로, 당신이 원하는 대부분의 작업을위한 라이브러리가 있습니다.


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