Có cách nào để hỗ trợ các kiểu mã hóa khác nhau trong một nhóm phát triển không


13

Vấn đề: Hai nhà phát triển => ba ý kiến ​​về sự cố định, niềng răng trên dòng mới hay không, v.v.

Chúng tôi thường làm việc với ba hoặc bốn người trong các dự án của chúng tôi và mỗi người trong số họ có phong cách mã riêng. Tôi biết, giải pháp chung là đồng ý về kiểu mã, mọi người đều phải sử dụng, nhưng tôi không muốn buộc các lập trình viên sáng tạo trong bộ đồ không phù hợp với họ.

Vì vậy, câu hỏi là: Có cách nào để mỗi lập trình viên sống theo phong cách riêng của mình, nhưng có một cơ sở mã chung trong kho lưu trữ không? Tôi nghĩ về một số plugin git / svn / bất cứ thứ gì, thay đổi giữa phong cách cá nhân và phổ biến khi thanh toán và cam kết. Tôi nhận thấy rằng phần khó khăn trong phương pháp này là hỗ trợ các khác biệt chính xác giữa các phiên bản của một tệp


1
Có các trình định dạng mã tự động có sẵn cho hầu hết các ngôn ngữ, nhưng đối với một số (ví dụ C ++), chúng cực kỳ khó tạo ra độ tin cậy hoàn toàn vì sự phức tạp của việc phân tích ngôn ngữ.
Joris Timmermans

5
Thực sự là một ý tưởng tồi. Yêu cầu nhóm của bạn đưa ra một tiêu chuẩn đồng thuận, sau đó làm cho họ áp dụng nó. Nếu một số rượu, nói với họ để lớn lên một chút.
Clement Herreman

8
Có lẽ nhận xét cực kỳ phổ biến khác cần phải được thực hiện ở đây: có vấn đề thực sự với sự khác biệt trong phong cách mã? Đừng sửa cái gì đó không bị hỏng!
Joris Timmermans

5
"nhưng tôi không muốn buộc các lập trình viên sáng tạo trong bộ đồ không phù hợp với họ" - nếu lập trình viên của bạn không thể thích nghi với những điều đơn giản như thụt lề hoặc thay đổi kiểu giằng, bạn cần thuê các nhà phát triển tốt hơn. Một khi bạn sử dụng một phong cách mới trong một hoặc hai tuần, bạn sẽ quên nó.
Mike Weller

4
@MikeWeller Không thể tranh luận ngược lại? Các quy ước đặt tên là điều duy nhất tôi từng coi là quan trọng vì nó giúp dễ dàng xác định mục đích của một vật bên ngoài bối cảnh định nghĩa của nó. Miễn là ai đó tạo kiểu một cách nhất quán cho sự rõ ràng về nơi các khối làm tổ, bắt đầu và kết thúc, tôi chưa bao giờ hiểu tại sao nó phải là một vấn đề lớn như vậy.
Erik Reppen

Câu trả lời:


20

Không, bạn sẽ cần phải làm cho một tiêu chuẩn. Nếu bạn có thay đổi thành viên nhóm B (bằng công cụ IDE tự động hoặc thủ công), cả đống thành viên nhóm mã A đã viết, điều đó sẽ được cam kết và hiển thị dưới dạng thay đổi.

Đây là điều mà hầu hết mọi đội bóng phải đối mặt và các tiêu chuẩn bị "ép buộc" vì chính lý do này. Tôi sẽ đề nghị bạn tuân theo các tiêu chuẩn của cơ quan ngôn ngữ làm cơ sở và áp dụng chúng cho phù hợp với nhóm của bạn.

Có một phong cách mã hóa nhất quán cũng sẽ giúp duy trì khả năng duy trì của dự án và giảm rào cản gia nhập cho những người mới làm việc với mã.


11

Không, bạn sẽ cần xác định một tiêu chuẩn mã hóa (tốt nhất là một tiêu chuẩn đã tồn tại) và để các nhà phát triển của bạn tuân thủ nó. Trở thành một lập trình viên chuyên nghiệp có nghĩa là bạn có thể thích nghi với mọi tiêu chuẩn mã hóa được sử dụng trong dự án mà bạn đang làm việc.


2
+1. Hãy để họ chọn một, nhưng làm cho họ áp dụng nó.
Clement Herreman

Tôi muốn định dạng là một phần của tiêu chuẩn của ngôn ngữ lập trình, sao cho các chương trình không chỉ là "hợp lệ" hoặc "không hợp lệ", mà còn có trạng thái thứ ba là "hợp lệ và được định dạng tốt".
JesperE

4
đó là (ít nhiều) trường hợp ở python, trong đó thụt lề là một ngữ nghĩa ngôn ngữ.
Clement Herreman

