Thực hành lập trình trong môi trường khoa học? [đóng cửa]


91

Lý lịch

Năm ngoái, tôi đã thực tập trong một nhóm nghiên cứu vật lý tại một trường đại học. Trong nhóm này, chúng tôi chủ yếu sử dụng LabVIEW để viết các chương trình kiểm soát thiết lập của chúng tôi, thực hiện việc thu thập dữ liệu và phân tích dữ liệu của chúng tôi. Đối với hai mục đích đầu tiên, điều đó hoạt động khá ổn, nhưng đối với phân tích dữ liệu, đó là một nỗi đau thực sự. Trên hết, mọi người hầu hết đều tự học, vì vậy mã được viết ra nhìn chung khá lộn xộn (không có gì lạ khi mọi tiến sĩ đều nhanh chóng quyết định viết lại mọi thứ từ đầu). Kiểm soát phiên bản không xác định và không thể thiết lập do các quy định nghiêm ngặt về phần mềm và mạng từ bộ phận CNTT.

Bây giờ, mọi thứ thực sự diễn ra ổn một cách đáng ngạc nhiên, nhưng làm thế nào để những người trong ngành khoa học tự nhiên phát triển phần mềm của họ?

Câu hỏi

Một số câu hỏi cụ thể:

  • Bạn đã sử dụng những ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt là phân tích dữ liệu? Những thư viện nào? (ví dụ, bạn sử dụng gì để lập kế hoạch?)
  • Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?
  • Bạn có bất cứ điều gì như kiểm soát phiên bản và theo dõi lỗi không?
  • Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Tóm tắt các câu trả lời cho đến nay

Các câu trả lời (hoặc cách giải thích của tôi về chúng) cho đến nay: (2008-10-11)

  • Các ngôn ngữ / gói dường như được sử dụng rộng rãi nhất:
    • LabVIEW
    • Python
      • với SciPy , NumPy , PyLab , v.v. (Xem thêm câu trả lời của Brandon để tải xuống và liên kết)
    • C / C ++
    • MATLAB
  • Kiểm soát phiên bản được sử dụng bởi gần như tất cả người trả lời; theo dõi lỗi và các quy trình khác ít phổ biến hơn nhiều.
  • Khóa học Nghề mộc phần mềm là một cách tốt để dạy các kỹ thuật lập trình và phát triển cho các nhà khoa học.
  • Làm thế nào để cải thiện mọi thứ?
    • Đừng ép buộc mọi người tuân theo các giao thức nghiêm ngặt.
    • Tự thiết lập môi trường và thể hiện lợi ích cho người khác. Giúp họ bắt đầu tự làm việc với kiểm soát phiên bản, theo dõi lỗi, v.v.
    • Xem lại mã của người khác có thể hữu ích, nhưng lưu ý rằng không phải ai cũng có thể đánh giá cao điều đó.

Câu trả lời:


27

Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Tôi từng làm việc cho Enthought , nhà tài trợ chính của SciPy . Chúng tôi đã hợp tác với các nhà khoa học từ các công ty đã ký hợp đồng với Enthought để phát triển phần mềm tùy chỉnh. Python / SciPy dường như là một môi trường thoải mái cho các nhà khoa học. Bắt đầu sẽ ít đáng sợ hơn nhiều so với C ++ hoặc Java nếu bạn là một nhà khoa học không có nền tảng phần mềm.

Bản phân phối Python Enthought đi kèm với tất cả các thư viện máy tính khoa học bao gồm phân tích, vẽ biểu đồ, hình ảnh 3D, v.v.

Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?

Enthought có cung cấp đào tạo SciPy và cộng đồng SciPy khá tốt trong việc trả lời các câu hỏi trong danh sách gửi thư.

Bạn đã có bất cứ điều gì như kiểm soát phiên bản, theo dõi lỗi?

Vâng, và có (Subversion và Trac). Vì chúng tôi hợp tác làm việc với các nhà khoa học (và thường là từ xa từ họ), nên kiểm soát phiên bản và theo dõi lỗi là rất cần thiết. Phải mất một số huấn luyện để một số nhà khoa học hiểu được lợi ích của việc kiểm soát phiên bản.

Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Đảm bảo rằng họ đã quen với chuỗi công cụ. Cần phải đầu tư từ trước, nhưng nó sẽ khiến họ cảm thấy ít có xu hướng từ chối nó hơn để ủng hộ một thứ quen thuộc hơn (Excel). Khi các công cụ đó không thành công (và chúng sẽ xảy ra), hãy đảm bảo rằng chúng có nơi để nhờ trợ giúp - danh sách gửi thư, nhóm người dùng, các nhà khoa học và nhà phát triển phần mềm khác trong tổ chức. Càng có nhiều trợ giúp để giúp họ trở lại làm vật lý thì càng tốt.


21

Khóa học Nghề mộc phần mềm đặc biệt nhắm đến những người làm công việc tính toán khoa học và nhằm mục đích dạy những điều cơ bản và bài học về kỹ thuật phần mềm cũng như cách tốt nhất để áp dụng chúng vào các dự án.

Nó bao gồm các chủ đề như kiểm soát phiên bản, gỡ lỗi, kiểm tra, viết kịch bản và nhiều vấn đề khác.

