Lập trình automotive là gì và vì sao nó đang được chú ý?
Lập trình automotive là mảng viết phần mềm cho các bộ điều khiển điện tử bên trong xe hơi. Trong những tháng gần đây, đội ngũ chúng tôi nhận được rất nhiều câu hỏi về chủ đề này, nhất là từ các bạn sinh viên CNTT năm cuối.
Bài viết này là những điều chúng tôi đúc kết được khi trực tiếp làm việc với AUTOSAR, C/C++ và automation test trong các dự án thực tế. Chúng tôi không muốn kể lại lý thuyết sách vở. Thay vào đó, chúng tôi chia sẻ những va vấp thật mà đội ngũ đã gặp.
Một chiếc xe hiện đại có thể chứa hàng chục, thậm chí hàng trăm bộ điều khiển điện tử, gọi tắt là ECU. Chúng phối hợp với nhau để vận hành động cơ, hệ thống phanh, túi khí và nhiều tính năng khác. Mỗi ECU chạy phần mềm nhúng với tài nguyên khá hạn chế. Bộ nhớ ít, tốc độ xử lý có giới hạn. Thế nhưng phản hồi lại phải chính xác gần như tuyệt đối về thời gian. Chỉ cần lệnh phanh chậm vài mili giây, hậu quả có thể rất nghiêm trọng.
Có bạn tìm đến mảng này vì tò mò, muốn thử điều gì đó khác với web hay mobile đại trà. Có bạn lại nghe nói mức lương ổn và nhu cầu tuyển dụng đang tăng. Cả hai lý do đều chính đáng. Tuy vậy, chúng tôi vẫn khuyên bạn nên hiểu rõ bản chất công việc trước khi quyết định gắn bó lâu dài.
Automotive khác gì lập trình phần mềm thông thường?
Nhiều bạn mới tiếp cận thường nghĩ lập trình automotive cũng giống viết app, chỉ đổi ngôn ngữ. Khoảng cách thực tế lớn hơn nhiều. Ngành ô tô đặt ra những tiêu chuẩn an toàn nghiêm ngặt như ISO 26262, thứ mà dân làm web gần như chưa bao giờ phải chạm tới.
Đội ngũ chúng tôi từng làm việc cùng một đối tác chuyên gia công phần mềm cho nhà cung cấp linh kiện ô tô. Họ kể rằng chỉ một dòng code sai trong module điều khiển động cơ cũng có thể khiến cả lô sản phẩm phải kiểm tra lại. Chi phí phát sinh từ đó không hề nhỏ, chưa kể ảnh hưởng đến uy tín của cả chuỗi cung ứng.
Áp lực về chất lượng ở đây khác hẳn phát triển ứng dụng thông thường. Một app bị lỗi thì phát hành bản vá là xong. Nhưng phần mềm đã lắp vào xe rồi, việc sửa chữa phức tạp và tốn kém hơn rất nhiều lần.
AUTOSAR – nền tảng bạn nên hiểu từ sớm
AUTOSAR là viết tắt của Automotive Open System Architecture. Đây là kiến trúc phần mềm chuẩn hoá, được nhiều hãng xe và nhà cung cấp linh kiện trên thế giới cùng xây dựng và sử dụng chung.
Trước khi AUTOSAR ra đời, mỗi hãng thường tự phát triển phần mềm theo cách riêng. Việc tái sử dụng code giữa các dự án vì thế rất khó khăn. AUTOSAR xuất hiện để giải quyết đúng bài toán đó, giúp các module dễ chia sẻ và tái sử dụng giữa nhiều nền tảng xe khác nhau.
Với người mới, chúng tôi khuyên bạn dành thời gian tìm hiểu vai trò cụ thể của AUTOSAR trong ngành công nghiệp ô tô trước khi viết dòng code đầu tiên. Hiểu bức tranh tổng thể sẽ giúp bạn biết mình đang đứng ở lớp nào trong kiến trúc. Nhờ vậy bạn học đúng trọng tâm, thay vì học lan man rồi nản giữa chừng.
AUTOSAR chia phần mềm thành nhiều lớp: lớp ứng dụng, lớp trung gian và lớp trừu tượng hoá phần cứng. Người mới thường bắt đầu từ lớp ứng dụng vì nó gần với logic nghiệp vụ nhất. Các lớp thấp hơn, gần phần cứng hơn, nên để sau khi nền tảng đã vững.
C và C++ trong các dự án ô tô
Nếu AUTOSAR là bộ khung, thì C và C++ là ngôn ngữ dựng nên phần lớn phần mềm bên trong. Lý do khá thực tế: hai ngôn ngữ này cho phép kiểm soát bộ nhớ và tài nguyên phần cứng ở mức chi tiết mà ngôn ngữ bậc cao khó làm được.
C thường được dùng cho phần mềm nhúng cấp thấp, nơi cần tối ưu tài nguyên tối đa. C++ được dùng nhiều hơn ở các lớp trừu tượng cao hơn, hoặc trong mô phỏng và kiểm thử. Cả hai đều đòi hỏi viết code cực kỳ cẩn thận. Một lỗi tràn bộ nhớ nhỏ cũng có thể làm hệ thống treo ngay khi xe đang chạy trên đường.
Đội ngũ chúng tôi có tổng hợp riêng một bài về cách áp dụng ngôn ngữ C trong dự án ô tô, phân tích những quy tắc viết code an toàn mà nhiều đội automotive tuân thủ. Ví dụ như hạn chế cấp phát bộ nhớ động lúc chạy, hay tránh đệ quy không kiểm soát trong các hàm quan trọng.
Nếu bạn định theo mảng này, đây là kiến thức nên nắm sớm. Nó khác khá nhiều so với thói quen viết C++ trong lập trình ứng dụng thông thường.
Automation test trong ngành ô tô
Đây là phần mà theo quan sát của chúng tôi, nhiều bạn mới học hay bỏ qua. Ở các ngành phần mềm khác, test đôi khi chỉ là bước kiểm tra cuối trước khi phát hành. Trong automotive, automation test chạy gần như song song suốt vòng đời dự án, từ lúc thiết kế đến khi phần mềm lên xe thật.
Lý do khá đơn giản. Phần mềm điều khiển xe không được phép có lỗi nghiêm trọng khi ra thị trường. Một chiếc xe đã bán rất khó vá lỗi như một ứng dụng di động. Dù hiện nay đã có cập nhật từ xa, không phải lỗi nào cũng xử lý được theo cách đó.
Vì vậy các đội thường xây dựng hệ thống kiểm thử tự động chạy hàng nghìn kịch bản mô phỏng. Từ điều kiện thời tiết khắc nghiệt đến các tình huống va chạm giả lập, mọi thứ đều được kiểm tra kỹ trước khi bàn giao. Nếu bạn chưa quen khái niệm này, hãy đọc qua automation test là gì và cách nó vận hành trong thực tế trước khi đi sâu hơn.
Một điểm thú vị là kỹ năng automation test học trong automotive không chỉ dùng được cho ngành này. Tư duy viết test case và tự động hoá kiểm thử khá linh hoạt, nên bạn hoàn toàn có thể chuyển sang kiểm thử phần mềm ở mảng khác.
Một câu chuyện từ dự án sinh viên
Có lần chúng tôi hỗ trợ một bạn sinh viên năm cuối làm đồ án mô phỏng hệ thống phanh ABS bằng phần mềm. Bạn ấy vốn giỏi lập trình web, code sạch và tư duy tốt. Nhưng khi chuyển sang viết C cho môi trường nhúng, bạn liên tục gặp lỗi khó hiểu.
Nguyên nhân hoá ra là thói quen cấp phát bộ nhớ động thoải mái như khi làm web. Chúng tôi ngồi cùng bạn rà từng đoạn code. Chúng tôi giải thích vì sao automotive thường tránh dùng malloc trong vòng lặp chính, và vì sao cần kiểm soát chặt thời gian thực thi của từng hàm quan trọng.
Sau vài buổi, bạn bắt đầu quen với tư duy viết code an toàn. Câu chuyện này cho thấy chuyển sang automotive không hề khó, nhưng cần thời gian để đổi tư duy. Đó không đơn thuần là học thêm cú pháp mới.
Nên học theo lộ trình nào?
Nhiều bạn hỏi chúng tôi nên bắt đầu từ đâu nếu chưa có nền tảng gì về automotive. Theo kinh nghiệm của bên mình, không cần học ngay AUTOSAR từ ngày đầu. Bạn nên đi theo ba bước sau:
- Củng cố thật chắc C và C++ cơ bản, đặc biệt là con trỏ, quản lý bộ nhớ và cấu trúc dữ liệu.
- Tìm hiểu khái niệm hệ thống nhúng, cách vi điều khiển hoạt động, trước khi vào các chuẩn riêng của ngành ô tô.
- Cuối cùng mới học sâu về AUTOSAR, công cụ mô phỏng và automation test. Lúc này bạn sẽ tiếp thu nhanh hơn vì đã có nền vững.
Nếu còn phân vân, chúng tôi có một bài hướng dẫn gộp chung lộ trình học lập trình embedded automotive từ con số 0, bao gồm AUTOSAR, C/C++ và tư duy hệ thống nhúng. Ngoài ra, bạn có thể ghé trang chủ CodingGuru để xem thêm nhiều bài viết về công nghệ dành cho người mới.
Có nên theo đuổi mảng lập trình automotive không?
Câu trả lời phụ thuộc vào sở thích và định hướng của từng người. Nếu bạn thích những bài toán đòi hỏi độ chính xác cao, muốn làm việc gần với phần cứng và không ngại quy trình kiểm thử nghiêm ngặt, đây là mảng đáng cân nhắc để phát triển lâu dài.
Theo chúng tôi quan sát, nhu cầu nhân sự cho lập trình automotive, AUTOSAR, C/C++ và automation test tại Việt Nam đã tăng đều trong vài năm qua, khi nhiều công ty gia công phần mềm ô tô mở rộng đội ngũ trong nước.
Nếu bạn đang học CNTT và muốn một hướng đi khác với web hay mobile phổ thông, đây là lựa chọn đáng xem xét. Điều kiện là bạn phải sẵn sàng đầu tư thời gian để nắm vững C/C++ trước khi động đến các chuẩn chuyên ngành. Một khi đã quen với tư duy viết code an toàn kiểu automotive, bạn sẽ có một lợi thế nghề nghiệp mà không nhiều lập trình viên khác có được.


