Bạn có nên sử dụng một thư viện khi bạn có thể thực hiện nhiệm vụ mà không cần nó? [đóng cửa]


33

Tôi đang ở trong một tình huống mà tôi có thể sử dụng một plugin JavaScript mã nguồn mở để hoàn thành một nhiệm vụ. Nhưng khi tôi thử sử dụng nó, tôi thấy mình phải thiết kế lại rất nhiều thứ tôi đã làm, và nó làm tăng thêm một sự phức tạp nhất định, theo ý kiến ​​khiêm tốn của tôi, cho dự án. Trong khi tôi có thể đạt được cùng một nhiệm vụ với một mã sạch, tôi có thể tự tạo và không cần phải thay đổi những gì tôi đã làm cho đến nay.

Dù sao bạn cũng nên chọn thư viện trong tình huống này (như vì mã chất lượng tốt hơn?)


3
Làm thế nào bạn đo "chất lượng". Theo số dòng mã? Các lớp học? Phức tạp? Bảo trì? Khả năng phục hồi?
Laiv

3
Câu trả lời là KHÔNG, bất kể bạn coi chất lượng hay không. Nhưng nếu bạn cung cấp cho chúng tôi ý tưởng về chất lượng của bạn, câu trả lời sẽ giải quyết lý do của họ để giải thích lý do tại sao số lượng thư viện không cải thiện những gì bạn cho là chất lượng. Đó chỉ là vấn đề của suy đoán. Như bây giờ, một NO đơn giản sẽ trả lời câu hỏi mà không cần giải thích.
Laiv

4
Không phải là một câu trả lời trực tiếp cho câu hỏi của bạn, nhưng ý tưởng rằng "con số này" chắc chắn đảm bảo "chất lượng tốt hơn" bay lên trước sự thừa nhận những khó khăn của việc tăng chất lượng mã. Không có sửa chữa nhanh chóng để đảm bảo chất lượng. Nếu có, vấn đề sẽ không tồn tại. Bất cứ ai tuyên bố rằng một cách tiếp cận đơn giản nhất định là giải pháp tất cả đều là (tốt nhất) quá mức hoặc là (tồi tệ nhất) đẩy ý tưởng thiếu sót của họ thành sự thật.
Flater

3
Điều gì khiến bạn nghĩ rằng việc sử dụng thư viện sẽ tăng chất lượng mã?
Ngừng làm hại Monica

1
Bỏ phiếu để đóng vì câu hỏi dường như đã được đặt lại một cách đáng kể và câu trả lời phía trên trả lời phiên bản cũ ... tốt hơn nên đăng lại câu hỏi khi nó đứng ngay bây giờ (cộng thêm các chi tiết để tránh "quá bảng "phiếu bầu) ...
AnoE

Câu trả lời:


54

Là một kỹ sư, có lẽ nó phù hợp để nghĩ về điều này như là một vấn đề tối ưu hóa. Đương nhiên chúng ta phải có một mục tiêu tối ưu hóa . Một tình huống phổ biến trong loại tình huống này sẽ là giảm thiểu Tổng chi phí sở hữu .

Nếu bạn tin rằng việc thêm thành phần bên thứ ba sẽ tiết kiệm chi phí trong thời gian dài, bạn nên sử dụng nó. Nếu bạn không, bạn không nên. Đảm bảo bạn xem xét chi phí bảo trì liên tục (ví dụ: khi một phiên bản O / S mới được phát hành, hoặc một lỗ hổng bảo mật được tìm thấy, hoặc một số đặc điểm kỹ thuật W3C mới được phát hành).

Đối với nhiều vấn đề nhỏ, chi phí phát triển của riêng bạn sẽ thấp hơn, nhưng đối với các vấn đề phức tạp vừa phải ngoài năng lực cốt lõi của tổ chức, thường sẽ có ý nghĩa khi đi đến bên thứ ba.

Có những mục tiêu khác để xem xét quá (ví dụ như rủi ro) nhưng TCO là mục tiêu lớn.


1
Tôi nghĩ rằng câu trả lời này cần nhiều sự ủng hộ hơn. - Độ tin cậy lâu dài với các thư viện có thể là một vấn đề lớn. Và ngay cả khi một thư viện tồn tại, ai biết liệu API sẽ thay đổi? Thư viện dễ dàng trong ngắn hạn, nhưng có thể gây ra vấn đề trong dài hạn. (Lưu ý bên lề: các thư viện dưới dạng mã nguồn giảm thiểu một số vấn đề.)
DetlevCM

