Lập trình cặp có khiến bạn ghét bạn đồng nghiệp???

psychology-of-pair-programming.png

Giới thiệu

Phuơng pháp lập trình theo cặp được một số doanh nghiệp tin tuởng và áp dụng triệt để trong tất cả các dự án. Nhưng câu hỏi đặt ra đó là nó có ảnh hưởng như thế nào đến các lập trình viên và liệu rằng nó có thực sự hiệu quả và hữu ích? Trong bài viết này, hãy cùng tìm hiểu và phân tích những lợi ích cũng như những điểm trừ của phương pháp này trong trường hợp nó được sử dụng như là phương pháp phát triển phần mềm duy nhất trong một dự án.

Định nghĩa

Lập trình cặp là một phương pháp phát triển phần mềm linh hoạt trong đó có hai lập trình viên làm việc cùng với nhau trên cùng một máy tính. Người thực hiện công việc chủ động được gọi là “người lái” (driver) trong khi người còn lại sẽ làm “hoa tiêu” (navigator) hay “người quan sát” (observer). Vai trò của “người quan sát” là liên tục giám sát công việc của “người lái” để từ đó nhanh chóng xác định được các lỗi cú pháp, chính tả, v.v… “Người quan sát” cũng chịu trách nhiệm điều hành dự án đi đúng hướng. Hai người sẽ hoán đổi vai trò thường xuyên trong quá trình làm việc.

Có thể có ba loại cặp đôi khi tạo các cặp lập trình, đó là: Người mới học việc - Người mới học việc (novice – novice), Người mới học việc – Chuyên gia (novice – expert), Chuyên gia - Chuyên gia (expert – expert). Cặp đôi giữa những lập trình viên còn thiếu kinh nghiệm (novice) giúp nâng cao hiệu suất công việc lên đáng kể so với khi họ làm việc một mình. Việc ghép cặp một người mới học việc (novice) với một lập trình viên giàu kinh nghiệm (expert) sẽ tạo ra một công cụ đào tạo tuyệt vời để từ đó giới thiệu và cho những lập trình viên non trẻ làm quen với một thứ ngôn ngữ mới hay một nền tảng mới. Cặp đôi chuyên gia – chuyên gia là một biến thể đầy nội lực và có thể tạo ra sự tăng vọt trong năng suất làm việc.

Tuy nhiên, theo như các nghiên cứu đã được thực hiện và cả kinh nghiệm thực tế của các kĩ sư phần mềm thì dù sử dụng kiểu ghép cặp nào, việc bắt cặp cũng sẽ chỉ là phương pháp giải quyết vấn đề tối ưu khi mà vấn đề đó là mới hoàn toàn, là chưa hề xảy ra trước đây. Điều này chỉ ra rằng việc áp dụng lập trình cặp toàn thời gian, liên tục có thể sẽ không phù hợp.

Lợi ích lập trình theo cặp mang lại

1280px-Pair_Programming_at_Chitika.JPG

Mục đích của việc lập trình theo cặp là để cải thiện chất lượng code và hiệu quả công việc đồng thời tạo điều kiện cho các lập trình viên học hỏi lẫn nhau.

Qua nghiên cứu, người ta đã chỉ ra rằng kể cả hai lập trình viên mới học việc làm việc theo cặp cũng năng suất hơn một người làm việc một mình. Các kết quả nghiên cứu cũng cho thấy chất lượng code nâng cao rõ rệt khi áp dụng lập trình đôi, lượng lỗi có thể giảm thiểu được lên tới 15%. Việc những đoạn code mà “người lái” viết được “người quan sát” rà soát lại tức thì không chỉ giúp phát hiện ngay lập tức nhiều lỗi hơn mà còn hiệu quả hơn vì rõ ràng chỉnh sửa sao cho đúng từ đầu sẽ tốt hơn việc chỉ rà lại ở giai đoạn hoàn thiện.

Hơn thế nữa, một trong những lợi ích lớn nhất của việc lập trình theo cặp đó là xây dựng tinh thần đồng đội, khuyến khích tinh thần giao tiếp và hợp tác. Việc lập trình phát triển phần mềm thường được miêu tả như một tác vụ thực hiện bởi chỉ một cá nhân và các kĩ sư phần mềm là những người rụt rè và trầm lặng. Thế nhưng, việc lập trình theo cặp khiến cho các lập trình viên phải làm việc với nhau một cách chủ động và kết quả là không chỉ từng cá nhân làm việc hiệu quả mà là những nhóm/cặp làm việc hiệu quả hơn.

