Đạo Đức Nghề Nghiệp Của Lập Trình Viên
Hôm nay nhận được bản in thử tập san “Lập trình viên” số tháng 12 năm 2012. Trên đó có bài viết tôi được mời đóng góp. Nhân dịp này xin lưu lại bản gốc để
Lập trình có thể là nghề nghiệp theo suốt cuộc đời. Nhưng điều kiện tiên quyết là bạn phải thực sự yêu thích việc viết code, chứ không phải coi nó như công cụ để đạt mục tiêu khác.
Khi dự định gắn bó hàng chục năm với nghề, ắt hẳn ta phải thường xuyên tự vấn: Nỗ lực ở lĩnh vực nào mang lại hiệu quả cao nhất? So với 10 năm trước, mình đã trưởng thành ra sao? Và 10 năm nữa sẽ vượt qua chính mình hiện tại như thế nào?
Hành trình sự nghiệp của tôi còn chưa đi hết nửa chặng đường, càng làm càng thấy sự tích lũy chưa đủ. Luôn có những góc nhìn mới thay thế dần nhận thức cũ. Nhân lời mời thảo luận về chủ đề sâu sắc này bằng ngôn từ súc tích, tôi chỉ dám chia sẻ những suy nghĩ thô sơ ở hiện tại.
Theo tôi, dù làm ở lĩnh vực nào, mỗi lập trình viên đều cần chú trọng ba khía cạnh sau:
Thứ nhất: Giữ mãi ngọn lửa tò mò với thế giới chưa biết
Nếu chỉ thành thạo một ngôn ngữ lập trình, hãy nhanh chóng học thêm ngôn ngữ khác, càng khác biệt về bản chất càng tốt. Sự tương phản này sẽ mở ra góc nhìn mới về những vấn đề xưa cũ.
Khi chỉ đắm chìm trong một lĩnh vực chuyên môn, hãy thử thám hiểm các vùng đất mới. Hầu hết mọi người thích giải quyết vấn đề trong môi trường quen thuộc, bởi tiếp cận cái mới luôn gặp rào cản học thuật. Bạn phải đầu tư thời gian hiểu rõ nền tảng lý thuyết trước khi bắt tay vào thực chiến. Việc sắp xếp kiến thức mới trong đầu để sử dụng linh hoạt khác hẳn với việc luôn dựa vào tài liệu bên ngoài - quá trình này tuy đau đớn nhưng đáng giá. Chính những kiến thức tưởng chừng vô dụng lại giúp ta vượt qua giới hạn bản thân. Mà muốn vậy, cần giữ mãi lòng ham học thuật thuần khiết.
Thứ hai: Nắm chắc từng chi tiết ở mọi tầng hệ thống
Hãy rèn luyện khả năng giải thích rõ ràng từng lớp vận hành của hệ thống: Từ việc phần cứng thực thi lệnh máy, luồng dữ liệu di chuyển giữa ổ cứng, RAM, cache, CPU; quá trình biên dịch, liên kết code, hành trình của mã nguồn khi được nạp vào bộ nhớ; cách JIT tăng tốc bytecode; cơ chế hệ điều hành quản lý thread và xử lý IO; nguyên lý làm việc của các thư viện bên thứ ba; giao thức truyền thông trong môi trường mạng; mối quan hệ giữa các module trong code…
Càng hiểu sâu về chi tiết, tầm nhìn tổng thể càng sáng tỏ. Bạn sẽ nhận ra từng tầng thiết bị đóng vai trò “black box” abstraction cho tầng trên, cho đến khi chạm vào yêu cầu nghiệp vụ thực tế. Khả năng trừu tượng hóa không chỉ đến từ am hiểu chuyên môn, mà còn từ việc thấu hiểu cấu trúc nền tảng. Khi đó, bạn dễ dàng đánh giá tính hợp lý của giải pháp đang xây dựng.
Thứ ba: Trực giác với dòng code
Lập trình viên xuất sắc có thể nhanh chóng phát hiện điểm nghẽn hiệu năng, tìm ra nguyên nhân sụp đổ hệ thống, nhận diện đoạn code phi logic… Khả năng ước lượng chính xác rất quan trọng: Tính nhẩm nhanh chi phí hệ thống dựa trên quy mô dữ liệu; phán đoán tác động hiệu năng từng dòng code viết ra; tối giản độ phức tạp liên kết giữa các module.
Theo tôi, cách duy nhất để phát triển trực giác này là không ngừng viết code. Trong lúc lập trình, hãy kiên quyết loại bỏ mọi dấu hiệu “mùi code” (code smell). Sớm sửa sai luôn rẻ hơn gấp bội so với để lỗi tồn tại lâu ngày gây sụp đổ toàn bộ.
Hãy luôn tìm kiếm những thử thách mới để khơi dậy hứng khởi. Hãy nhớ: Lập trình bản chất là trò chơi trí tuệ đầy thú vị, chứ không đơn thuần là công cụ giải quyết bài toán.
Vân Phong, ngày 6 tháng 11 năm 2012