Có những lý do cụ thể để không sử dụng các thư viện và đoạn mã nhiều không? [đóng cửa]


42

Nhìn chung, tôi đã lập trình được khoảng 8 năm và dường như tôi đang phụ thuộc ngày càng nhiều vào các thư viện và đoạn mã nguồn mở (chết tiệt, GitHub!) Để "hoàn thành công việc". Tôi biết rằng trong thời gian tôi có thể viết cho tôi thực hiện riêng nhưng tôi thích tập trung vào thiết kế tổng thể.

Đây có phải là bình thường (môi trường phi công ty)? Điều gì có thể sai nếu "lập trình" của tôi không gì khác hơn là dán các thư viện khác nhau lại với nhau?

Tôi biết về "không phát minh lại bánh xe" nhưng điều gì xảy ra khi bạn không phát minh ra một bánh xe nữa?


3
Ý bạn là " môi trường phi công ty " hay môi trường mà mọi người không hợp tác ?
Bryan Oakley

Tôi nghĩ lý do chúng tôi viết trong các giao diện và các lớp trừu tượng là vì vậy các thư viện của chúng tôi phổ quát hơn, ít phụ thuộc hơn, linh hoạt hơn ...
I Ab.

1
Thật tệ, như một vấn đề của thực tế, vành đai của Cha đang đi ra.
Thomas Eding

Chỉ cần nhớ để tỏ lòng tôn kính và cung cấp tín dụng khi tín dụng đến hạn. Nếu bạn từng tuyên bố mã đó là của bạn, thì The Belt chắc chắn
hanzolo

3
Không, nó không làm cho bạn trở thành một lập trình viên tồi, nhưng nó cũng không làm cho bạn trở thành một lập trình viên tốt hơn.

Câu trả lời:


85

Sử dụng thư viện thay vì phát minh lại bánh xe: Tuyệt vời! Đó là cách mọi người nên làm điều đó. Bạn không được trả tiền để làm những gì đã làm.

Sử dụng đoạn trích: Miễn là bạn hiểu những gì bạn sao chép-dán và miễn là bạn đầu tư thời gian để làm cho tất cả phù hợp (thay vì một bản vá của các phong cách và cách tiếp cận khác nhau), không có gì sai với nó.


Đó là những gì tôi nghĩ. Có lẽ tôi nên bắt đầu một dự án nguồn mở để thoát khỏi cảm giác này :)
Henrik P. Hessel

25
+1 từ tôi. Mọi người không bao giờ nên sử dụng mã mà họ không hiểu. Điều đó đi cho đoạn trích và thư viện.
Tim Post

5
Theo như đoạn trích, tôi luôn tự viết lại mã để tôi tự tin rằng tôi biết nó hoạt động như thế nào. Thư viện, tôi không bao giờ viết lại trừ khi nó không hoạt động với tôi vì bất kỳ lý do gì.
Rei Miyasaka

12
Tim: thư viện Về, tôi không cần phải hiểu thế nào nó làm điều gì đó, miễn là tôi biết những gì nó làm. Ví dụ, nhiều người trong chúng ta sử dụng libs tiền điện tử; Tôi không biết AES hoạt động như thế nào, nhưng tôi biết nó làm gì và khi nào sử dụng nó.
dùng281377

@Rei Miyasaka Có vẻ như Snippets thường có chất lượng kém hơn so với một thư viện độc lập. Tôi, bản thân tôi, đã cấu trúc lại một số đoạn tôi đã sử dụng.
Henrik P. H ship

24

lập trình viên giỏi viết mã tốt; lập trình viên tuyệt vời ăn cắp mã tuyệt vời.


+1 cho dòng. Có phải là bản gốc?
apoorv020

Tôi ước, không có một câu ngạn ngữ kỳ lạ.
dan_waterworth

Tôi đang dùng iPhone nhưng tôi nghĩ đó là trích dẫn của Pablo Picasso (thay thế lập trình viên bằng các nghệ sĩ)
Henrik P. Hessel

21
Picasso nói Good artists copy, Great artists steal.
dan_waterworth

3
Trích dẫn hay. Hãy nghĩ rằng tôi sẽ ăn cắp ^ H ^ H ^ H ^ H ^ H sử dụng lại nó.
Wonko the Sane

