Tôi đã viết rất nhiều về chủ đề này trên SoftwareEngineering.SE trong quá khứ và bản thân tôi cũng gặp tình huống tương tự. Do đó, tôi sẽ cố gắng đưa ra một vài gợi ý và nêu bật một vài vấn đề tôi đã lưu ý khi đọc câu hỏi của bạn.
Nhưng trước tiên, hãy nói về một khía cạnh quan trọng: vai trò của bạn trong công ty.
Vai trò của bạn
Bạn có thể có một nhiệm vụ rõ ràng từ ông chủ của bạn để tăng cường mọi thứ, và cũng là một vị trí trong hệ thống phân cấp nơi các nhà phát triển khác phải lắng nghe đơn đặt hàng của bạn . Hoặc bạn có thể là một trong số những người ngang hàng, có cùng vai trò và cùng thẩm quyền, lựa chọn của bạn chỉ là ... à ... một ý kiến .
Trong cả hai trường hợp, điều quan trọng là vị trí của bạn ít hơn trong hệ thống phân cấp và hơn thế nữa:
Những nhà phát triển khác nghĩ gì về bạn. Nếu họ coi bạn là một kẻ phiền phức, hỏi họ những điều ngu ngốc, bạn sẽ không thể đi xa được. Tôi đã thấy nhiều trường hợp trong đó các nhà lãnh đạo kỹ thuật và quản lý dự án hoàn toàn không có ảnh hưởng gì đến nhóm, bởi vì nhóm biết (hoặc nghĩ) rằng những người lãnh đạo của nhóm này, không có nền tảng kỹ thuật cần thiết để đưa ra quyết định. Mặt khác, tôi đã thấy một số nhà phát triển thực sự được đồng nghiệp lắng nghe, bởi vì họ biết những nhà phát triển đó có kỹ năng và kinh nghiệm.
Làm thế nào vững chắc là nhóm của bạn và những gì thúc đẩy họ. Hãy tưởng tượng một công ty nơi mọi nhà phát triển được trả tiền cho KLOC / tháng. Bạn có muốn nói gì về vấn đề phong cách với đồng nghiệp không? Có lẽ là không, bởi vì hiếm có người nào muốn được trả ít hơn. Nói chung, nếu đây không phải là một nhóm mà chỉ là một nhóm người làm việc trong cùng một dự án, bạn sẽ không thể cải thiện bất cứ điều gì.
Tùy thuộc vào điều đó, bạn có thể quyết định liệu có đáng để nỗ lực thực hiện bất kỳ thay đổi nào không. Nếu bạn không có tiếng nói và không có sự gắn kết nhóm, chỉ cần đi tìm một công việc khác. Nếu bạn được biết đến như một nhà phát triển tài năng, được kính trọng và có một cảm giác nhóm mạnh mẽ, bạn sẽ có thể cải thiện mọi thứ tương đối dễ dàng, ngay cả khi phải đối mặt với sự thù địch từ sếp hoặc các nhóm khác.
Trong mọi trường hợp, điều cần thiết là không gây áp lực cho đội của bạn. Làm việc với họ, không chống lại họ. Đừng ra lệnh cho họ, nhưng hãy hướng dẫn họ hướng tới mục tiêu.
Bây giờ, các gợi ý.
Phong cách
Tôi đã từng yêu cầu phải tuân theo kiểu mã hóa và định dạng của phần lớn mã hiện có (đáng buồn là chúng ta không có tài liệu về kiểu mã hóa chính thức). Nhưng nó không hoạt động ...
Tất nhiên là không, vì đây không phải là cách nên làm.
Phong cách thật nhàm chán .
Theo phong cách là nhàm chán .
Viết tài liệu theo phong cách mã hóa thật nhàm chán ( và thật khó khăn ; thậm chí đừng thử làm nó trừ khi bạn đã làm việc với ngôn ngữ này hơn mười năm).
Đọc tài liệu phong cách là nhàm chán .
Xem lại mã cho các lỗi phong cách là nhàm chán .
Trolling rằng phong cách của tôi tốt hơn phong cách của bạn là thú vị , đặc biệt là khi hoàn toàn không có lợi ích khách quan của phong cách này so với phong cách khác. Nghiêm túc mà nói, mọi người tỉnh táo đều biết rằng cách viết đúng if (x)
là cách tôi viết, không phải if(x)
hay if ( x )
!
Vì thế:
Đừng đánh giá phong cách. Đây là công việc của người kiểm tra phong cách. Những ứng dụng dễ thương đó có một vài lợi ích so với bộ não của bạn: chúng kiểm tra toàn bộ dự án trong vài phần nghìn giây, không phải hàng giờ hoặc hàng ngày và chúng không mắc lỗi và không bỏ sót lỗi kiểu.
Đừng viết tiêu chuẩn phong cách của riêng bạn. Dù sao bạn cũng sẽ làm sai và đồng nghiệp sẽ troll bạn rằng bạn đã lựa chọn tồi.
Đừng buộc các nhà phát triển sửa lỗi 2 000 kiểu.
Thực hiện phong cách tự động trên cam kết. Mã có lỗi kiểu không có chỗ trong kiểm soát phiên bản.
Làm điều đó từ khi bắt đầu dự án. Thiết lập điều khiển kiểu trong một dự án tồn tại là khó khăn đến không thể.
Để biết thêm về điều đó, đọc phần đầu tiên của câu trả lời này khác trên SE.SE .
Cũng thế:
- Đừng quá khắt khe. Ví dụ, viết
jslint
mã -compliant khá khó chịu, vì vậy nó nên được thực hiện riêng khi thực sự cần thiết (hoặc nếu tất cả các thành viên trong nhóm của bạn hài lòng khi sử dụng nó). Cũng vậy với các công cụ kiểm tra tĩnh; ví dụ, Phân tích mã của .NET ở mức tối đa có thể rất ngột ngạt và thất vọng, trong khi mang lại rất ít lợi ích; mặt khác, công cụ tương tự được đặt ở mức độ vừa phải, chứng tỏ là rất hữu ích.
Mã đánh giá
Bây giờ bạn không cần bận tâm về phong cách trong quá trình đánh giá mã, bạn có thể tập trung vào những thứ thú vị hơn: tăng cường (so với sửa lỗi) mã nguồn.
Những người khác nhau phản ứng khác nhau để đánh giá mã. Một số người coi đó là một cơ hội. Những người khác ghét nó. Một số lắng nghe mọi thứ bạn nói với họ, ghi chú và không thảo luận, ngay cả khi họ có thể đúng. Những người khác cố gắng tranh luận về mọi điểm. Tùy thuộc vào bạn để tìm cách đối phó với mọi nhà phát triển theo tính cách của cô ấy. Nó thường hữu ích để:
Thực hiện đánh giá mã ở chế độ riêng tư, đặc biệt khi nhà phát triển là thiếu niên và viết mã thực sự xấu.
Cho thấy rằng không có gì cá nhân: bạn đang xem xét mã, không phải kỹ năng của người đó.
Hiển thị mục tiêu thực tế của một đánh giá mã. Mục tiêu không phải là cho thấy một nhà phát triển tồi tệ như thế nào. Mục tiêu là cung cấp cơ hội để cải thiện.
Không bao giờ tranh luận. Bạn không ở đây để thuyết phục, nhưng để cung cấp chuyên môn của bạn.
Đừng bao giờ cho rằng người được đánh giá là người duy nhất có thể học được điều gì đó từ đánh giá. Bạn cũng ở đây để học, cả bằng cách đọc mã và bằng cách hỏi giải thích về những phần bạn không hiểu.
Sau khi xem xét mã được thực hiện, hãy chắc chắn rằng người đó thực sự cải thiện mã của cô ấy. Tôi đã có một vài trường hợp các nhà phát triển nghĩ rằng việc xem xét mã kết thúc khi cuộc họp thực sự kết thúc. Họ rời đi và quay lại các tính năng mới của họ, cố gắng áp dụng những gì bạn đã chia sẻ với họ cho mã mới. Có một công cụ theo dõi phong nha để xem xét mã giúp.
Lưu ý rằng độc lập với vai trò cụ thể của bạn trong công ty và chuyên môn của bạn so với những người khác, mã của bạn cũng phải được xem xét. Bạn cũng không nên là người duy nhất xem xét mã của người khác.
Trong một dự án gần đây khi tôi làm lãnh đạo kỹ thuật, tôi đã có một thời gian khó khăn để giải thích với đồng nghiệp rằng vai trò của họ là thực hiện đánh giá mã của nhau, bao gồm cả mã của tôi. Nỗi sợ hãi của một thực tập sinh sắp xem lại mã của nhà lãnh đạo kỹ thuật của anh ta biến mất ngay khi anh ta tìm thấy những vấn đề đầu tiên trong mã số và ai trong chúng ta viết mã hoàn hảo?
Đào tạo
Đánh giá mã là một cơ hội tuyệt vời để dạy và học một số khía cạnh của lập trình và thiết kế phần mềm, nhưng những người khác yêu cầu đào tạo.
Nếu bạn có thể đào tạo đồng nghiệp của mình, hãy làm điều đó. Nếu quản lý của bạn thù địch với ý tưởng đào tạo, hãy làm điều đó một cách không chính thức. Tôi đã thực hiện các buổi đào tạo như vậy dưới hình thức các cuộc họp không chính thức, hoặc đôi khi là một cuộc thảo luận đơn giản, đôi khi bị gián đoạn bởi quản lý và theo đuổi sau đó.
Bên cạnh đào tạo trực tiếp, hãy đảm bảo bạn biết đủ các cuốn sách như Hoàn thành mã của McConnel và nói về những cuốn sách đó với đồng nghiệp của bạn. Đề nghị họ đọc mã nguồn của các dự án nguồn mở, cung cấp cho họ các ví dụ cụ thể về mã chất lượng cao. Và, rõ ràng, tự viết mã chất lượng cao.
Tập trung vào bối cảnh, không phải vào người
Làm thế nào tôi có thể giải quyết tình huống này mà không chỉ tập trung vào 'văn hóa công ty tồi', 'sinh viên tốt nghiệp thiếu kinh nghiệm', v.v.
Những sinh viên tốt nghiệp có một mục tiêu: có được kinh nghiệm, học hỏi công cụ, trở nên khéo léo hơn. Nếu, năm này qua năm khác, họ viết mã tào lao và không biết gì về lập trình, có lẽ vì nhóm của bạn hoặc công ty của bạn không cho họ cơ hội này.
Nếu bạn đang tập trung vào thực tế là nhóm của bạn có những sinh viên tốt nghiệp thiếu kinh nghiệm, điều này sẽ không có ích. Thay vào đó, hãy tập trung vào những gì bạn có thể làm cho họ và với họ. Đánh giá mã và đào tạo là hai trong số các kỹ thuật để cải thiện tình hình.
Văn hóa công ty xấu là một con thú khác nhau. Đôi khi, nó có thể được thay đổi. Đôi khi, nó không thể. Trong mọi trường hợp, hãy nhớ rằng bạn là một phần của công ty này, vì vậy bạn là một phần của văn hóa công ty. Nếu bạn không thể thay đổi nó và thấy nó vốn đã xấu, sớm hay muộn, bạn sẽ phải rời đi.
Lấy số liệu của bạn đúng
Làm thế nào chính xác để bạn đo mã ngay bây giờ? Bạn có đo số lần cam kết mỗi ngày cho mỗi nhà phát triển không? Hoặc KLOC mỗi tháng cho mỗi lập trình viên? Hoặc có thể bảo hiểm mã? Hoặc số lượng lỗi được tìm thấy và sửa chữa? Hoặc số lượng lỗi tiềm năng bị bắt bởi các bài kiểm tra hồi quy? Hoặc số lượng hoàn nguyên được thực hiện bởi máy chủ Triển khai liên tục?
Những điều bạn đo lường được, bởi vì các thành viên trong nhóm đang điều chỉnh công việc của họ với các yếu tố được đo lường. Ví dụ, trong một công ty nơi tôi phải làm việc vài năm trước, điều duy nhất được đo lường là thời gian một người ở văn phòng. Không cần phải nói rằng điều này không được khuyến khích để cung cấp mã tốt hơn, hoặc làm việc thông minh hơn, hoặc ... tốt, để làm việc.
Tìm ra sự củng cố tích cực và tiêu cực và điều chỉnh các yếu tố đo lường theo thời gian về cơ bản là đòn bẩy mà bạn có đối với các thành viên trong nhóm. Khi được thực hiện đúng cách, nó có thể đạt được kết quả mà sẽ không đạt được bằng cách phân cấp đơn giản.
Những điều làm phiền bạn, làm cho chúng có thể đo lường được. Đo lường chúng, và làm cho kết quả công khai. Sau đó làm việc cùng với các thành viên khác trong nhóm để cải thiện kết quả.
Ví dụ, hãy xem xét rằng các thành viên trong nhóm mắc quá nhiều lỗi chính tả trong tên của các lớp, thành viên lớp và các biến. Điều này thật khó chịu. Làm thế nào bạn có thể đo lường điều đó? Với trình phân tích cú pháp, bạn có thể trích xuất tất cả các từ trong mã và sử dụng trình kiểm tra chính tả, xác định tỷ lệ các từ có lỗi và lỗi chính tả, giả sử 16,7%.
Bước tiếp theo của bạn là đồng ý với nhóm của bạn về tỷ lệ mục tiêu. Nó có thể là 15% cho lần chạy nước rút tiếp theo, 10% cho lần tiếp theo, 5% trong sáu tuần và 0% trong hai tháng. Các số liệu đó được tính toán lại tự động trên mỗi cam kết và được hiển thị trên màn hình lớn trong văn phòng.
Nếu bạn không đạt được tỷ lệ mục tiêu, nhóm của bạn có thể quyết định dành thêm thời gian để sửa lỗi chính tả. Hoặc nhóm của bạn có thể xem xét nó tốt hơn để tính tỷ lệ cho mỗi nhà phát triển và cũng hiển thị thông tin này trên màn hình lớn. Hoặc nhóm của bạn có thể thấy rằng mục tiêu quá lạc quan và bạn nên xem lại nó.
Nếu bạn đạt được tỷ lệ mục tiêu, bước tiếp theo là đảm bảo số lượng lỗi và lỗi chính tả sẽ không tăng theo thời gian. Vì vậy, bạn có thể tạo một tác vụ bổ sung trong bản dựng của mình để kiểm tra lỗi chính tả và không xây dựng nếu tìm thấy ít nhất một lỗi. Bây giờ bạn đã thoát khỏi vấn đề này, màn hình lớn của bạn có thể được sử dụng lại để hiển thị số liệu thống kê mới có liên quan.
Phần kết luận
Tôi tin rằng mọi khía cạnh được đề cập trong câu hỏi của bạn đều có thể được giải quyết thông qua các kỹ thuật tôi đưa vào câu trả lời của mình:
Khi các nhà phát triển khác tham gia dự án, tôi nhận thấy rằng họ sử dụng một kiểu mã hóa khác (đôi khi là một kiểu hoàn toàn khác)
Bạn phải thực thi kiểu tự động trên cam kết.
và thường không sử dụng các tính năng ngôn ngữ hiện đại như người truy cập thuộc tính (điều này tương đối mới trong Mục tiêu-C).
Cả hai đánh giá mã và đào tạo đều ở đây để chuyển kiến thức về ngôn ngữ của bạn.
Đôi khi, họ sẽ phát minh ra xe đạp của riêng họ thay vì sử dụng các tính năng tương tự của khung
Cả hai đánh giá mã và đào tạo đều ở đây để chuyển kiến thức của bạn về khung.
hoặc chuyển các khái niệm từ các ngôn ngữ lập trình hoặc patters khác mà họ đã học vào cơ sở mã của chúng tôi.
Đây là một điều tuyệt vời. Có vẻ như một cơ hội để bạn học hỏi từ họ.
Thông thường, họ không thể đặt tên phương thức hoặc biến chính xác vì tiếng Anh không tốt
Đánh giá mã cũng nên tập trung vào việc đặt tên thích hợp. Một số IDE cũng có trình kiểm tra chính tả.
Đôi khi tôi nghĩ rằng nếu nó không dành cho IDE thì tôi nghĩ họ sẽ viết tất cả mã mà không có sự thụt lề hay định dạng nào cả.
Tất nhiên họ sẽ. Phong cách nhàm chán và nên được tự động hóa.
Về cơ bản, tôi ghét mã họ viết.
Hãy nhớ từ phần đánh giá mã: Mục tiêu không phải là cho thấy nhà phát triển tệ đến mức nào. Mục tiêu là cung cấp cơ hội để cải thiện.
Nó được định dạng / tổ chức kém, và đôi khi hoàn toàn khác biệt với phần còn lại của dự án.
Kiểm tra kiểu tự động .
Tôi cảm thấy rất khó chịu khi họ thêm spaghetti của họ vào tác phẩm nghệ thuật của tôi
Đợi đã, cái gì?! Tác phẩm nghệ thuật?! Đoán xem cái gì? Một số người (bao gồm bạn trong sáu tháng) có thể thấy mã của bạn không phải là một tác phẩm nghệ thuật. Trong khi đó, hãy hiểu rằng coi tác phẩm của bạn là một tác phẩm nghệ thuật và tác phẩm của họ như là tào lao sẽ không giúp được ai. Bao gồm cả bạn.
Cảm giác ngày càng giống như họ không thể bận tâm để học hoặc không quan tâm: họ chỉ làm những gì được yêu cầu từ họ và về nhà.
Tất nhiên họ sẽ làm những gì được yêu cầu từ họ. Hãy nhớ: bối cảnh, không phải người và có được số liệu của bạn đúng . Nếu bối cảnh đòi hỏi từ họ để trở nên tốt nhất ở những gì họ làm, họ sẽ làm điều đó. Nếu bối cảnh yêu cầu sản xuất càng nhiều KLOC mỗi tháng càng tốt và không có gì nữa, họ cũng sẽ làm điều đó.