0
0
Lập trình
TT

Khám Phá Công Nghệ Phần Mềm: Quá Khứ và Hiện Tại

Đăng vào 7 tháng trước

• 10 phút đọc

Khám Phá Công Nghệ Phần Mềm: Quá Khứ và Hiện Tại

Chào mừng bạn đến với Khám Phá Công Nghệ Phần Mềm. Đây là một chuỗi bài viết mà tôi sẽ phân tích các công nghệ, công cụ và phương pháp mà chúng ta sử dụng để xây dựng phần mềm hiện đại — từng phần một. Hãy coi đây như một cuộc tìm hiểu sâu sắc, một bài học lịch sử và một buổi chia sẻ cho bất kỳ ai từng ngồi trước màn hình và tự hỏi: “Chờ đã... điều này thực sự hoạt động như thế nào?”

Chuỗi bài viết này đặc biệt dành cho những lập trình viên mới (và cả những ai đã làm việc lâu nhưng đôi khi vẫn cảm thấy lạc lõng). Nếu bạn là một lập trình viên dày dạn kinh nghiệm, có thể bạn sẽ cười về sự bối rối của chúng tôi — nhưng có thể bạn cũng sẽ nhớ lại cảm giác khi ở trong hoàn cảnh của chúng tôi.

Vậy trước khi chúng ta đi vào React, TypeScript, hay bất kỳ công nghệ lớn nào, hãy thiết lập bối cảnh. Hôm nay, chúng ta sẽ xem xét cách mà kỹ thuật phần mềm đã phát triển: “quá khứ” so với “hiện tại.”

Bởi vì có một điều: cách chúng ta xây dựng phần mềm ngày nay — với GitHub, AWS và các frameworks sáng bóng — là kết quả của nhiều thập kỷ thử nghiệm, sai lầm, và thỉnh thoảng… hỗn loạn hoàn toàn.

Những Ngày Đầu: Thẻ Đục Lỗ và COBOL

Quay trở lại những năm 60 và 70, phần mềm không phải là ngôi sao của chương trình. Phần cứng mới là vua. Máy tính thì to như một phòng, và phần mềm? Đó chỉ là những thứ phiền phức bạn phải viết để phần cứng thực sự làm điều gì đó.

Ngôn ngữ chiếm ưu thế thời bấy giờ là COBOL (Common Business Oriented Language). Nó được thiết kế để dễ đọc cho những người không phải lập trình viên như các nhà quản lý kinh doanh. Thực tế là, hầu hết các nhà quản lý vẫn nhìn vào nó và nói, “Không. Chẳng hiểu gì cả.”

Lập trình thời điểm đó là một cuộc chơi đầy rủi ro. Bạn sẽ viết mã bằng tay, đục nó lên thẻ, cho vào máy và chờ đợi. Nếu bạn mắc lỗi chính tả? Chúc mừng, bạn vừa lãng phí một ngày. Gỡ lỗi thường đồng nghĩa với việc mang theo những chồng thẻ đã đục và cầu mong bạn không làm rơi chúng, vì nếu bạn làm vậy, bạn đã làm rối tung chương trình.

Và đây là điều thú vị: COBOL vẫn còn tồn tại.

Thật vậy, tôi đã từng gặp nó. Công việc công nghệ thực sự đầu tiên của tôi là tại một công ty vừa chuyển hệ thống COBOL cũ sang Delphi. Ban đầu, tôi chỉ sửa các vấn đề căn chỉnh — thực sự chỉ là kéo thả các khung trên màn hình. Nhưng cuối cùng, tôi được giao nhiệm vụ xây dựng một màn hình mới cho hệ thống.

Tài liệu duy nhất tôi có là mã COBOL cũ.

Đọc mã COBOL giống như ai đó đưa cho tôi một hợp đồng dài 200 trang và nói: “Này, hãy tạo một giao diện người dùng từ cái này.” Nó thật sự không có ý nghĩa. Cách duy nhất để tiến lên là truy tìm các truy vấn SQL và ghép các mảnh ghép lại với nhau từ đó. Thành thật mà nói, nếu bạn đưa cho tôi mã đó hôm nay, có lẽ tôi vẫn sẽ nhìn nó với ánh mắt khó hiểu, “Cái này là gì?”

COBOL có thể cảm thấy như một phần lịch sử xa xôi, nhưng nó vẫn vận hành các hệ thống quan trọng ngày nay — từ ngân hàng đến bảng lương và cơ sở hạ tầng chính phủ. Việc thay thế nó giống như cố gắng thay động cơ của một chiếc máy bay giữa không trung... trong khi đang chở nền kinh tế toàn cầu.

Từ Mainframe Đến Máy Tính Gia Đình

Đến những năm 1980, máy tính bắt đầu thu nhỏ từ những con quái vật cỡ phòng thành những thứ mà bạn thực sự có thể đặt lên bàn làm việc. Đây là sự trỗi dậy của máy tính cá nhân.

