Coding Dojo hay những phiên luyện code độc lập

Lập trình viên kì cựu Dave Thomas, đồng tác giả của loạt sách “Pragmatic Programmer” và “Tuyên ngôn Phát triển Phần mềm Linh hoạt”[1], nhận ra: “Trong ngành phần mềm, chúng ta luyện tập trong khi làm việc, đó là lí do tại sao chúng ta lại hay mắc lỗi trong công việc. Chúng ta cần phải tìm cách phân tách việc luyện tập ra khỏi công việc. Chúng ta cần những phiên luyện tập độc lập”.

 


 Các lập trình viên lập trình theo cặp trong một phiên Coding Dojo ở CodeGym dưới sự quan sát của Facilitator.

Kết quả của nỗ lực bóc tách việc luyện tập (có chủ đích) này là sự ra đời của Code Kata, những phiên luyện tập có cấu trúc. Từ Kata được rút ra từ môn võ Karate để chỉ một bài tập lặp đi lặp lại dùng cho việc luyện tập và cải tiến một vài “thế” hay “miếng” võ nào đó. Code Kata lấy cái tinh thần đó để luyện kĩ năng lập trình.

Nhiều cộng đồng lập trình viên đã sử dụng ý tưởng của Dave Thomas để lập các “phường hội” cùng nhau luyện tập. Các cộng đồng thực hành này có lịch sinh hoạt đều đặn (như các Coding Dojo) hay một năm đôi lần (như các Code Retreat), hoặc là các workshop ngắn trong một số hội thảo chuyên ngành của giới phần mềm (như Agile Conference, XP Conference, Software Craftsmanship Conference). Trong số này, Coding Dojo là hình thức có sự lan tỏa rộng rãi bậc nhất. Dojo (tiếng Nhật) có thể hiểu là sàn tập võ hay võ đường.

Khởi phát từ Paris và chính thức xuất hiện trong hội thảo XP2005 ở Anh với báo cáo mang tên “The Coder’s Dojo – A Different way to teach and learn programming”, Coding Dojo được xem như là nơi để các lập trình viên gặp gỡ, luyện tập các ngón nghề lập trình, cùng chia sẻ kinh nghiệm và gia tăng lòng yêu nghề. Một Coding Dojo có thể được tổ chức ở bất kì đâu: Trong công ty (như một hoạt động luyện tập nội bộ), trong nhóm bạn lập trình viên đam mê, hay như một cộng đồng phi lợi nhuận nhằm thu hút các thành viên từ các nơi tụ về. Thông thường, các buổi họp mặt của Coding Dojo diễn ra vào buổi tối hoặc cuối tuần để tránh lịch làm việc căng thẳng. Trong các buổi sinh hoạt từ ba mươi phút đến hai giờ, lần lượt các hoạt động được diễn ra theo trình tự: 1.Giới thiệu về Dojo; 2. Đồng thuận về việc làm trong buổi sinh hoạt (chọn Kata để luyện tập, theo hình thức Prepared – có chuẩn bị trước, hoặc Randori – ngẫu nhiên, được xác định ở đầu phiên làm việc); 3. Lập trình (vừa lập trình vừa thảo luận); 4. Phản hồi và cải tiến.

Để tổ chức một Coding Dojo thì cần những gì? Tôi xin nêu danh sách tối thiểu: Một nơi chốn để tụ họp; Máy tính kết nối Internet, hai người một máy; Một lập trình viên có kinh nghiệm điều phối hoạt động của các phiên làm việc (Facilitator). Ngoài ra, có thể thêm bàn phím rời, bảng viết và máy chiếu để thảo luận. Người tham dự sử dụng IDE ưa thích cùng với một ngôn ngữ lập trình ưa thích để luyện tập, nhưng cũng có thể không cần gì thêm ngoài ứng dụng có sẵn trên web cyber-dojo.org.

Vì sao lại là hai người một máy? Luyện code không nhất thiết phải luyện theo cặp nhưng luyện theo cặp thì tốt hơn bởi tốc độ sẽ chậm lại, có suy nghĩ hơn. Có nghiên cứu đã so sánh riêng luyện lập trình theo cặp và không theo cặp với Coding Dojo và chỉ ra luyện theo cặp thì hiệu quả hơn2. Về cơ bản, luyện code là quá trình tự luyện tập của mỗi cá nhân nhưng có những thời điểm then chốt (mới tinh, hoặc cần nâng thành tích) thì luyện tập trung giúp tăng hiệu quả rõ rệt.

Những động lực của Coding Dojo