24

Mã hóa là cấp độ lập trình thấp nhất trong thực tế. Mức độ trừu tượng cao hơn bạn có thể nhận được, bạn là lập trình viên tốt hơn. Chọn đúng thư viện (không nhất thiết là thư viện nguồn mở), kết nối chúng đúng cách và duy trì cấu trúc khó hơn nhiều nhưng hiệu quả và tiết kiệm thời gian và chi phí hơn nhiều so với việc tự viết mọi thứ.


13

Tôi thích viết thư viện của riêng tôi. Tôi cũng thích hoàn thành các dự án của mình đúng hạn. Tôi nghĩ theo thời gian, hầu hết các lập trình viên giỏi xây dựng một bộ sưu tập các bit hữu ích và có thể sử dụng lại. Tôi không biết về bạn, nhưng tôi có một cảm giác tuyệt vời mỗi khi tôi sử dụng một thư viện mà tôi đã viết năm năm trước.

hoàn toàn không có gì sai với việc sử dụng mã thư viện đã được thử nghiệm và yêu theo thời gian. Bạn biết nó hoạt động như thế nào, bạn có thể tin tưởng vào sự phức tạp của nó và bạn có thể thực hiện nó một cách nhanh chóng.

Điều đó đang được nói, tôi giả sử rằng bạn hiểu mã trong thư viện. Tôi giả định rằng, nếu có đủ thời gian, bạn có thể thực hiện một cái gì đó có chất lượng tương tự.

Tôi biết một số lập trình viên C thực sự giỏi có thể thực hiện thư viện C tiêu chuẩn, một vài trong số họ chỉ đơn giản là một bài tập học tập / mài giũa. Một số điều thú vị nhất tôi có trong thời gian sở thích là làm việc trên thư viện C ở HelenOS.

Vì vậy, không có gì sai khi sử dụng mã thư viện, miễn là bạn tiếp tục tò mò và tìm hiểu. Không cần phải nói rằng bạn không nên sử dụng mã mà bạn không hiểu, trừ khi việc bạn sử dụng nó là một nỗ lực để hiểu cách thức hoạt động của nó.


Bạn đã mô tả khá nhiều ác cảm của tôi đối với jQuery, +1.
aaaaaaaaaaaa

5

Tôi sẽ đi tốt hơn một số người khác trong câu hỏi này: Tôi thậm chí không nghĩ rằng nhà phát triển "khách hàng" của thư viện cần "hiểu" mã trong thư viện đó.

Tôi là một (so với một số) nhà phát triển iPhone tương đối mới. Có rất nhiều thư viện mà tôi sử dụng hàng ngày mà tôi không bao giờ có thể tự tạo ra, và mã trong đó nằm trên đầu tôi. Không quan trọng trong một chút CUNG CẤP:

1) Tôi hoàn toàn hiểu giao diện cho các thư viện đó (Tôi là một ninja ASIHTTPRequest!)
2) Tôi đang chọn các thư viện nói chung, sử dụng rộng rãi, vì vậy tôi có thể chắc chắn rằng họ đã đi qua và khám phá các vấn đề (ví dụ: ASIHTTP, thư viện JSON của Stig Brautaset, thư viện obj-c của Facebook, v.v.)
3) Thất bại # 2, đủ đơn giản để tôi có thể chọn theo cách của mình và tìm / sửa / tùy chỉnh mọi thứ cần tìm / sửa / tùy chỉnh .

Đó là số 2 sẽ là phần gây tranh cãi trong vấn đề này, tôi đang cá cược. Thực tế là, tôi đang dựa vào cộng đồng nguồn mở, một cộng đồng các nhà phát triển chắc chắn có nhiều kinh nghiệm hơn và có khả năng thông minh hơn tôi rất nhiều. Nhưng đó là toàn bộ quan điểm của nguồn mở. Vì vậy, có bạn đi.


3

