Tôi làm việc với một nhóm phát triển từ 2 nhà phát triển lên 10 trong chưa đầy một năm. Tôi là số 3 và là người đầu tiên đưa ra vấn đề về tiêu chuẩn mã hóa. Hai nhà phát triển ban đầu đã làm việc cạnh nhau trong một vài năm và họ đã áp dụng một tiêu chuẩn chung có vẻ xa lạ với tôi. Chúng tôi đã có chính xác những vấn đề tương tự như bạn đang mô tả.
Những gì chúng tôi đã làm là:
Nghiên cứu tiêu chuẩn mã hóa
Chúng tôi đã dành vài ngày để kiểm tra các dự án nguồn mở được thiết lập. Chúng tôi biết nhóm sẽ mở rộng nhanh chóng và chúng tôi đang tìm kiếm các giải pháp thực sự dựa trên các dự án thực tế chứ không phải một số hướng dẫn chung chung. Ngoài ra, chúng tôi không quan tâm đến các tiêu chuẩn mã hóa tối ưu, nhưng đối với một bộ quy tắc và hướng dẫn sẽ có ý nghĩa và không kêu gọi tái cấu trúc tất cả các cơ sở mã của chúng tôi. Chúng tôi đã tìm kiếm một hack tiêu chuẩn mã hóa nếu bạn muốn.
Ba chúng tôi đã quyết định rằng các tiêu chuẩn mã hóa tốt nhất hiện có cho một dự án PHP đã được thiết lập là những tiêu chuẩn được theo sau bởi Zend Framework. May mắn thay, người Zend Framework cung cấp một tài liệu tiêu chuẩn mã hóa rất toàn diện .
Tạo tiêu chuẩn mã hóa của riêng chúng tôi
Tất nhiên áp dụng các tiêu chuẩn mã hóa của dự án khác vào dự án của chúng tôi là không có ý nghĩa. Chúng tôi sử dụng tài liệu Khung Zend làm mẫu:
- Đầu tiên chúng tôi xóa mọi thứ không áp dụng cho dự án của chúng tôi
- Sau đó, chúng tôi đã thay đổi mọi thứ mà chúng tôi coi là vấn đề của phong cách theo phong cách của chúng tôi
- Và cuối cùng chúng tôi đã viết mọi thứ xuống
Vì vậy, chúng tôi đã có một tài liệu khá lớn trong tay, được lưu trữ trong wiki ưa thích của chúng tôi , đó là một cuốn sách hay, được tất cả chúng ta đồng ý. Và hoàn toàn vô dụng trên chính nó.
Giữ đúng lời hứa của chúng tôi
Codebase của chúng tôi tại thời điểm đó là khoảng 1 * 10 ^ 6 sloc. Chúng tôi biết rằng vì chúng tôi đã áp dụng các tiêu chuẩn mã hóa chính thức, chúng tôi phải bắt đầu tái cấu trúc mã của mình, nhưng tại thời điểm đó, chúng tôi đã bị ép với các vấn đề khác. Vì vậy, chúng tôi quyết định chỉ cấu trúc lại các thư viện rất cốt lõi của chúng tôi, chỉ là một khối 5 * 10 ^ 3.
Chúng tôi đã chỉ định một trong số chúng tôi làm chủ tiêu chuẩn mã hóa (chúng tôi sử dụng thô tục địa phương thay cho chủ ) với trách nhiệm kiểm tra và thi hành các tiêu chuẩn. Chúng tôi tái chế vai trò cứ sau vài lần chạy nước rút. Tôi là người đầu tiên, và đó là rất nhiều công việc, vì tôi phải theo dõi hầu hết mọi cam kết.
Chúng tôi đã có một vài cuộc thảo luận mới và các phụ lục nhỏ cho tài liệu gốc trong nhiệm kỳ của tôi và cuối cùng chúng tôi đã có một tài liệu hơi ổn định. Chúng tôi thay đổi nó mọi lúc mọi nơi nhưng hầu hết những thay đổi này là trên các tính năng mới của ngôn ngữ, vì PHP 5.3 là một bản phát hành chính trong tất cả trừ tên.
Đối phó với anh chàng mới
Khi anh chàng mới tiếp theo đến, đã đến lúc đưa các tiêu chuẩn mã hóa của chúng tôi vào thử nghiệm. Sau phần giới thiệu nhỏ về cơ sở mã của chúng tôi, chúng tôi đã yêu cầu anh ấy đánh giá tài liệu tiêu chuẩn mã hóa của chúng tôi. Anh gần như đã khóc. Có vẻ như anh ấy đã làm mọi thứ khác đi.
Vì tôi là bậc thầy về tiêu chuẩn mã hóa vào thời điểm đó, nên tôi phải đánh giá đầu vào của anh ấy và sửa đổi tài liệu cho phù hợp. Đề xuất của ông là:
- Các vấn đề về phong cách cá nhân (cuối cùng bị loại bỏ)
- Các tiêu chuẩn có ý nghĩa đối với nền Java của anh ta nhưng không quá nhiều với PHP (bị loại bỏ)
- Các quy ước mà ông đã thực hiện từ lần tiếp xúc ngắn ngủi với PHP (một số đã bị bác bỏ, nhưng rất nhiều chứng minh là các quy ước phổ biến mà chúng tôi chưa bao giờ nghĩ tới hoặc tìm ra trong nghiên cứu ban đầu của chúng tôi)
Trong vài tuần tiếp theo, anh được giao một nhiệm vụ đơn giản: Đưa một số phần của cơ sở mã của chúng tôi cập nhật với các tiêu chuẩn. Tôi đã phải cẩn thận chọn những phần đó dựa trên một vài quy tắc:
- Mã phải tương đối dễ dàng đối với người không quen thuộc với cơ sở mã của chúng tôi (và PHP nói chung)
- Mã phải dựa trên những gì anh ta được thuê để làm
Tôi theo dõi quá trình của anh ấy và anh ấy đã làm rất tốt. Chúng tôi đã xác định một số phần mã không thể phù hợp với tài liệu của chúng tôi và được sửa đổi cho phù hợp (mã và / hoặc tiêu chuẩn, tùy theo ý nghĩa nào hơn)
Và rồi một chàng trai mới đến. Chúng tôi lặp lại quá trình (chủ khác nhau lần này), và nó hoạt động trở lại. Và một lần nữa.
Tóm lại là
- Tạo một tài liệu tiêu chuẩn mã hóa, nhưng đảm bảo rằng các tiêu chuẩn của bạn không chỉ là của riêng bạn mà còn phản ánh các tiêu chuẩn chung trong cộng đồng rộng lớn hơn của nền tảng của bạn.
- Gán một vai trò tương tự như chủ tiêu chuẩn mã hóa của chúng tôi. Có người theo dõi ít nhất mã mới và đặc biệt là mã mới từ các thành viên mới. Tái chế vai trò, vì nó vô cùng nhàm chán.
- Luôn đánh giá đầu vào từ một thành viên mới. Luôn luôn sửa đổi các tiêu chuẩn của bạn nếu nó có ý nghĩa. Tài liệu tiêu chuẩn mã hóa của bạn nên được phát triển, nhưng chậm. Bạn không muốn cấu trúc lại codebase của mình ở mỗi lần lặp.
- Dành một chút thời gian để mỗi thành viên mới học hỏi và thích nghi với các tiêu chuẩn và quy ước của bạn. Học bằng cách làm việc tốt nhất trong những tình huống này.
- Wiki hoạt động kỳ diệu cho các tài liệu như vậy.
- Mã đánh giá công việc kỳ diệu cho bất kỳ tình huống!
Tại một số điểm trong quy trình, chúng tôi đã đề xuất rằng chúng tôi sử dụng móc nối trước để tự động kiểm tra các tiêu chuẩn. Chúng tôi đã quyết định chống lại nó vì nhiều lý do, có một số cuộc thảo luận thú vị về StackOverflow về vấn đề này:
Một số là cụ thể PHP, nhưng câu trả lời áp dụng cho tất cả các nền tảng.