Ưu tiên cho việc học các phương pháp tính toán, khi nào tôi nên viết mã của riêng mình so với sử dụng các thư viện như một sinh viên mới tốt nghiệp?


10

Tôi đang bắt đầu nghiên cứu sau đại học về kỹ thuật và sẽ thực hiện các dự án khoa học tính toán. Tôi nhận thấy rằng đã có một số cuộc thảo luận về những lợi thế và bất lợi của việc thực hiện các thuật toán của riêng bạn ở đây . Phân tích lợi ích chi phí của việc thực hiện các thuật toán của riêng bạn so với việc sử dụng các thư viện có khác nhau khi bạn là sinh viên mới tốt nghiệp không?


2
Tôi đã có một câu trả lời dài, nhưng sau một vài cuộc thảo luận với một mod khác, tôi quyết định xóa nó và yêu cầu làm rõ câu hỏi của bạn. Điểm chính của câu hỏi của bạn là gì? Có phải là "nơi tôi nhấn mạnh việc học của mình không?", "Làm thế nào bạn khuyên bạn nên ưu tiên việc học so với tiến trình mô hình hóa?", "Việc chọn thư viện trên các mã tự thực hiện phụ thuộc vào các vấn đề được giải quyết?", Hoặc "Lợi ích / những hạn chế của việc mã hóa thuật toán của riêng tôi ở giai đoạn sớm hơn nhiều trong sự nghiệp của tôi? ". Câu trả lời của tôi quá rộng, và sẽ tốt hơn nếu bạn trả lời tập trung cho câu hỏi tập trung hơn.
Geoff Oxberry

Tôi đã thêm phần in đậm để làm rõ chính xác những gì tôi đang hỏi nhưng vẫn giữ nguyên phần còn lại. Nếu bạn cảm thấy bất kỳ phần nào khác cần được loại bỏ, hãy thoải mái.
Godric Seer

Cảm ơn bạn. Tôi sẽ thực hiện một số chỉnh sửa để làm cho câu hỏi tập trung, và sau đó đăng câu trả lời.
Geoff Oxberry

Câu trả lời:


10

Theo tôi, là một sinh viên mới tốt nghiệp không thay đổi câu trả lời của David Ketcheson ở đây cho câu hỏi bạn đã liên kết trong bài đăng của mình.

Mã phiên bản tối thiểu của các thuật toán bạn muốn tìm hiểu. Sau đó đặt chúng sang một bên. Mã hóa thuật toán của riêng bạn là hữu ích nhất cho việc học, nhưng đối với mã nghiên cứu (hoặc sản xuất), trừ khi mục tiêu nghiên cứu của bạn là viết phần mềm cải thiện các thư viện hiện đại ngoài kia (nếu có tồn tại), bạn ' tốt hơn hết là sử dụng các thư viện. Các thư viện có khả năng được ghi chép tốt hơn, có khả năng mở rộng hơn và mạnh mẽ hơn so với những gì bạn tự viết mã, trừ khi bạn (hoặc trở nên) thực sự giỏi về mã hóa. Ngoài ra, các thư viện có thể sẽ được kiểm tra và gỡ lỗi cho bạn (mặc dù tất nhiên, điều đó phụ thuộc vào người đã viết thư viện ...). Bạn sẽ chịu trách nhiệm hỗ trợ, gỡ lỗi và kiểm tra bất kỳ mã nào bạn viết cho luận án của mình và để tiết kiệm thời gian, nó giúp giảm thiểu số lượng mã bạn cần viết.

Các kịch bản khác mà tôi có thể nghĩ ra (nghĩa là có thể có các kịch bản khác) là:

  • Không có bất kỳ thư viện nào ngoài đó cung cấp các tính năng bạn cần. Xem xét việc đóng góp cho các thư viện nguồn mở hiện có hoặc viết thư viện nguồn mở của riêng bạn, để những người khác có thể hưởng lợi.
  • Bạn cần hiệu suất bổ sung và có thể tận dụng cấu trúc vấn đề đặc biệt để có được nó. Sau đó, ghi lại và sửa đổi một thư viện hiện có hoặc tự viết một triển khai hiệu suất cao hơn.
  • Một giám sát viên khẳng định rằng bạn cuộn phần mềm của riêng bạn. Chà, bạn đang ở một mình, nhưng tôi khuyên bạn nên nêu lên những điểm trên để cố gắng thuyết phục họ rằng bạn nên sử dụng thư viện tốt hơn (nếu điều đó hoàn toàn có thể xảy ra trong tình huống của bạn).