Tôi muốn đưa ra một cảnh báo cho việc sử dụng các thư viện. Là người thường xuyên sử dụng các thư viện khoa học trong Perl an R (và một số trong Java), tôi thường phải hack vào thư viện để tránh chi phí quá cao. Sử dụng thư viện là điều tuyệt vời, nhưng ngày càng có nhiều thư viện phụ thuộc vào các thư viện khác, họ gọi thư viện thứ ba sử dụng thư viện chuẩn để thực hiện một nhiệm vụ khá phổ biến. Và mỗi bước trong quy trình yêu cầu một số kiểm tra đầu vào và đầu ra. Khá nhiều trong số những kiểm tra đó là hoàn toàn dư thừa, nhưng dù sao họ cũng cân nhắc về ứng dụng này. Và khi được sử dụng trong một vòng lặp, sau đó có thể bắt đầu cân nặng khá nặng.

Bên cạnh đó, bạn không thể chắc chắn rằng các thư viện luôn giữ khả năng tương thích trở lại hoặc không chứa lỗi. Trong thực tế, tất cả các thư viện đều chứa một vài lỗi, đó là bản chất của mã. Do đó, bạn càng phụ thuộc vào thư viện, bạn càng có nhiều lỗi tiềm ẩn trong mã của mình. Và những lỗi đó bạn không thể tự giải quyết dễ dàng mà không cần hack vào thư viện nữa.

Sử dụng thư viện là một quyết định rất thông minh, nhưng nếu và chỉ khi bạn biết các thư viện và hành vi của họ khá tốt.

Tôi biết, suy nghĩ đau và máy tính là rẻ, nhưng vẫn còn. Không suy nghĩ có thể làm tổn thương nhiều hơn.


3

Thông thường, sao chép số lượng lớn mã nguồn là thực hành kém. Nếu mã được phát triển cho một ứng dụng khác tại công ty của bạn, thì bạn nên sử dụng lại mã bằng cách trích xuất nó vào thư viện để cả hai ứng dụng sử dụng. Bạn không nên sao chép mã. Sao chép mã sẽ buộc bạn phải duy trì hai bản sao thay vì một bản sao chung.


3

Tái sử dụng mã là một ý tưởng rất tốt. Nó làm giảm sự dư thừa và thúc đẩy khả năng bảo trì.

Tiêu đề cho thấy bạn đang sử dụng mã làm thư viện, nhưng văn bản câu hỏi của bạn ngụ ý rằng bạn có thể đang sao chép mã nguồn vào một dự án mới. Tôi muốn sử dụng mã của các nhà phát triển khác làm thư viện càng nhiều càng tốt.

Có một vấn đề nếu mã xấu hoặc bị lỗi theo cách nào đó hoặc dựa trên một mô hình không phù hợp với ứng dụng của bạn. Trong trường hợp đó, thể đơn giản hơn để loại bỏ một số hoặc tất cả mã và bắt đầu lại từ đầu hơn là cố gắng hiểu tại sao nó được viết theo một cách nhất định. Giữ các mã khác xung quanh để tham khảo, mặc dù; bạn có thể gặp một vấn đề mà bạn không chắc chắn cách giải quyết. Rất có thể các nhà phát triển khác có thể đã gặp phải vấn đề tương tự, và thật đáng để xem họ đã giải quyết nó như thế nào.


Bạn đã cho tôi ở đó. Tôi cũng đề cập đến việc sao chép nhiều dòng mã công việc của người khác (không phải thư viện), vì đó là hợp pháp trong trường hợp của tôi. Bạn nghĩ sao?
Arman 27/03/13

1
@Arman Đó vẫn là một ý tưởng tốt. Từ góc độ bảo trì, điều đó không tốt vì khi nhà phát triển ban đầu sửa một lỗi trong mã của anh ấy / cô ấy, nó vẫn ở đó trong bạn. Nó vẫn tốt hơn không có gì vì ít nhất mã tương đối giống nhau trên cả hai dự án và bạn có thể áp dụng sửa lỗi một cách riêng biệt mà không phải thực hiện nhiều.
pswg

: Một câu hỏi cuối cùng: Như những gì Mason nói, ví dụ như tôi thấy rằng 2500 dòng mã (một lần nữa tôi nhấn mạnh không phải thư viện) của bạn có phần hữu ích trong việc bắt đầu công việc của tôi và bạn để tôi sao chép nó, hãy làm bạn nghĩ nó tốt cho tôi chứ? Là đạo đức?
Arman