Tôi đã nghe khoảng 8 hoặc 9 bài giảng và nghĩ rằng nó rất được khuyến khích.

Chỉnh sửa: MP3 của bài giảng cũng có sẵn .


16

Vật lý hạt nhân / hạt tại đây.

  • Công việc lập trình chính thường được thực hiện hầu hết trong Fortran bằng CERNLIB (PAW, MINUIT, ...) và GEANT3 , gần đây nó chủ yếu được thực hiện bằng C ++ với ROOTGeant4 . Có một số thư viện và công cụ khác được sử dụng chuyên biệt và LabVIEW thấy một số công dụng ở đây và ở đó.
  • Việc thu thập dữ liệu trong giai đoạn cuối của công việc kinh doanh này thường có nghĩa là công việc ở mức độ khá thấp. Thường là trong C, đôi khi ngay cả trong lắp ráp, nhưng điều này đang chết dần vì phần cứng có nhiều khả năng hơn. Mặt khác, nhiều bo mạch hiện được xây dựng bằng FPGA cần cổng xoay ...
  • One-off, giao diện đồ họa, v.v. sử dụng hầu hết mọi thứ ( Tcl / Tk đã từng rất lớn và gần đây tôi đã thấy nhiều Perl / Tk và Python / Tk hơn) bao gồm một số gói tồn tại chủ yếu trong cộng đồng vật lý hạt .
  • Nhiều người viết code ít hoặc không được đào tạo chính quy, và quy trình được truyền miệng rất không đồng đều, nhưng hầu hết các trưởng nhóm phần mềm đều coi trọng quy trình và đọc càng nhiều càng tốt để bù đắp những khiếm khuyết của họ trong lĩnh vực này.
  • Kiểm soát phiên bản cho các công cụ chính là phổ biến. Nhưng nhiều lập trình viên cá nhân bỏ bê nó cho các nhiệm vụ nhỏ hơn của họ. Các công cụ theo dõi lỗi chính thức ít phổ biến hơn, cũng như các bản dựng hàng đêm, thử nghiệm đơn vị và thử nghiệm hồi quy.

Để cải thiện mọi thứ:

  1. Nhận được sự ủng hộ của các nhà lãnh đạo phần mềm địa phương
  2. Thực hiện quy trình bạn muốn sử dụng trong khu vực của riêng bạn và khuyến khích những người bạn cho phép cũng sử dụng quy trình đó.
  3. Chờ đợi. Các nhà vật lý là những người thực nghiệm. Nếu nó hữu ích, họ sẽ (cuối cùng!) Nhận thấy.

Thêm một gợi ý để cải thiện mọi thứ.

  1. Dành một chút thời gian để giúp đỡ bất kỳ ai mà bạn làm việc trực tiếp. Xem lại mã của họ. Nói với họ về độ phức tạp của thuật toán / tạo mã / DRY hoặc bất cứ điều gì cơ bản mà họ chưa bao giờ học bởi vì một số giáo sư đã ném một cuốn sách Fortran vào họ một lần và nói "làm cho nó hoạt động". Hướng dẫn họ về các vấn đề quy trình. Họ là những người thông minh, và họ sẽ học hỏi nếu bạn cho họ cơ hội.

11

Điều này có thể hơi tiếp tuyến, nhưng hy vọng có liên quan.

Tôi từng làm việc cho National Instruments, R&D, nơi tôi viết phần mềm cho bộ công cụ NI RF & Communication. Chúng tôi đã sử dụng LabVIEW khá nhiều và đây là các phương pháp mà chúng tôi đã làm theo:

  1. Kiểm soát nguồn. NI sử dụng Perforce. Chúng tôi đã làm điều bình thường - các nhánh dev / trunk, tích hợp liên tục, hoạt động.
  2. Chúng tôi đã viết các bộ thử nghiệm tự động.
  3. Chúng tôi có một vài người đến với nền tảng về xử lý tín hiệu và giao tiếp. Chúng tôi đã từng thường xuyên đánh giá mã và tài liệu về các phương pháp hay nhất để đảm bảo mã của họ đạt chuẩn.
  4. Mặc dù có những đánh giá về mã, nhưng vẫn có một vài trường hợp khi những người "phần mềm", như tôi phải viết lại một số đoạn mã này cho hiệu quả.
  5. Tôi biết chính xác ý của bạn về những người cứng đầu! Chúng tôi đã có những người từng nghĩ rằng việc chỉ ra một khả năng cải thiện hiệu suất trong mã của họ là một sự xúc phạm cá nhân trực tiếp! Không cần phải nói rằng điều này đòi hỏi sự quản lý tốt. Tôi nghĩ rằng cách tốt nhất để đối phó với những người này là đi từ từ, không ép buộc phải thay đổi và nếu cần, hãy chuẩn bị để làm công việc bẩn thỉu. [Ví dụ: viết một bộ thử nghiệm cho mã của họ].

9

