Lý do lập trình cặp


13

Tôi đã làm việc trong một vài cửa hàng nơi quản lý đã chuyển ý tưởng lập trình cặp cho tôi hoặc người quản lý / nhà phát triển khác và tôi không thể vượt qua nó. Từ quan điểm của nhà phát triển, tôi không thể tìm thấy lý do tại sao chuyển sang phong cách mã hóa này sẽ có ích, cũng như là người quản lý của một nhóm nhỏ tôi đã thấy bất kỳ lợi ích nào.

Tôi hiểu rằng nó giúp ích cho các lỗi cú pháp cơ bản và có thể hữu ích nếu bạn cần băm thứ gì đó, nhưng các nhà quản lý nằm ngoài vòng lập trình dường như tiếp tục xem đó là cách để các nhà thiết kế của họ không truy cập Facebook hoặc Reddit một công cụ thiết kế.

Là một người gần với tầng phát triển dường như không thể hiểu được từ một cuốn sách ném theo cách của tôi hoặc trang wiki về chủ đề này ... từ vị trí quản lý cấp cao, lợi ích của Lập trình cặp khi giao dịch với Scrum hoặc Agile là gì môi trường?


2
Tôi nghĩ rằng nó hữu ích trong các tình huống rất cụ thể. Nhưng là một mô hình phát triển chung, nó hơi vô dụng.
Ryan Kinal

4
Nó có thể phụ thuộc vào phần mềm, có thể tô màu cho quan điểm của bạn. Nếu bạn có rất nhiều vật dụng nhỏ và làm việc trên các phần mềm tùy chỉnh nhỏ khác nhau mỗi ngày, điều đó có thể không hữu ích. Nó trở nên cực kỳ đáng giá khi bạn giao dịch với một hệ thống doanh nghiệp lớn, nơi các nhà phát triển cần tính toán cho tầng trên toàn hệ thống được thực hiện bởi chức năng họ thực hiện. Viết một lớp có hiệu ứng dữ liệu được sử dụng ở hơn 30 địa điểm khác nhau thường có thể được lý giải tốt hơn bởi 2 người sẽ có các quy trình tinh thần khác nhau cho nó. Nó giống như một phương pháp monte carlo cho việc tìm kiếm trước khiếm khuyết.
Jimmy Hoffa

@JimmyHoffa Vì vậy, quá trình suy nghĩ chính là nếu chúng ta tìm thấy các lỗi trước khi chúng xuất hiện để kiểm tra chấp nhận, chúng ta có thể giảm đáng kể thời gian bị mất khi đánh giá mã / kiểm tra xuống dòng không?
Jeff Langemeier

3
@JeffLangemeier Nó thực sự còn hơn thế nữa; Nếu bạn thấy các lỗ hổng trong thiết kế của phần A1 của hệ thống con A trước khi A1 được viết bởi vì diễn ngôn tự nhiên xảy ra giữa hai nhà phát triển ở giữa triển khai hệ thống con A, bạn không chỉ tiết kiệm thời gian dành cho việc sửa lỗi A1 và các phần A5 và A7 phụ thuộc vào A1 (hoặc tìm thấy lỗi trong các phần phụ thuộc đó do tầng từ sửa lỗi A1), bạn đang tiết kiệm thời gian bằng cách không viết hoàn toàn phần xấu đó. Nó làm giảm thời gian thử nghiệm có, nhưng nó làm giảm thêm thời gian dev trong thời trang này.
Jimmy Hoffa

@MartinWickman Đây không phải là bản sao. Trong liên kết của bạn, họ thực sự đang tìm kiếm Nhược điểm, mặc dù tiêu đề đang yêu cầu Ưu và Nhược điểm. Ngoài ra, một câu trả lời kỹ lưỡng hơn về ưu điểm đã được đưa ra trong phần này; đến mức, có lợi cho cộng đồng khi có cái này ngay cả khi nó gần với cái kia.
Jeff Langemeier

Câu trả lời:


25

Một phần, nó phụ thuộc vào cách bạn đang làm lập trình cặp. Trong một số trường hợp, trình điều khiển của cặp đang viết mã, trong khi thành viên thứ hai của cặp đang quan sát và thảo luận về chi tiết thiết kế và triển khai của hệ thống. Một trường hợp khác của lập trình cặp bao gồm cả hai người viết mã đồng thời - một người đang viết chức năng đã thực hiện và người còn lại đang tích cực phát triển và viết mã kiểm tra ở cấp độ đơn vị và tích hợp, một lần nữa thảo luận về chi tiết thiết kế và triển khai của hệ thống.

Bất kể loại lập trình cặp, nó có hiệu quả như là một đánh giá mã liên tục . Bạn có hai mắt nhìn mã, theo dõi các lỗi trước khi chúng thoát vào môi trường thử nghiệm hệ thống / chấp nhận sau này hoặc trường. Bạn cũng có hai người hiểu rất rõ một phần cụ thể của hệ thống, để phục vụ như một sự dự phòng để giảm thiểu yếu tố xe buýt của bạn . Cả hai đều bắt lỗi sớm và truyền bá kiến ​​thức hệ thống xung quanh nhóm giúp giảm chi phí xây dựng hệ thống.

