Có bị coi là lười biếng nếu tôi sử dụng gói đại số tuyến tính cho C ++ không?


11

Đầu tiên, hãy để tôi đưa ra một số nền tảng trước khi tôi thực sự nêu câu hỏi. Tôi học vật lý và tất cả các lớp lập trình của tôi đều có ngôn ngữ lập trình dễ dàng như MATLAB. Nói một cách dễ dàng, ý tôi là ngôn ngữ sẽ mang lại nhiều suy nghĩ cho bạn ... Trong những năm tới tôi sẽ tham gia các khóa học về khoa học máy tính và tôi đang nghĩ đến việc theo đuổi nghề lập trình.

Xem xét rất nhiều khóa học đại học trong C ++, việc sử dụng gói đại số tuyến tính (Armadillo) với cú pháp tương tự MATLAB có bị coi là lười biếng không?

Tôi đang mã hóa một thuật toán di truyền ngay bây giờ và trong khi MATLAB phát triển nhanh, nó mất rất nhiều thời gian trong C ++ mà không cần sự trợ giúp của các gói này.

Làm thế nào nó hoạt động trong cuộc sống thực? Những gói bạn được phép sử dụng?

Ví dụ, tôi không muốn xây dựng kiến ​​thức C ++ của mình với armadillo và không có kiến ​​thức sâu về các gói được sử dụng rộng rãi hơn khác như "vector.h" "thuật toán" "danh sách", v.v.


9
Bạn được phép sử dụng bất cứ thứ gì có giấy phép tương thích với dự án của bạn. Nếu không, bạn chỉ lãng phí thời gian của bạn. (Đúng loại) sự lười biếng là tốt
Richard Tingle


Giả sử chương trình giảng dạy của bạn bao gồm chúng, tôi nghi ngờ việc sử dụng gói đại số tuyến tính tự nó sẽ ngăn bạn học <vector>, <thuật toán> và <list>.
Brandin

@RichardTingle: người ta được phép sử dụng bất cứ thứ gì miễn là cấp trên không cấm nó ;-)
Doc Brown

Thay đổi lazyđể sensibletrong tiêu đề của bạn, và câu trả lời là "có" (giả sử bạn đang làm một công việc có liên quan đến đại số tuyến tính, tất nhiên).
Jerry Coffin

Câu trả lời:


21

Nhận xét của Richard là hầu hết các câu trả lời. Bất cứ khi nào bạn lập trình cho bất cứ điều gì ngoại trừ một bài tập trong lớp, bạn sẽ muốn sử dụng lại càng nhiều mã hiện có càng tốt, chỉ với một vài cân nhắc khác để cân bằng.

Ưu điểm của việc tái sử dụng mã là:

  • Bạn làm việc nhanh hơn, vì một số công việc đã được thực hiện.
  • Mã hiện tại có cơ hội tốt hơn bất cứ điều gì bạn sẽ viết từ đầu, bởi vì nó có thể đã tồn tại lâu hơn, đã được thử nghiệm tốt hơn và được tối ưu hóa tốt hơn.
  • Thông thường, mã hiện có trong một miền mà bạn không quen thuộc. Ví dụ: bạn đang thực hiện các mô phỏng vật lý, nhưng điều đó không có nghĩa là bạn biết rất nhiều về cách làm cho đại số tuyến tính hiệu quả để tính toán. Sử dụng mã được viết bởi người khác có nghĩa là bạn có thể dựa vào chuyên môn của họ.