Tôi không hẳn là một nhà khoa học 'tự nhiên' (tôi học về giao thông vận tải) nhưng là một học giả, người viết rất nhiều phần mềm của riêng tôi để phân tích dữ liệu. Tôi cố gắng viết nhiều nhất có thể bằng Python, nhưng đôi khi tôi buộc phải sử dụng các ngôn ngữ khác khi tôi đang làm việc để mở rộng hoặc tùy chỉnh một công cụ phần mềm hiện có. Có rất ít đào tạo lập trình trong lĩnh vực của tôi. Hầu hết mọi người đều tự học, hoặc học các kỹ năng lập trình của họ từ các lớp học trước đây hoặc bên ngoài chuyên ngành.

Tôi là một fan hâm mộ lớn của kiểm soát phiên bản. Tôi đã sử dụng Vault chạy trên máy chủ gia đình của mình cho tất cả mã cho luận văn của mình. Hiện tại, tôi đang cố gắng yêu cầu bộ phận thiết lập một máy chủ Subversion, nhưng tôi đoán là tôi sẽ là người duy nhất sử dụng nó, ít nhất là lúc đầu. Tôi đã chơi xung quanh một chút với FogBugs, nhưng không giống như kiểm soát phiên bản, tôi không nghĩ rằng điều đó gần như hữu ích cho một đội một người.

Đối với việc khuyến khích người khác sử dụng kiểm soát phiên bản và những thứ tương tự, đó thực sự là vấn đề tôi đang gặp phải bây giờ. Tôi đang có kế hoạch buộc các sinh viên tốt nghiệp của tôi sử dụng nó trong các dự án nghiên cứu mà họ đang thực hiện cho tôi và khuyến khích họ sử dụng nó cho nghiên cứu của riêng mình. Nếu tôi dạy một lớp liên quan đến lập trình, tôi có thể sẽ buộc học sinh sử dụng điều khiển phiên bản ở đó (chấm điểm cho họ về những gì có trong kho lưu trữ). Theo như các đồng nghiệp của tôi và các sinh viên tốt nghiệp của họ, tất cả những gì tôi thực sự có thể làm là tạo sẵn một máy chủ và dựa vào sự thuyết phục nhẹ nhàng và nêu gương tốt. Thành thật mà nói, tại thời điểm này, tôi nghĩ điều quan trọng hơn là khiến họ sao lưu thường xuyên hơn là kiểm soát nguồn (một số người đang mang theo bản sao duy nhất của dữ liệu nghiên cứu của họ trên ổ đĩa flash USB).


7

1.) Các ngôn ngữ kịch bản ngày nay phổ biến cho hầu hết mọi thứ do phần cứng tốt hơn. Perl / Python / Lisp phổ biến cho các ứng dụng nhẹ (tự động hóa, tính toán nhẹ); Tôi thấy rất nhiều Perl trong công việc của mình (EM tính toán) vì chúng tôi thích Unix / Linux. Đối với nội dung hiệu suất, C / C ++ / Fortran thường được sử dụng. Đối với tính toán song song, chúng tôi thường chạy song song theo cách thủ công trong EM thay vì để một chương trình thực hiện nó một cách ngầm định (tức là chia nhỏ các công việc theo góc nhìn khi tính toán mặt cắt của radar).

2.) Chúng tôi chỉ muốn ném mọi người vào hỗn hợp ở đây. Rất nhiều đoạn mã mà chúng ta có rất lộn xộn, nhưng các nhà khoa học thường là một nhóm phân tán và không bận tâm đến những thứ đó. Không phải là lý tưởng, nhưng chúng tôi có những thứ cần cung cấp và chúng tôi đang thiếu nhân sự nghiêm trọng. Chúng tôi đang dần trở nên tốt hơn.

3.) Chúng tôi sử dụng SVN; tuy nhiên, chúng tôi không có phần mềm theo dõi lỗi. Điều tốt nhất mà nó mang lại cho chúng tôi là một tệp txt cho bạn biết vị trí của các lỗi cụ thể.

4.) Đề xuất của tôi để thực hiện các phương pháp hay nhất cho các nhà khoa học: hãy làm từ từ . Với tư cách là nhà khoa học, chúng tôi thường không vận chuyển sản phẩm. Không ai trong ngành khoa học tạo nên tên tuổi cho chính mình bằng cách có mã sạch, có thể bảo trì . Thông thường, họ nhận được sự công nhận từ kết quả của mã đó. Họ cần thấy lý do cho việc dành thời gian tìm hiểu thực hành phần mềm. Từ từ giới thiệu các khái niệm mới và cố gắng để chúng làm theo; họ là nhà khoa học, vì vậy sau khi bằng chứng thực nghiệm của chính họ xác nhận tính hữu ích của những thứ như kiểm soát phiên bản, họ sẽ bắt đầu sử dụng nó mọi lúc!



5

Tôi là một nhà vật lý làm việc trong lĩnh vực vật lý vật chất ngưng tụ, xây dựng các mô hình cổ điển và lượng tử.

Ngôn ngữ:

  • C ++ - rất linh hoạt: có thể sử dụng cho mọi thứ, tốc độ tốt, nhưng có thể hơi bất tiện khi nói đến MPI
  • Octave - tốt cho một số phép tính bổ sung, rất thuận tiện và hiệu quả

Thư viện:

  • Armadillo / Blitz ++ - tóm tắt mảng / ma trận / khối lập phương nhanh chóng cho C ++
  • Eigen / Armadillo - đại số tuyến tính
  • GSL - để sử dụng với C
  • LAPACK / BLAS / ATLAS - cực kỳ lớn và nhanh chóng, nhưng kém tiện lợi (và được viết bằng FORTRAN)

