Những dự án phát triển Internet of Things (IoT) đang nổi lên ở rất nhiều công ty công nghệ trên toàn thế giới. Hiện tại chỉ có khoảng 300 nghìn lập trình viên tham gia IoT nhưng đến 2020, thế giới sẽ cần tới 4,5 triệu lập trình viên. Vì thế, việc lựa chọn ngôn ngữ lập trình để phát triển trong tương lai là một định hướng của các công ty công nghệ nếu muốn đi theo xu hướng IoT.

Nền tảng phần cứng hiện nay cho phép hệ thống nhúng với các ứng dụng dễ dàng thiết kế các hệ thống IoT. Cách đây không lâu, lựa chọn về ngôn ngữ lập trình được quyết định bởi nền tảng phần cứng. Nhiều nền tảng hiện đại dựa trên các tiêu chuẩn mã nguồn mở và có khả năng hỗ trợ nhiều ngôn ngữ cho phép linh hoạt hơn trong việc tương tác. Vậy yếu tố nào để có thể quyết định ngôn ngữ lập trình nào được sử dụng trong một dự án IOT? Trong một số trường hợp, lựa chọn vẫn bị giới hạn bởi nền tảng phần cứng tuy nhiên phần lớn điều này dựa trên yếu tố chính là sự thành thạo ngôn ngữ của đội ngũ phát triển.

Có 11 ngôn ngữ nổi lên trong việc lựa chọn lập trình các hệ thống nhúng. Chúng bao gồm các ngôn ngữ từ phát triển toàn hệ thống như C ++ hay Java cho đến lập trình ứng dụng cụ thể như Go và Parasail. Mỗi ngôn ngữ này đều có ưu và nhược điểm riêng nhưng các chuyên gia có thể cân nhắc tùy chọn để phù hợp với dự án IoT của mình

1. Ngôn ngữ C

Ngôn ngữ lập trình vốn được thiết kế trong chương trình chuyển mạch điện thoại sẽ là một lựa chọn hợp lý dành cho việc phát triển hệ thống nhúng. C gần như là một ngôn ngữ chung đang tồn tại trong giới lập trình mà gần như ai cũng phải biết. Ngôn ngữ này có sẵn hầu hết trên mọi nền tảng hệ thống nhúng tiên tiến đang có mặt trên thị trường. Đối với một số nền tảng không hỗ trợ trực tiếp thì đây vẫn là ngôn ngữ chuyên dụng được sử dụng trong các bộ công cụ phát triển phần mềm (SDK).

Trong điều kiện hiện nay, ngôn ngữ C cũng có một ít trở ngại khi nó mang tính thủ tục nhiều hơn là hướng đối tượng. Ngôn ngữ này còn không được thiết kế để hướng tới giao diện đồ họa người dùng và được dùng để biên dịch hơn là diễn giải. Tuy nhiên đây vẫn là một ứng cử viên mạnh mẽ cho công ty nào đang nỗ lực phát triển IoT.

2. Ngôn ngữ C++

Khi thế giới lập trình đã bắt đầu chuyển sang ngôn ngữ hướng đối tượng trong đầu những năm 1980 thì ngôn ngữ thủ tục như Fortran, Cobol, C dường như rơi dần vào quên lãng. Trong khi Fortran và Cobol đã trở thành ngôn ngữ hướng đối tượng nhưng C không thay đổi bởi sự liên quan của nó đến công việc của Bjarne Stroustrup, người đã tạo nên ngôn ngữ này. C ngày càng phát triển và có thêm nhiều tính năng hướng đối tượng rồi cuối cùng trở thành C++.

C ++ vẫn giữ nguyên phương thức, cấu trúc của C nhưng được bổ sung thêm khả năng trừu tượng hóa dữ liệu, đối tượng (object), lớp (class). Tất cả những tính năng này làm cho C ++ trở thành sự lụa chọn cho những người viết ứng dụng nhúng, lập trình IoT cho các hệ thống Linux. Ngôn ngữ lập trình này vẫn đang hoạt động mạnh mẽ sau hơn 30 năm xuất hiện.

