Bài viết được khơi nguồn bởi một câu hỏi trên Quora: Lập trình máy tính ngày nay khác 20 năm trước như thế nào? (How is computer programming different today than 20 years ago?). Bạn có từng thắc mắc điều tương tự không?

Dưới đây là một số thay đổi khá rõ rệt về lập trình máy tính trong suốt 20 năm qua, theo thứ tự ngẫu nhiên.

Dev then and now

  • Một số khái niệm lập trình chủ yếu là lý thuyết cách đây 20 năm đã trở nên phổ biến, bao gồm nhiều mô hình lập trình chức năng như immutability (bất biến), tail recursion (đệ quy đuôi), lazily evaluated collections (tập hợp đánh giá lười biếng), pattern matching (đối sánh mẫu), first class functions (các hàm hạng nhất),... 
  • Phần mềm máy tính để bàn (desktop software) bây giờ có nghĩa là một trang web đi kèm với một trình duyệt.
  • Lập trình hướng đối tượng (OOP) đã mất rất nhiều tín nhiệm mặc dù nó có lẽ vẫn là mô hình lập trình phổ biến nhất. Các mô hình lập trình dựa trên đặc điểm mới trở nên phổ biến hơn trong các ngôn ngữ hiện đại như Go, Rust và Swift. 
  • Do sự gia tăng mạnh mẽ của các CPU đa xử lý, lập trình song song hiện nay thường được hỗ trợ ở cấp độ ngôn ngữ lập trình hơn là các lệnh gọi hệ điều hành (OS call) nguyên thủy của 20 năm trước. Nó mang lại các nguyên thủy lập trình không đồng bộ (async/await), các đăng quang song song như goroutines trong ngôn ngữ Go, các kênh trong D, hoặc các composability semantics (ngữ nghĩa tổng hợp) như các observables (vật quan sát) với lập trình phản ứng (reactive programming).
  • Pixel không còn là đơn vị đo lường có liên quan nữa.
  • Thu gom rác (garbage collection) đã trở thành cách phổ biến của lập trình an toàn nhưng các mô hình an toàn mới hơn cũng đang nổi lên như lifetime semantics (ngữ nghĩa trọn đời) của Rust và những câu chuyện cười khó hiểu (snarky jokes) trong các cuộc đánh giá mã (code review).
  • 03 tỷ thiết bị chạy Java. Con số đó không thay đổi trong 10 năm qua.
  • Một hệ sinh thái quản lý gói là điều cần thiết cho các ngôn ngữ lập trình bây giờ. Mọi người chỉ đơn giản là không muốn trải qua những rắc rối khi tìm kiếm, tải xuống và cài đặt thư viện nữa. 20 năm trước, các lập trình viên thường truy cập các trang web, tải xuống các tệp zip, sao chép chúng vào vị trí chính xác, thêm chúng vào các đường dẫn trong cấu hình xây dựng và cầu nguyện rằng chúng hoạt động.
  • Việc trở thành một nhóm phát triển phần mềm hiện bao gồm việc tất cả các thành viên trong nhóm thực hiện một nghi thức bí ẩn là đứng lên cùng nhau trong 15 phút vào buổi sáng và vẽ các biểu tượng huyền bí với hậu kỳ của nó (hẳn là quản lý dự án với agile).
  • Công cụ ngôn ngữ ngày nay phong phú hơn. Một ngôn ngữ lập trình thường là một trình biên dịch và có lẽ là một trình gỡ lỗi. Ngày nay, chúng thường đi kèm với linter, trình định dạng mã nguồn, trình tạo mẫu, khả năng tự cập nhật và danh sách các lập luận mà bạn có thể sử dụng trong cuộc tranh luận chống lại ngôn ngữ cạnh tranh.
  • Ngay cả các ngôn ngữ lập trình cũng chọn một phe trong cuộc tranh luận nổi tiếng Tabs vs Spaces.
  • Adobe Flash, cách duy nhất để cung cấp một số tương tác mượt mà trên web, không còn tồn tại, may mắn thay. Bây giờ các lập trình viên phải phát triển trên ba nền tảng khác nhau với các mô hình lập trình hoàn toàn khác nhau để cung cấp cùng một mức độ tương tác.
  • IDE và ngôn ngữ lập trình ngày càng xa nhau hơn. 20 năm trước, IDE đã được phát triển đặc biệt cho một ngôn ngữ duy nhất, như Eclipse cho Java, Visual Basic, Delphi cho Pascal, v.v. Bây giờ, chúng ta có các trình soạn thảo văn bản như VS Code có thể hỗ trợ bất kỳ ngôn ngữ lập trình nào có các tính năng như IDE.
  • Hiện tại, mã phải chạy sau ít nhất ba cấp độ ảo hóa. Mã chạy trên kim loại trần (bare metal) đã không còn cần thiết.
  • Phát triển đa nền tảng hiện là một tiêu chuẩn vì có nhiều loại kiến ​​trúc như thiết bị di động, máy chủ đám mây, hệ thống IoT nhúng. Lập trình hầu như chỉ dành cho PC vào 20 năm trước.
  • Bây giờ, chạy mã cục bộ (run code locally) là điều bạn hiếm khi làm.
  • Tài liệu luôn trực tuyến và nó được gọi là Google. Không còn cái gọi là tài liệu ngoại tuyến nữa. Ngay cả khi có, cũng không ai biết về nó.
  • Các hướng dẫn sẽ được xem là “dễ hiểu” khi ở dạng video, dù thời gian bạn bỏ ra để đọc tài liệu còn nhanh hơn cả việc ngồi xem một cái video 20 phút.
  • StackOverflow đơn giản là không tồn tại vào thời điểm đó. Đặt một câu hỏi về lập trình nghĩa là bạn phải trò chuyện với đồng nghiệp của bạn.
  • Ngày nay, mọi người phát triển phần mềm trên máy Macs.
  • Kết nối Internet là điều kiện tiêu chuẩn và ở trạng thái ngoại tuyến là một ngoại lệ, ngược lại với lập trình thời cách đây 20 năm.
  • Bảo mật là điều chúng ta phải luôn nghĩ đến lúc này.
  • Các thiết bị di động hiện có thể hiển thị các trang web thông thường, vì vậy không cần tạo một trang WAP riêng biệt trên một tên miền phụ riêng biệt nữa. Thay vào đó, lập trình viên tạo các trang di động trên các tên miền phụ riêng biệt.
  • Lập trình viên sẽ mặc định open-source mọi thứ, ngoại trừ các đoạn code có thể làm họ bẽ mặt.
  • Có rất nhiều phụ nữ tài năng, người da màu và LGBT trong ngành công nghiệp lập trình hiện nay, nhờ tất cả những người đã đấu tranh chống lại sự phân biệt đối xử. 
  • Bị hack là một điều thường xuyên xảy ra. Việc mất tất cả dữ liệu người dùng của bạn thường được giải quyết bằng cách viết một bài đăng trên blog đề xuất thay đổi mật khẩu.
  • Làm việc như một lập trình viên từ xa dễ dàng hơn bao giờ hết nhờ các công nghệ mới như hội nghị truyền hình (video conference), truy cập internet phổ biến và Keurigs.
  • Dân lập trình không sử dụng IRC để liên lạc nữa. Họ thích một phiên bản cồng kềnh có tên là Slack vì họ không muốn nhập địa chỉ máy chủ.
  • Bây giờ dân lập trình chạy các chương trình trên card đồ họa.
  • Dự án của bạn không có giá trị kinh doanh ngày hôm nay trừ khi nó bao gồm blockchain và AI, mặc dù một phiên bản tập trung (centralized) và dựa trên quy tắc (rule-based) sẽ nhanh hơn và hiệu quả hơn nhiều.
  • Vì lý do nào đó, một gigabyte hiện không đủ dung lượng lưu trữ.

dev in 1996 vs now

  • Do các cuộc tấn công kênh bên (side-channel attack), dân lập trình thậm chí không thể tin tưởng bộ xử lý vật lý nữa.
  • Vì chúng ta hiện có CPU nhanh hơn nhiều, các phép tính số được thực hiện bằng Python, thứ mà chậm hơn nhiều so với Fortran. Vì vậy, các phép tính số về cơ bản tốn cùng một khoảng thời gian như cách chúng ta đã làm cách đây 20 năm.
  • Tạo một ngôn ngữ lập trình mới hoặc thậm chí tạo một phần cứng mới là một sở thích phổ biến.
  • Thử nghiệm đơn vị (unit testing) đã nổi lên như một sự cường điệu và giống như mọi thứ hữu ích, lợi ích của nó được đánh giá quá cao và chắc chắn nó đã trở thành một thứ tôn giáo.
  • Việc lưu trữ mật khẩu ở dạng văn bản rõ ràng hiện đang bị phản đối, nhưng dân lập trình vẫn làm điều đó.


Tổng hợp việc làm IT - Software trên VietnamWorks
VietnamWorks InTECH
Theo Sedat Kapanoglu