2020.04.14

Pair programing và mob programing (Part 1)

Part 1: Pair programing là gì?

“Chỉ với 2 người một máy tính, chúng tôi tạo nên sự khác biệt” – trích từ lời nói của một cặp developer vui vẻ nào đó.

1. Lời mở đầu

Chào các bạn, sau một thời gian trải nghiệm và cảm nhận những sự khác biệt, hôm nay mình muốn chia sẻ với các bạn một hình thức lập trình khá phổ biến đối với thế giới lập trình trên toàn thế giới, một hình thức được rất nhiều developer yêu thích bởi những ưu điểm tuyệt vời của nó, đó chính là pair programing. 

Bài chia sẻ này rất hữu ích đối với các bạn đang mong muốn tìm một sự khác biệt trong cách làm việc hằng ngày. Bên cạnh đó, nếu áp dụng triệt để phương pháp này, nó sẽ mang đến cho bạn, team bạn và cả công ty bạn những lợi ích đáng kể.

Nếu bạn đang tìm hiểu về Agile hoặc đang áp dụng Agile vào công việc thì đây cũng là một phương pháp giúp bạn hiểu rõ hơn về những gì bạn đang theo đuổi.

Còn bây giờ, chúng ta hãy cùng nhau thắt dây an toàn, chuẩn bị cho chuyến bay đến vùng đất của những kiến thức mới nhé.

2.Pair programing là gì?

Đây là một phương pháp lập trình mà cả 2 developer sẽ cùng nhau làm việc trên một máy tính (PC hoặc laptop), bao gồm luôn cả chuột, bàn phím và cả màn hình, tất cả mọi thứ. Nói cách khác, cả 2 sẽ cùng làm một việc, cùng một thời gian, cùng một không gian trên cùng một máy. Trong đó, một người có vai trò coding, một người có vai trò dẫn dắt. Vai trò này luôn thay phiên nhau trong một khoảng thời gian hợp lý. Phương pháp này mang lại ít lỗi hơn 15% (Cockburn & Williams) nhưng sẽ tốn 15% cho công sức (sức khỏe, thể trạng) so với việc lập trình một mình.

Pair programing là một phương pháp không hề mới đối với những công ty đang áp dụng Agile vào công việc, bởi tính chất “hiệu quả” và “trưởng thành”, ngày nay phương pháp này được rất nhiều nơi áp dụng.

3.Phương pháp hoạt động

Cùng làm việc:  Cả 2 developer ngồi cùng nhau, nhìn về một hướng, một máy tính và cả giới hạn của task. Việc này rất cần thiết, “Pair programing” không thể thành công nếu cả 2 bị tách ra, mỗi người một máy tính, một mục tiêu khác nhau. Hãy kết nối cùng nhau cả bên trong lẫn bên ngoài.

Phân chia vai trò: Sẽ có 2 vai trò trong phương pháp này, đó là “Driver” và “Navigator”, tùy vào từng vai trò mà sẽ phân ra công việc, nhiệm vụ khác nhau.

  • Driver: Hay còn gọi là “tài xế”, là người sẽ coding chính trên một function nhỏ của một task lớn. Người này đảm nhiệm vai trò code, cố gắng giữ suy nghĩ của mình cho từng dòng code hiện tại. 

  • Navigator: Hay còn gọi là “người chỉ đường”, sẽ đảm nhận nhiệm vụ tìm ý tưởng, suy nghĩ, kiểm tra xem các dòng code của driver đã tốt hay chưa, có nằm trong giới hạn của function hay không, phát hiện những lỗi lầm và nguy cơ có thể xảy ra đối với những gì mà driver đang code. Họ sẽ luôn góp ý nếu có vấn đề xảy ra với dòng code của bạn. Bản thân họ còn phải suy nghĩ đến việc sẽ làm những gì sắp tới trong suốt quá trình pair programing. 

Thay đổi vai trò: Giữa 2 vai trò này luôn luân phiên thay đổi với nhau. Thường thì 20 phút một lần (tốt nhất là 30 phút). Do việc trao đổi và sử dụng bộ não liên tục sẽ khiến cả 2 cảm thấy dễ mệt hơn so với khi lập trình một mình. Vì vậy, hãy nghĩ giải lao khi cả 2 cảm thấy mệt mỏi. Theo kinh nghiệm của bản thân mình, cứ sau 90 phút pair, chúng ta nên nghỉ giải lao một lần để luôn được làm việc trong trạng thái tốt nhất.

4.Nguyên tắc

Để đạt được hiệu quả tốt nhất đối với phương pháp này, bạn cần tuân thủ một số nguyên tắc.

  • Thường xuyên luân phiên thay đổi vai trò: Việc này sẽ giúp cả hai luôn được tươi mới, không nhàm chán.

  • Giữ đúng vị trí, vai trò: Navigator không nên can thiệp vào bàn phím lúc Driver đang code, Driver cũng chỉ dừng ở mức truyền đạt cho Navigator biết mình sắp làm gì, đang làm gì. Nếu cả 2 có xung đột ý tưởng, tốt nhất hãy trải nghiệm từng ý tưởng, nếu vẫn không giải quyết được sự xung đột, hãy nhờ những người có kinh nghiệm hỗ trợ.

  • Tôn trọng lẫn nhau: Tránh các trao đổi mang tính tiêu cực, hãy cố gắng lắng nghe và khiêm tốn. Sẽ có rất nhiều phương pháp để giải quyết vấn đề, hãy tôn trọng những lời khuyên.

  • Thường xuyên trao đổi với nhau: Vì chỉ có trao đổi mới có thể giúp cả 2 hiểu rõ nhau hơn cũng như biết được cả 2 đang tập trung vào vấn đề gì.

  • Tự tin: Có những lúc một trong hai sẽ cảm thấy tự ti về những gì mình đang làm, đừng ngại ngùng, việc clean code, thiếu dấu chấm phẩy, sai syntax hay chưa nắm rõ về kỹ thuật… sẽ luôn xảy ra, hãy dành cho nhau chút thời gian để chỉnh sửa cũng như tìm hiểu thêm về những gì mình đang thiếu sót.

  • Tinh thần trách nhiệm cao: Kết quả là do cả 2 cùng nhau tạo nên, cùng nhau chịu trách nhiệm.

  • Tập trung vào vấn đề đang làm: Trong suốt quá trình pair programing, sẽ có những vấn đề phát sinh, hãy cố gắng focus vào vấn đề chính, các vấn đề vừa phát hiện hãy đem nó vào list issue nếu nó nhỏ, chỉ thật sự thảo luận khi vấn đề đó lớn.

  • Coding để mọi người dễ maintenance: Coding dựa trên rule do 2 người quyết định, đảm bảo sao này cả 2 đều có thể maintenance.

