it-swarm-vi.com

Khi nào lập trình cặp làm việc? Khi nào nên tránh?

Thay vì lập trình cặp đôi mọi lúc, chúng tôi sử dụng lập trình cặp một cách có chọn lọc trong nhóm của chúng tôi. Tôi nghĩ rằng nó hoạt động tốt nhất trong các trường hợp sau đây:

  • Tăng cường các thành viên nhóm hoàn toàn mới trong một dự án (thay vì để họ tự mình lội qua tài liệu hoặc mã).
  • Có những người đàn em và đàn anh làm việc cùng nhau (giúp thể hiện một số kỹ năng và thủ thuật của các nhà phát triển có kinh nghiệm hơn, cộng với nó cho phép những con chó già đôi khi học được những mánh mới).
  • Khi ai đó đang cố gắng theo dõi một khiếm khuyết, nó thường giúp ghép đôi với một đôi mắt mới.

Khi nào nên sử dụng chương trình cặp và tại sao?

Khi nào cần tránh lập trình cặp? Tại sao?

55
Paddyslacker

Nghiên cứu được biên soạn bởi Laurie Williams chỉ ra rằng lập trình cặp hoạt động tốt nhất trong các nhóm công nghiệp khi

  • Các cặp làm việc trên đặc điểm kỹ thuật, thiết kế và phức tạp nhiệm vụ lập trình - các thử nghiệm chỉ ra rằng không có cải thiện chất lượng nào được hiển thị khi làm việc trên nhiệm vụ đơn giản trong một cặp nhưng có thể có cải thiện tốc độ. Cũng lưu ý rằng cặp "lập trình" thường bao gồm các hoạt động khác ngoài viết mã.
  • Mỗi ​​cá nhân trong một cặp có cùng trình độ chuyên môn - trong khi lập trình cặp rất tốt cho đào tạo, các cặp tham gia nhiều nhất khi họ về cùng một cấp độ.
  • Vai trò xoay thường xuyên - quay thường xuyên giúp giữ cho phi công phụ hiện tại tham gia vì các cá nhân có xu hướng đóng góp nhiều nhất khi họ lái xe hoặc cảm thấy họ sắp lái.
  • Các cặp xoay thường xuyên - các nhóm đã bày tỏ sự thoải mái khi biết về các phần khác nhau của hệ thống mà họ đang xây dựng. Xoay vòng giúp chuyển giao kiến ​​thức giúp giảm rủi ro nhất định trong dự án. Trong một môi trường học thuật, các cặp thường được chỉ định, tuy nhiên ngành công nghiệp thường được tự gán thường xuyên trong thời gian đứng. Trong cả hai trường hợp, cặp có hiệu quả nhất khi cả hai cá nhân đều là những người tham gia sẵn sàng nhìn thấy giá trị trong hoạt động ghép nối.

Theo kinh nghiệm cá nhân của tôi, tôi đã thấy rằng nhóm XP của tôi dành trung bình khoảng 60% cho việc lập trình cặp thời gian phát triển của chúng tôi. Phần còn lại của thời gian dành cho việc phát triển cá nhân. Không có gì lạ ghép nối để tạo ra một thiết kế ban đầu, làm việc một mình trên thiết kế trong vài giờ, sau đó quay lại với nhau để hoàn thành các phần khó khăn hoặc khó khăn của mã.

Tôi cũng thấy rằng lập trình cặp có hiệu quả nhất trong các khối khoảng 1,5 đến 2,5 giờ. Bất cứ điều gì ít hơn có xu hướng đòi hỏi quá nhiều chi phí để thiết lập trong khi nhiều hơn và các cặp có xu hướng trở nên cáu kỉnh và mệt mỏi. Cranky và mệt mỏi có nghĩa là bạn không giao tiếp tốt và có thể để các khiếm khuyết lọt vào hệ thống.

47
Michael

Lập trình cặp đã làm việc cho tôi trong rất, rất ít tình huống.

Trường hợp lập trình cặp thất bại cho tôi