2
Go không thực thi nghiêm túc như vậy, nhưng đi kèm với một công cụ định dạng mã nguồn tích hợp , go fmt. Xem golangtutorials.blogspot.fr/2011/06/ từ
Clement Herreman

1
@JesperE Điều đó được triển khai trong Python với PEP8 và công cụ tương ứng, có tên là pep8 .
phihag

8

CÓ, nó có thể hoạt động miễn là các kiểu đều hợp lý và mọi người không đi xung quanh thay đổi mã của người khác để phù hợp với sở thích của họ và / hoặc trộn các kiểu trong một tệp mã.
Điều đó không lý tưởng, nhưng nó không khác gì việc kế thừa mã cũ được tạo thành một "tiêu chuẩn" khác với chính bạn và phải tích hợp nó với cơ sở mã của bạn.
Vì vậy, nếu bạn phải làm điều đó, một số hướng dẫn:

  • không thay đổi mã theo kiểu khác nhau để phù hợp với sở thích của bạn, nó tốn thời gian và gây ra lỗi
  • vẫn nhất quán trong bất kỳ tập tin duy nhất. Vì vậy, nếu kiểu A được sử dụng để viết nó ban đầu, mọi người sẽ sử dụng kiểu A khi sửa đổi nó
  • hãy tạo một tiêu chuẩn chung cho giao diện chung của bạn, vì vậy đối với mọi thứ tiếp xúc với bên ngoài (và vâng, các thành phần phụ khác của hệ thống là bên ngoài).

2
Tôi muốn thêm rằng các nhà phát triển chuyên nghiệp thường có xu hướng hợp nhất các phong cách của nhau. Họ sẽ có các cuộc thảo luận không chính thức ngắn về một số điểm và đi đến thỏa thuận.
Joris Timmermans

Các công trình tuyệt vời, với sự cảnh báo rằng việc sử dụng định dạng lại mã tự động cần phải được giữ ở mức tối thiểu (nếu không bị cấm hoàn toàn).
grahamparks

2
"không thay đổi mã theo kiểu khác nhau để phù hợp với sở thích của bạn, nó tốn thời gian và gây ra lỗi" - hoàn toàn ngược lại - khớp với một tiêu chuẩn không tự động bằng tay rất lãng phí thời gian, chạy một trình định dạng mã, cam kết thay đổi là 'được định dạng với các tùy chọn - bất cứ điều gì "sau đó thực hiện các thay đổi chức năng nhanh hơn nhiều.
Pete Kirkham

Tôi nghĩ rằng câu trả lời này thực sự có thể đã bỏ lỡ phần "định dạng tự động" của câu hỏi?
Joris Timmermans

Một loạt các kiểu giữa các tệp khó xử lý hơn nhiều so với việc chỉ có một kiểu nhất quán.
Andy

4

Câu trả lời ngắn gọn là không.

Mặc dù các ý kiến ​​sẽ được coi trọng trong công việc, đặc biệt là trong một công việc dựa trên kiến ​​thức như Phát triển phần mềm, các nhà phát triển phải nhận ra rằng một ý kiến ​​chỉ là ý kiến ​​và họ ở đó để viết phần mềm không tranh luận về tiêu chuẩn thụt dòng nào là tốt nhất.

