Là một lập trình viên mới bắt đầu, tôi có nên ưu tiên xây dựng thư viện của riêng mình hơn là sử dụng thư viện của bên thứ 3 không?


12

Là một lập trình viên Python mới bắt đầu, có nên xây dựng và hiểu các thư viện của riêng tôi trước khi chuyển sang các thư viện bên thứ 3 nâng cao có chứa chức năng tôi cần không?

Một số dự án (ví dụ như các khung web như Django) có thể quá lớn cho phương pháp này. Nhưng các dự án khác (ví dụ: Trình thu thập dữ liệu Web, thư viện biểu đồ, trình phân tích cú pháp HTML) dường như khả thi.

Tôi lo lắng rằng việc phụ thuộc sớm vào các thư viện của bên thứ 3 sẽ kìm hãm sự phát triển của tôi.

Lưu ý: câu hỏi nàycâu hỏi này dường như tập trung nhiều hơn vào các lập trình viên có kinh nghiệm, những người có lẽ tập trung nhiều hơn vào hiệu quả của việc tái sử dụng hơn là lợi ích học tập. Câu hỏi của tôi, tôi nghĩ, là tập trung vào người mới bắt đầu.


5
"không có gì hơn một nhà tích hợp thư viện hơn là một lập trình viên": khách hàng muốn bạn làm việc hiệu quả. Có thể đánh giá và tích hợp các thư viện hiện có là một kỹ năng quan trọng mà bạn cần phải có năng suất. Nếu không có thư viện có sẵn phù hợp với nhu cầu của bạn ... nếu không thì hãy tập trung vào giải quyết vấn đề kinh doanh mà ứng dụng của bạn đang giải quyết
Hamish Smith

2
Bạn đang phân biệt giữa "tích hợp thư viện" và "lập trình viên". Trong 30 năm - thậm chí thực hiện các bộ điều khiển thiết bị cấp chip nhúng - tôi chưa bao giờ làm việc mà không có thư viện. Bạn có thể giải thích sự khác biệt này?
S.Lott

Tội nghiệp kém. Đã chỉnh sửa.
MikeRand

Tôi thà thuê một nhà tích hợp thư viện. Tại sao tập trung vào làm thế nào trong khi bạn có thể tập trung vào các tính năng? Sau khi nhìn thấy vài chục chiếc xe đạp được phát minh lại, tôi co rúm người lại khi nghĩ đến việc nhìn thấy một chiếc khác. Thiết kế thư viện là công việc khó khăn và một hành động cân bằng. Một cửa hàng phần mềm thông thường không chuyên về thiết kế thư viện không có các kỹ năng, tài nguyên và sự kiên nhẫn để làm điều đó đúng. Coi chừng viết lại. Nó là tốt hơn để sử dụng mã đã được kiểm tra bởi những người khác hơn là bắt đầu từ đầu. Chỉ khi có chân không thì người ta mới phát minh ra, IMO.
Công việc

Câu trả lời:


12

Đây luôn là một sự đánh đổi.

Là một lập trình viên mới bắt đầu, bạn nên tự hỏi mình hai câu hỏi khi xem xét sử dụng lại mã so với phát minh lại bánh xe vuông:

  1. Tôi sẽ tìm hiểu thêm về vấn đề tôi muốn giải quyết bằng cách viết mọi thứ từ đầu, hoặc bằng cách tập trung vào miền vấn đề và đặt sự phức tạp sang một bên không quan trọng đối với vấn đề mà tôi quan tâm?
  2. Nó quan trọng hơn đối với tôi để giải quyết vấn đề trong tay hay quan trọng hơn là tôi hiểu một số khái niệm cơ bản?

Nếu bạn không phải hoàn thành dự án của mình, thật tốt khi quay bánh xe của bạn vào những vấn đề phức tạp mà người khác đã giải quyết, bởi vì bạn sẽ học được điều gì đó. Nhưng bạn có thể sẽ chuyển sang một thứ khác trước khi bạn "kết thúc", điều này có thể hoặc không quan trọng với bạn. Các dự án khác sẽ bắt đầu trông sáng bóng nhanh chóng khi bạn vượt lên trên một miền phức tạp trông đơn giản cho đến khi bạn bắt đầu cố gắng tự giải quyết nó.