Câu chuyện ngắn là lập trình cặp không làm việc với tôi như là cách chính để phát triển phần mềm. Tôi có thể ghép nối chương trình trong một ngày hoặc có thể một tuần, đặc biệt nếu chúng tôi tập trung vào một vấn đề cụ thể. Nhưng sau đó thì? Tôi đã xong. Bánh mì nướng. Tôi không muốn gặp bất cứ ai, nói chuyện với bất cứ ai và tôi cần ít nhất một vài ngày trong hang động cho đến khi tôi phù hợp với công ty con người một lần nữa.

Đó là một câu chuyện buồn, nhưng điều buồn cười là bây giờ tôi vui hơn rất nhiều với cách nó kết thúc. Tôi vui vẻ làm việc trong một hợp đồng nơi tôi làm việc ở nhà hoặc từ một quán cà phê, và tôi đã kết bạn và khám phá nhiều hơn về San Francisco hơn tôi từng nghĩ. Tôi có một chiếc xe đạp và máy tính xách tay, và miễn là tôi đáp ứng thời hạn và kiểm tra mã thường xuyên, thời gian của tôi là của riêng tôi.

Tôi sẽ liệt kê những vấn đề lớn mà tôi gặp phải khi lập trình cặp trước và cung cấp cho bạn chi tiết và giai thoại sau.

  1. Tách tập trung.
  2. Không thử nghiệm.
  3. Không có nốt cao.
  4. Không tự hào về quyền sở hữu.
  5. Không lối thoát ...

... Tôi đã hỏi các đồng nghiệp của mình rằng họ có thấy những gì tôi thấy không, nếu tôi thiếu thứ gì đó, bất cứ điều gì - tôi đã không thấy cách này có thể hoạt động, làm thế nào mọi người có thể tiếp tục làm điều này. Họ nói rằng tôi đang làm tốt, rằng nó chỉ mất thời gian để ổn định và điều chỉnh. Đó là khó khăn cho tất cả mọi người lúc đầu.

Cuối cùng, tôi rút lui vào chính mình. Giữa những cơn đau đầu chói mắt, mất ngủ và dồn nén, không cần phải viết mã, tôi ngừng đáp ứng với đầu vào. Tôi có thể nhìn chằm chằm vào một màn hình và không thấy gì cả. Ai đó có thể nói chuyện với tôi một cách bất ngờ và tôi sẽ nghe họ nói. Tôi đã hoàn thành các yêu cầu vẹt trong công việc của mình, nhưng tôi đã ở đó. Tôi đã sử dụng hết tất cả những gì tôi vừa xuất hiện trong ngày. Tôi bắt đầu kiểm tra iPhone của mình khi đối tác khác của tôi đang gõ.

Cuối cùng - chỉ ngại ba tháng sau, và lần đầu tiên - tôi đã bị sa thải vì không phù hợp với đội khi lập trình cặp.

Không cô đơn

Tôi đã viết điều này không chỉ để hiểu nó, mà còn để có thể nói về nó. Có một giả định rằng lập trình cặp hoạt động với hầu hết mọi người và dễ dàng và nhanh hơn nhiều so với lập trình solo. Điều này có thể hoặc không phải là trường hợp, nhưng như một thực tế lâu dài, lập trình cặp không làm việc với tôi. Có nhiều người khác cho rằng lập trình cặp đôi cũng không hoạt động. Chúng tôi cũng quan trọng ...

34
Will Sargent

Nhóm của tôi đã thực hiện lập trình cặp kể từ khi thành lập, rất lâu trước khi tôi làm việc ở đó, như là một phần của cửa hàng kiểu "lập trình cực đoan". Lập trình cặp là trạng thái mặc định ; mọi người chỉ thực sự đi đơn lẻ nếu có một số lẻ, hoặc đôi khi để điều tra, đặc biệt là những người sẽ liên quan đến việc gây rối với các thiết bị thù địch và cố gắng làm cho nó hoạt động.