6
@DetlevCM Câu trả lời cũng nói rằng nó có thể rất dễ dàng đi theo hướng khác. Các thư viện không cần thiết sẽ có chi phí bảo trì kèm theo mà bạn là người dùng của thư viện không phải trả tiền và có lẽ bạn sẽ không thể trả nếu bạn phải (ví dụ: nếu bạn là chủ sở hữu của thư viện).
Khối

Tôi đồng ý nhưng cũng đừng quên xem xét chi phí của thư viện - các lỗi, thay đổi thiết kế ngoài tầm kiểm soát của bạn và hàng loạt mã bạn không sử dụng chỉ để mang đến một chức năng duy nhất. Ngoài ra, thư viện thường không biểu cảm như giải pháp của bạn có thể dành cho vấn đề của bạn. CSONG bạn không thể gỡ lỗi một thư viện bên ngoài một cách dễ dàng và nếu bạn phải xử lý nhiều vấn đề hợp nhất sau này. Đừng chỉ cho rằng một giải pháp thư viện có trọng lượng nhẹ hơn, hãy xem xét tất cả các yếu tố và đừng ngại mã hóa giải pháp của riêng bạn nếu thư viện không phù hợp!
Bill K

36

Bill Gates từng nói một cách nổi tiếng:

"Đo lường tiến trình lập trình bằng các dòng mã giống như đo tiến độ chế tạo máy bay theo trọng lượng."

Câu nói này xuất hiện trong đầu vì cuối cùng cũng có thể nói về số lượng thư viện. Theo quy định, tôi không sử dụng các thư viện trừ khi:

  1. Không có cách nào khác để hoàn thành nó. Làm mà không có hiệu quả kinh tế để sản xuất sản phẩm đúng thời gian và ngân sách.
  2. Nó sẽ tiết kiệm cho tôi một khoảng thời gian đáng kể vì tôi sẽ yêu cầu nhiều tính năng của thư viện nói
  3. Thư viện được sử dụng tốt và bất kỳ vấn đề tiềm năng nào tôi có thể có sẽ được ghi chép lại.

Lý tưởng nhất là cả ba điều kiện đều được đáp ứng, nhưng tôi sẽ giải quyết cho bất kỳ hai điều kiện nào. Điểm mấu chốt là bạn không nên thêm thư viện vào chương trình của mình trừ khi nó phục vụ mục đích. Nếu bạn phải hỏi mục đích đó là gì, có lẽ bạn không nên thêm nó vào chương trình của mình. Do đó, chất lượng mã của chương trình của bạn mang lại lợi ích vì nó yêu cầu một cách tao nhã từng thư viện mà không bị đè nặng bởi nhu cầu phải viết lại các thư viện bên trong chương trình của bạn.

Chúc may mắn!


4
@BillalBegueradj Trích dẫn có ý nghĩa, vâng. Đầy đủ, không. Chúng tôi không nói về tiến trình, chúng tôi đang nói về chất lượng phần mềm và các dòng mã có mối tương quan rất mạnh với số lượng lỗi được tìm thấy. Xem bài viết Hiệu ứng gây nhiễu của quy mô lớp đối với tính hợp lệ của các số liệu hướng đối tượng cho thấy tất cả các số liệu khác không có khả năng dự đoán về các khiếm khuyết được tìm thấy sau khi điều chỉnh bởi LỘC, có nghĩa là LỘC là công cụ dự đoán tốt nhất cho các khiếm khuyết (hoặc tại thời điểm đó: 2001). Và, nhân tiện, bài báo khoa học đánh bại câu nói nổi tiếng.
Theraot

5
@Theraot Bạn đang đề xuất rằng vì số lượng dòng xác định số lượng lỗi mà các chương trình lớn hơn có chất lượng mã kém hơn các chương trình nhỏ hơn? Tôi không đồng ý với số liệu của bạn, xin lỗi. Ngoài ra, nếu trích dẫn thực sự làm phiền bạn, hãy bỏ qua.
Neil

3
@ Không rõ ràng, số dòng không xác định số lượng lỗi, nó có mối tương quan chặt chẽ với số lượng lỗi được tìm thấy. Điều này là dễ hiểu: mã càng lớn, càng có nhiều cơ hội cho các khiếm khuyết được giới thiệu. Tất nhiên, số lượng lỗi sẽ giảm sau khi chúng được tìm thấy và sửa chữa. Đây chỉ là mối tương quan sau tất cả. Phụ lục: LỘC đánh bại nhiều số liệu phổ biến, xem bài viết để biết chi tiết.
Theraot

