
Liệu có nên chỉ học những ngôn ngữ lập trình Memory-safe ?
Hiện tại, liệu bạn có nên học chỉ những ngôn ngữ lập trình an toàn cho bộ nhớ (Memory-safe)?
Nhà Trắng (White House) đang kêu gọi các lập trình viên rời bỏ các ngôn ngữ lập trình cũ như C và C++ để chuyển sang ngôn ngữ “an toàn về bộ nhớ” như Rust. Có bằng chứng cho thấy xây dựng phần mềm bằng các ngôn ngữ an toàn về bộ nhớ có thể giảm đáng kể các lỗ hổng và ngăn chặn các cuộc tấn công mạng, theo một báo cáo mới được công bố.
Như những lập trình viên và những người đam mê code, bạn có thể đang tự hỏi rằng hướng dẫn của chính phủ này có ý nghĩa gì đối với bạn. Liệu ngôn ngữ an toàn về bộ nhớ có phải là lựa chọn duy nhất cho việc xây dựng phần mềm và ứng dụng? Liệu đã đến lúc dừng việc học C và C++ và chuyển sang thứ gì khác?
Khi bạn chọn một ngôn ngữ lập trình để học hoặc sử dụng, bạn phải xem xét xem bạn muốn tạo ra những gì và ngôn ngữ đó dễ hiểu đến mức nào. Các yếu tố khác, như các framework được sử dụng trong dự án hoặc legacy codebase, cũng quan trọng. Mặc dù bảo mật và an toàn có thể không phải là ưu tiên hàng đầu của bạn, nó rất quan trọng, như đã được nhấn mạnh trong báo cáo của Nhà Trắng.
Tiếp theo, chúng tôi sẽ phân tích tin tức này, giải thích sự khác biệt giữa ngôn ngữ an toàn về bộ nhớ và các ngôn ngữ không an toàn.
Memory safe có nghĩa là gì?
“Memory safe” (an toàn về bộ nhớ) là một tính năng có trong một số ngôn ngữ lập trình nhất định, giúp ngăn chặn các lập trình viên tạo ra một loại bug liên quan đến cách truy cập và lưu trữ bộ nhớ máy tính.
Không ai thích bug, nhưng memory-safety bugs là một vấn đề lớn trong lĩnh vực máy tính vì chúng ảnh hưởng đến cách bộ nhớ máy tính được ghi, phân bổ hoặc giải phóng. Điều này có thể dẫn đến sự sụp đổ và mở cánh cửa cho các cuộc tấn công mạng. Các nghiên cứu từ Microsoft và Google đã chỉ ra rằng lên đến 70% lỗ hổng bảo mật được gây ra bởi các vấn đề an toàn về bộ nhớ.
Các memory-safety bugs có thể gây ra các lỗ hổng bảo mật. Hai loại phổ biến là “đọc ngoài phạm vi” (out of bounds read), xảy ra khi một chương trình cố gắng truy cập hoặc thay đổi dữ liệu nằm ngoài phạm vi bộ nhớ đã được phân bổ cho nó; và một bug “sử dụng sau khi giải phóng” (use after free), xảy ra khi một chương trình cố gắng truy cập vào một vị trí bộ nhớ đã được giải phóng trước đó.
Ngôn ngữ memory-safe được thiết kế để tự động phát hiện những lỗi này trong quá trình biên dịch. Dưới đây là một số ví dụ về ngôn ngữ lập trình an toàn về bộ nhớ:
- Python
- Java
- C#
- Go
- Swift
- Kotlin
- Ruby
- Rust
Mỗi ngôn ngữ này tiếp cận sự an toàn về bộ nhớ qua các tính năng khác nhau. Còn đối với các ngôn ngữ không an toàn về bộ nhớ, báo cáo của Nhà Trắng đề cập đến C và C++ là những ngôn ngữ thiếu các phương pháp đảm bảo tích hợp sẵn trong vấn đề an toàn bộ nhớ.
Các ngôn ngữ lập trình an toàn về bộ nhớ được sử dụng làm gì?
Ngôn ngữ an toàn về bộ nhớ có thể được sử dụng để tạo ra đa dạng các ứng dụng. Ví dụ, nếu bạn biết Swift, bạn có thể phát triển phần mềm cho các thiết bị Apple chạy hệ điều hành iOS và macOS. C# là một ngôn ngữ phổ biến được phát triển bởi Microsoft và bạn có thể sử dụng nó để xây dựng ứng dụng web và trò chơi. Python được yêu thích vì tính linh hoạt của nó và có thể được sử dụng cho phân tích dữ liệu, machine learning, phát triển web và nhiều lĩnh vực khác. Rust đã được xếp hạng là ngôn ngữ lập trình được mong muốn nhất trong Stack Overflow 2023 Developer Survey và được yêu thích trong lĩnh vực blockchain, thực tế ảo và phát triển trò chơi.
“Tôi sẽ gặp khó khăn trong việc tìm lý do để không sử dụng Rust-Go-Python nếu tôi bắt đầu một dự án từ đầu và nó không có sự phụ thuộc lớn vào các framework hoặc thư viện khác,” Judah Anthony giải thích, Giám đốc Cấp cao Kỹ thuật Phần mềm tại Codecademy. “Nếu tôi thấy mình cần sử dụng C/C++ và/hoặc Assembly, có lẽ tôi có một lý do cụ thể.”
Vậy tôi có nên học C và C++ không?
Hướng dẫn này không nhất thiết là lý do để từ bỏ việc học C và C++. Vẫn có những trường hợp và nơi bạn có thể muốn sử dụng những ngôn ngữ này. Bạn có thể làm việc trong một ngành nghề mà tất cả legacy code được viết bằng những ngôn ngữ này. Ví dụ, C++ được sử dụng rất nhiều trong lĩnh vực trò chơi, vì nó có thể tối ưu hóa tài nguyên để đáp ứng đồ họa và nhiều người chơi.
Ngoài ra, còn rất nhiều lý do để học các ngôn ngữ lập trình ngoài khả năng sử dụng chúng trong sản xuất. Việc học cách mỗi ngôn ngữ giải quyết một vấn đề có thể giúp bạn hiểu các khái niệm lập trình tốt hơn.
Tóm lại, mỗi ngôn ngữ lập trình đều có điểm mạnh và điểm yếu: “Việc bạn nên học gì phải liên quan đến thời điểm bạn nên học nó,” Judah nói. Sự lựa chọn phù hợp hoàn toàn phụ thuộc vào những gì bạn muốn làm và bạn đang ở đâu trong hành trình lập trình của mình. Khi có nghiên cứu và công nghệ mới xuất hiện, phương pháp và ngôn ngữ chúng ta sử dụng để lập trình sẽ tiếp tục tiến hóa – đây chỉ là những thành tựu phát triển mới nhất để bạn có thể xem xét.
Post Comment