Cách lập kế hoạch & kết hợp các công cụ quản lý dự án vào mã nghiên cứu


8

Tôi đang bước vào năm thứ 3 chương trình tiến sĩ và cho đến bây giờ mã nghiên cứu của tôi (các vấn đề nghịch đảo số / hình ảnh y tế / xử lý hình ảnh / v.v.) bao gồm hầu hết các tập lệnh và hàm MATLAB vô tổ chức, với một vài MEX'd C ++ và CUDA thói quen ném vào cho một số tốc độ thêm ở đây và ở đó. Tuy nhiên, làm việc với MATLAB rất thú vị và có lẽ tôi sẽ không từ bỏ hoàn toàn: Tuy nhiên:

Mùa hè này, tôi đã làm việc với một mã 'lớn' tại một phòng thí nghiệm quốc gia và tôi bắt đầu thấy vẻ đẹp trong một mã được kiểm soát phiên bản, hướng đối tượng, được bôi dầu tốt với việc sử dụng tốt gmake và các đồ chơi khoa học máy tính khác .

Câu hỏi của tôi là: tôi nên cố gắng kết hợp những công cụ này vào mã nghiên cứu ở mức độ nào? Tôi nên dành bao nhiêu thời gian để "lập kế hoạch" cho cấu trúc và việc thực thi mã của mình, hay tôi nên ngừng suy nghĩ về nó và chỉ viết các thói quen tốt? Tôi cảm thấy như thể tôi nên phát triển một cơ sở mã nguồn mở được lên kế hoạch tốt như một sản phẩm của luận án của tôi, để lấy kinh nghiệm và tín dụng CV, nhưng tôi không chắc chắn làm thế nào để điều hướng quá trình này. Bất kỳ lời khuyên, khuyến nghị cuốn sách / bài viết / trang web, vv?


1
Bạn có thể thêm mã nghiên cứu của bạn vào một dự án hiện có thích hợp.
k20

1
Có rất nhiều điểm đáng suy nghĩ trong các câu trả lời cho câu hỏi này trên Academia.SE , có thể hữu ích.
Christian Clason

1
Kiểm soát phiên bản là tuyệt vời ngay cả đối với mã nghiên cứu một người. Cần tái tạo một cái gì đó bạn đã chạy cho một bài báo vào năm 2012, với các lỗi chính xác / thiếu cải tiến mà bạn đã có sau đó? Lấy cam kết thích hợp từ git và chạy nó.
Peteris

Câu trả lời:


4

Tôi sẽ xem xét những câu hỏi sau:

  1. Bạn có muốn mã của mình trở thành mã mục đích khá chung mà bạn có thể sử dụng lại sau này không, hay đây chỉ là một chút mã mà bạn đang sử dụng cho một dự án nghiên cứu hoặc giấy mà bạn không dự định sử dụng lại? Nếu bạn không có kế hoạch sử dụng lại mã, thì có lẽ không đáng để dành thời gian và nỗ lực cải thiện mã.

  2. Bạn đã tìm hiểu đủ về các thuật toán và cấu trúc dữ liệu mà bạn đang sử dụng mà bạn có tự tin rằng bạn sẽ muốn tiếp tục sử dụng các thuật toán và cấu trúc dữ liệu này? Nếu không, thì có thể là sớm để đóng băng nghiên cứu của bạn thành một mã ổn định.

  3. Bạn có muốn chia sẻ mã, khiến người khác sử dụng mã và cuối cùng để nhờ người khác giúp phát triển mã hơn nữa không? Là một nhà nghiên cứu, bạn nên hiểu rằng đây là một trong những cách hiệu quả nhất để đảm bảo rằng mã của bạn có tác động đến lĩnh vực nghiên cứu của bạn. Tuy nhiên, để bắt đầu điều này, bạn phải cung cấp một mã hợp lý và bạn sẽ muốn phát hành nó theo giấy phép nguồn mở để những người khác có thể sử dụng mã trong các dự án của riêng họ.


3

Câu hỏi của tôi là: tôi nên cố gắng kết hợp những công cụ này vào mã nghiên cứu ở mức độ nào?

Chỉ khi bạn cảm thấy sẽ trả hết cho bất cứ điều gì bạn đang cố gắng làm. Nếu bạn chủ yếu thực hiện các tập lệnh MATLAB, kiểm soát phiên bản và có thể kiểm tra đơn vị sẽ là tất cả những gì bạn cần. Nếu bạn có các tệp MEX, có lẽ tốt để có một Makefile biên dịch chúng, nếu chỉ vì sự tỉnh táo của bạn, vì việc nhập các chuỗi lệnh biên dịch mỗi khi bạn muốn xây dựng các tệp MEX là dễ vỡ.