Đồ họa:

  • GNUPlot - nó có đầu ra rất rõ ràng và gọn gàng, nhưng đôi khi không hiệu quả
  • Nguồn gốc - rất thuận tiện cho việc lập mưu

Công cụ phát triển:

  • Vim + plugin - nó hoạt động tuyệt vời đối với tôi
  • GDB - một công cụ gỡ lỗi tuyệt vời khi làm việc với C / C ++
  • Code :: Blocks - Tôi đã sử dụng nó một thời gian và thấy nó khá thoải mái, nhưng Vim vẫn tốt hơn theo ý kiến ​​của tôi.

Nếu c ++ của bạn chạy chậm hơn c của bạn, bạn đang sử dụng sai. 'Tất nhiên, điều đó dễ thực hiện, nhưng đó là một vấn đề khác. :: làm việc với c ++ cho khoảng 7 năm nay, và vẫn đang học hỏi những điều mới tất cả các thời gian ::
dmckee --- cựu điều hành kitten

Tôi thực sự ghi nhận một người hâm mộ khổng lồ của C ++, nhưng thật khó để thấy nó có thể "chậm hơn nhiều" so với C hoặc Fortran. Trừ khi bạn bao gồm các biến thể C cho HPC như UPC và C cho CUDA.
Suugaku

4

Tôi làm việc như một nhà vật lý trong một trường đại học ở Vương quốc Anh.

Có lẽ tôi nên nhấn mạnh rằng các lĩnh vực nghiên cứu khác nhau có sự nhấn mạnh khác nhau về lập trình. Các nhà vật lý hạt (như dmckee) hầu như chỉ làm mô hình tính toán và có thể cộng tác trong các dự án phần mềm lớn, trong khi những người trong các lĩnh vực như của tôi (vật chất cô đặc) viết mã tương đối hiếm. Tôi nghi ngờ hầu hết các nhà khoa học rơi vào trại sau. Tôi muốn nói rằng các kỹ năng viết mã thường được xem là hữu ích trong vật lý, nhưng không cần thiết, giống như vật lý / toán học, các kỹ năng được coi là hữu ích cho các lập trình viên nhưng không cần thiết. Với suy nghĩ này ...

  • Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Thông thường, phân tích dữ liệu và vẽ biểu đồ được thực hiện bằng cách sử dụng các gói phân tích dữ liệu chung như IGOR Pro , ORIGIN , Kaleidegraph có thể được coi là 'Excel plus'. Các gói này thường có ngôn ngữ kịch bản có thể được sử dụng để tự động hóa. Các phân tích chuyên môn hơn có thể có một tiện ích dành riêng cho công việc mà nói chung sẽ được viết từ lâu, không ai có nguồn và khá nhiều lỗi. Một số loại công nghệ khác có thể sử dụng các ngôn ngữ đã được đề cập (Python, R, MatLab với Gnuplot để vẽ biểu đồ).

Phần mềm điều khiển thường được thực hiện trong LabVIEW, mặc dù chúng tôi thực sự sử dụng Delphi, điều này hơi bất thường.

  • Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?

Tôi đã tham dự các cuộc hội thảo về điện toán lưới, trực quan hóa 3D, tăng cường học tập, v.v. được tổ chức bởi cả hai trường đại học mà tôi đã theo học. Khi còn là đại học, chúng tôi đã được dạy VBA cho Excel và MatLab nhưng C / MatLab / LabVIEW phổ biến hơn.

  • Bạn đã có bất cứ điều gì như kiểm soát phiên bản, theo dõi lỗi?

Không, mặc dù mọi người có thiết lập phát triển cá nhân. Cơ sở mã của chúng tôi nằm trong một thư mục được chia sẻ trên 'máy chủ' được cập nhật bằng công cụ đồng bộ hóa.

  • Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Một bước tại một thời điểm! Tôi đang cố gắng thay thế thư mục được chia sẻ bằng một thứ gì đó chắc chắn hơn một chút, có lẽ việc tìm một ứng dụng khách SVN bắt chước hành vi của các công cụ đồng bộ hóa hiện tại sẽ hữu ích.

Mặc dù vậy, tôi muốn nói về tổng thể, đối với hầu hết các dự án khoa học tự nhiên, thời gian thường tốt hơn dành cho việc nghiên cứu!


Cảm ơn bạn đã chia sẻ suy nghĩ của bạn! Tôi đồng ý rằng "thường thì tốt hơn nên dành thời gian cho việc nghiên cứu", nhưng nhìn thấy thời gian thường bị mất đi do thiếu những thứ như kiểm soát phiên bản và đào tạo cơ bản về lập trình, tôi sẽ nói rằng các nhà khoa học đánh giá thấp vấn đề này.
onnodb

4

