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.