Mục tiêu của một tài liệu tiêu chuẩn nên là thực thi / đề xuất một tập hợp các tiêu chuẩn / quy ước mã hóa phổ biến nhằm giải quyết

  1. Các mục Bố cục như tab, thụt lề, sử dụng {, (,
  2. Tên biến, đối tượng và chức năng, ví dụ như CamelCase, ký hiệu Hungary
  3. Xử lý ngoại lệ cách thức / thời gian / địa điểm được thực hiện
  4. Mã nhận xét. Bạn có luôn tham khảo tài liệu thiết kế, số lỗi không?

Các tài liệu tiêu chuẩn giúp đảm bảo rằng mã dễ đọc, duy trì và nhất quán trong các quy ước của nó.

Điều này là vô giá khi xem xét mã trước khi đăng ký, gỡ lỗi mã của ai đó hoặc sửa đổi mã vài năm sau khi nhà phát triển ban đầu rời khỏi công ty.

Thông thường khi tạo tài liệu Tiêu chuẩn mã hóa, tôi xem xét các tiêu chuẩn ngành cho ngôn ngữ tôi đang sử dụng (C, C #, SQL), sử dụng các tiêu chuẩn phù hợp nhất, lưu hành cho các nhà phát triển cao cấp / có ảnh hưởng nhất để bình luận, kết hợp các nhận xét khi thích hợp và sau đó phát hành tài liệu.


1
Trong thực tế, nhiều cửa hàng có một nhà phát triển thường là Old Hand hoặc PrimaDonna, người dường như rất vui mừng khi tạo ra Cuộc chiến Thánh định dạng cho những người còn lại để đối phó. Chuyên nghiệp == Dù tôi nói gì. Dù các bạn nói gì == Không chuyên nghiệp. Và rồi nó phá hủy. Tôi đã thấy các tiêu chuẩn mã hóa bắt buộc những thứ thô thiển như "Sử dụng nhiều biến toàn cục, không bao giờ tạo các lớp mới, tránh lập trình hướng đối tượng bằng mọi giá và không thay đổi bất cứ điều gì, bao giờ". Đáng buồn thay, không có giới hạn cho những gì mọi người cố gắng nhồi nhét vào phạm vi của một cái gì đó gọi là "Tiêu chuẩn mã hóa".
Warren P

4

Về mặt lý thuyết, việc tự động định dạng lại mã trước khi cam kết với hệ thống kiểm soát phiên bản của bạn là có thể.

Tuy nhiên , có một vấn đề lớn: các công cụ định dạng mã tự động không đáng tin cậy 100%. Vì vậy, bạn thực sự có thể giới thiệu các vấn đề trong mã của bạn với hệ thống này. Trong tâm trí của tôi, điều đó giết chết ý tưởng. Luôn luôn quan trọng để có mã chức năng hơn mã được tạo kiểu đúng!

Nếu dự án được ngăn xếp và hầu hết các phần của mã có xu hướng được "sở hữu" bởi các lập trình viên riêng lẻ, thì có thể cho phép họ sử dụng các kiểu riêng của họ (theo lý do). Tuy nhiên, nếu một số người thường xuyên làm việc trên cùng một đoạn mã, có lẽ cần phải thực thi một kiểu.

Đây là một cuộc thảo luận tương tự về Stack Overflow .


2
Lưu ý câu trả lời được chấp nhận trên các cuộc thảo luận liên kết quá!
Joris Timmermans

1

Mã định dạng lại tự động một chiều có thể là một giải pháp khả thi nếu bạn:

  1. Tìm một bộ lọc tự động thực sự hoạt động cho quy ước bạn muốn thực hiện và ngôn ngữ lập trình của bạn.
  2. Có thể thực hiện trước khi cam kết để việc định dạng lại không hiển thị trong nhật ký thay đổi được trộn lẫn và không thể phân biệt với các thay đổi chức năng thực tế.
  3. Quản lý để khiến nhóm của bạn đồng ý về việc nên áp dụng quy ước nào (vì nói chung, không có "đường quay lại" khi trả phòng theo sở thích cá nhân của nhà phát triển, ít nhất là tôi không biết).

Không ai trong số đó thực sự dễ làm trong nhiều trường hợp, vì vậy hãy cân nhắc chọn các trận đánh của bạn ở đây! Tôi đã thấy các nhóm thực hiện thành công điều này cho một dự án C # /. NET nơi việc định dạng lại đã xảy ra trên PC của nhà phát triển, do đó, trong một số trường hợp có thể xảy ra.


1

hoàn toàn bạn có thể Đó là tất cả về không đổ mồ hôi những thứ nhỏ.

Tiêu chuẩn duy nhất quan trọng là "giữ cho các thay đổi của bạn có cùng kiểu với mã hiện có". Miễn là bạn có thể phù hợp với phong cách mã hóa không phải là kiểu ưa thích của bạn, thì bạn có thể làm việc với bất kỳ kiểu mã hóa nào.

Vì vậy, vấn đề lớn về làm việc theo 3 phong cách khác nhau trong cùng một công ty. Các nhà phát triển của bạn cần hiểu điều này, rằng viết mã theo cách họ thích là tìm mã của họ nhưng một khi họ thay đổi tệp khác sử dụng một kiểu khác, họ phải duy trì kiểu đó (hoặc nó sẽ thực sự trông tệ) . Không cho phép định dạng lại (hoặc họ sẽ chỉ định dạng lại liên tục và scm diffs sẽ vô dụng) (và nếu bạn làm điều này, thì nên sử dụng định dạng tự động).

Rất có thể, một khi họ bắt đầu với điều này, họ sẽ đi đến một sự đồng thuận về việc sử dụng phong cách nào hoặc phong cách của họ sẽ trôi cùng nhau trong hầu hết các phần. Nếu họ sẽ trẻ con về điều đó và sẽ định dạng lại mã cho nhau mọi lúc, thì đã đến lúc tải xuống một tiêu chuẩn từ internet và yêu cầu họ sử dụng nó. Dù sao thì bạn cũng có thể muốn làm điều này, chỉ cần vẫy nó vào mặt họ như một lá bài "chơi đẹp hay khác".

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.