Cựu nhà vật lý hàn lâm và hiện là nhà vật lý công nghiệp Vương quốc Anh tại đây:

Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Tôi chủ yếu sử dụng MATLAB những ngày này (dễ dàng truy cập các hàm trực quan và toán học). Tôi đã từng sử dụng FortranIDL rất nhiều . Tôi đã sử dụng C (nhưng tôi là người đọc nhiều hơn là người viết về C), macro Excel (xấu xí và khó hiểu). Tôi hiện đang cần có khả năng đọc Java và C ++ (nhưng tôi thực sự không thể lập trình bằng chúng) và tôi cũng đã hack Python. Để giải trí cho riêng mình, tôi hiện đang lập trình bằng C # (chủ yếu để có được tính di động / chi phí thấp / giao diện đẹp). Tôi có thể viết Fortran với khá nhiều ngôn ngữ mà tôi trình bày ;-)

Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?

Hầu hết (tất cả?) Khóa học vật lý đại học sẽ có một khóa học lập trình nhỏ thường trên C, Fortran hoặc MATLAB nhưng đó là những điều cơ bản thực sự. Tôi thực sự muốn được đào tạo về kỹ thuật phần mềm tại một số điểm (kiểm soát sửa đổi / thử nghiệm / thiết kế hệ thống quy mô trung bình)

Bạn đã có bất cứ điều gì như kiểm soát phiên bản, theo dõi lỗi?

Tôi đã bắt đầu sử dụng Subversion / TortoiseSVN tương đối gần đây. Các nhóm mà tôi đã làm việc trước đây đã sử dụng kiểm soát sửa đổi. Tôi không biết bất kỳ nhóm học thuật nào sử dụng phần mềm theo dõi lỗi chính thức. Tôi vẫn không sử dụng bất kỳ loại thử nghiệm có hệ thống nào.

Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Tôi sẽ cố gắng giới thiệu một số ý tưởng về kỹ thuật phần mềm ở cấp độ đại học và sau đó củng cố chúng bằng cách thực hành ở cấp độ sau đại học, đồng thời cung cấp các gợi ý đến các nguồn như khóa học Software Carpentry đã đề cập ở trên.

Tôi hy vọng rằng một phần đáng kể các nhà vật lý hàn lâm sẽ viết phần mềm (không nhất thiết là tất cả) và họ rất cần ít nhất là giới thiệu về các ý tưởng trong kỹ thuật phần mềm.


4

Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Python, NumPy và pylab (âm mưu).

Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?

Không, nhưng tôi đang làm việc trong một phòng nghiên cứu đa phương tiện, vì vậy hầu hết mọi người đều có kiến ​​thức về khoa học máy tính.

Bạn đã có bất cứ điều gì như kiểm soát phiên bản, theo dõi lỗi?

Có, Subversion để kiểm soát phiên bản, Trac để truy tìm lỗi và wiki. Bạn có thể nhận miễn phí trình theo dõi lỗi / lưu trữ kiểm soát phiên bản từ http://www.assembla.com/ nếu TOS của họ phù hợp với dự án của bạn.

Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!).

Đảm bảo cơ sở hạ tầng được thiết lập và duy trì tốt và cố gắng bán những lợi ích của việc kiểm soát nguồn.


3

Tôi là nhân viên thống kê tại một trường đại học ở Anh. Nói chung mọi người ở đây sử dụng R để phân tích dữ liệu, nó khá dễ học nếu bạn biết C / Perl. Sức mạnh thực sự của nó là ở cách bạn có thể nhập và sửa đổi dữ liệu một cách tương tác. Rất dễ dàng để lấy một số tệp CSV (hoặc Excel) và hợp nhất chúng, tạo các cột mới dựa trên các tệp khác và sau đó chuyển chúng vào GLM, GAM hoặc một số mô hình khác. Lập kế hoạch cũng đơn giản và không yêu cầu kiến ​​thức về một ngôn ngữ hoàn toàn mới (như PGPLOT hoặc GNUPLOT.) Tất nhiên, bạn cũng có lợi thế là có một loạt các tính năng được tích hợp sẵn (từ những thứ đơn giản như trung bình, độ lệch chuẩn, v.v. tất cả cách đến mạng nơ-ron, splines và biểu đồ GL.)

Đã nói điều này, có một vài vấn đề. Với các bộ dữ liệu rất lớn, R có thể trở nên rất chậm (tôi chỉ thực sự thấy điều này với bộ dữ liệu> 50.000x30) và vì nó được diễn giải nên bạn không nhận được lợi thế của Fortran / C về mặt này. Tuy nhiên, bạn có thể (rất dễ dàng) sử dụng R để gọi các thư viện được chia sẻ C và Fortran (từ thứ gì đó như netlib hoặc những thứ bạn đã tự viết.) Vì vậy, quy trình làm việc thông thường sẽ là:

  • Tìm ra những việc cần làm.
  • Nguyên mẫu mã trong R.
  • Chạy một số phân tích sơ bộ.
  • Viết lại mã chậm vào C hoặc Fortran và gọi nó từ R.

Điều đó làm việc rất tốt cho tôi.

Tôi là một trong những người duy nhất trong bộ phận của tôi (trong số hơn 100 người) sử dụng kiểm soát phiên bản (trong trường hợp của tôi là sử dụng git với githuib.com.) Điều này khá đáng lo ngại, nhưng họ dường như không quan tâm đến việc thử nó ra ngoài và hài lòng với việc chuyển các tệp zip xung quanh (yuck.)