Chỉ có một số điều cần xem xét:

  • Cấp phép. Tác giả của mã bạn muốn sử dụng lại giữ bản quyền của nó và bạn không thể sử dụng mã mà không có sự cho phép của anh ấy. Thư viện sẽ đi kèm với một giấy phép cho bạn biết những gì bạn có thể làm với họ, và nếu bạn muốn sử dụng thư viện, bạn phải tuân thủ giấy phép. Armadillo thuộc Giấy phép Công cộng Mozilla 2.0, có nghĩa là bạn có thể sử dụng nó một cách tự do.
  • Hội nhập. Nếu dự án của bạn lớn hơn, việc tích hợp các thư viện bên thứ 3 có thể khá phức tạp. Tùy thuộc vào số lượng sử dụng bạn ra khỏi thư viện, nó có thể không có giá trị.
  • Phân phối. Nếu một thư viện chỉ có sẵn dưới dạng DLL hoặc cần một số đăng ký với hệ thống, nhưng phương thức phân phối của bạn phải bao gồm "sao chép tệp thực thi này ở đâu đó", bạn không thể sử dụng thư viện.

Như đã nói, trong một lập trình viên, sự lười biếng là một đức tính tốt.


1
Bạn chạm vào nó, nhưng vì câu hỏi có đề cập đến bài tập lớp, điều quan trọng là không sử dụng gói hoặc thư viện cho tác phẩm bạn đang cố gắng học. Nếu bạn đang cố gắng học cách xây dựng một mạng lưới thần kinh, vui lòng sử dụng thư viện để phân tích cú pháp đối số, tệp io, nhưng hãy tự viết mạng lưới thần kinh.
Alan Shutko

3
Một điểm quan trọng bị thiếu trong danh sách của bạn là bảo trì trong tương lai. Khi xem xét sử dụng lib của bên thứ ba và đó là nguồn đóng, hoặc nguồn mở nhưng quá phức tạp để cho phép bảo trì trong tương lai bởi chính tổ chức, người ta cần đảm bảo nhà cung cấp thư viện sẽ cung cấp dịch vụ bảo trì trong tương lai (bao gồm cả sự phát triển của lib ) trong một khoảng thời gian nhất định. Đó là một trong những lý do hàng đầu tại sao các công ty phần mềm nhất định không sử dụng một số lib nhất định và thích tự tạo, ngay cả khi điều đó có vẻ lãng phí ngay từ cái nhìn đầu tiên.
Doc Brown

1

"Bao giờ" nghĩa là gì? Tôi đoán tôi có thể thêm một cái gì đó ở đây có thể giúp làm rõ một quan niệm sai lầm của một số sinh viên mới bắt đầu: bạn được yêu cầu viết mã và thuật toán của riêng bạn, v.v. trong trường đại học, bởi vì bạn đang học một khóa học và bạn muốn củng cố những gì bạn đã học trong các lớp học bằng cách tự viết mã. Mã hóa như vậy là một trợ lý cho quá trình học tập của bạn . Ví dụ, sau khi tìm hiểu một cấu trúc / thuật toán dữ liệu cụ thể, bạn viết mã của riêng mình để xem cách nó thực sự hoạt động và hiểu sâu hơn. Điều này thật ý nghĩa.

Khi bạn đang thực hiện một dự án lập trình thực tế, bạn không viết mã như một trợ lý để học một số khái niệm / kiến ​​thức; bạn đang cố gắng sản xuất một sản phẩm kỹ thuật. Kỹ thuật không thực sự là về phát minh, nhưng dựa trên nền tảng đã được đặt ra bởi những người khác, để giải quyết một nhu cầu thực tế cụ thể. Có một câu nói rằng lập trình là 80% đọc / sử dụng lại thư viện / mã của người khác và 20% viết cho riêng bạn. Có thể là một chút phóng đại nhưng bạn có được tinh thần.

Trong trường hợp của bạn, nếu bạn đang thực hiện một dự án lập trình cho một khóa học và nó yêu cầu bạn mã hóa thuật toán của riêng bạn một cách rõ ràng, bạn sẽ không muốn sử dụng các thư viện bên ngoài. Nếu bạn đang thực hiện dự án kỹ thuật của riêng mình, thì hãy sử dụng càng nhiều thư viện càng tốt trước khi cố gắng đưa ra dự án của riêng bạn.

Làm rõ sự khác biệt này và bạn sẽ hiểu những gì bạn đang làm.

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.