5
@Theraot Đối số của tôi không liên quan đến lỗi của số dòng. Đối số của tôi là với số lượng lỗi lớn tương đương với chất lượng mã xấu. Chrome đã có một số khiếm khuyết trong những năm qua, nhưng tôi sẽ tranh luận về tính hợp pháp của bất kỳ khiếu nại nào cho thấy nó được viết tệ hơn một plugin jQuery 10 dòng được viết xấu trên github.
Neil

3
@Theraot "bài báo khoa học đánh bại câu nói nổi tiếng." - có vẻ như bài báo của bạn thực sự hỗ trợ trích dẫn hơn là đánh bại nó ...
npostavs

14

(Lưu ý: Câu hỏi ban đầu là: Số lượng thư viện có cải thiện chất lượng mã không?)

Bạn có thể trả lời câu hỏi đó cho chính mình: Không, tất nhiên thực tế là việc sử dụng các thư viện không cải thiện mã của bạn. Nếu nó đã làm, nó sẽ dễ dàng viết mã tuyệt vời cho mọi thứ mà không cần nỗ lực.

Ý nghĩa của mọi người khi họ khuyên bạn nên sử dụng lại cho chính bạn là mã trong một thư viện nổi tiếng có lẽ chính xác, hiệu quả và / hoặc có thể sử dụng hơn so với những gì bạn tự nghĩ ra, đơn giản vì các tác giả đã dành nhiều thời gian hơn trên một lĩnh vực chức năng cụ thể hơn bạn (với thời hạn cuối cùng cho toàn bộ dự án) có thể chi trả.

Nhưng đó chỉ là một xu hướng, không phải là một luật. Chắc chắn có thể có những thư viện không hữu dụng để sử dụng như của chính bạn. Thông thường, điều này xảy ra khi thư viện thực sự làm nhiều hơn những gì bạn cần và thực hiện theo cách buộc bạn phải điều chỉnh cơ sở mã của riêng mình theo quy ước của họ nhiều hơn là hợp lý. Có vẻ như đây là chính xác những gì bạn đã tìm thấy trong trường hợp này.


4

Mặc dù sử dụng đúng thư viện có thể giúp bạn tiết kiệm rất nhiều công việc, nhưng cũng có rất nhiều chi phí ẩn:

  • Thư viện cần phải được cập nhật. Bạn thường xuyên cần kiểm tra xem họ có cập nhật không (có thể liên quan đến bảo mật!) Và áp dụng chúng. Mỗi cập nhật thư viện có thể có khả năng phá vỡ một cái gì đó trong ứng dụng của bạn. Điều đó có nghĩa là bạn cần thực hiện một bài kiểm tra tích hợp hoàn chỉnh sau đó. Vì vậy, mỗi thư viện dự án của bạn phụ thuộc vào việc tăng chi phí bảo trì dài hạn.
  • Một số thư viện Javascript rất mạnh và sử dụng các mẫu độc đáo đến mức mọi người bắt đầu cảm nhận chúng như các lĩnh vực chuyên môn kỹ thuật riêng biệt. Vì vậy, mỗi thư viện bổ sung mà bạn thêm có thể khiến các nhà phát triển sợ hãi, những người không cảm thấy tự tin chỉnh sửa mã dựa trên khung mà họ không quen thuộc. Việc thuê các lập trình viên bảo trì mới, những người quen thuộc với tất cả các thư viện bạn sử dụng có thể trở nên khó khăn.
  • Thêm thư viện vào trang web của bạn sẽ tăng thời gian tải, vì người dùng cần tải toàn bộ thư viện, ngay cả khi bạn chỉ sử dụng một phần nhỏ của nó. Một số thư viện phổ biến cho phép bạn tải về tùy chỉnh được xây dựng chỉ với các chức năng bạn cần, nhưng thậm chí sau đó bạn sẽ thường vẫn bao gồm rất nhiều mã mà sẽ không bao giờ chạy (hoặc thậm chí tồi tệ hơn: Mã mà không chạy, nhưng không làm bất cứ điều gì hữu ích, bởi vì nó chỉ chuẩn bị cấu trúc dữ liệu cho chức năng bạn không sử dụng).

Vì vậy, trước khi bạn thêm một phụ thuộc khác vào dự án của bạn để bao gồm một cái gì đó bạn cũng có thể tự viết, hãy phân tích chi phí / lợi ích.