10

Tôi muốn đưa ra một số chiều rộng hơn cho câu trả lời chu đáo của Geoff . Cụ thể, tôi muốn cung cấp cho bạn một chút quan điểm về giá trị của những nỗ lực lập trình của bạn, trái ngược với những nỗ lực nghiên cứu của bạn trong sự nghiệp ban đầu của bạn như là một học thuật.

Bạn sẽ thấy rằng việc có thể viết phần mềm để tăng cường nghiên cứu khoa học sẽ giúp bạn trở thành một thành viên có giá trị trong hầu hết các nhóm nghiên cứu. Tuy nhiên, thời gian này sẽ không nhất thiết được coi là "có giá trị" bởi các đồng nghiệp học tập của bạn hoặc những người tuyển dụng cho các vị trí học tập.

Từ một khảo sát nghiên cứu năm 2011 được thực hiện tại Princeton, "Khảo sát thực hành khoa học tính toán" :

Các nhà khoa học dành thời gian nghiên cứu lập trình đáng kể. Trung bình, các nhà khoa học ước tính rằng 35% thời gian nghiên cứu của họ dành cho lập trình / phát triển phần mềm. Mặc dù ban đầu một số thời gian dành cho việc viết mã một lần nữa, một phần đáng kể thời gian được dành cho nhiều hoạt động tẻ nhạt. Ví dụ, các nhà nghiên cứu về Chính trị và Xã hội học đã sử dụng R / Stata phải lập trình đáng kể để cải thiện dữ liệu điều tra dân số thành các định dạng mà các gói riêng lẻ trong R / Stata hiểu. Một số nhà nghiên cứu về Kỹ thuật hóa học đã phải đảo ngược kỹ sư mã không có giấy tờ thực hiện mô phỏng ngọn lửa, rất lâu sau khi các tác giả gốc đã tốt nghiệp, để thích ứng mã với nhiên liệu mới hơn ... Mặc dù vậy, phần lớn các nhà nghiên cứu này cảm thấy rằng "họ dành nhiều thời gian để lập trình hơn họ nên "

Điều đó không có nghĩa là không nên thực hiện hoặc thiết kế lại thư viện hoặc ứng dụng cốt lõi, nhưng nếu bạn sẽ tham gia vào bất kỳ sự phát triển phần mềm nghiêm trọng nào (hơn 25% thời gian của bạn làm việc với mã), hãy giữ ba điều này những suy nghĩ trong đầu.

  • Sự phức tạp và rủi ro tăng theo cấp số nhân với quy mô dự án và số lượng nhà phát triển. Cho đến khi bạn đã viết hoặc làm việc với các phần mềm lớn hơn hoặc các nhóm nhà phát triển vượt ra ngoài phòng thí nghiệm của bạn, bạn sẽ khó có được sự đánh giá tốt về nỗ lực này và dự báo đúng.

  • Bạn cần phải giỏi. Phải mất một số lượng trưởng thành nhất định, cả với tư cách là một lập trình viên và là một nhà khoa học ứng dụng, để viết phần mềm hữu ích. Bạn phải biết các tính năng quan trọng là gì, rủi ro số là gì và có thể dự báo nỗ lực lập trình cho một tập hợp các tính năng và độ mạnh nhất định. Tất nhiên, cách duy nhất để có được điều tốt là dành thời gian cho các dự án mà bạn không dẫn đầu hoặc có thể thất bại hoặc bị trì hoãn một cách an toàn, điều này đưa tôi đến điểm cuối cùng.

  • Mặc dù nhiều phòng thí nghiệm nghiên cứu và các vị trí công nghiệp đánh giá cao kinh nghiệm lập trình, lập trình khoa học có thể đóng vai trò gây hại cho sự nghiệp học tập của bạn, ngay cả khi phần mềm của bạn mang lại lợi ích cho khoa học nhiều hơn so với bài báo của bạn. Tất cả thời gian bạn dành để học cách lập trình tốt, lập trình, ghi lại mã của bạn và làm cho nó mạnh mẽ chuyển thành các bài báo không được viết. Một cố vấn sẽ không luôn luôn có lợi ích tốt nhất cho học sinh của họ ở đây, vì đây là một trong những trường hợp sinh viên có thể cung cấp công việc có lợi cho nhóm cố vấn mà không có lợi cho số lượng trích dẫn của sinh viên. Tìm kiếm một hoặc nhiều cố vấn đáng tin cậy trong lĩnh vực bạn quan tâm và đảm bảo bạn hiểu rõ về những đóng góp được coi là có giá trị. academia.stackexchange.com là một nơi tuyệt vời để đặt câu hỏi tiếp theo về vấn đề này.