Đừng ám ảnh về việc từ bỏ quyền kiểm soát vì bạn đang trì hoãn cách suy nghĩ của người khác; tập trung nhiều hơn vào những gì bạn đang cố gắng thực hiện.

Nếu mục tiêu của bạn là viết một trình phân tích cú pháp HTML vì bạn muốn hiểu cách trình phân tích cú pháp hoạt động, hãy thực hiện nó. Nếu mục tiêu của bạn là viết một trình phân tích cú pháp HTML vì bạn muốn vệ sinh đầu vào của người dùng hoặc chuyển đổi một số bit ngẫu nhiên của HTML, thì có lẽ bạn đã tập trung vào điều sai, bởi vì bạn có thể quan tâm đến ứng dụng phân tích cú pháp hơn là phân tích cú pháp . Nếu bạn cảm thấy muốn viết một trình phân tích cú pháp HTML vì bạn không muốn mất thời gian để hiểu thư viện của người khác, có lẽ bạn đang lãng phí thời gian của mình, bởi vì, ít nhất là trong trường hợp này, tôi đảm bảo người khác đã dành nhiều thời gian hơn để tìm hiểu làm thế nào để giải quyết vấn đề này hiệu quả hơn bạn sẽ có. Trong các trường hợp thực sự tầm thường, bạn có thể tiết kiệm thời gian bằng cách không sử dụng lại mã, nhưng trong các trường hợp phức tạp, trừ khi thư viện bạn sử dụng hút hoặc khả năng đọc tài liệu và mẫu mã hút,

Mặt khác, tôi sẽ nói rằng đáng để viết thư viện đồ thị của riêng bạn, vì bạn sẽ tập trung hơn vào các thuật toán cơ bản và các cấu trúc dữ liệu mà bạn sẽ có thể áp dụng cho các miền khác, ngay cả khi bạn kết thúc sử dụng thư viện của người khác khi bạn làm việc với những vấn đề đó.


Khung tuyệt vời để suy nghĩ về vấn đề. Nhiều đánh giá cao.
MikeRand

8

Hầu hết các lập trình viên khởi đầu đều đánh giá thấp sự phức tạp của một vấn đề. Điều này dẫn đến nhiều tình huống khó chịu, nhưng tôi sẽ chỉ tập trung vào một: họ loại bỏ rất nhiều thư viện của bên thứ ba vì "cồng kềnh" hoặc "quá phức tạp". Sau đó, họ cố gắng viết mã của riêng mình để thực hiện cùng một công việc và tạo ra một mớ hỗn độn về nó, bởi vì họ không lường trước được tất cả những thứ mà họ phải xử lý.

Thu thập dữ liệu web và phân tích cú pháp HTML. Bạn dường như có một thái độ khá bình thường đối với những nhiệm vụ đó - điều đó khiến tôi tin rằng bạn không bao giờ cố gắng thực hiện chúng trên bất cứ điều gì ngoại trừ một quy mô rất nhỏ. Đây chỉ là một danh sách ngắn, không đầy đủ về các vấn đề tiềm ẩn mà trình thu thập dữ liệu web thực sự cần phải giải quyết:

  • HTML không đúng định dạng.
  • Mã hóa nhiều ký tự (cả thế giới không chạy trên ASCII).
  • Liên kết được tạo hoặc sửa đổi bởi JavaScript.
  • Liên kết đến các tệp nhị phân nhiều gigabyte.
  • Các loại mime không chính xác.
  • Đâm vào giữa một phiên bò.
  • Tar hố.
  • Tư vấn SEO.
  • Microsoft.

6

Tôi lo lắng rằng việc phụ thuộc sớm vào các thư viện của bên thứ 3 sẽ kìm hãm sự phát triển của tôi và khiến tôi không có gì khác hơn là một nhà tích hợp thư viện hơn là một lập trình viên.

Điều đó là sai.

Sự phụ thuộc sớm vào các thư viện của bên thứ 3 sẽ dạy các thư viện hoạt động tốt như thế nào.

Phát triển sớm luôn là một sự lãng phí thời gian. Viết thư viện của riêng bạn mà không nghiên cứu kỹ (tức là sử dụng) các thư viện hiện có làm bạn phải sáng tạo lại bánh xe - thật tệ - cho phần còn lại của sự nghiệp.