3. Java

C và C ++ được thiết kế để cho phép lập trình viên kiểm soát trực tiếp thiết bị thông qua ứng dụng, tuy nhiên điều này đòi hỏi các đoạn mã được viết cụ thể cho từng đối tượng. Phương thức này không phù hợp với các thiết bị cầm tay trong xu hướng di động ngày nay.

Trước đây, Java chạy chậm hơn những ngôn ngữ dịch thẳng ra mã máy như C và C++, nhưng sau này nhờ công nghệ “biên dịch tại chỗ” – Just in time compilation, khoảng cách này đã được thu hẹp, và trong một số trường hợp đặc biệt Java có thể chạy nhanh hơn. Điều này cũng khiến Java ít phụ thuộc thuộc trong việc việc tích hợp phần cứng vào trình biên dịch. Để có những thiết lập cụ thể, kiểm soát tốt hơn từng đối tượng phần cứng, Java phụ thuộc vào thư viện mà các loại thiết bị này hỗ trợ

Tất cả điều này làm cho Java trở nên tuyệt vời trong quan điểm kinh tế của các nhà phát triển cũng như công ty công nghệ. Việc đầu tư vào các đoạn mã Java có thể được tái ứng dụng trên nhiều nền tảng. Ngoài ra Java còn được phổ biến khi là một trong ngôn ngữ lập trình chính được đưa vào giảng dạy, vì thế tìm kiếm một chuyên gia lập trình trang bị các kĩ năng Java là điều khá dễ dàng. Khó khăn duy nhất của ngôn ngữ này là phải đảm bảo rằng nền tảng phần cứng được lựa chọn hỗ trợ Java (trên thực tế hiện nay thì có rất ít nền tảng mạnh mẽ không hỗ trợ Java) và các thư viện hỗ trợ phần cứng có sẵn để tạo nên các chức năng điều khiển mà thiết bị cần.

4. JavaScript

Ngôn ngữ JavaScript đơn giản là một biến thể của Java. JavaScript được nhận diện bằng cú pháp dễ gần, không bắt lỗi quá chặt, và cung cấp khái niệm cơ bản trong lập trình. Java và JavaScript có thể sử dụng chung một số thư viện, có cú pháp tương tự như C nhưng lại được phát triển riêng biệt.

Giống như tên gọi, Javascript là một ngôn ngữ lập trình kịch bản dựa trên đối tượng được phát triển từ các ý niệm nguyên mẫu và được sử dụng nhiều cho việc xây dựng các ứng dụng Web-fronted. Ví dụ, nếu muốn sử dụng Web server Apache trên Raspberry Pi để thu thập dữ liệu từ một hệ thống cảm biến dựa trên các bản mạch vi xử lý thì JavaScript là một khởi đầu dễ dàng.

Kể từ khi xuất hiện tại Netscape, JavaScript đã phát triển, hoàn thiện đầy đủ các tính năng. Từ việc dùng rộng rãi cho các trang web cho đến tạo kịch bản sử dụng các đối tượng nằm sẵn trong ứng dụng. Không ai phủ nhận được sức mạnh cũng như sự phổ biến của JavaScript, nhưng những vấn đề rắc rối xung quanh từ hình thức xấu xí, cách trình bày phức tạp, ngôn ngữ kì quặc khiến nhà phát triển gặp khó khăn.

5. Python

Một ngôn ngữ thiết kế trong thời gian nghỉ lễ và được đặt tên theo đoàn kịch phim hài nổi tiếng dường như là một ứng cử viên sáng giá cho các chuyên gia lập trình yêu cầu sự đơn giản. Ngoài ra ngôn ngữ Python có thể được mở rộng để sử dụng trong ngành công nghiệp nặng hay được dùng để phân tích dữ liệu trong ngành tài chính. Ngoài ra việc ứng dụng trong các điều khiển nhúng của IoT cho thấy khả năng linh hoạt trong phương thức sử dụng của ngôn ngữ này. Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu điểm tiết kiệm thời gian phát triển ứng dụng vì không cần phải thực hiện biên dịch và liên kết.