5.Lợi ích

Để có thể cảm nhận được những lợi ích của pair programing, cách tốt nhất là hãy thử trải nghiệm nó. Mình đã tự trải nghiệm sau khoảng 3 tháng với phương pháp này và rút ra được một số điểm như sau:

  • Chia sẻ kiến thức, là cơ hội tốt để cả 2 developer có thể cùng nhau học hỏi và cùng nhau trưởng thành.
  • Nâng cao chất lượng code, hạn chế bug. Với 2 bộ não cùng làm chung 1 công việc, chắc chắn những dòng code cũng sẽ chất lượng hơn. Bên cạnh đó, việc hạn chế ý tưởng dẫn đến bị stuck trong công việc cũng sẽ giảm thiểu.
  • Rút ngắn thời gian phát triển của dự án, nhanh chóng mang sản phẩm đến tay người dùng. Nếu áp dụng triệt để phương pháp này, việc refactor code, fix bug cũng sẽ giảm theo. Sản phẩm sẽ đến tay người dùng nhanh nhất và chất lượng nhất.
  • Cả 2 sẽ có cái nhìn tổng quan về mã nguồn dự án, dự án vẫn được vận hành nếu có trường hợp 1 trong 2 developer vắng mặt hoặc nghỉ việc.
  • Góp phần xây dựng team. Việc cùng nhau thực hiện một công việc sẽ nâng cao khả năng teamwork và giao tiếp giữa các member trong team.

Ngoài ra còn nhiều mặt tốt khác nếu áp dụng pair programing hiệu quả. Hãy trải nghiệm phương pháp này và tự kết luận cho chính bản thân mình nhé.

6.Điều kiện để có thể pair programing

Hãy đảm bảo các điều kiện sau trước khi pair programing.

Sự thoải mái

  • Việc lựa chọn, bắt cặp để cùng nhau pair programing phải dựa trên tinh thần tự nguyện, không bắt buộc. Cá nhân mỗi developer phải thực sự thoải mái khi làm việc cùng nhau. Điều này cũng đồng nghĩa với việc cả 2 developer không tồn tại mâu thuẫn từ trước đó, các xung đột hay bất đồng phải không được tồn tại hoặc phải hạn chế nhất có thể.
  • Không gian làm việc cũng là một yêu cầu khá quan trọng, hãy chuẩn bị một nơi làm việc thoáng đãng, rộng rãi.

Cảm giác thoải mái là điều kiện giúp pair programing thành công

Môi trường mở

  • Đảm bảo rằng môi trường công ty phải mở, bởi vì việc trao đổi thường xuyên sẽ gây ra khá nhiều tiếng ồn, điều này sẽ gây khó chịu cho nhiều đồng nghiệp. 
  • Nếu bạn đang làm trong môi trường mở, các đồng nghiệp thường xuyên trao đổi thì khi áp dụng phương pháp này sẽ dễ hơn rất nhiều. Nếu ngược lại, hãy cố gắng kiểm soát tiếng ồn nếu bạn thật sự muốn áp dụng phương pháp này.

Máy tính đủ mạnh

  • Máy tính đủ mạnh, đảm bảo được mạch code liên tục mà không ngắt quãng. Điều này cũng không thể bỏ qua, vì quá trình pair programing diễn ra liên tục, cường độ cao, cả 2 bạn sẽ không muốn phải chờ đợi trong khi máy tính build một function nào đó đúng không nào.

Có kỹ năng teamwork, chịu được áp lực tốt

  • Điều cuối cùng là phải chắc chắn rằng cả 2 bạn phải có kỹ năng teamwork tốt và một tinh thần chịu được áp lực cao. Với cường độ tiếp nhận thông tin liên tục sẽ rất dễ khiến cả 2 mệt mỏi, hãy chuẩn bị một tinh thần vững chắc trước khi pair programing nhé.

7. Tổng kết

Vậy là chuyến bay của chúng ta tạm thời đáp xuống sân bay an toàn, trong suốt cuộc hành trình vừa rồi bạn đã có cái nhìn sâu hơn về pair programing rồi chứ. Việc thực hiện nó cũng không phải quá khó khăn đối với chúng ta đúng không nào, hãy thử thuyết phục một người đồng nghiệp mà bạn yêu mến (đương nhiên là cả sếp nữa) tham gia vào phương pháp này. Sau đó hãy tự trải nghiệm để hiểu rõ hơn về nó nhé.

Trong chuyến bay sau, mình sẽ mang các bạn đến vùng đất mới, là một hình thức nâng cấp của pair programing, theo một cách thức khác, một trải nghiệm mới hoàn toàn. Hãy đón chờ các bài viết sau của mình nhé.

Pair programing và mob programing (Part 2)