Trong bài viết mình sẽ cố gắng giải thích vấn đề này một cách tổng quát và dễ hiểu cho người mới có thể hiểu được.
Nếu như nhắc đến lập trình vi điều khiển thì kiến thức về phần cứng là không thể thiếu. Tuy nhiên lập trình nhúng Linux nó có những điểm khác biệt như sau:
-
Lập trình nhúng Linux là lập trình trên nền hệ điều hành. Một sản phẩm nhúng sẽ bao gồm hardware, software (driver và application). Lập trình driver thì cần phải có kiến thức về phần cứng nhưng lập trình app thì chưa chắc cần. Nguyên nhân là việc lập trình app trên nền hệ điều hành thì application chỉ tương tác với hệ điều hành mà thôi. Việc code app cho các board nhúng như BBB, Pi về bản chất không khác gì code app cho máy tính. Lập trình trên nền hệ điều hành làm ẩn đi phần cứng bên dưới là điểm khác biệt rất lớn với lập trình nhúng vi điều khiển.
-
Điểm thứ 2 là xu hướng của lập trình nhúng hiện đại. Ở VN hiện tại có nhiều công ty outsourcing/chi nhánh của cty nước ngoài làm về lập trình nhúng. Lập trình nhúng hiện đại mang đặc thù của công nghiệp, nơi mà công việc được chuyên môn hóa và chia thành các mắt xích. Nếu bạn làm trong mắt xích làm ở tầng application thì mặc dù gọi là lập trình nhúng nhưng công việc không khác gì code app hoặc web trên PC. Nếu gọi là lập trình nhúng ở đây thì mình không biết có đúng không nữa. Gọi là code app cho thiết bị nhúng có lẽ sẽ thể hiện đúng bản chất công việc hơn.
-
Nhúng Linux rất rộng. Khi nhắc đến nhúng Linux là chúng ta đang ám chỉ đến việc phát triển các sản phẩm phần cứng chạy hệ điều hành Linux. Tuy nhiên nhân Linux kernel lại được chạy trên nhiều loại hệ điều hành (distribution) – ví dụ như Android. Việc chúng ta chỉ nhắc đến lập trình nhúng Linux vẫn chưa thể hiện rõ được chuyên ngành cụ thể chúng ta sẽ làm sau này. Làm về tầng trên / dưới, full stack, Android, networking…
Tóm lại từ 3 ý trên, lập trình nhúng Linux là một ngành nghề với nhiều chuyên ngành bên trong, mỗi chuyên ngành sẽ yêu cầu những skill cụ thể và có sự khác biệt lớn giữa các chuyên ngành với nhau. Phải xác định được chuyên ngành mình muốn làm là gì trong nhúng Linux thì mới trả lời được câu hỏi có cần kiến thức về phần cứng hay không?
Nếu làm nhúng Linux ở tầng dưới hoặc full stack thì chắc chắn cần kiến thức về phần cứng. Vậy nếu làm ở tầng app thì có cần không? Câu trả lời là không. Vì như mình đã nói, nếu các bạn join vào những công ty lớn, chuyên môn hóa cao thì việc code app cho thiết bị nhúng không khác gì code app cho PC. Nên những skill họ yêu cầu cũng như ứng viên code tầng app. Ví dụ như C++, OOP, Python,… Nhưng ở đây sẽ có 1 vấn đề, thứ nhất nó sẽ cản trở các bạn khi pv ở những công ty khác yêu cầu kiến thức về hardware – chỗ này mình đánh giá vẫn chiếm số lượng lớn hơn ở thời điểm hiện tại. Thứ 2 khi bạn lên senior, có nhiều cơ hội bạn sẽ sang các cty nhỏ để làm tech lead, ở đây sẽ cần kiến thức dạng full stack, vậy nên vẫn cần biết về phần cứng. Đây sẽ là những hạn chế nếu như các bạn tham gia vào lĩnh vực embedded Linux mà không có kiến thức về hardware.
Lời khuyên dành cho người mới: Làm về nhúng Linux vẫn rất nên học về hardware. Không có kiến thức về hardware thì vẫn tìm được việc nhưng cơ hội sẽ bị bó hẹp. Và nếu chỉ làm những công việc đó thì các bạn sẽ không có trải nghiệm đúng nghĩa về ngành này.