Tôi đã dành nhiều giờ có thể thanh toán để dọn dẹp những mớ hỗn độn đó.


Không chắc chắn tôi hoàn toàn đồng ý với điều đó .. Đôi khi các thư viện của bên thứ 3 được viết kém và thực sự có thể dạy những thói quen xấu. Nếu các thuật toán cơ bản được hiểu rõ, thì việc phát minh lại bánh xe có thể là một ý tưởng tốt, và sau đó so sánh chúng với các thư viện khác để xem bạn sắp xếp tốt hay kém đến mức nào so với các thư viện khác. Trong cả hai trường hợp, rõ ràng một số hình thức cố vấn rất có lợi :)
Demian Brecht

Có nói rằng, có lợi ích cho nghiên cứu API hiện :)
Demian Brecht

2
@Dppy Brecht: "Đôi khi các thư viện của bên thứ 3 được viết kém và thực sự có thể dạy những thói quen xấu" Mặc dù điều này có thể đúng, hầu hết các dự án nguồn mở đều bị cộng đồng người dùng đánh giá cao và những ý tưởng tồi không chịu được sự khôn ngoan của đám đông. Hơn nữa, "văn bản kém" là một bản án mà không n00b có thể thực hiện một cách hiệu quả.
S.Lott

@ S. Lott: Vâng nói (lại: n00b) :) Và tôi đoán bạn sẽ chỉ phải cẩn thận về thư viện của bên thứ 3 bạn nhìn vào, như một số có rất nhỏ (nếu có) cộng đồng. Ví dụ, chọc vào các dự án ngẫu nhiên trên github, có thể bắt đầu dẫn bạn đi sai đường.
Demian Brecht

2
@Dppy Brecht: Bạn không thể phát triển bất kỳ phán xét nào cho đến khi bạn thấy nhiều thư viện khác nhau. Không có cách nào có thể để "lọc trước" các thư viện cho n00b sử dụng. Đó là tất cả các thư viện hoặc không có thư viện.
S.Lott

4

Câu này, đây là câu đầu tiên rất có vấn đề về logic:

Là một lập trình viên Python mới bắt đầu, có nên xây dựng và hiểu các thư viện của riêng tôi trước khi chuyển sang các thư viện bên thứ 3 nâng cao có chứa chức năng tôi cần không?

Làm thế nào bạn có thể tin rằng bạn có thể viết thư viện chức năng nâng cao (từ của bạn) một cách hiệu quả như một người mới bắt đầu sẽ chính xác, tính năng hoàn chỉnh và được kiểm tra như các thư viện hiện có?

Điều này thậm chí không đề cập đến lượng thời gian khổng lồ mà bạn sẽ lãng phí khi phát minh lại một bánh xe mà bạn không hiểu khi mới bắt đầu, cuối cùng sẽ từ bỏ khi bạn may mắn nhận ra mình đang ở trên đầu và phải học thoát khỏi thư viện nào.

Lấy phân tích cú pháp HTML chẳng hạn, bạn đề cập đến điều này là khả thi, không có cách nào bạn có thể làm một công việc tốt hơn Beautiful Soup khi mới bắt đầu. Đơn giản và đơn giản bạn sẽ thất bại. Những điều bạn cho là khả thi có những vấn đề phức tạp rất lớn mà bạn không tính đến, bạn không biết miền vấn đề đủ chi tiết để hiểu được sự phức tạp, bạn sẽ phải chịu thất bại chỉ từ đó.

Ý kiến ​​của tôi là tìm hiểu những gì người khác đã làm và đã giải quyết vấn đề của bạn cho bạn, cho đến khi bạn không thể tìm thấy điều gì đó giải quyết vấn đề của bạn.


1

Đây chỉ là ý kiến ​​của tôi, nhưng tôi khuyên bạn nên xây dựng thư viện của riêng mình cho mã khá đơn giản, có thể sử dụng lại. Đối với bất kỳ điều gì phức tạp hơn, bạn có thể sử dụng các thư viện của bên thứ 3, đã được xây dựng và kiểm tra kỹ lưỡng (hy vọng!). Tạo một thư viện mạnh mẽ có thể rất tốn thời gian, tùy thuộc vào nó là gì. Tôi chắc chắn bạn sẽ có được nhiều thực hành lập trình chỉ bằng cách xây dựng ứng dụng 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.