Các ngôn ngữ như C bùng nổ về độ phổ biến. Nó mạnh mẽ nhưng vẫn dễ đọc, và đã trở thành nền tảng cho nhiều phần mềm hiện đại. C là tổ tiên xa xôi của các ngôn ngữ như C++, Java và Go.

Nhưng trong khi ngành công nghiệp bận rộn xây dựng nền tảng cho phần mềm hiện đại, nhiều người trong chúng tôi chỉ có những chiếc máy tính gia đình màu be với màn hình CRT khổng lồ.

Trong trường hợp của tôi, bố tôi đôi khi mang về nhà những chiếc hộp cồng kềnh, đôi khi có 2 hoặc nhiều đĩa trong đó. Đó là vé của tôi để chơi một trò chơi mới. Ban đầu, ông ấy cài đặt chúng cho tôi. Nhưng cuối cùng, ông ấy chỉ nói, “Tự tìm hiểu đi.”

Và tôi đã làm — và học được quy tắc vàng: nhấn “Tiếp theo,” chấp nhận mọi thứ, và cầu nguyện. (Đừng thử điều đó ngày hôm nay trừ khi bạn muốn có mười hai đăng ký mới, một thanh công cụ bạn không thể gỡ bỏ, và một tiện ích mở rộng trình duyệt đang khai thác Bitcoin khi bạn ngủ.)

Tinh thần tò mò sớm — thích nghịch ngợm, phá vỡ mọi thứ, tìm hiểu mọi thứ một cách ngẫu nhiên — chính là tinh thần thúc đẩy các kỹ sư phần mềm ngày nay.

Sự Trỗi Dậy Của Internet

Rồi đến những năm 1990, và với nó, internet.

Các trang web đầu tiên chủ yếu là văn bản tĩnh với những bản nhạc MIDI đáng sợ thi thoảng. Nó giống như phiên bản kỹ thuật số của những miếng dán tủ lạnh. Bạn có thể di chuyển chúng xung quanh, nhưng chúng không thực sự tương tác đủ.

Nhưng thập kỷ này cũng đã mang đến cho chúng ta những ngôn ngữ điều khiển web:

  • Java (1995): Hứa hẹn “viết một lần, chạy mọi nơi.”
  • PHP (1995): Bắt đầu như một vài script trang cá nhân. Và vô tình phát triển thành một trong những ngôn ngữ server-side phổ biến nhất.
  • JavaScript (1995): Brendan Eich đã tạo ra phiên bản đầu tiên chỉ trong 10 ngày tại Netscape. Ban đầu gọi là Mocha, sau đó là LiveScript, cuối cùng trở thành JavaScript (mặc dù không liên quan gì đến Java). Nó mang lại sự tương tác cho các trang web — những nút bấm thực sự làm điều gì đó mà không cần tải lại trang. Thật kỳ diệu vào thời điểm đó.

Đây cũng là thời kỳ của Cuộc chiến Trình duyệt: Netscape Navigator vs Internet Explorer. Các nhà phát triển phải viết mã hai lần và vẫn thấy nó bị lỗi một nửa thời gian. Các banner “Tốt nhất hiển thị trên Internet Explorer” xuất hiện khắp nơi.

Đến cuối những năm 90, web không chỉ là một sự tò mò. Nó đang bùng nổ. Các công ty dot-com xuất hiện khắp nơi, mọi thứ được bán trực tuyến, và việc lập trình cho web trở thành một trong những nghề hot nhất.

Bong Bóng Dot-Com và Sự Ra Đời Của Web 2.0

Cuối những năm 90 và đầu những năm 2000 mang đến bong bóng dot-com. Tiền đổ vào bất kỳ thứ gì có đuôi “.com”. Và hầu hết các công ty đó không biết mình đang làm gì, vì vậy đến năm 2000, bong bóng đã vỡ.

Nhưng từ sự hỗn loạn đó đã ra đời Web 2.0 — sự chuyển mình từ một web chỉ đọc sang một web đọc-viết.

  • Blogs cho phép bất kỳ ai công bố suy nghĩ của họ.
  • Wikipedia một cách nào đó đã tạo ra một bách khoa toàn thư do người lạ xây dựng thực sự hoạt động.
  • Mạng xã hội bắt đầu — Friendster, MySpace, và cuối cùng là Facebook.

Đối với tôi, tôi đến muộn với bữa tiệc Facebook. Nhưng một khi tôi tham gia, tôi nhớ đã đăng lên tường của mình về những điều ngẫu nhiên mà tôi quan tâm — và cố gắng quá sức để trở nên hài hước. Hãy cứ nói rằng… không phải tất cả những bài đăng đó đều có giá trị theo thời gian.