"Thiếu niên/cao cấp" không phải là cách duy nhất để đi. "Trung cấp/thiếu niên" là hữu ích; nó giúp anh chàng trình độ trung cấp tổng hợp kiến ​​thức anh ta có được bằng cách buộc anh ta truyền đạt nó cho người khác. "Trung cấp/Trung cấp" thách thức hai người làm việc cùng nhau để chia sẻ kiến ​​thức, giao tiếp và làm việc như một phần của một nhóm. Và ngay cả khi bạn có hai người thực sự cao cấp, rất có thể họ có các lĩnh vực chuyên môn khác nhau và có thể đưa ra các phương pháp khác nhau. Các khía cạnh chia sẻ kiến ​​thức không kết thúc một khi ai đó mơ hồ "tăng tốc" trong một dự án. Thay vào đó, lập trình cặp là mẫu mực của một tổ chức học tập . Các kỹ thuật mới và thực hành tốt nhất lan truyền nhanh chóng.

Lập trình cặp cũng giúp duy trì chất lượng của mã (ít lỗi hơn) và độ tinh khiết của mã (nó không chỉ làm những gì nó dự định, mà còn làm những gì nó nên ... lý tưởng mà không đi xuống một hố thỏ nhiều tuần làm điều sai trái, hoặc hai điều đúng khác nhau sẽ xung đột dữ dội). Nó giúp các lập trình viên duy trì sự tập trung của họ: ở trung tâm Thung lũng Silicon, nơi làm việc của tuần làm việc 80 giờ, chúng tôi có thể làm việc chỉ 40 giờ một tuần vì chúng tôi đang thực hiện mã hóa mạnh mẽ trong tám giờ mỗi ngày, chuyển đổi mọi thứ tắt với nhau. (Ngoài ra, nếu bạn làm lập trình cặp lâu hơn, có lẽ bạn sẽ bỏ đi. Hoặc ít nhất là kiệt sức.) Điều này rất tốt cho cân bằng công việc/cuộc sống và nó cũng giúp tổ chức của bạn khi điều quan trọng là phải quay vòng nhanh (đặc biệt là quay vòng có độ trễ thấp).

Đó không phải là tất cả, hoàn toàn, 100% đào và kem; Tôi thấy rằng lập trình cặp đôi khi là một trở ngại đối với việc tôi áp dụng các quy trình não trực quan rất hữu ích cho một số vấn đề nhất định. Gần đây nhất, trong một nhiệm vụ rò rỉ bộ nhớ, tôi đã dành thời gian cả có và không có cặp; không có ai, tôi cảm thấy thoải mái hơn khi loay hoay và thử các thí nghiệm mà không thực sự biết chính xác làm thế nào để giải thích những gì tôi đang làm bất cứ lúc nào. Ngoài ra còn có một số lợi thế khi làm việc đơn lẻ, có thể đi tiếp tuyến và thực hiện các phép tái cấu trúc hoang dã nhất định (có giá trị trong phương pháp XP) trong một ý thích bất chợt.

Nhưng tất cả đã nói, lợi ích vượt xa chi phí và việc ghép đôi đã mang lại kết quả tốt cho chúng tôi: từ giai đoạn khởi nghiệp cho đến khi mua lại bởi một công ty lớn hơn và sự hội nhập sau đó của chúng tôi. (Nói về điều đó, lập trình cặp đã hỗ trợ chúng tôi duy trì sự liên tục của văn hóa thông qua việc mở rộng và mặc dù có một ít doanh thu).

(Chúng tôi phát triển một thiết bị phần mềm trong Perl, ~ $ 4.000 - $ 40.000 giá niêm yết.)

10
user2348

Tôi chưa bao giờ làm việc trong một thiết lập "Lập trình cặp" và tôi có thể tuyên bố rằng mình là một phần trong ba trường hợp bạn đã liệt kê. Kịch bản mà bạn đề cập có vẻ "lập trình thông thường" hơn với các giai đoạn trợ giúp/đào tạo được đưa vào. Chúng ta đã không làm tất cả những điều này trước khi "lập trình cặp" ra đời? Lập trình theo cặp, tôi cho rằng sẽ yêu cầu một cách tiếp cận tận tâm hơn trong đó quá trình chia sẻ trong một nhóm không dừng lại ngay khi bạn giải quyết công việc hoặc vấn đề tức thời. Nhưng đây là những gì tôi "nghĩ" chứ không phải những gì tôi "biết".

