Cuối tuần rồi, tôi gặp một người anh học cùng trường. Dù cần cù tỉ mẩn từ 7 giờ sáng đến 7 giờ tối mỗi ngày, 3 năm làm việc miệt mài, nhưng lương anh cũng chỉ ngang tôi.
Ngẫm nghĩ lại về những bậc tiền bối mà tôi biết, tôi thấy có lẽ ‘Lười + Tỏ ra ngu ngốc’ mới là bản năng của Developer giỏi.
Bác sĩ cần tận tay chẩn đoán bệnh cho từng bệnh nhân. Giáo sư cần giảng 1 bài giảng qua nhiều thế hệ. Kiến trúc sư cần vẽ từng nét cho từng thiết kế. Marketer cần pitch hết hợp đồng này đến hợp đồng khác. Thợ cắt tóc cần tự tay cắt tóc hàng ngày… Danh sách vẫn còn dài, nhưng đã đủ nhìn thấy bức tranh toàn cảnh: thế giới này đầy những người phải lặp lại công việc của họ hàng ngày!
Còn developer thì sao?
Khi cần thao tác cùng 1 thứ trong 1 dòng, dev cố gắng tự động hóa thành quy trình. Khi viết code sử dụng cho nhiều chương trình khác nhau, dev bắt đầu xây dựng 1 thư viện. Khi bắt đầu 1 project với bước đầu giống nhau, dev quay lại tìm kiếm hướng đi trong các lối mòn đã đi qua và tìm cách tối ưu hóa nó.
Developer sống là để loại bỏ những sự lặp lại nhàm chán.
Khoa – 1 Developer đầy đam mê với code – chia sẻ với tôi rằng:
“Khoa thà bỏ 1 tuần để viết 1 script còn hơn copy paste 1 file 2 lần trong 2 phút.”
Vậy thì… chăm chỉ làm việc có phải là tốt?
Tôi nghĩ rằng nó có khi còn gây ảnh hưởng tiêu cực lên hiệu suất làm việc, vì nó làm mọi người quên đi khái niệm “tối ưu hóa.”
“Ồ, việc này có thể làm bằng tay 10 phút là xong.” (Nhưng nhớ rằng thời gian thực để hoàn thành những thứ bạn estimate thường là gấp đôi.) Cứ như vậy, những lần tiếp theo, mọi người lại thao tác bằng tay.
Quan trọng hơn, sự chăm chỉ khiến bạn trở nên ngu ngốc. Khoảng thời gian làm việc mệt mỏi dễ dẫn bạn đến việc ra quyết định sai lầm. Và, đưa ra quá nhiều quyết định trong 1 ngày cũng dễ dàng khiến bạn ra quyết định sai lầm.
Có 1 anh bạn từng hỏi tôi: “Do lười biếng nên mọi người chọn trở thành developer, hay chính vì làm developer mà mọi người trở nên lười biếng?”
Tôi nghĩ vế thứ 2 đúng hơn. Chính sự lười biếng thúc đẩy developer tìm cách giảm thiểu thời gian viết code (đặc biệt là các code lặp lại).
Khi gặp nhiều dự án giống nhau, 1 developer sẽ tạo tool để bootstrap cả development process. Ví dụ 1 người bạn của tôi đã tạo DRM layer hoạt động với kho dữ liệu biểu mẫu thiết kế của cả công ty anh.
Nhiều developer còn sử dụng một số form của code generation. Có nghĩa là 50+ bug cùng 1 loại có thể sửa bằng cách sửa duy nhất 1 lần generator tool đó.
1 developer lười có thể mất thêm vài tiếng để cho ra sản phẩm, nhưng sẽ tiết kiệm được hàng tháng sau đó cho việc bảo trì sản phẩm.
‘Lười biếng’ đã tự chứng minh rằng nó là động lực to lớn đằng sau các phát minh khoa học kỹ thuật ngày nay. Ví dụ như sử dụng xe đẩy dễ dàng hơn vận chuyển mọi thứ bằng tay. Đi thuyền nhanh hơn bơi. Đi xe đạp mệt quá, thôi phát minh ra xe máy đi cho khỏe. Chạy xe máy cũng dính nhiều khói bụi đường, chuyển sang đi ô tô cho không khí trong lành… Và nhiều ví dụ khác nữa.
Một người bạn của tôi – không đồng ý với những suy luận trên:
“Tôi không đồng tình với định nghĩa của bạn về ‘lười biếng’. 1 developer lười sẽ không nhìn về phía trước, họ chỉ cần copy – paste code giữa 4 function khác nhau nếu đó là điều dễ nhất để hoàn thành tool đó ngay lập tức.”
Trong khi đó, một người bạn khác của tôi – nói rằng:
“Tôi tin vấn đề không phải ở chỗ copy – paste cùng 1 code 400 lần, mà là tìm cách để tránh vòng lặp 400 lần trong 10 phút này. Sự thật là đa số code đều có thể sử dụng lại ở các function khác nhau, nhưng phải thay đổi đôi chút. Và Tôi thích làm nguyên quá trình đó trong 10 giây, không phải 10 phút.”
Thử so sánh giữa trang tìm kiếm của Google và Yahoo bạn sẽ thấy sự khác biệt. Đôi khi đơn giản là hấp dẫn người dùng hơn.
1 điểm khác, cũng là điểm mà ít người đồng tình với tôi nhất, chính là: ‘tỏ ra ngu ngốc’ làm nên 1 developer giỏi.
Nếu thông minh, bạn sẽ nghĩ mình thông minh, và rồi…
1) Bạn ngừng học hỏi. Rất khó để bạn buộc bản thân tìm hiểu 1 công nghệ mới giúp bạn làm việc nhanh hơn.
2) Bạn ngừng phê phán code của chính mình. Bạn khó debug và refactor code của chính mình.
Để tìm ra giải pháp tối ưu nhất cho phần mềm, developer cần giữ tư duy mới mẻ và suy nghĩ sáng tạo. Nói cách khác, developer cần tư duy như 1 đứa trẻ, để bầu trời là giới hạn cho bộ não. Biết càng ít, bạn càng dễ dàng tiếp cận vấn đề theo hướng nguyên thủy nhất, từ đó develop ra tool tốt hơn, phần mềm tốt hơn.
Từ công việc của mình, tôi nhận ra, khi đối mặt với vấn đề, cách hiệu quả nhất để tìm giải pháp chính là ‘tỏ ra ngu ngốc’. Hỏi những câu hỏi đơn giản, con nít nhất và sẽ tìm được nguồn gốc vấn đề.
Bạn tôi – 1 Software Developer cho 1 công ty outsourcing, chia sẻ 1 tình huống anh từng gặp phải. Hãy cùng theo dõi đoạn đối thoại sau:
“Từ hôm qua, khách hàng không nhìn thấy logo trên web nữa.”
“Anh ta đã khởi động lại browser chưa?”
“Rồi.”
“Anh ta đã khởi động lại máy tính chưa?”
“Rồi.”
“Anh ta đã empty cache chưa?”
“Rồi.”
“Anh ta sử dụng trình duyệt nào?”
“Internet Explorer 10.”
“Anh có chắc là anh ta không thấy?”
“Chắc.”
“Anh ta có nhìn website trên màn hình không?”
“Anh nói sao?”
“Có thể anh ta đã in trang chủ ra giấy thì sao.”
“Không, anh ta nhìn vào màn hình trên máy.”
“Anh ta có nhìn thấy hình ảnh nào khác bên cạnh logo, hay cũng không thấy gì?”
“Anh nói sao? Uhm… Tôi không biết, nhưng sẽ hỏi lại anh ta.”
Kết quả cuối cùng, nguyên nhân người khách hàng này không nhìn thấy logo trên website là do anh ta (hay con anh ta) vô tình tắt hiển thị mọi hình ảnh trên website. Quang thừa nhận rằng anh không thể tìm ra hoặc có lẽ đã mất rất nhiều thời gian để tìm ra nguyên nhân này nếu não anh hoạt động ở chế độ ‘thông minh’. (Cười.)
Bạn Tôi – Founder & CEO của YouNet Social Intranet – cũng từng chia sẻ với Tôi rằng:
“Khi đi làm, anh cảm thấy mình rất lười. Và vì lười nên anh luôn tìm cách làm việc nhanh nhất, phương pháp code nhanh nhất, nhưng cũng chuẩn xác nữa. Có lẽ cũng vì điều này mà kinh nghiệm của anh tăng nhanh ở nhiều dự án khác nhau. Anh thấy ‘lười’ là 1 tố chất tốt cho tech guy đấy chứ.”
3 lời khuyên mà tôi tổng hợp được để giúp các bạn phát huy tinh thần ‘lười + tỏ ra ngu ngốc’ là:
1) “Thể hiện sự ‘lười’ bằng cách suy nghĩ phương pháp trước khi làm bất cứ việc gì. Có phương pháp rồi thì mới áp dụng tốc độ nhanh vào công việc. Như vậy mọi thứ mới chính xác và không có lỗi.”
2) “Hãy ‘be stupid’ bằng cách mặc định mọi function khi test là 100% bị lỗi. Như vậy mới tìm ra nhiều bug ẩn sâu trong function.”
3) “‘Tỏ ra ngu ngốc’ bằng cách hỏi những câu hỏi đơn giản, con nít nhất và bạn sẽ tìm được nguồn gốc vấn đề.”
Tóm tắt lại, cá nhân tôi nghĩ rằng ‘lười’ + ‘tỏ ra ngu ngốc’ là bản năng của developer giỏi. Còn bạn nghĩ sao, hãy cùng chia sẻ tại phần bình luận cuối bài viết.