Đề xuất của tôi là tiếp tục sử dụng LabView để chuyển đổi (và có thể cố gắng để đồng nghiệp của bạn đồng ý về một bộ công cụ để chuyển đổi và cung cấp cho tất cả mọi người), sau đó chuyển sang xuất dữ liệu thành CSV (hoặc tương tự) và thực hiện phân tích trong R. Thực sự có rất ít điểm trong việc phát minh lại bánh xe về mặt này.


2

Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Khoa vật lý đại học của tôi đã dạy các lớp LabVIEW và sử dụng nó rộng rãi trong các dự án nghiên cứu của nó.

Giải pháp thay thế khác là MATLAB , trong đó tôi không có kinh nghiệm. Có trại cho một trong hai sản phẩm; mỗi cái đều có ưu / nhược điểm riêng. Tùy thuộc vào loại vấn đề bạn cần giải quyết, một gói có thể phù hợp hơn gói kia.

Về phân tích dữ liệu, bạn có thể sử dụng bất kỳ loại mã số nào bạn muốn. Lý tưởng nhất là bạn có thể thực hiện các phép tính khó bằng ngôn ngữ X và định dạng đầu ra để vẽ biểu đồ độc đáo trong Excel, Mathcad , Mathematica hoặc bất kỳ hệ thống vẽ biểu đồ hương vị nào. Đừng mong đợi sự tiêu chuẩn hóa ở đây.

Bạn đã có bất cứ điều gì như kiểm soát phiên bản, theo dõi lỗi?

Nhìn lại, chúng tôi đã không làm như vậy, và sẽ dễ dàng hơn cho tất cả chúng tôi nếu chúng tôi làm vậy. Không gì bằng phá vỡ mọi thứ và vật lộn hàng giờ để sửa chữa nó!

Chắc chắn sử dụng kiểm soát nguồn cho bất kỳ mã chung nào. Khuyến khích các cá nhân viết mã của họ theo cách có thể được thực hiện chung chung hơn. Đây thực sự chỉ là các phương pháp hay nhất để viết mã. Thực sự, bạn nên để họ dạy (hoặc tham gia) một lớp khoa học máy tính để họ có thể nắm được những kiến ​​thức cơ bản.

Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Có sự phân chia rõ ràng giữa phân tích dữ liệu (DAQ) và phân tích dữ liệu. Có nghĩa là, có thể chuẩn hóa DAQ và sau đó cho phép các nhà khoa học xử lý dữ liệu trong chương trình họ chọn.


2

Một lựa chọn tốt khác là Scilab . Nó có các mô-đun đồ họa à la LabVIEW , nó có ngôn ngữ lập trình riêng và bạn cũng có thể nhúng mã Fortran và C chẳng hạn. Nó được sử dụng trong các khu vực công và tư nhân, bao gồm cả các công ty công nghiệp lớn. Và nó hoàn toàn miễn phí.

Về lập phiên bản, một số người thích Mercurial hơn , vì nó cung cấp nhiều quyền tự do hơn trong việc quản lý và xác định các kho lưu trữ. Tuy nhiên, tôi không có kinh nghiệm với nó.

Để lập kế hoạch, tôi sử dụng Matplotlib . Tôi sẽ sớm phải tạo hoạt ảnh và tôi đã thấy kết quả tốt khi sử dụng MEncoder . Đây là một ví dụ bao gồm một bản âm thanh.

Cuối cùng, tôi khuyên bạn nên sử dụng mô-đun, điều này là cố gắng giữ các đoạn mã chính trong các tệp khác nhau, vì vậy việc sửa đổi, hiểu, bảo trì và cải tiến mã sẽ dễ dàng hơn. Ví dụ, tôi đã viết một mô-đun Python để kiểm tra tính toàn vẹn của tệp, một mô-đun khác dành cho trình tự xử lý hình ảnh, v.v.

Bạn cũng nên xem xét việc phát triển với việc sử dụng trình gỡ lỗi cho phép bạn kiểm tra nội dung biến tại các điểm ngắt có thể thiết lập trong mã, thay vì sử dụng các dòng in. Tôi đã sử dụng Eclipse cho Python và đang phát triển Fortran (mặc dù tôi gặp lỗi sai khi biên dịch một chương trình ngắn của Fortran với nó, nhưng nó có thể là một cấu hình không tốt) và tôi đang bắt đầu sử dụng Eric IDE cho Python. Nó cho phép bạn gỡ lỗi, quản lý việc lập phiên bản với SVN , nó có một bảng điều khiển nhúng, nó có thể thực hiện cấu trúc lại với Bicycle Repair Man (nó cũng có thể sử dụng một cái khác), bạn có Unittest, v.v. Một giải pháp thay thế nhẹ hơn cho Python là IDLE , bao gồm với Python kể từ phiên bản 2.3.