Một ưu điểm đáng chú ý khác là Python có cú pháp chặt chẽ rất giống với ngữ pháp tiếng Anh và các thông số kỹ thuật được thiết kế dễ đọc, nhỏ gọn và rõ ràng. Bất cứ ai đã từng vật vã để gỡ rối trong C thì đều đánh giá cao những gì mà Python mang lại.

Python cũng đủ mạnh để ứng dụng trong các nền tảng nhúng. Đối với bất kỳ ứng dụng đòi hỏi khả năng truy xuất dữ liệu lớn thì Python là một ứng cử viên rất tiềm năng. Nhờ được sử dụng trên các trang web như Pinterest và Instagram, ngôn ngữ lập trình Python cũng đang ngày một phổ biến hơn.

6. Ngôn ngữ Go

Ngôn ngữ lập trình Go được phát triển tại Google và có sẵn trên một loạt các bộ vi xử lý và nền tảng. Đây là ngôn ngữ có nguồn gốc từ C nhưng được thiết kế nhằm vượt qua những giới hạn trước đây trong việc khai thác sức mạnh của bộ xử lý đa lõi và phần cứng thế hệ mới. Thay vì sử dụng hệ điều hành thì nay thông qua Go, các phần mềm cũng có thể tương tác trực tiếp với nền tảng đa lõi giúp cho việc xử lý nhanh hơn.

Mục tiêu của Google là tạo ra một ngôn ngữ mã hóa hiệu quả hơn, và một số tính năng mới của Go đã làm nổi bật điều đó như tăng tốc độ biên dịch, giảm thiểu tài nguyên, cấu trúc gọn nhẹ, và hỗ trợ thực thi song song… Với các hàng băm rõ ràng, Go có thể rất hữu ích chi việc thu thập dữ liệu và gửi dữ liệu đến các bộ cảm biến với cơ cấu hoạt động độc lập. Khả năng hỗ trợ sử dụng chung một hệ thống mạng các cảm biến và thiết bị là điểm quan trọng trong ngôn ngữ lập trình Go nhưng đây cũng mang đến nhiều nguy cơ tiềm ẩn trong bảo mật hay vận hành.

Go hỗ trợ đồng thời việc thu thập dữ liệu đầu vào, đầu ra và khả năng xử lý trên nhiều kênh khác nhau. Điều này đòi hỏi sự chính xác trong việc phối hợp giữa các thành phần cảm biến trong cùng hệ thống. Điều này cũng khiến hệ thống có thể hoạt động thất thường nếu thiếu sự đồng bộ trong lập trình.

7. Ngôn ngữ Rust

Ngôn ngữ lập trình mã nguồn mở Rust được phát triển bởi Mozilla và có tốc độ phổ biến khá nhanh trong giới lập trình. Rust có nhiều phẩm chất tương tự như Go nhưng lại có thể giải quyết vấn đề lớn nhất của Go. Vì Go không tự động chia sẻ thông tin giữa các “kênh” cấu trúc dữ liệu khác nhau nên có thể xảy ra những hoạt động vượt khỏi tầm kiểm soát. Bù lại Rust trang bị cho mình các chức năng loại bỏ những ngăn cách giữa các lớp dữ liệu làm cho ngôn ngữ này ít rủi ro hơn trong các hệ thống nhúng.

8. ParaSail

Nếu cần trang bị khái niệm về tính đồng thời thì Go và Rust là sự lựa chọn chính xác, nhưng nếu như các dự án IoT đòi hòi một yêu cầu xử lý song song trong ứng dụng thì Parasail là ngôn ngữ lập trình có thể xem xét.

ParaSail là ngôn ngữ hướng đối tượng có khả năng biên dịch và cú pháp giống như Java, Python, C # hoặc thậm chí là Ada- ngôn ngữ lập trình xuất xứ từ Bộ quốc phòng Mỹ. Trong một dự án IoT, nếu chúng ta nghĩ rằng Ada là giải pháp tối ưu dùng cho các trình ứng dụng nhúng nhưng ngôn ngữ này chỉ tập trung cho các hệ thống lớn và sự phổ biến chỉ là 5% trong giới lập trình. Parasail có tính năng tương tự nhưng tập trung cụ thể cho các mã nhúng đòi hỏi khả năng hoạt động song song.

