Bối Cảnh Thực Tế
Trong bối cảnh thị trường có nhiều biến động, chúng tôi đứng trước cơ hội phỏng vấn với một khách hàng tiềm năng. Đây là một dự án hấp dẫn, phát triển sản phẩm sử dụng chip Intel và kết nối với PC qua khe cắm PCIe.
Vòng phỏng vấn đầu tiên diễn ra với một thành viên kỹ thuật của nhóm. Các câu hỏi tập trung vào kiến thức nền tảng như cách chia sẻ bộ nhớ giữa kernel-space và user-space, sự khác biệt giữa mmap() và ioremap(), hay khái niệm về IOdevice. Sau khi vượt qua vòng 1, chúng tôi được thông báo sẽ có một vòng phỏng vấn kỹ thuật cuối cùng với trưởng nhóm (team lead). Người phỏng vấn cũng chia sẻ thêm, dự án này yêu cầu lập trình driver cho PCIe và cả phần ứng dụng để kiểm thử (testing).
Đặc Thù Phỏng Vấn Trong Lĩnh Vực Embedded
Thông thường trong lĩnh vực embedded, nếu trong CV không ghi rõ kinh nghiệm về một module cụ thể (ví dụ như PCIe), nhà tuyển dụng sẽ mặc định không hỏi sâu. Lý do là vì lập trình nhúng ở tầng thấp đòi hỏi sự am hiểu rất sâu sắc, không chỉ là “làm việc này như thế nào”, mà còn là “tại sao lại thiết kế như vậy” và “giải pháp này có ưu, nhược điểm gì”. Do đó, các kỹ sư khi đi phỏng vấn thường không có thói quen ôn luyện những module mà mình chưa từng làm, vì việc đó gần như không khả thi trong thời gian ngắn.
Lý Do Cần Một Chiến Lược Học Tăng Tốc
Mặc dù khả năng vượt qua phỏng vấn đã khá cao, nhưng chúng tôi nhận được một thông tin quan trọng: người trưởng nhóm có chuyên môn sâu và rất tâm huyết chia sẻ về PCIe. Từ đó, chúng tôi đặt ra một mục tiêu tham vọng hơn: thay vì chỉ trả lời những gì được hỏi, chúng tôi muốn chủ động đề xuất và thảo luận sâu về chính module PCIe trong buổi phỏng vấn.
Đây là một thách thức lớn. Đối với các kỹ sư đã có kinh nghiệm, để học và có thể làm việc được với một module phức tạp và dài như PCIe, cũng cần ít nhất từ 2-3 tuần. Chúng tôi cần một phương pháp đột phá hơn.
Quy Trình Học Tăng Tốc Cùng AI
Để đẩy nhanh quá trình, chúng tôi đã thực hiện các bước sau:
- Thu thập tài liệu gốc: Yêu cầu ChatGPT liệt kê các tài liệu chính thống để học về PCI. AI đã đề xuất 2 nguồn chính: chương 12 (PCI) trong cuốn “Linux Device Drivers” và một số tài liệu hướng dẫn lập trình driver PCI, giải thích các API liên quan.
- Tạo cơ sở dữ liệu và tóm tắt ban đầu: Chúng tôi tổng hợp các tài liệu này vào một file duy nhất (khoảng 100 trang) và yêu cầu AI “học” toàn bộ nội dung này, sau đó đưa ra một bản tóm tắt. Bản tóm tắt ban đầu này giống một mục lục chi tiết hơn là nội dung cô đọng.
- Nắm bắt kiến thức lõi: Trước khi đi vào các chi tiết trong bản tóm tắt, chúng tôi tập trung vào việc hiểu bản chất vấn đề bằng cách hỏi AI: “PCI ra đời để giải quyết vấn đề gì? Công nghệ này có ưu và nhược điểm ra sao?”. Sau vài lượt hỏi đáp, chúng tôi đã nắm được các khái niệm cốt lõi như Configuration Space, BARs, Hotplug…
- Lọc và phân loại kiến thức: Chúng tôi quay lại bản tóm tắt của AI để đánh giá: chủ đề nào cần tìm hiểu sâu, chủ đề nào có thể bỏ qua. Bước này giúp chúng tôi không lãng phí thời gian vào những kiến thức đã có sẵn. Ví dụ, khi AI đề cập đến DMA, hàm
probe(),remove()… chúng tôi có thể bỏ qua vì đã quen thuộc từ các module khác. - Đi sâu vào các phần còn thiếu: Với những đầu mục được xác định là “chưa có”, chúng tôi yêu cầu AI trình bày chi tiết. Quá trình này luôn đi kèm sự đối chiếu logic và so sánh với hệ thống kiến thức hiện có trong đầu để kiểm chứng tính đúng đắn, vì đôi khi AI cũng có thể đưa ra thông tin sai lệch.
- Đối chiếu lý thuyết với mã nguồn: Chúng tôi tìm các mã nguồn mẫu về PCI driver và application, sau đó đưa cho AI để cùng phân tích, đối chiếu giữa mã nguồn và phần lý thuyết đã học.
Quá trình học tập được xem là hoàn tất khi chúng tôi cảm thấy sự am hiểu của mình về PCIe đã đạt đến mức tương đồng với các module khác từng làm (như SPI). Cụ thể, nó phải đạt được các tiêu chí sau:
- Hiểu được bản chất, cách vận hành của phần cứng PCIe.
- Hiểu được các API, cấu trúc dữ liệu giữa kernel và driver, giữa application và thiết bị.
- Nắm được khung mã nguồn của một driver và ứng dụng PCI.
Các Tình Huống Áp Dụng Thực Tế
Phương pháp này có thể áp dụng hiệu quả trong các tình huống:
- Kỹ sư mới tham gia dự án, cần học nhanh để bắt kịp công việc.
- Kỹ sư (đặc biệt ở cấp độ Senior) cần học nhanh một công nghệ mà dự án đang phỏng vấn yêu cầu.
- Công ty tham gia đấu thầu dự án, cần đào tạo nhanh cho đội ngũ để ghi điểm với khách hàng.
Mặt Trái Của Việc Học Nhanh Và Lưu Ý Quan Trọng
Tuy nhiên, phương pháp học nhanh này có một nhược điểm lớn và không nên bị lạm dụng. Nếu so sánh với phương pháp học chậm (học truyền thống), chúng ta sẽ thấy rõ sự khác biệt.
Lợi ích của phương pháp học chậm:
- Nếu học qua sách và nghiền ngẫm kỹ, ngoài kiến thức, chúng ta còn thẩm thấu được cách tư duy, quan sát vấn đề của tác giả.
- Nếu học bằng cách tự ghép nối các mảnh kiến thức rời rạc trên mạng, não bộ của chúng ta sẽ được rèn luyện khả năng sắp xếp, tổ chức.
-> Kết luận: Phương pháp học chậm không chỉ cung cấp kiến thức mà còn giúp chúng ta phát triển tư duy. Trong khi đó, phương pháp học nhanh này chủ yếu chỉ cung cấp kiến thức.
Điều Kiện Tiên Quyết Để Học Nhanh Hiệu Quả
Phương pháp học nhanh cùng AI mà chúng tôi trình bày khác với việc chỉ đọc tóm tắt và ghi nhớ. Nó bao gồm bước đối chiếu và liên kết kiến thức mới vào hệ thống kiến thức cũ. Điều này đảm bảo rằng kiến thức dù được tiếp nhận nhanh nhưng vẫn có chất lượng, có sự kết nối sâu sắc.
Tuy nhiên, phương pháp này chỉ phát huy được tối đa hiệu quả nếu người sử dụng đã có nền tảng về Tư duy Hệ thống (System thinking). Bởi vì bản chất của nó là đập vỡ kiến thức mới thành các mảnh nhỏ, đối chiếu từng mảnh và thực hiện ghép nối chúng vào một hệ thống kiến thức có sẵn trong đầu.
Tư duy Hệ thống có thể khó khăn để xây dựng trong giai đoạn đầu, nhưng khi kinh nghiệm và tuổi tác tăng lên, nó càng phát huy hiệu quả. Đây là lý do một lập trình viên nhiều kinh nghiệm có thể học cái mới nhanh hơn rất nhiều so với chính bản thân họ lúc còn trẻ.