Và lặp lại phân tích đó khi bạn thực sự có dữ liệu thực sự. Bạn có thể đã đánh giá thấp chi phí / đánh giá quá cao lợi ích, hoặc tình hình có thể đã thay đổi.
Ded repeatator

1

Đây không phải là một quyết định nhị phân: Chỉ sử dụng thư viện OSS hoặc lập trình một giải pháp mới từ đầu. Một lựa chọn khác có thể là sử dụng lại các phần của thư viện, nếu giấy phép cho phép.

Ví dụ, trong lĩnh vực của tôi (phần mềm số), một thư viện có thể có các mô-đun lõi tốt và một số mô-đun chuyên dụng mà tôi chỉ hài lòng 80%. Vì vậy, tôi sẽ sử dụng các mô-đun lõi và viết một trình bao bọc cho các mô-đun chuyên dụng. Hoặc tôi có thể phát triển các mô-đun chuyên dụng của riêng mình bằng cách sử dụng thiết kế và mã của các mô-đun OSS. Các bit thuật toán cứng nhất thường được sử dụng lại từ các bit đó, chỉ với mã giàn giáo được sửa đổi. Tôi cũng có thể làm sạch một số mã gốc. Điều này đã chứng minh một kinh nghiệm học tập tốt và tiết kiệm thời gian, so với phát triển từ đầu.


0

Nếu ai đó đã hoàn thành công việc cho bạn, tất nhiên bạn nên sử dụng nó.

Ngoại lệ cho quy tắc là javascript. Nơi họ sẽ nhập hàng tá thư viện khác (tất nhiên là phiên bản lỗi thời) để thêm các tính năng ngôn ngữ họ muốn sử dụng và sau đó thực hiện công việc cho bạn.

Chọn khuôn khổ của bạn và ở trong đó. Nếu thư viện làm việc với khung của bạn hoặc js đơn giản, tốt thôi. Nhưng nếu nó cần một khung khác, hãy tìm một lựa chọn khác.


4
Rất nhiều người hâm mộ javascript ở đây
FCin

0

Thư viện và khi nào sử dụng chúng là một quyết định phức tạp.

Một mặt bạn đã kiểm tra tốt, những thứ gần như tiêu chuẩn (trong lĩnh vực của tôi, ví dụ FFTW rơi vào danh mục này, hoặc một cái gì đó như libsndfile), thường được công nhận là chỉ hoạt động và là những thứ tiêu chuẩn trong 20 năm qua mọi người sử dụng.

Mặt khác, bạn có những thứ ngẫu nhiên từ github, không có bộ kiểm tra và chỉ có khoảng 1 người bảo trì, nói chung tại sao phải bận tâm?

Kiểm tra axit đối với tôi trước tiên là thư viện có phù hợp với kiến ​​trúc của tôi không (Đôi khi, nếu bạn biết bạn muốn sử dụng một thư viện nhất định mà bạn kết thúc thiết kế xung quanh đó), và tôi có nghĩ rằng tôi sẽ gỡ lỗi cho mã thư viện của ai đó không ? Một proxy tốt cho câu hỏi thứ hai là "Có bộ kiểm tra tự động không và tài liệu này như thế nào?".

Một chút sửa lỗi không phải là một vấn đề lớn, nhưng tại thời điểm đó, mã thư viện bắt đầu được tính theo kích thước mã của riêng tôi từ góc độ bảo trì (Vì vậy, nếu một số sửa lỗi của tôi không thể được đẩy lên ngược dòng vì một số lý do).

Tôi cũng sẽ phân biệt giữa các thư viện và khung, vì tất cả sự khác biệt đôi khi không rõ ràng, các khung trong thế giới (lõi nhỏ, DSP nặng) của tôi có xu hướng gây khó khăn, đặc biệt nếu bạn đang cố gắng hợp nhất nhiều hơn sau đó một hoặc làm một cái gì đó hơi bên ngoài các dòng, thư viện đôi khi hữu ích. Tôi biết rằng điều này được nhìn thấy rất khác nhau trong cảnh nhà phát triển web.

Cuối ngày, đó là một quyết định bắt nguồn từ hương vị và kinh nghiệm, và ngay cả những người có kinh nghiệm đôi khi chọn kém, ít nhất là với một thư viện, bạn luôn có thể xé nó ra và viết bản thực hiện của riêng bạn nếu nó quá khó chịu.

Quyết định, quyết định ....

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.