@Arman Nếu nó hợp pháp, nó cũng có thể là đạo đức. Nếu nó được viết bởi một nhà phát triển thuộc cùng một tổ chức, thì nói chung, tổ chức đó sở hữu mã và bạn có mọi quyền sử dụng nó (theo chính sách của tổ chức). Nếu được viết dưới một tổ chức khác, bạn cần phải xin phép từ tổ chức đó. Nói chung nếu mã không được bao phủ bởi bất kỳ giấy phép nào, nhà phát triển ban đầu không thực sự quan tâm đến cách bạn sử dụng nó, nhưng tôi sẽ luôn gán cho nhà phát triển ban đầu trong các nhận xét mã nổi bật (có liên kết nếu có thể).
pswg

4
Tốt nhất, bạn cũng nên hiểu cách mã sao chép hoạt động.
Mike Partridge

1

Đó thường là một ý tưởng tốt, từ lâu không có vấn đề pháp lý nào tồn tại.

Tuy nhiên, hãy chắc chắn rằng bạn dành thời gian để hiểu thư viện làm gì và làm như thế nào. Sử dụng thư viện "ma thuật" để chăm sóc những thứ bạn không hiểu là một cách tốt để khiến một phần của nó nổ tung vì bạn đã sử dụng sai, và sau đó bạn không biết làm thế nào để sửa nó.


1
Tôi tự hỏi nếu "sao chép và dán" một trăm dòng mã được tạo bởi lập trình viên hào phóng của tôi vẫn còn đạo đức.
Arman

2
@Arman: Thử hỏi anh ấy.
Mason Wheeler

1
Nếu giấy phép cho phép, tại sao nó không có đạo đức? Nếu bạn đang cố gắng hoàn thành công việc và một bánh xe đã được phát minh và cung cấp miễn phí cho bạn, điều đó sẽ sai (tức là phi đạo đức) để bạn lãng phí một phút thời gian để phát minh lại nó. Nếu bạn cần học cách phát minh lại một bánh xe, điều đó hoàn toàn khác.
Darius X.

1

Mã sử ​​dụng lại hợp pháp hầu như không có nhược điểm và hai nhược điểm lớn:

  1. Nó hoàn thành công việc Đây là một trong những quan trọng hơn để phát triển chuyên nghiệp. Cuối cùng, bạn có một công việc được trả lương cao vì bạn biết cách làm cho mọi thứ xảy ra sẽ làm vấp ngã hầu hết những người không lập trình; tái sử dụng cho phép bạn đạt được mục tiêu đó nhanh hơn, do đó bạn trở nên có giá trị hơn trong công việc của mình.
  2. Bạn học những thứ. Đây là lý do quan trọng hơn để cải thiện bản thân. Không có cách nào tốt hơn để cải thiện mã hóa hơn là đọc mã tốt được viết bởi người khác. Ngay cả mã xấu được viết bởi người khác thường dạy cho bạn một cái gì đó! Và không có cách nào tốt hơn để hiểu cách thư viện, API, ngôn ngữ hoặc tên miền hoạt động hơn là đọc và cải thiện các giải pháp đã được viết bởi người khác. Cả hai điều thường xảy ra khi bạn sử dụng lại mã hiện có, bởi vì không có giải pháp có sẵn nào sẽ thực hiện đúng những gì bạn cần - và việc sửa đổi tiếp theo với nguồn là nơi tăng cường kiến ​​thức.

Đó thực sự là mục tiêu của tôi, để học hỏi. Bây giờ, nó có giá trị hơn so với hoàn thành dự án của tôi. Đó là lý do tại sao tôi cảm thấy tồi tệ khi cố gắng có ai đó làm việc chỉ với một chút nỗ lực (không chỉ đề cập đến các thư viện).
Arman

1

Có phải thư viện nặng và sử dụng đoạn mã làm cho bạn trở thành một lập trình viên tồi?

Nếu bạn sử dụng thư viện và đoạn mã ở những nơi thích hợp, thì 'Không' , điều đó không có nghĩa bạn là một lập trình viên tồi. Điều đó có nghĩa là bạn là một lập trình viên thông minh, người có thể áp dụng trí tuệ của người khác vào những nơi thích hợp.

Tuy nhiên...

Phải mất thời gian để tìm thư viện và đoạn mã, vì vậy nếu bạn không thể tự viết mã và bạn cần dành hàng giờ để tìm thư viện và đoạn mã để thực hiện các tác vụ tầm thường, thì 'Có' , bạn là một lập trình viên tồi.


0

Không. Lập trình viên nên sử dụng các thư viện đã có sẵn. Không phát minh lại bánh xe. Nếu bạn có một phương pháp tốt hơn, bạn có thể thực hiện nó, khác với những gì nó thực sự làm khi viết cùng một mã. Điều duy nhất là bạn nên biết mã là gì (và chỉ khi nó quan trọng).


0

Ngoài các lý do trong các câu trả lời khác, không sử dụng mã (miễn là nó phù hợp với vấn đề của bạn) có thể được coi là phi đạo đức vì:

  1. Bạn có thể cố tình lãng phí thời gian của chủ lao động HOẶC
  2. Bạn có thể cố tình cung cấp một sản phẩm ít hơn

Hãy ghi nhớ, cả hai đều khó xác định trước.

Ngoài ra, hãy xem Not Invented Here , thường được gọi là mô hình anit.


0

Đối với mục đích hoàn thành, cho phép đối số truy cập: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -sibling-of-not-phát minh-ở đây /

một tâm lý mà tôi gọi là "Không bao giờ phát minh ở đây" (NeIH). Với tâm lý đó, các tài sản bên ngoài được định giá quá cao và thường được tin tưởng ngầm, khiến các kỹ sư phải dành nhiều thời gian hơn để thích nghi với các tài sản ngoài luồng và ít thời gian xây dựng tài sản của riêng họ.

Luôn có sự cân bằng.


-2

Tôi không sử dụng thư viện trừ khi thực sự cần thiết. Phụ thuộc giới hạn tính di động và tuổi thọ. Tôi có 34 năm phát triển phần mềm và muốn có ít nhất 1 chương trình của mình tồn tại lâu hơn 3 năm mà không bị phá hủy do xói mòn (thay đổi).

COM (Mô hình đối tượng thành phần), câu trả lời 17 năm trước, về mặt lý thuyết, trong thực tế, các thành phần nghi vấn, có thể tái sử dụng không thực sự, tôi sẽ chỉ sử dụng các thành phần rất cơ bản và chỉ khi tôi phải làm.

API và SDK không sử dụng nhiều. Nếu tôi chia nhỏ số dòng mã mà tôi thực sự sử dụng ra khỏi thư viện, thì thời gian tôi dành cho chúng để làm việc so với viết chúng, tôi nghĩ đó là một sự tẩy rửa. Tôi bỏ việc sử dụng SDK hoàn toàn trên đầu là cực kỳ.

Các khung: Zend, Silverlight, WCF, .NET, các hệ thống phân lớp, vâng, chúng có thể tăng tốc độ phát triển ban đầu, nhưng khi tôi đạt đến giới hạn của chúng, thời gian tôi dành để sửa chữa các vết nứt, không đáng để bỏ công sức. Họ bao nhiêu tuổi và họ không bị xói mòn?

Tôi đã đi đến JavaScript và HTML chỉ với các thư viện của mình. Tôi đã loại bỏ JavaScript bằng cách chỉ sử dụng các loại câu lệnh phổ biến nhất. Tôi hy vọng trong 10 năm nữa tôi có thể viết một cái gì đó sẽ kéo dài.


một phần của vấn đề này không phải là quá nhiều các thư viện, nhưng sự phát triển công nghệ liên tục của các ngôn ngữ và công cụ lập trình có nghĩa là bạn phải đi tìm các thư viện mới trong công nghệ mới để làm điều tương tự.
gbjbaanb

-2

Tất cả phụ thuộc vào. Nếu bạn đang mã hóa một trò chơi thì nó sẽ sử dụng thư viện (ví dụ Allegro) nhưng bạn thực sự không thể được coi là lập trình viên nếu bạn sao chép / đánh cắp / mượn (bất cứ thứ gì) mã của người khác. Tôi nói không phát minh lại bánh xe nhưng đến một điểm hợp lý. Đừng tạo toàn bộ chương trình đoạn trích mà người khác đã viết. Ngồi vào máy tính của bạn và tự làm điều đó ... ngừng ăn cắp mã. Mọi người đã trở nên quá lười biếng những ngày này và chỉ cần sao chép và dá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.