Viễn cảnh bạn có thể bị sai lệch bởi kinh nghiệm cá nhân. Đây là một độ dốc trơn trượt của các sự kiện là chính xác, nhưng suy luận kết quả là không, mặc dù thoạt nhìn có vẻ đúng.
- Các khung có phạm vi lớn hơn các dự án nhỏ.
- Thực hành xấu là khó khăn hơn đáng kể để đối phó trong các cơ sở mã lớn hơn.
- Xây dựng một khung (trung bình) đòi hỏi một nhà phát triển có kỹ năng hơn là xây dựng một dự án nhỏ.
- Các nhà phát triển tốt hơn tuân theo thực tiễn tốt (RẮN) nhiều hơn.
- Do đó, các khung có nhu cầu thực hành tốt cao hơn và có xu hướng được xây dựng bởi các nhà phát triển có kinh nghiệm chặt chẽ hơn với thực tiễn tốt.
Điều này có nghĩa là khi bạn tương tác với các khung và các thư viện nhỏ hơn, mã thực hành tốt mà bạn sẽ tương tác sẽ thường được tìm thấy trong các khung lớn hơn.
Sai lầm này là rất phổ biến, ví dụ như mọi bác sĩ tôi từng được điều trị đều kiêu ngạo. Vì vậy, tôi kết luận rằng tất cả các bác sĩ đều kiêu ngạo. Những sai lầm luôn luôn bị thực hiện một chăn suy luận dựa trên kinh nghiệm cá nhân.
Trong trường hợp của bạn, có thể bạn chủ yếu có kinh nghiệm thực hành tốt trong các khung lớn hơn chứ không phải trong các thư viện nhỏ hơn. Quan sát cá nhân của bạn không sai, nhưng đó là bằng chứng giai thoại và không thể áp dụng phổ biến.
2 chế độ lập trình - tạo ra ít nhiều chính xác những gì được yêu cầu thông qua các yêu cầu và KISS (lập trình điển hình) hoặc tạo logic, dịch vụ rất chung chung và có thể tái sử dụng, cung cấp sự linh hoạt mà các nhà phát triển khác có thể cần (lập trình khung)
Bạn đang phần nào xác nhận điều này ở đây. Hãy nghĩ về một khuôn khổ là gì. Nó không phải là một ứng dụng. Đó là một "mẫu" tổng quát mà người khác có thể sử dụng để tạo ra tất cả các loại ứng dụng. Về mặt logic, điều đó có nghĩa là một khung được xây dựng theo logic trừu tượng hơn nhiều để mọi người có thể sử dụng.
Các nhà xây dựng khung không có khả năng sử dụng các phím tắt, vì họ thậm chí không biết các yêu cầu của các ứng dụng tiếp theo là gì. Xây dựng một khung vốn đã khuyến khích họ làm cho mã của họ có thể sử dụng được cho người khác.
Tuy nhiên, các nhà xây dựng ứng dụng có khả năng thỏa hiệp về hiệu quả logic vì họ tập trung vào việc cung cấp một sản phẩm. Mục tiêu chính của họ không phải là hoạt động của mã mà là trải nghiệm của người dùng.
Đối với một khung, người dùng cuối là một nhà phát triển khác, người sẽ tương tác với mã của bạn. Chất lượng mã của bạn quan trọng đối với người dùng cuối của bạn.
Đối với một ứng dụng, người dùng cuối là người không phải là nhà phát triển, người sẽ không tương tác với mã của bạn. Chất lượng mã của bạn không quan trọng đối với họ.
Đây chính xác là lý do tại sao các kiến trúc sư của một nhóm phát triển thường đóng vai trò là người thực thi thực hành tốt. Chúng là một bước được loại bỏ khỏi việc phân phối sản phẩm, điều đó có nghĩa là chúng có xu hướng nhìn vào mã một cách khách quan, thay vì tập trung vào việc phân phối ứng dụng.
Nếu bạn thêm các điểm nhập cảnh trừu tượng này, bạn có thực sự đáp ứng các yêu cầu của người dùng hay bạn đang tạo một khung trên đầu trang của khung công nghệ và ngăn xếp hiện tại của bạn để giúp việc bổ sung trong tương lai dễ dàng hơn? Trong trường hợp nào bạn đang phục vụ lợi ích của khách hàng, hoặc của nhà phát triển?
Đây là một điểm thú vị và đó (theo kinh nghiệm của tôi) là lý do chính tại sao mọi người vẫn cố gắng biện minh để tránh thực hành tốt.
Để tóm tắt các điểm dưới đây: Bỏ qua thực hành tốt chỉ có thể được biện minh nếu các yêu cầu của bạn (như được biết hiện tại) là không thay đổi, và sẽ không bao giờ có bất kỳ thay đổi / bổ sung nào cho cơ sở mã. Spoiler alert: Điều đó hiếm khi xảy ra.
Ví dụ: khi tôi viết một ứng dụng bảng điều khiển 5 phút để xử lý một tệp cụ thể, tôi không sử dụng thực hành tốt. Bởi vì tôi sẽ chỉ sử dụng ứng dụng ngày hôm nay và không cần cập nhật trong tương lai (sẽ dễ dàng hơn để viết một ứng dụng khác nếu tôi cần một lần nữa).
Giả sử bạn có thể nhanh chóng xây dựng một ứng dụng trong 4 tuần và bạn có thể xây dựng ứng dụng đó đúng cách trong 6 tuần. Ngay từ cái nhìn đầu tiên, việc xây dựng một cách kém chất lượng có vẻ tốt hơn. Khách hàng nhận được ứng dụng của họ nhanh hơn và công ty phải dành ít thời gian hơn cho tiền lương của nhà phát triển. Thắng / thắng, phải không?
Tuy nhiên, đây là một quyết định được đưa ra mà không cần suy nghĩ trước. Do chất lượng của cơ sở mã hóa, việc thực hiện một thay đổi lớn đối với người được xây dựng một cách kém chất lượng sẽ mất 2 tuần, trong khi thực hiện các thay đổi tương tự đối với bản dựng được xây dựng đúng sẽ mất 1 tuần. Có thể có nhiều thay đổi trong số này sẽ xuất hiện trong tương lai.
Hơn nữa, có xu hướng thay đổi bất ngờ đòi hỏi nhiều công việc hơn bạn nghĩ ban đầu trong các cơ sở mã hóa được xây dựng một cách kém chất lượng, do đó có khả năng đẩy thời gian phát triển của bạn lên ba tuần thay vì hai tuần.
Và sau đó cũng có xu hướng lãng phí thời gian để săn bọ. Đây thường là trường hợp trong các dự án mà việc đăng nhập đã bị bỏ qua do hạn chế về thời gian hoặc không sẵn sàng thực hiện nó vì bạn đã lơ đãng làm việc theo giả định rằng sản phẩm cuối cùng sẽ hoạt động như mong đợi.
Nó thậm chí không cần phải là một bản cập nhật lớn. Tại công ty hiện tại của tôi, tôi đã thấy một số dự án được xây dựng nhanh chóng và bẩn thỉu, và khi lỗi / thay đổi nhỏ nhất cần được thực hiện do sự sai lệch trong các yêu cầu, dẫn đến phản ứng dây chuyền cần phải tái cấu trúc mô-đun sau mô-đun . Một số trong những dự án này đã kết thúc sụp đổ (và để lại một mớ hỗn độn không thể nhầm lẫn) trước khi chúng phát hành phiên bản đầu tiên.
Các quyết định rút gọn (lập trình nhanh và bẩn) chỉ có lợi nếu bạn có thể đảm bảo chắc chắn rằng các yêu cầu là chính xác và sẽ không bao giờ cần phải thay đổi. Theo kinh nghiệm của tôi, tôi chưa bao giờ bắt gặp một dự án nào là đúng.
Đầu tư thêm thời gian vào thực tiễn tốt là đầu tư vào tương lai. Các lỗi và thay đổi trong tương lai sẽ trở nên dễ dàng hơn rất nhiều khi cơ sở mã hiện tại được xây dựng dựa trên thực tiễn tốt. Nó sẽ được trả cổ tức chỉ sau hai hoặc ba thay đổi được thực hiện.