Cá nhân cho lập trình cặp Tôi muốn làm việc trong một nhóm nơi tôi có cơ hội học hỏi và chia sẻ kiến ​​thức của mình. Một nhóm không cân bằng mà tất cả mọi người bạn làm việc với là dặm phía trước của bạn, hoặc sau đó cách dưới mệnh có thể nhận được khá không thú vị khá nhanh chóng. Ngoài ra, tôi sợ làm việc với những người có niềm tin và khó thuyết phục.

4
Preets

Chúng tôi đã thử nghiệm lập trình Pair trong nhóm của chúng tôi trong vài tháng qua. Tôi cảm thấy nó khá hữu ích khi bạn đang làm việc trên một cái gì đó mới (công nghệ mới, tính năng mới, v.v.) khi bạn có thể nhanh chóng nảy ý tưởng với một người khác trong nhóm và xác nhận/vô hiệu hóa chúng. Ngoài ra, một đánh giá ngang hàng giúp ngăn chặn lỗi.

Một đồng đội khác đã thử sử dụng lập trình cặp với một bài kiểm tra để thực hiện ATDD và họ khá hài lòng với kết quả (theo tính toán của anh ta, việc tăng 20% ​​chi phí phát triển dẫn đến giảm khoảng 50% thời gian kiểm tra)

2
Amit Wadhwa

Chúc ngủ ngon

nhiều lần chúng tôi đã tranh luận về các thực hành Lập trình cực đoan và lập trình cặp. Quay ngược thời gian, chúng ta có thể hiểu rằng lập trình là một hoạt động solo vì các lập trình viên cần sự tập trung và cô lập. Các lập trình viên lúc đó đang ở vùng, một trạng thái tinh thần nơi họ có thể tập trung hiệu quả vào mã và đưa ra các quyết định sáng tạo và hay.

Lập trình cặp dường như cũng có rủi ro nếu bạn giả sử một lập trình viên ngắt lời nhau. Mặt khác, khó khăn hơn để làm gián đoạn hai lập trình viên làm việc cùng nhau. Ví dụ, trong lập trình Solo, sẽ dễ bị gián đoạn hơn, do đó, hầu như không thể lập trình viên solo ở lại trong "khu vực".

Chất lượng mã là khác khi dòng chết chỉ quanh góc. Mọi người sẽ luôn vội vàng, là một lập trình viên cặp hoặc lập trình viên solo: họ sẽ không áp dụng một số thực tiễn tốt nhất và sẽ quên đi việc kiểm tra đơn vị.

Tôi sẽ gắn bó với lập trình cặp. Bởi vì khi gặp rủi ro, khi một lập trình viên biến mất, bạn sẽ luôn có một người khác để ghi lại quá trình và dạy mọi người khác cách nó hoạt động.

1
Junior M

Làm việc trên bất cứ điều gì phức tạp không tầm thường có xu hướng là một ứng cử viên tốt cho lập trình cặp để nhiều người hiểu mã hơn là chỉ một nhà phát triển biết một phần của cơ sở mã. Một trường hợp khác là khi ai đó muốn chuyển một số kỹ năng. Một ví dụ ở đây có thể có một người thực sự giỏi trong các bài kiểm tra đơn vị kết hợp với một người không hoàn toàn quen thuộc với khái niệm này và do đó giúp có được thói quen ban đầu về một điều gì đó.

Về nơi để tránh lập trình cặp, các nhiệm vụ công việc đơn giản là nơi tốt hơn nên chia công việc thành hai nhóm và để mỗi nhà phát triển thực hiện một số công việc riêng biệt để hoàn thành công việc. Một số tác vụ có thể chỉ cần gõ một chút công bằng nhưng không lớn đến mức đáng để dành vài giờ cố gắng tìm cách tốt hơn để làm điều đó vì nó có thể được thực hiện nếu mỗi nhà phát triển thực hiện một cách tiếp cận mạnh mẽ trong một vài giờ.

1
JB King