Việc truyền bá kiến ​​thức không chỉ giới hạn ở kiến ​​thức kỹ thuật của nhóm. Tùy thuộc vào cặp đôi này, nó có thể cho phép thông tin chuyển giữa một thành viên cao cấp hơn của công ty sang một thành viên mới về những thứ khác vượt qua dự án - phong cách mã hóa, văn hóa công ty, kỳ vọng, v.v. Nó cũng có thể cho phép ai đó quen thuộc hơn với công nghệ hoặc công cụ chia sẻ kiến ​​thức của họ về công nghệ hoặc công cụ đó trong môi trường ứng dụng trong thế giới thực.

Như bạn đã đề cập, nó cũng giúp giữ cho các nhà phát triển tập trung và theo dòng chảy . Ngoài dòng chảy, nhiều cá nhân ít có khả năng làm gián đoạn nhiều người làm việc trên một cái gì đó hơn là một cá nhân làm việc trên một cái gì đó. Nếu bạn đi bộ qua bàn của ai đó và họ đang làm việc một mình, nhưng bạn cần nói chuyện với họ, bạn có thể gõ và nói chuyện với họ. Điều này ít có khả năng nếu bạn thấy hai hoặc nhiều người cùng hợp tác hoặc có một cuộc thảo luận - bạn sẽ không làm gián đoạn họ. Gián đoạn tốn thời gian, và dành nhiều thời gian hơn có nghĩa là chi phí cao hơn. Đó là vì lợi ích tốt nhất của doanh nghiệp để tối đa hóa năng suất của nhân viên.

Tuy nhiên, có một số thách thức phải vượt qua để làm cho lập trình cặp khả thi. Xem xét những thứ như đụng độ tính cách hoặc chọn các cặp để phân phối kiến ​​thức đúng cách. Cũng có xem xét chính xác khi nào cần xoay cặp. Việc lập trình cặp được thực hiện một cách ngớ ngẩn có lẽ sẽ không hiệu quả như kế hoạch đã được lên kế hoạch. Tùy thuộc vào trang điểm của nhóm của bạn, có thể không hiệu quả để ghép đôi mọi người.


+1 cho câu trả lời tuyệt vời. Tôi vẫn không thích ý tưởng này, nhưng bạn trình bày lợi ích của nó rất tốt.

Tôi thích cách cắt của ông chủ của bạn, lời giải thích này thực sự làm cho điều này cảm thấy khả thi.
Jeff Langemeier

9
Tôi thích một mô hình lai trong đó các cặp đôi đặc biệt hơn dựa trên nhu cầu hiện tại. Ngoài ra, có những lúc làm việc một mình hiệu quả hơn và có những lúc làm việc với đối tác tốt hơn. Bị ép buộc thành cặp vĩnh viễn có vẻ độc đoán và không linh hoạt đối với tôi.
jfrankcarr

Câu trả lời rất hay. Tôi cũng là một lập trình viên trong một nhóm nhanh nhẹn và chúng tôi làm rất nhiều việc ghép đôi. Lúc đầu, chúng tôi cũng hoài nghi, chúng tôi nghĩ rằng làm việc một mình là cách tốt nhất để đi. Hơn, tại một số điểm trong sự phát triển của nhóm, chúng tôi áp đặt lập trình cặp. KHÔNG mã sản xuất đã được cam kết nếu không được lập trình cặp. Đây là một thực thi nhân tạo của khái niệm ghép đôi nhưng nó đã giúp ích rất nhiều cho đội. Cuối cùng, sau khi tất cả chúng ta đã quen với kỹ thuật này và chúng tôi đã thay đổi vị trí của mình và chúng tôi đang hợp tác với nhau và chủ yếu là khi việc triển khai phức tạp hơn hoặc dễ bị lỗi.
Patkos Csaba

@jfrankcarr, thậm chí không ai đề xuất các cặp vĩnh viễn; Tôi không chắc bạn đã nghĩ ra ý tưởng đó ở đâu. (Lưu ý rằng câu trả lời này đã đề cập cụ thể "khi nào nên xoay cặp".) Nhóm của chúng tôi thấy rằng việc giữ hai người giống nhau trong hơn một hoặc hai ngày là một ý tưởng thực sự tồi tệ. bạn bắt đầu đi vào lối mòn Một số đội xoay vòng mỗi giờ rưỡi (liên kết PDF).
Joe White

3
  1. Ít lỗi hơn trong mã cuối cùng (hiệu quả)
    Không thay thế hoàn toàn các đánh giá mã nhưng hiệu quả cao để có được mọi thứ ngay từ sớm. Có nghiên cứu ngoài đó có điểm theo hướng đó.

  2. Hoàn thành nhanh hơn (hiệu quả)
    Có một số nghiên cứu chỉ ra điều này. Khi nói đến các tính năng phức tạp, 2 đầu đơn giản là hiệu quả hơn. Kinh nghiệm trong Ghép đôi là phải cho điều này.