Như một chú thích: số lượng các dự án nỗ lực một người giúp cải thiện đáng kể bất kỳ lĩnh vực tính toán nào đang giảm dần, có thể là một lĩnh vực ứng dụng hoặc một cái gì đó kỹ thuật hơn như đại số tuyến tính dày đặc. Ngày càng có nhiều gói phần mềm hình thành nên "bánh mì và bơ" của nghiên cứu tính toán có tuổi đời từ 10 năm trở lên. Mã khoa học chưa đạt đến mức trưởng thành này có xu hướng có nhiều lỗi hơn, ít tính năng hơn và tài liệu thưa thớt. Cố gắng tránh làm việc với mã chưa trưởng thành không được hỗ trợ tích cực, bất kể nó bao nhiêu tuổi.


Tôi đã lo lắng về số lượng giấy của tôi. Vì tôi sẽ là sinh viên tính toán cho một nhóm lớn sinh viên thực nghiệm, nên có khả năng tôi sẽ có nhiều tác giả thứ 2 và thứ 3. Cũng có khả năng tôi sẽ chỉ kết hợp các chương trình khác nhau khi bắt đầu (mã 0D từ phòng thí nghiệm của tôi, mã 2D từ một trường đại học khác, phần mềm chia lưới từ phòng thí nghiệm khác trong trường đại học của tôi). Chắc chắn rất nhiều để suy nghĩ về việc đi vào này.
Godric Seer

6

Tôi nghĩ rằng phân tích lợi ích chi phí phụ thuộc vào kiến ​​thức tính toán khoa học mong muốn mà bạn muốn đạt được trong quá trình học.

Đối với hầu hết các nhà khoa học làm việc với máy tính thành thạo máy tính khoa học là đủ, điều này đòi hỏi: hiểu biết cao (trừu tượng) về các thuật toán chính được sử dụng và kỹ năng lập trình cho phép bạn sử dụng hiệu quả các thư viện phần mềm (xây dựng phần mềm, liên kết, sử dụng danh sách mail).

Ngược lại, nếu bạn có kế hoạch trở thành một chuyên gia trong lĩnh vực điện toán khoa học, bạn sẽ cần một sự hiểu biết sâu sắc về phương pháp số, số học dấu phẩy động và công nghệ điện toán. Bạn có thể học lý thuyết về các chủ đề này từ sách tuy nhiên kinh nghiệm thông qua thực hành là cần thiết để xây dựng và duy trì các kỹ năng nâng cao. Do đó, có thể là một ý tưởng tuyệt vời để lập trình tất cả những gì bạn sử dụng trong khi bạn học (ví dụ: nếu bạn muốn nấu ăn như một Đầu bếp: bạn học bằng cách ăn những gì bạn nấu và nấu ăn thường xuyên!)

Mức độ thành thạo chính xác là gì phụ thuộc vào sự nghiệp của bạn. Xem mức độ kỹ năng nào được sử dụng bởi những người làm việc trong lĩnh vực của bạ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.