9. Ngôn ngữ B#

Có rất nhiều ngôn ngữ dành cho hệ thống lớn được thu nhỏ đề phù hợp với một nền tảng nhúng, trong đó B# được thiết kế phục vụ các mục đích như vậy. Máy ảo nhúng (EVM) cho phép B# chạy trên nhiều nền tảng mà chỉ sử dụng 24k bộ nhớ- ít hơn rất nhiều so với dung lượng mà các loại ngôn ngữ lập trình khác sử dụng. Về cấu trúc, B# có vẻ giống với C# nhưng được lược bỏ các tính năng không cần thiết cho ứng dụng nhúng và được bổ sung chức năng quan trọng là điều khiển thời gian thực. Nếu dự án IoT dựa trên nền tảng nhúng không quá lớn và phức tạp thì B# là ngôn ngữ đáng để cân nhắc.

10. Assembly

Ngôn ngữ Assembly vốn được yêu thích bởi các chuyên gia lập trình vi điều khiển. Về bản chất, ẩn trong hợp ngữ Assembly là mối quan hệ giữa ngôn ngữ lập trình và cấu trúc thiết bị. Điểm đặc trưng của mỗi hợp ngữ được thiết kế đặc biệt cho một cấu trúc máy tính khác nhau, ngoài ra mã gọn nhẹ, chiếm ít dung lượng bộ nhớ, hoạt động với tốc độ nhanh…

Tuy nhiên, ngôn ngữ Assembly thiếu các tiện ích để giảm thiểu những rủi ro trong lập trình. Mặc dù hiện nay cũng có khá nhiều trình biên dịch chuyển đổi các ngôn ngữ bậc cao thành hợp ngữ nhằm mục đích gỡ rối và tối ưu nhưng rất khó dịch ngược ra mã ngôn ngữ bậc cao. Trước đây Assembly được sử dụng khá nhiều nhưng ngày nay phạm vi sử dụng khá hẹp, chủ yếu trong việc thao tác trực tiếp với phần cứng hoặc làm các công việc không thường xuyên. Điều này cũng mở ra cơ hội dành cho các dự án IoT bởi việc ứng dụng cho trình điều khiển, hệ nhúng bậc thấp hay được trang bị trong các hệ thống thời gian thực.

11. Forth

Forth là một ngôn ngữ được thiết kế và tối ưu hóa cho lập trình hệ thống nhúng. Ngôn ngữ này được sử dụng yếu cho các lập trình hệ thống cấp, tuy nhiên có một khía cạnh mà Forth cần phải được giải quyết đó là việc chấp nhận các lệnh do người sử dụng quy định, nên một mã của lập trình viên FORTH này có thể không hiểu đối với lập trình viên khác.

Forth là một ngôn ngữ ngăn xếp theo định hướng, được phổ biến khoảng từ những năm 1970 nhưng hiện tại không phổ biến như các hệ thống lập trình khác. Tuy nhiên nếu đang bắt đầu với một dự án nhúng mới thì ngôn ngữ này sẽ tạo nên sự khác biệt. Ngôn ngữ này có tính di động, sử dụng bộ nhớ hiệu quả, thời gian phát triển ngắn và tốc độ thực hiện nhanh chóng

FPT APTECH mở ra cho các bạn đam mê học tin học, học công nghệ thông tin chuyên sâu về học lập trình cơ hội được đào tạo Công Nghệ Thông Tin trong môi trường tiêu chuẩn chất lượng quốc tế ISO 9001

Học CNTT – Học Aptech – Học tại FPT

Thạch An
(theo PCWorldVN)

Khối Giáo dục FPT – fpt.edu.vn

Trường Đào Tạo Lập Trình Viên Quốc Tế – aptech.fpt.edu.vn

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96