(lưu ý: Đây là doanh số bán hàng của bạn cho người quản lý: Về mặt tài chính là một quyết định lành mạnh vì bạn nhận được số lượng lỗi thấp hơn và hiệu quả hơn bằng cách hoàn thành nhanh hơn)

  1. Dạy
    học cơ sở Bạn có thể thêm một học sinh trực tiếp vào một lập trình viên giàu kinh nghiệm hơn. Nếu bạn có một nhóm người mới bắt đầu tuyệt đối, thật dễ dàng để đi xung quanh và để họ, như các cặp, tìm ra những điều cơ bản. Dán xung quanh và đưa ra lời khuyên. Khái niệm này rõ ràng rất cũ và bắt nguồn từ sự khéo léo.

3

Trả lời nhanh: hầu hết các lợi ích và chi phí được đăng trong Wikipedia , tuy nhiên, hãy xem xét từ góc độ khác nhau.

Tôi muốn đề cập đến các trường hợp cụ thể về lợi ích lập trình cặp áp dụng cho môi trường phát triển nhanh / scrum, được lấy từ bài đăng trên blog :

Thành công hay thất bại của phần mềm phụ thuộc vào chất lượng của nó và Lập trình cặp trực tiếp cải thiện chất lượng theo nhiều cách. Khi hai nhà phát triển làm việc cùng nhau, chất lượng mẫu thiết kế được cải thiện khi cặp phát triển mã ngắn, đơn giản và dễ duy trì với ít lỗi hơn. Lỗi là một mối quan tâm chất lượng chính trong phát triển phần mềm; với hai bộ mắt viết mã, nhiều lỗi được bắt gặp hơn, do đó giảm chi phí phát triển. Lỗi phát hiện muộn trong quá trình phát triển thường tốn kém để sửa chữa. Phát hiện sớm các lỗi phần mềm ngăn ngừa và giúp ngăn chặn các vấn đề khó khăn. Sự phức tạp thường nảy sinh trong lập trình và hai bộ óc làm việc để giải quyết vấn đề cùng nhau có thể thấy nhiều lựa chọn hơn và đưa ra kết luận nhanh hơn một.

Tóm tắt:

  • Thúc đẩy giao tiếp nhóm
  • Thúc đẩy chuyển giao kiến ​​thức ứng dụng hiệu quả
  • Thúc đẩy trách nhiệm giải trình về phương pháp thiết kế
  • Kết quả tốt hơn, dễ duy trì mã
  • Giúp loại bỏ mã lỗi trong giai đoạn đầu của nó
  • Tăng năng suất của nhóm vì các thành viên trong nhóm sẽ có sự chú ý không phân chia trong quá trình mã hóa
  • Cải thiện kỹ năng giao tiếp và hợp tác của các thành viên trong nhóm
  • Xây dựng tình bạn tại nơi làm việc
  • Làm cho công việc vui vẻ hơn

When two developers work together design pattern quality improves-> cụm từ đó không có ý nghĩa gì cả. Ít nhất là không có ý nghĩa hơn When two bakers work together wheat quality improveshoặc When two race drivers work together asphalt quality improves.
phresnel

Đó là một trích dẫn từ blog mà bạn có thể xem xét. Tuy nhiên, mục đích của tôi là nhấn mạnh tập trung tốt hơn vào thiết kế kỹ thuật & chất lượng mã, với một số loại trách nhiệm, vì mỗi nhà phát triển cố gắng tự hào về mã được tạo.
Yusubov

2

Có một vài lợi ích cho lập trình cặp:

  • Hai lập trình viên có thể hợp tác thiết kế cùng nhau, có khả năng tạo ra kiến ​​trúc / mã tốt hơn - hai cặp mắt có thể phát hiện ra lỗi
  • Kiến thức tổ chức được bảo tồn tốt hơn - nếu một lập trình viên rời khỏi hoặc không có sẵn, người kia sẽ có thể tiếp tục công việc mà không mất nhiều năng suất
  • Đó là một cách để nhanh chóng đào tạo các nhà phát triển mới - ghép họ với một thành viên có kinh nghiệm trong nhóm phát triển và họ sẽ có thể trải nghiệm cơ sở mã theo quan điểm của một cựu chiến binh của nhóm
  • Kỷ luật tốt hơn - các lập trình viên được ghép đôi có khả năng làm việc hiệu quả trong một khoảng thời gian dài hơn, vì người này hoặc người kia có thể đảm nhận các hoạt động bùng nổ. Các tác vụ tiềm năng tẻ nhạt, như thử nghiệm đơn vị, có thể được bỏ qua ít thường xuyên hơn so với các nhà phát triển solo.

Wikipedia cũng có một bản tóm tắt tốt đẹp về chi phí và lợi ích trong mục wiki .

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.