Như một vài gợi ý, tôi cũng đề xuất:

  • Không sử dụng các biến ký tự đơn. Khi bạn muốn tìm kiếm ngoại hình, bạn sẽ nhận được kết quả ở khắp mọi nơi. Một số người cho rằng một IDE phù hợp làm cho việc này dễ dàng hơn, nhưng sau đó bạn sẽ phụ thuộc vào việc có quyền truy cập vĩnh viễn vào IDE. Ngay cả khi sử dụng ii, jj và kk cũng có thể đủ, mặc dù lựa chọn này sẽ phụ thuộc vào ngôn ngữ của bạn. (Ví dụ: các nguyên âm đôi sẽ ít hữu ích hơn nếu các chú thích mã được thực hiện bằng tiếng Estonia).

  • Nhận xét mã ngay từ đầu.

  • Đối với các ứng dụng quan trọng, đôi khi tốt hơn nên dựa vào các phiên bản trình biên dịch / ngôn ngữ cũ hơn (bản phát hành chính), ổn định hơn và gỡ lỗi tốt hơn. Tất nhiên bạn có thể có mã được tối ưu hóa hơn trong các phiên bản sau, sửa lỗi, v.v., nhưng tôi đang nói về việc sử dụng Fortran 95 thay vì 2003, Python 2.5.4 thay vì 3.0, hoặc tương tự. (Đặc biệt khi một phiên bản mới phá vỡ khả năng tương thích ngược.) Rất nhiều cải tiến thường dẫn đến rất nhiều lỗi. Tuy nhiên, điều này sẽ phụ thuộc vào các trường hợp ứng dụng cụ thể! Lưu ý rằng đây là một lựa chọn cá nhân, nhiều người có thể phản đối điều này.

  • Sử dụng sao lưu dự phòng và tự động! (Với kiểm soát lập phiên bản).


2

Chắc chắn, hãy sử dụng Subversion để giữ các bản sao mã nguồn hiện tại, đang tiến hành và ổn định. Điều này bao gồm C ++, Java, v.v. cho các công cụ phần mềm cây nhà lá vườn và các tập lệnh quickie để xử lý một lần.

Với khuynh hướng mạnh mẽ của khoa học và kỹ thuật ứng dụng theo phương pháp luận phát triển "cao bồi đơn độc", thực tế thông thường là sắp xếp kho lưu trữ vào thân cây, thẻ và bất cứ thứ gì khác - đừng bận tâm! Các nhà khoa học và kỹ thuật viên phòng thí nghiệm của họ thích xoay núm vặn, lắc điện cực và đuổi theo rò rỉ chân không. Đó là một công việc đủ để khiến mọi người đồng ý, nói Python / NumPy hoặc tuân theo một số quy ước đặt tên; quên cố gắng làm cho họ tuân theo các thông lệ và quy ước của nhà phát triển phần mềm phức tạp.


2

Đối với quản lý mã nguồn, các hệ thống tập trung như Subversion ưu việt hơn cho việc sử dụng khoa học do điểm chân lý rõ ràng (SPOT). Ghi nhật ký các thay đổi và khả năng gọi lại các phiên bản của bất kỳ tệp nào mà không cần phải truy tìm nơi để tìm thứ gì đó, có những lợi thế rất lớn về lưu trữ hồ sơ. Các công cụ như GitMonotone : ôi trời, sự hỗn loạn mà tôi có thể tưởng tượng sẽ xảy ra sau đó! Có hồ sơ rõ ràng về phiên bản tập lệnh hack-job nào đã được sử dụng trong khi đùa giỡn với cảm biến mới khi hạt Higgs bay qua hoặc siêu tân tinh nổ tung, sẽ dẫn đến hạnh phúc.


Bạn đã bao giờ thử sử dụng hệ thống kiểm soát phiên bản phân tán chưa?
Andrew Grimm

1
Gần như tất cả các hệ thống phân tán đều làm cho nó dễ dàng như các hệ thống tập trung. Bạn chỉ cần ghi lại một ID cam kết (trong điều kiện Git) thay vì một số sửa đổi (như trong SVN).
Phil Miller,

2

Bạn đã sử dụng ngôn ngữ / môi trường nào để phát triển phần mềm khoa học, đặc biệt. phân tích dữ liệu? Những thư viện nào? (Ví dụ: bạn sử dụng gì để lập kế hoạch?)