Dưới bề mặt, những công cụ mới đã thúc đẩy thời kỳ này:

  • AJAX cho phép các trang web cập nhật các phần của màn hình mà không cần tải lại.
  • Gmail (2004) chứng minh rằng một ứng dụng trình duyệt có thể nhanh chóng và mượt mà.
  • LAMP stack (Linux, Apache, MySQL, PHP) đã cung cấp năng lượng cho vô số startup Web 2.0.
  • jQuery trở thành băng keo cho web, làm cho mã đa trình duyệt ít đau đớn hơn.

Nền tảng cho web tương tác, hướng tới người dùng ngày nay đã được thiết lập.

Những Năm 2010: Di Động Trước, Cloud Mọi Thứ

Những năm 2010 mang đến cuộc cách mạng smartphone. Đột nhiên, các ứng dụng không chỉ cần hoạt động trên máy tính để bàn mà còn trên các màn hình cảm ứng nhỏ. Thiết kế phản hồi trở nên cần thiết, và các công cụ như Bootstrap ra đời để cứu các lập trình viên khỏi những cơn khủng hoảng do CSS gây ra.

Trong khi đó, AWS đã làm cho việc lưu trữ đám mây trở nên phổ biến. Tại sao phải mua máy chủ khi bạn có thể thuê của Amazon? Chỉ với một thẻ tín dụng, bạn có thể xây dựng hạ tầng trong vài phút.

JavaScript cũng đã thoát khỏi trình duyệt với Node.js (2009), cho phép nó chạy trên máy chủ. Đột nhiên, việc lập trình full-stack JavaScript trở nên khả thi.

Và vào năm 2013, React ra đời. Các thành phần đã thay đổi mọi thứ. Thay vì mã spaghetti, các ứng dụng có thể được xây dựng từ những mảnh ghép có thể tái sử dụng giống như Lego. Các frameworks như Angular và Vue cũng tham gia vào bữa tiệc, mang đến cho chúng ta bối cảnh frontend hiện đại.

Phía backend cũng thay đổi — từ LAMP sang các stacks như MERN (MongoDB, Express, React, Node). APIs (REST, sau đó là GraphQL) trở thành keo dán kết nối các dịch vụ.

Đến cuối thập kỷ, stack hiện đại trông rất giống những gì nhiều người trong chúng ta sử dụng ngày nay:

  • React hoặc các frameworks tương tự cho frontend.
  • Node.js, Python, Go, hoặc các ngôn ngữ khác cho backend.
  • Cơ sở dữ liệu như MongoDB hoặc Postgres.
  • Hạ tầng trên AWS, GCP hoặc Azure.

Những Năm 2020: Microservices, Serverless và AI Mọi Nơi

Ngày nay, chúng ta đang ở trong kỷ nguyên phân tách mọi thứ ra.

  • Microservices: Thay vì các ứng dụng khổng lồ, chúng ta xây dựng các dịch vụ nhỏ mà mỗi dịch vụ chỉ làm một việc. Linh hoạt hơn, nhưng cũng phức tạp hơn.
  • Serverless: AWS Lambda và các dịch vụ tương tự cho phép bạn triển khai mã mà không cần quản lý máy chủ. Bạn chỉ trả tiền cho những gì bạn sử dụng.
  • Frontend: React vẫn tiếp tục phát triển. TypeScript bùng nổ. Các frameworks như Next.js xử lý định tuyến, kết xuất và lấy dữ liệu.
  • Backend: Node.js vẫn mạnh mẽ, nhưng Go và Python đóng vai trò lớn.
  • Cơ sở dữ liệu: SQL, NoSQL, cơ sở dữ liệu serverless — hãy chọn lựa.
  • AI: Nó đang ở khắp mọi nơi — những trợ lý giúp chúng ta lập trình, APIs cung cấp tìm kiếm, cá nhân hóa và nhiều hơn nữa.

Các stack hiện tại của chúng ta — React với TypeScript, backend Go/Python, MongoDB, GitHub, AWS — hoàn toàn có lý trong bối cảnh lịch sử này. Chúng là sản phẩm của nhiều thập kỷ thử nghiệm, thử thách, và những cuộc tranh luận nảy lửa.

Và trong mười năm tới? Stack ngày hôm nay có thể sẽ cảm thấy lỗi thời như COBOL bây giờ. Đó chính là bản chất của công nghệ: nó tự tái tạo.

Nếu bạn đã đọc đến đây, chúc mừng — bạn đã nâng cấp kỹ năng trivia lập trình viên của mình. Lần sau khi ai đó nhắc đến thẻ đục lỗ hoặc JavaScript được xây dựng trong 10 ngày, bạn sẽ có những câu chuyện sẵn sàng.

Đây là cuộc tìm hiểu sâu đầu tiên của Khám Phá Công Nghệ Phần Mềm. Tiếp theo, chúng ta sẽ khám phá JavaScript — Ngôn Ngữ Điều Khiển Web.

Hẹn gặp lại — hãy tiếp tục xây dựng, tiếp tục khám phá, và nhớ rằng: mỗi stack đều có một câu chuyện. Bạn vừa unpack một câu chuyện.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào