Sao lập trình khó thế?

Trả lời bởi Alan Mellor, bán code từ 1981

Vì nó khó dần.

Viết code kiểu nghiệp dư khá là dễ và hầu hết mọi người đều làm được. Tạo 1 bảng tính trong Excel, hoặc 15-20 dòng code trong 1 ngôn ngữ nào đó, hầu hết mọi người đều làm được.

Với tư cách là 1 nghề, 2 yếu tố sau xoắn não mấy anh thợ code lần 1:

Xác định xem thử cần code cái gì. Bạn sẽ bị yêu cầu “Vui lòng làm cho cái phần mềm này gửi email cho tôi nếu 1 người được bị từ chối yêu cầu chi phí 5 lần” Rồi, bạn code kiểu gì?

Gắn code mới vào hệ thống đang có. Bạn phải tìm ra cách để gắn code mới vào hệ thống code đang có mà không làm toang mọi thứ. Đôi khi trong cái hệ thống đang chạy có hàng triệu dòng code mà bạn chưa (và có lẽ chẳng bao giờ) đọc hiểu được. Tệ hơn, hệ đống đấy có thể rất mong manh, và dễ “toang” chỉ với một vài thay đổi nhỏ.

Và rồi, với tư cách là thợ code chuyên nghiệp, Thợ code cần hoàn thiện tốt hơn

Thợ code muốn code được test tự động, xoắn não tập 2, với việc phải thiết kế nó một cách chỉnh hơn chút.

Thợ code muốn code được deploy dễ dàng lên các hệ thống máy tính, nâng cấp thiết kế lần 2.

Thợ code muốn code được bảo mật (để không bị hacked ngớ ngẩn như anh Q)

Thợ code phải đảm bảo dữ liệu không bị “hỏng” (corrupt)

Thợ code muốn đồng nghiệp dễ dàng đọc hiểu và dễ dàng thay đổi source code, nâng cấp thiết kế lần 3.

Thợ code muốn code phải tráng kiện (robust) và xử lý các dữ liệu (input data) không phù hợp một cách đúng đắn (để không ném exception vào mặt user), để có thể xử lý các tình huống user cố tình hoặc vô ý “trật tay”, Thợ code cần phải học cách xử lý các tình huống đó.

Tới đây, não mấy anh thợ code đã bị xoắn thêm 6 lần

Rồi, mấy anh sếp muốn biết lúc nào mọi thứ đều sẵn sàng, để họ có thể lập kế hoạch xung quanh mốc release đó. Một khi cái quảng cáo chạy trên TV, phần mềm đó cần phải chạy ngon.

OK, cú xoắn đau nhất đến thời điểm hiện tại.

Tiếp, giờ để duy trì phần mềm hoạt động tốt để đảm bảo kinh doanh, Thợ code phải xà quần với tính năng mới, xử lý vấn đề còn tồn đọng (tech debt), và fix bug.

Không có “viên đạn bạc” nào cho vấn đề này. Cuộc sống mà, luôn luôn phải đánh đổi.

Thợ code sẽ phải điều phối và lựa chọn thực hiện tính năng nào trong hàng ti tỉ yêu cầu đa dạng của người dùng.

Cái phần mềm đó, phải chạy 24/7 hoặc gần như thế, thậm chi khi mà quá nửa hệ thống bị hỏng (đối với hệ thống nhúng) như disk drives treo, hệ thống làm mát treo, hay thậm chí mất điện, thì hệ thống (phần mềm + phần cứng) cũng cần “kết thúc đúng quy trình” chứ không gây ra “bất thường” (exception).

Xoắn não tập tập 9

Thợ code cần sử dụng các thư viện có sẵn bất cứ khi nào có thể, để ta có thể hiểu code mà ta không viết. Xoắn lần nữa. Nhưng thợ code vẫn tìm được cách để hiểu được. Khổ não hơn, lâu lâu thợ code thực sự (Software Engineer) cũng phải hiểu một tí về luật pháp, để đảm bảo rằng mấy thư viện mà Thợ code dùng không gây ra ảnh hưởng xấu tới việc kinh doanh. (*)

Trans notes: các phần mềm nguồn mở có 1 thứ đi kèm là “License”, một số license cho dùng thoải mái (MIT, Apache) nhưng những License như GPL thì bắt buộc nếu phần mềm tái sử dụng thư viện đó thì phải public source (opensource) luôn.

Cần nhớ rằng, người ta trả tiền để mua phần mềm chạy ngon (để giải quyết vấn đề của họ), vì thế, chúng ta cần đảm bảo code chạy mượt mà ổn định.

Thợ code cũng giống như nghề khác, chúng ta làm việc với con người, với đủ tầng lớp học thức và kỹ năng, từ những người tuyệt vời đến những kẻ mà ta muốn tránh càng xa càng tốt.

11 chiều xoắn não khác nhau, đôi khi xoắn lần lượt, có khi xoắn 3, 4 chiều cùng lúc.

Thợ code cũng cần phải học rất nhiều về Phương pháp tính (computing), kỹ thuật (engineering), loại nghiệp vụ tương ứng (với phần mềm đang được phát triển), kiểm thử (testing).

Coding không khó, nếu bạn chỉ viết vài dòng code cho vui, viết lúc rảnh rỗi, viết tùy hứng và vứt bỏ bất cứ khi nào bắt đầu thấy “khó”.

Cái khó là, với tư cách là thợ code chuyên nghiệp, bán code kiếm cơm, chúng ta đâu code tùy hứng vậy được.

Theo: Long Nguyễn Xuân

Leave a Reply

Your email address will not be published. Required fields are marked *