Vậy, điều gì thực sự khiến cộng đồng lập trình viên phải quan tâm tới Coding Dojo? Chìa khóa nằm ở khái niệm “thực hành có chủ đích” của nhà tâm lí học Anders Anderson, đã được dẫn trong bài viết “Học lập trình cần bao nhiêu thời gian?” trên Tia Sáng3. Cái “chủ đích” ở đây chính là gia tăng hiệu suất của một kĩ năng nào đó. Theo Anderson4, luyện tập có chủ đích dựa trên bốn thành tố nền tảng: 1. Người luyện tập phải có động cơ để tham dự vào công việc và nỗ lực để cải tiến hiệu suất; 2. Hoạt động luyện tập có thiết kế rõ ràng, mục tiêu cụ thể; 3. Người luyện tập nhận được ngay thông tin phản hồi và kết quả về hiệu suất của mình; 4. Người luyện tập nên lặp đi lặp lại một hoạt động hoặc các hoạt động tương tự để gia tăng mức độ thuần thục của kĩ năng.

Các Code Kata chính là các “bài luyện” được thiết kế theo hướng hội tụ đủ các điều kiện 2, 3, 4 như đã liệt kê. Khi Coding Dojo hội tụ các cá nhân có động lực (điều kiện 1) và tiến hành luyện tập các Code Kata này theo một trình tự hợp lí như nhắc đến ở bên trên, thì năng lực lập trình của người tham gia Coding Dojo sẽ gia tăng theo thời gian.

Một cơ sở lí luận khác mà Coding Dojo sử dụng làm nền tảng là mô hình phát triển kĩ năng của nhà tâm lí học Dreyfus5, được dẫn trong sách “Pragmatic Programmer” của tác giả Dave Thomas và Andy Hunt. Theo đó, kĩ năng của người học việc được tiến triển qua năm bước. Bắt đầu từ trạng thái không biết gì (Novice – ngây thơ), không có kinh nghiệm, không quan tâm đến lí do “Tại sao” trong mỗi hoạt động học tập, người học chỉ cần nắm vững các quy tắc, quy trình và mong muốn đạt được một vài mục tiêu đơn giản nào đó. Khi vượt qua được trạng thái này, người học việc lần lượt trải qua trạng thái của người bắt đầu có kinh nghiệm (Advanced Beginner), có năng lực làm việc độc lập (Competent), thành thục (Proficient) hoặc đạt được trạng thái tinh thông (Expert). Nói đơn giản, người học đi từ bắt chước đến khả năng tự xoay sở với các vấn đề, từ đơn giản đến phức tạp. Ở trạng thái cuối cùng của năng lực, cá nhân có thể sử dụng kĩ năng như bản năng với độ chính xác và hiệu quả cao độ. Điều quan trọng chính là ở chỗ này: Người càng ít kinh nghiệm thì khả năng tiếp thu thông qua các hình thức học tập truyền thống (như giảng bài chẳng hạn) càng ít hiệu quả. Họ sẽ dễ dàng học hỏi các điều mới mẻ thông qua hoạt động, làm việc, phản hồi, cải tiến liên tục. Họ cũng sẽ dễ dàng học hỏi thông qua việc mắc các sai lầm (mà không phải trả giá), nhận ra sai lầm đó, sửa sai và thử nghiệm. Đó là lí do tại sao các Code Kata và quy tắc của Coding Dojo cố gắng đưa người học vào các hoạt động có chủ đích, thông qua một quy trình chặt chẽ, bẻ nhỏ các kĩ năng và bài tập để giúp lập trình viên luyện tập từng kĩ năng một. Ví như, Kata Args để luyện kĩ năng xử lí một chuỗi tham số đầu vào của một chương trình; Kata FizzBuzz được thiết kế để luyện kĩ năng TDD cơ bản cho người mới học; Kata ‘Game of Life’ có thể được dùng để luyện kĩ thuật lập trình chức năng (functional programming), v.v. Có khoảng vài chục Kata như thế được viết ra trong các sách chuyên ngành, hoặc các website công cộng để sử dụng rộng rãi trong các hoạt động của Coding Dojo.

***

Mặc dù việc luyện tập theo thể thức Coding Dojo đã trở nên phổ biến trong cộng đồng lập trình viên, nhưng giới nghiên cứu và giảng dạy chính quy vẫn còn ít quan tâm thử nghiệm Coding Dojo trong các chương trình đào tạo chuyên nghiệp. Tới nay, chưa có nhiều nghiên cứu và thử nghiệm việc giảng dạy và luyện tập lập trình bằng Coding Dojo. Nhưng những nghiên cứu bước đầu cho thấy những bằng chứng thực nghiệm khả quan về ưu điểm của Coding Dojo. Nghiên cứu của Estácio và cộng sự (2015)6, Sato và cộng sự (2008)7 cho thấy, Coding Dojo thúc đẩy việc học lập trình tiến bộ. Trong khi đó, các nghiên cứu của Da Luz (2013)8, hay của Heinonen (2013)9 thì cho thấy Coding Dojo có thể giúp người học lĩnh hội kĩ thuật lập trình hướng kiểm thử (test-driven development) rất hiệu quả.

