Với lịch trình công việc khá bận, tôi đã lâu mới có thời gian để viết bài. Hiện tại, công việc của tôi tập trung vào làm việc từ xa, tham gia vào quá trình phát triển driver và thư viện cho chip của Intel. Được tham gia trong một dự án với yêu cầu chất lượng rất cao đã mang lại cho tôi nhiều kiến thức mới.
Trong mọi lĩnh vực, luôn có những công ty nổi bật đứng đầu, sản xuất ra những phần mềm xuất sắc nhất và đạt điểm 9, 10. Nhiều công ty khác trong ngành muốn gia vào thị trường, họ có thể tạo ra các sản phẩm tương đương về chức năng nhưng chỉ đạt được 7, 8 điểm về chất lượng. Vậy làm thế nào để đạt thêm 1 điểm nữa?
Câu trả lời là không dễ dàng. Việc đạt được 1 hoặc 2 điểm cuối cùng đó đòi hỏi sự cố gắng gấp nhiều lần so với việc đạt 8 điểm ban đầu. Mỗi hàm, mỗi đoạn đều cần được xử lý tỷ mỉ và mất rất nhiều thời gian. Phải thật sự hiểu hiểu sâu về hệ thống, để đảm bảo rằng code của mình đã tối ưu hay chưa, và trạng thái của quy trình tại mỗi thời điểm như thế nào. Các cấu trúc sau khi định nghĩa cần phải được kiểm tra lại thông qua tool dump để xác định cách sắp xếp các byte và kiểm tra xem có bao nhiêu byte trống có thể chèn vào.
![](https://vinalinux.com.vn/wp-content/uploads/2024/01/Anh-chup-man-hinh-2024-01-10-233310.png)
Tỷ lệ automation test phải đạt 100%, có nghĩa toàn bộ các test case sẽ phải thực hiện được automation. Hàng ngày, branch master cần phải được chạy automation test với toàn bộ test case. Hoàn toàn ko có manual tester. Tỷ lệ code coverage cũng phải đảm bảo 100%, đôi khi sửa thêm vào 4 -5 dòng code sản phẩm nhưng phải update lại vài trăm dòng code trong hệ thống test để có thể test qua được đoạn code đã chỉnh sửa, nhằm đảm bảo tỷ lệ code coverage 100%.
Thời gian review code, code 1 người làm trong khoảng 1 – 2 tuần, thì sẽ có 2 – 3 người review, mỗi người mất khoảng 2 – 3 ngày, họ comment và phải sửa lại nhiều. Thời gian của người review tính ra gần tương đương với người làm trực tiếp.
Ngoài ra còn rất nhiều những điều nhỏ nhặt nữa, chúng tổng hợp lại để tạo ra 1 sản phẩm đạt chất lượng cao.
Không thể phủ nhận rằng việc nâng cao chất lượng dòng code từ mức 7 hoặc 8 điểm lên mức điểm 9 hoặc 10 thực sự đòi hỏi một quá trình học tập và tích lũy kinh nghiệm kèm theo đó là rất nhiều thời gian cũng như công sức. Có khi mất đến hàng chục năm. Trong lĩnh vực lập trình Linux kernel thì không cần nhiều không gian cho sự sáng tạo – trừ lúc debug. Thông thường, khi coding sẽ được tuân theo những tiêu chuẩn đã quy định sẵn.
Sự khác biệt giữa một chuyên gia và người mới chủ yếu xuất phát từ sự tỉ mỉ, sự am hiểu về hệ thống, và khả năng nắm bắt nhiều tiêu chuẩn, code tối ưu và hạn chế tối đa bug. Đôi khi, người lập trình có thể phải can thiệp trực tiếp vào mã assembly sau khi nó đã được biên dịch từ ngôn ngữ C, một công việc đòi hỏi kiến thức rất chuyên sâu.
Sự khác biệt giữa lập trình tầng kernel và tầng application nằm ở mức độ hỗ trợ. Trong tầng application, có nhiều framework hỗ trợ, giúp tối ưu hóa và xử lý lỗi một cách hiệu quả người lập trình viên được thỏa sức sáng tạo về mặt chức năng. Ngược lại, ở tầng kernel đa số công việc phải code từ đầu trên ngôn ngữ C, các tính năng đều bị ràng buộc bởi các quy định tiêu chuẩn, không có sự hỗ trợ của framework. Chính vì vậy sự am hiểu hệ thống, tỉ mỉ, cẩn thận được ưu tiên hơn.