Muốn trở thành một lập trình viên giỏi, trước tiên, hãy là người đầu bếp tốt

    Hải Tố,  

    Sự liên tưởng thú vị giữa 2 ngành nghề không có gì liên quan tới nhau...

    Một bài viết được chia sẻ từ blog CodingHorror


    Lập trình viên không phải là một công việc đơn giản, để cho ra đời một đoạn code tốt đòi hỏi coder phải tốn khá nhiều thời gian và công sức. Trong khi đó, người đầu bếp cũng phải vật lộn với xoong, nồi, đĩa chảo và nguyên vật liệu để làm nên những món ăn ngon và đẹp mắt.

    Rõ ràng, hai ngành nghề này không liên quan gì đến nhau, nhưng trong con mắt của những lập trình viên nổi tiếng, nghề đầu bếp luôn để lại họ cho những bài học thú vị. Bắt đầu với ông Ron Jeffries (một trong 3 nhà sáng lập của Extreme Programming*), từng chia sẻ trong 1 bài phỏng vấn của mình:

    Căn bếp của bạn bừa bộn không phải vì nó được thiết kế tồi, mà bởi vì chúng ta đã không lau chùi và dọn dẹp các bát đĩa sau mỗi bữa ăn.

    (*Extreme Programming (XP) là một phương pháp phát triển phần mềm đặt năng suất lên hàng đầu, với chất lượng cao nhất, chi phí thấp nhất, ít lỗi nhất và tối đa hóa lợi nhuận đầu tư).

    Michael Feathers (tác giả của cuốn sách nổi tiếng Working Effectively with Legacy Code) trong 1 bài viết trên blog cá nhân cũng tỏ rõ sự quan tâm của mình tới những đầu bếp chuyên nghiệp - người luôn giữ môi trường làm việc của họ luôn gọn gàng nhất có thể:

    Điều tôi thích thú trong những cuộc thi "Vua Đầu Bếp" là cách giám khảo chấm điểm cho mỗi thí sinh - không chỉ đánh giá thông thường qua chất lượng của món ăn. Nếu bạn để ý, trong quá trình đầu bếp chế biến món ăn, giám khảo sẽ đi quan sát từng bếp một và ghi chú, tính điểm vào một cuốn sổ tay.

    Đặc biệt, một trong những điểm số quan trọng là đầu bếp luôn phải giữ cho khu vực làm việc của họ gọn gàng, ngăn nắp và sạch sẽ. Giám khảo sẽ luôn quan sát để chắc chắn rằng, thí sinh của họ sẽ rửa sạch dụng cụ, chén bát sau khi sử dụng - nếu họ không muốn mất điểm đáng tiếc.

     Giữ góc bếp luôn gọn gàng, sạch sẽ luôn là tiêu chí hàng đầu của mỗi đầu bếp xuất sắc

    Giữ góc bếp luôn gọn gàng, sạch sẽ luôn là tiêu chí hàng đầu của mỗi đầu bếp xuất sắc

    Micah Martin (tác giả của cuốn sách Agile Principles, Patterns, and Practices in C#) thì có những kỉ niệm đẹp với nghề đầu bếp:

    Trong những năm học đại học, công việc đầu bếp tại một nhà hàng đã giúp tôi trang trải cuộc sống. Trong môi trường này, câu khẩu hiệu được lặp lại hàng trăm lần là "Hãy lau dọn sạch sẽ trước khi bạn rời đi!” - và nó trở thành một luật lệ. Trên thực tế, việc không thường xuyên lau dọn sẽ làm không gian làm việc của đầu bếp sẽ trở nên bừa bộn, chật chội và chất lượng món ăn cũng bị giảm sút đáng kể.

    Điều thú vị ở đây, rất nhiều các đầu bếp thậm chí không có bằng đại học, nhưng họ vẫn cực kỳ hiệu quả trong việc tự quản lý. Nếu như một khu vực nào đó có vẻ không ngăn nắp, sạch sẽ, toàn bộ nhà bếp sẽ không cảm thấy hài lòng. Đầu bếp "lười nhác" kia sẽ bị châm biếm, kì thị cho đến khi họ phải lau dọn nếu không muốn cho bị nghỉ việc sớm.

    Đến đây, nhiều bạn đọc sẽ thắc mắc rằng, những chuyên gia CNTT "lão làng" kia muốn chia sẻ gì qua câu chuyện từ góc bếp? Liệu có phải là luôn giữ cho góc làm việc của mình ngăn nắp, gọn gàng? Đúng, nhưng chưa đủ. Trong quá trình phát triển phần mềm, việc "lau dọn" kia có nghĩa là phải liên tục thực hiện code refactoring (tái cấu trúc mã code) bất cứ khi nào có thể.

    Hiểu một cách đơn giản, code refactoring là hoạt động chỉnh sửa giúp bạn (hoặc những lập trình viên khác sử-dụng-lại-đoạn-code-này) đọc và hiểu code dễ dàng thay vì lần mò giữa hàng nghìn dòng mã. Kết quả, chúng ta thu lại source code được tổ chức khoa học, có kiến trúc/cấu trúc tốt hơn nhưng không làm thay đổi hành vi của hệ thống về mặt chức năng - vì thế, kết quả của quá trình testing cũng không đổi.

    Việc này giống như chúng ta sắp đặt lại hệ thống điện trong nhà theo một cách khoa học hơn, nhưng vẫn đảm giữ nguyên vị trí và chức năng của những công tắc, ổ cắm trên tường. Như vậy khi cần sửa chữa hoặc lắp đặt thêm ổ cắm mới, công việc sẽ an toàn và dễ dàng hơn rất nhiều.

    Nếu trong quá trình phát triển phần mềm, bạn chỉ viết code theo kiểu “miễn sao chạy là được" mà không thường xuyên dừng lại - để kiểm tra và tái cấu trúc - thì kết quả sau cùng mà bạn nhận được là là một đống "code smells" - còn gọi là "mã thối", mà dân trong ngành vẫn thường gọi là "code *** không ngửi nổi". Cảm giác này tương tự như bạn đọc 1 bài viết có bố cục lủng củng, chấm phẩy linh tinh, xuống dòng tùy tiện - rất khó chịu.

    Lười thực hiện tái cấu trúc code, rồi một ngày bạn sẽ rơi vào tình trạng này!
    Lười thực hiện tái cấu trúc code, rồi một ngày bạn sẽ rơi vào tình trạng này!

    Tiếp tục quay lại với công việc bếp núc, bên cạnh việc giữ gìn sự sạch sẽ, các đầu bếp cũng dành rất nhiều thời gian để suy nghĩ về khái niệm "mise en place" - việc sắp xếp bếp của mình sao cho công việc được tối ưu nhất. Trước khi nấu một món ăn, đầu bếp sẽ suy nghĩ về cách bố trí nguyên vật liệu, nồi niêu và thậm chí là đặt dao ở chỗ nào để sử dụng thuận tiện nhất có thể.

    Ngày nay, khái niệm "mise en place" dần trở nên quen thuộc với nhiều nhà phát triển phần mềm: môi trường làm việc gọn gàng, khoa học sẽ cho ra kết quả tốt. Điều giải thích tại sao, hầu như các team lập trình đều thiết lập một môi trường phát triển y hệt nhau, sử dụng chung một tập các công cụ phát triển từ back-end tới front-end cũng như các framework có sẵn, thay vì ngồi viết ra framework của riêng mình.

    Một lập trình viên xuất sắc sẽ hội tụ rất nhiều yếu tố chứ không phải đơn thuần chỉ giỏi viết code. Rất nhiều lập trình viên có trình độ cao để phát triển trong công việc nhưng họ sẽ không bao giờ thành công nếu thiếu những yếu tố cần thiết khác.

    Nghề đầu bếp nghe có vẻ đơn giản, nhưng ý thức về "môi trường làm việc" của họ luôn để lại rất nhiều bài học thú vị - nhất là cho những coder đang muốn nâng cấp trình độ bản thân mình.

    Tin cùng chuyên mục
    Xem theo ngày