Tuy vậy, một khía cạnh chưa được đề cập tới trong tất cả các nghiên cứu đó là dường như các nghiên cứu này chưa cân nhắc đến việc nếu việc lập trình theo cặp được áp dụng mọi lúc, hàng ngày, thì điều gì sẽ xảy ra. Mặc dù sự thật là các lập trình viên không hề dành cả ngày để code nhưng trong một số trường hợp, việc bắt cặp lại không phải là điều nên làm.

100% sử dụng lập trình theo cặp: Nên hay Không nên?

Dù rất nhiều nghiên cứu thực nghiệm đã chỉ ra rằng lập trình cặp là một trong những phương pháp phát triển phần mềm “thần kì” nhất, nhưng chúng ta vẫn còn những hoài nghi. Bởi vì có thể thấy rằng trong các nghiên cứu này các chuyên gia đã chưa đánh giá yếu tố “con người” một cách đúng đắn.

Trong các giai đoạn thực hiện của một dự án phần mềm, công việc không phải chỉ xoay quanh làm sao vượt qua các khó khăn, thách thức mà bên cạnh đó còn vô vàn các đoạn code nhỏ nhặt và nhàm chán nhưng vẫn cần phải làm vì chúng chiếm đa số trong các tác vụ cơ bản của các dự án này. Vấn đề ở đây đó là “người quan sát” sẽ phải ngồi nhìn hết những quá trình vặt vãnh và tẻ nhạt ấy mà không thể đóng góp hay làm gì có ích cả. Những kĩ năng của họ lẽ ra có thể được sử dụng vào việc thực hiện những phần code quan trọng hợn hay ít nhất cũng là làm thêm vài đoạn code nhàm chán chưa được thực hiện khác. Tóm lại, việc lập trình cặp toàn thời gian có thể gây ra việc lãng phí tài nguyên con người và thời gian, dẫn đến việc cả quá trình bị chậm lại bởi vì lẽ ra có những thời điểm “người quan sát” có thể thực hiện nhiều phần code khác, nhưng họ lại ngồi nhìn “người lái” ngao ngán. Lí luận này vẫn đúng kể cả khi các lập trình viên hoán đổi vai trò cho nhau.

Ngoài ra, việc ghép cặp lập trình toàn thời gian cũng là một phương pháp tồi tệ đối với những lập trình viên đang học cách sử dụng các công cụ phát triển phần mềm. Việc ngồi quan sát “người lái” sử dụng các công cụ khác nhau hay quan sát họ tìm ra cách sử dụng công cụ cũng đều không hề có tác dụng học hỏi. Một vài tác vụ cần phải tự tay làm mới có thể hiểu được một cách toàn diện. Việc này có thể so sánh giống như một người sau khi xem vài trận bóng qua màn ảnh nhỏ không thể vỗ ngực tự tin mình có thể chơi bóng được.

Thêm vào đó, “Bạn không muốn làm lãng phí thời gian của họ. Bạn không muốn tranh luận (trừ khi người kia cũng muốn tranh luận). Bạn từ bỏ thường xuyên hơn so với lúc bạn làm việc một mình” – Mark Wilden