Một phần lý do khiến các công cụ quy trình công việc này được sử dụng và kết hợp vào các dự án lớn là vì đầu tư vào các công cụ này trả hết cho các mục tiêu của họ. Ví dụ, đối với mã nghiên cứu một lần hỗ trợ luận án của bạn, có lẽ không đáng để sử dụng hệ thống xây dựng đa nền tảng như CMake. Đối với một thư viện có mục đích đã nêu là tương thích đa nền tảng, như, nói, Elemental, sẽ hợp lý hơn khi đầu tư thời gian vào việc sử dụng hệ thống xây dựng đa nền tảng.

Tôi nên dành bao nhiêu thời gian để "lập kế hoạch" cho cấu trúc và việc thực thi mã của mình, hay tôi nên ngừng suy nghĩ về nó và chỉ viết các thói quen tốt?

Nó phụ thuộc vào mức độ quen thuộc của bạn với vấn đề bạn đang cố gắng giải quyết, thuật toán phù hợp, cấu trúc dữ liệu, thực tiễn lập trình, v.v. Giống như phác thảo và viết trước là hữu ích cho các bài báo, một số lượng động não và mã giả nhất định là hữu ích để viết mã có cấu trúc tốt. Tôi thích Quy trình lập trình mã giả trong mã hoàn thành, bởi Steve McConnell; ông cũng bao gồm một số tài liệu tham khảo và hướng dẫn về thời gian nên dành cho giai đoạn thiết kế, tùy thuộc vào loại dự án.

Viết các phiên bản bỏ đi của các thói quen và thử nghiệm các đoạn mã ngắn cũng thực sự hữu ích. Một câu cách ngôn phổ biến trong phát triển phần mềm là bạn sẽ luôn vứt bỏ ít nhất một phiên bản mã của mình.

Tôi có xu hướng tin rằng các thực tiễn phát triển "nhanh nhẹn" có xu hướng hoạt động tốt nhất với hầu hết phát triển phần mềm khoa học, dựa trên công việc của Greg Wilson tại Software Carpentry (từ chối trách nhiệm: Tôi đã tình nguyện với chúng trong quá khứ). Nói rộng ra, "nhanh nhẹn" có nghĩa là bạn nên đặt ra các mục tiêu mà bạn nghĩ bạn sẽ đạt được trong một khoảng thời gian ngắn (giả sử, một vài ngày, một tuần, nhiều nhất là một tháng), lên kế hoạch làm thế nào để đạt được các mục tiêu đó bằng cách thực hiện một số giả và thiết kế, và sau đó viết mã, và lặp lại. Các chu kỳ ngắn sẽ giúp bạn phản ứng với các thay đổi, chẳng hạn như khi cố vấn của bạn quyết định rằng anh ấy muốn bạn mở rộng công việc theo cách mà bạn không lường trước được.

Tôi cảm thấy như thể tôi nên phát triển một cơ sở mã nguồn mở được lên kế hoạch tốt như một sản phẩm của luận án của tôi, để lấy kinh nghiệm và tín dụng CV, nhưng tôi không chắc chắn làm thế nào để điều hướng quá trình này. Bất kỳ lời khuyên, khuyến nghị cuốn sách / bài viết / trang web, vv?

Đó là tất cả phụ thuộc vào những gì bạn muốn làm. Đối với các vị trí liên quan đến phát triển phần mềm, phát triển cơ sở mã nguồn mở là hữu ích, bởi vì đó là thứ bạn có thể đăng trên GitHub và chỉ đến. Điều đó nói rằng, nếu bạn muốn biến nó thành một gói phần mềm mọi người sẽ sử dụng, bạn sẽ phải dành thời gian để duy trì nó; bạn có thể không muốn làm điều đó Đóng góp mã nghiên cứu của bạn cho các dự án hiện có liên quan cũng có thể là một lựa chọn thực sự tốt. Các công ty dường như muốn kết hợp cả hai. Nếu bạn có thể đóng góp cho mã của người khác, nó cho thấy bạn là người chơi nhóm và bạn có thể đọc mã của người khác và vẫn làm điều gì đó hữu ích với nó.

Về mặt tài liệu tham khảo, danh sách đọc tài liệu tham khảo của Carpentry rất phù hợp với các nhà khoa học và nếu bạn muốn tìm hiểu sâu hơn về thực hành kỹ thuật phần mềm, Code Complete (xem danh sách trong liên kết trước) có thêm các tài liệu tham khảo bắt đầu trở thành một chút ngày, nhưng là hữu ích để tìm kiếm. Các bài báo họ đưa ra về thực tiễn tốt nhất trong điện toán khoa học cũng hữu ích

Bài học nghề mộc cũng hữu ích. Chúng là trung tâm Python khi nói đến lập trình, vì vậy bạn có thể lấy nó bằng một hạt muối, nhưng các phần điều khiển phiên bản đáng để xem xét.

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.