Các ngôn ngữ tôi đã sử dụng cho các phép toán số và những thứ liên quan đến bệnh đặc thù:

  • C (phát triển chậm, gỡ lỗi quá nhiều, hầu như không thể viết mã có thể sử dụng lại)
  • C ++ (và tôi đã học cách ghét nó - sự phát triển không chậm như C, nhưng có thể là một vấn đề khó khăn. Các mẫu và lớp ban đầu rất tuyệt, nhưng sau một thời gian, tôi nhận ra rằng tôi đã chiến đấu với chúng mọi lúc và tìm cách giải quyết cho vấn đề thiết kế ngôn ngữ
  • Lisp thông thường, được, nhưng không được sử dụng rộng rãi cho tính toán khoa học. Không dễ tích hợp với C (nếu so với các ngôn ngữ khác), nhưng hoạt động
  • Kế hoạch. Cái này đã trở thành sự lựa chọn cá nhân của tôi.

Trình chỉnh sửa của tôi là Emacs, mặc dù tôi sử dụng vim cho những thứ nhanh chóng như chỉnh sửa tệp cấu hình.

Để vẽ biểu đồ, tôi thường tạo một tệp văn bản và đưa nó vào gnuplot.

Để phân tích dữ liệu, tôi thường tạo một tệp văn bản và sử dụng GNU R.

Tôi thấy rất nhiều người ở đây sử dụng FORTRAN (chủ yếu là 77, nhưng khoảng 90), rất nhiều Java và một số Python. Tôi không thích những thứ đó, vì vậy tôi không sử dụng chúng.

Có khóa đào tạo nào dành cho những người không có kiến ​​thức nền tảng về lập trình không?

Tôi nghĩ điều này không áp dụng cho tôi, vì tôi tốt nghiệp CS - nhưng nơi tôi làm việc không được đào tạo chính thức, nhưng mọi người (Kỹ sư, Nhà vật lý, Nhà toán học) luôn giúp đỡ lẫn nhau.

Bạn có bất cứ thứ gì như kiểm soát phiên bản, theo dõi lỗi không?

Kiểm soát phiên bản là hoàn toàn quan trọng! Tôi giữ mã và dữ liệu của mình trong ba máy khác nhau, ở hai phía khác nhau của thế giới - trong kho Git. Tôi đồng bộ hóa chúng mọi lúc (vì vậy tôi có quyền kiểm soát phiên bản sao lưu!) Tôi không kiểm soát lỗi, mặc dù tôi có thể bắt đầu làm điều đó. Nhưng các đồng nghiệp của tôi không BTS hay VCS gì cả.

Làm thế nào bạn sẽ cố gắng tạo ra một môi trường tốt cho lập trình, mà không làm cản trở quá nhiều đến các nhà khoa học cá nhân (đặc biệt là các nhà vật lý là những người cứng đầu!)

Đầu tiên, tôi muốn cho họ tự do nhiều nhất có thể. (Trong trường đại học nơi tôi làm việc, tôi có thể lựa chọn giữa việc nhờ ai đó cài đặt Ubuntu hoặc Windows, hoặc cài đặt hệ điều hành của riêng tôi - tôi đã chọn cài đặt hệ điều hành của riêng mình. Tôi không có sự hỗ trợ từ họ và tôi chịu trách nhiệm về bất kỳ điều gì xảy ra với máy của tôi, bao gồm cả các vấn đề bảo mật, nhưng tôi làm bất cứ điều gì tôi muốn với máy).

Thứ hai, tôi muốn xem chúng được sử dụng để làm gì và làm cho nó hoạt động (cần FORTRAN? Chúng tôi sẽ thiết lập nó. Cần C ++? Không sao. Mathematica? OK, chúng tôi sẽ mua giấy phép). Sau đó, hãy xem có bao nhiêu người trong số họ muốn tìm hiểu "các công cụ bổ sung" để giúp họ làm việc hiệu quả hơn (không nói các công cụ "khác". Hãy nói "bổ sung", như vậy sẽ không có ai "mất" hoặc "để đi ”hoặc bất cứ điều gì). Bắt đầu với các biên tập viên, xem liệu có nhóm nào muốn sử dụng VCS để đồng bộ hóa công việc của họ không (này, bạn có thể ở nhà và gửi mã của mình qua SVN hoặc GIT - điều đó có tuyệt không?), V.v. Đừng áp đặt - hãy đưa ra những ví dụ về những công cụ này tuyệt vời như thế nào. Thực hiện phân tích dữ liệu bằng R và cho họ thấy điều đó dễ dàng như thế nào. Hiển thị đồ họa đẹp mắt và giải thích cách bạn đã tạo chúng (nhưng hãy bắt đầu với các ví dụ đơn giản,


2

Tôi sẽ đề xuất F # như một ứng cử viên tiềm năng để thực hiện các thao tác liên quan đến khoa học vì mối quan hệ ngữ nghĩa chặt chẽ của nó với các cấu trúc toán học.

Ngoài ra, sự hỗ trợ của nó cho đơn vị đo lường, như được viết ở đây có ý nghĩa rất nhiều trong việc đảm bảo dịch đúng giữa mô hình toán học và mã nguồn triển khai.


1

Trước hết, tôi chắc chắn sẽ sử dụng ngôn ngữ kịch bản để tránh phải giải thích nhiều thứ bổ sung (ví dụ như quản lý bộ nhớ thủ công - chủ yếu là - ok nếu bạn đang viết những thứ nhạy cảm về hiệu suất, cấp thấp, nhưng đối với một số người chỉ muốn sử dụng máy tính như một máy tính khoa học được nâng cấp thì điều đó chắc chắn là quá mức cần thiết). Ngoài ra, hãy quan sát xem có thứ gì đó cụ thể cho miền của bạn không ( R đối với số liệu thống kê). Điều này có lợi thế là đã làm việc với các khái niệm mà người dùng quen thuộc và có mã chuyên biệt cho các tình huống cụ thể (ví dụ: tính toán độ lệch chuẩn, áp dụng các thử nghiệm thống kê, v.v. trong trường hợp R).

Nếu bạn muốn sử dụng một ngôn ngữ kịch bản chung chung hơn, tôi sẽ sử dụng Python. Hai điều nó phải làm là:

  • Vỏ tương tác nơi bạn có thể thử nghiệm
  • Cú pháp rõ ràng (mặc dù đôi khi dài dòng)

Như một lợi thế bổ sung, nó có các thư viện cho hầu hết những thứ bạn muốn làm với nó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.