Lập trình theo cặp phụ thuộc vào khả năng hợp tác và làm việc hòa hợp giữa hai lập trình viên. Những nghiên cứu sau đây đều giả định rằng mọi người có thể luôn luôn hòa thuận với nhau. Điều này có thể xảy ra nếu đó là trong môi trường công việc và mọi người đều hành xử chuyên nghiệp. Khi đó, họ sẽ gạt cảm xúc qua một bên. Nhưng trên thực tế thì điều đó đơn giản chỉ có thể là không thể xảy ra. Điều này không phải là để ám chỉ họ có thể sẽ bực tức với nhau (họ có thể) nhưng họ có thể sẽ bất đồng, phản đối nhau rất nhiều khi cùng nhau quyết định một vấn đề nào đó. Việc này có thể sẽ khiến cho tiến độ thực hiện công việc giảm sút, và trong một vài trường hợp sẽ gây ra tâm lý hoài nghi chính bản thân mình cho các lập trình viên, họ sẽ nghĩ ý kiến quan điểm họ đưa ra là sai hay không đáng để được xem xét tới. Tâm lí này có phần lệch lạc và tệ hơn nó có thể sẽ gây ra sự căm ghét, hằn học. Nhưng hệ quả này hoàn toàn có thể ngăn chặn được bằng cách thực hiện lập trình cặp có chọn lọc, đúng lúc, đúng chỗ và chỉ bàn luận các vấn đề mang tính quyết định đối với dự án, còn lại sẽ để cho mỗi lập trình viên được tự do tùy nghi thực hiện.

“Lập trình theo cặp thường không tạo ra động lực khuyến khích sự tự phê bình và mày mò tìm tòi” - Mark Wilden

Đối với một lập trình viên, việc yêu thích một loại ngôn ngữ và mã nền khá là quan trọng khi nói tới việc thực thi các thiết kế. Cũng giống như trẻ con học hỏi được nhiều điều từ việc thử làm những cái mới mẻ và liên tục mắc lỗi thì các lập trình viên học hỏi được từ việc khám phá code. Việc khám phá mã nền có thể đem lại nhiều sáng kiến, ví dụ như là việc tái cấu trúc một số lớp nhất định của mã nền. Tuy nhiên, nếu một kĩ sư phần mềm không đầu tư đủ thời gian và công sức để nghiên cứu và làm việc với các đoạn code hay một ngôn ngữ lập trình thì họ sẽ không bao giờ có thể cảm thấy thoải mái khi làm việc với chúng.

Kết luận

IMG_1809_thumb.jpg

Phương pháp lập trình theo cặp nên được sử dụng ở một mức độ vừa phải. Với một lập trình viên, sẽ có những ngày bạn cảm thấy bạn chẳng làm được gì có ích và khi đó nhiều người sẽ cho là, nếu làm việc theo cặp thì sẽ có thể cải thiện được năng suất làm việc nhưng sự thực không phải như vậy. Hầu hết những người đi làm đều trải qua những ngày mà não bộ của bạn dường như muốn đình công. Đầu óc không còn minh mẫn; logic - hàng ngày luôn luôn bên bạn thì bỗng dưng nay lại bỏ bạn mà đi, bạn thậm chí còn chẳng nói được mấy câu tử tế. Vào những ngày như vậy bạn chỉ mong nó trôi qua thật nhanh. Nhưng rõ ràng là những ngày làm việc không hiệu quả này luôn được bù đắp bằng những ngày làm việc vô cùng năng suất, thời gian làm việc cũng nhiều hơn. Thế nên nếu cứ bắt ép bạn làm việc vào những ngày như vậy và lại còn làm cùng với một người khác sẽ chỉ gây ra những hệ quả tiêu cực. Dù có thể không đến mức khiến bạn thù hằn người bắt cặp với bạn nhưng cũng đủ để khiến bạn móc nối kha khá các cảm xúc tiêu cực với việc lập trinh cặp và người bạn đồng nghiệp của bạn. Trên thực tế, việc lập trình cặp rõ ràng chỉ hiệu quả khi áp dụng có chừng mực.

Tóm lại, lập trình cặp mang đến những lợi ích không thể phủ nhận và quan trọng hơn là nên được sử dụng một cách tiết chế, đặc biệt là khi nó được sử dụng để trao đổi chia sẻ kiến thức. Việc bắt cặp có thể là một công cụ hướng dẫn tuyệt vời và khi nó được áp dụng để giải quyết một vấn đề mới, chưa từng thấy, nó có thể giúp bạn tìm ra được những hướng giải quyết có tính đột phá. Tuy vậy, lập trình cặp toàn thời gian cần phải được cân nhắc kĩ càng trước khi thực hiện để đảm bảo rằng những người được bắt cặp với nhau không nảy sinh những cảm giác tiêu cực đối với người kia.

Nguồn: http://blog.inf.ed.ac.uk/sapm/2014/02/14/pair-programming-will-it-make-you-hate-your-colleagues/


All Rights Reserved