Trong lĩnh vực IT, có một hiện tượng đáng chú ý: Có nhiều thứ đã trở thành tiêu chuẩn (de facto) của giới làm nghề, nhưng lại hoàn toàn thiếu vắng trong nhà trường và Coding Dojo là một trong số đó. Tất nhiên, những doanh nghiệp, nơi đang miệt mài “làm việc”, nơi mà “số phận” của họ đang ngày càng phụ thuộc chặt chẽ vào năng lực của đội ngũ, thì không thờ ơ như vậy. Từ năm 2011, Coding Dojo đã có mặt ở Việt Nam với sự hiện diện của hai nhóm Hanoi Coding Dojo và CocoDojo ở Hà Nội. Hanoi Coding Dojo hoạt động được 35 phiên trước khi dừng hoạt động vào cuối năm 2012. CocoDojo thì kéo dài thời gian hoạt động của mình tới giữa năm 2015 trước khi tắt lửa. Ngay ở Hà Nội hiện nay, một số doanh nghiệp đã bắt đầu tự tổ chức các “sàn tập” Coding Dojo của riêng mình, vừa để thúc đẩy không khí học tập, vừa để bắt nhịp với trình độ của thế giới. Bản thân người viết bài này biết không dưới năm doanh nghiệp có tổ chức các Coding Dojo. Dường như phong trào mở Coding Dojo và luyện tập theo hình thức này đang “nóng” trở lại. Hy vọng, Coding Dojo sẽ sớm nhận được sự chú ý của giới đào tạo lập trình chuyên nghiệp.

Để kết thúc loạt bài tư vấn nghề nghiệp nâng cao cơ hội việc làm cho những người đang theo đuổi nghề lập trình viên, chúng tôi xin tổng kết những ý chính như sau:
– Hiện nay có rất nhiều kiểu lập trình viên khác nhau, có kiểu chỉ cần vài tháng học việc, có kiểu lại cần bỏ ra tới vài năm. Người học việc có thể tự học hoàn toàn, tham gia một trung tâm đào tạo lập trình viên chuyên nghiệp, tham gia một chương trình học tập trực tuyến, hoặc học ở trường đại học. Chính yêu cầu từ công việc mà người học lựa chọn sẽ quyết định họ cần phải học tối thiểu những gì.
– Để một lập trình viên có thể đi từ vị trí của người học việc đến tinh thông có thể phải mất đến 10 năm luyện tập.
– Nhưng quan trọng hơn cả là phương pháp luyện tập: luyện tập phải có chủ đích, luyện tập phải sâu với một số phiên luyện tập độc lập, tách ra khỏi công việc.

———
* Tác giả là cố vấn Phát triển nghề nghiệp tại CodeGym.
1 Nguyên gốc: The Manifesto for Agile Software Development.
2 Estácio, Bernardo, et al. “Evaluating the use of pair programming and coding dojo in teaching mockups development: An empirical study.” System Sciences (HICSS), 2015 48th Hawaii International Conference on. IEEE, 2015.
3 http://tiasang.com.vn/-giao-duc/Hoc-lap-trinh-can-bao-nhieu-thoi-gian—10643
4Ericsson, K. Anders, Ralf T. Krampe, and Clemens Tesch-Römer. “The role of deliberate practice in the acquisition of expert performance.” Psychological review 100.3 (1993): 363.
5https://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
6 Xem chú thích số 2.
7Sato, Danilo Toshiaki, Hugo Corbucci, and Mariana Vivian Bravo. “Coding dojo: An environment for learning and sharing agile practices.” Agile, 2008. AGILE’08. Conference. IEEE, 2008.
8da Luz, Ramiro Batista, Adolfo Gustavo Serra Seca Neto, and Robinson Vida Noronha. “Teaching TDD, the coding dojo style.” Advanced Learning Technologies (ICALT), 2013 IEEE 13th International Conference on. IEEE, 2013.
9Heinonen, Kenny, et al. “Learning agile software engineering practices using coding dojo.” Proceedings of the 14th annual ACM SIGITE conference on Information technology education. ACM, 2013.

 

 

Tác giả