7 điểm bởi GN⁺ 2025-04-04 | 2 bình luận | Chia sẻ qua WhatsApp
  • 50 năm đổi mới của Microsoft bắt đầu từ mã Altair BASIC
  • Sản phẩm đầu tiên tồn tại trước cả Office, Windows 95, Xbox và AI
  • Chính đoạn mã này đã mở ra kỷ nguyên máy tính cá nhân và trở thành nền tảng cho sự phát triển của Microsoft

Đoạn mã tuyệt nhất tôi từng viết

  • Năm 1975, Bill Gates và Paul Allen thành lập Microsoft với tầm nhìn “một chiếc máy tính trên mọi bàn làm việc và trong mọi ngôi nhà
  • Việc Microsoft bước sang tuổi 50 có công rất lớn của những nhà lãnh đạo xuất sắc như Steve Ballmer, Satya Nadella cùng vô số nhân viên
  • Đón cột mốc mang tính biểu tượng này, Gates vừa vui mừng vừa có chút nuối tiếc
    • Ông cảm thấy như mới hôm qua mình còn ngồi lập trình trước chiếc PDP-10 ở Harvard
  • Khởi đầu của Microsoft đến từ trang bìa tạp chí Popular Electronics năm 1975, nơi Gates nhìn thấy máy tính Altair 8800
    • Altair là một PC dạng kit do công ty điện tử nhỏ MITS tạo ra, và vào thời điểm đó đây là một sản phẩm mang tính đột phá
    • Ngay khoảnh khắc nhìn thấy cuốn tạp chí, Gates và Allen nhận ra cuộc cách mạng PC đang đến gần và quyết định tham gia vào làn sóng đó

Lý do quyết định viết mã BASIC

  • Từ thời còn là học sinh, cả hai đã say mê máy tính tại trường Lakeside
  • Họ bị ấn tượng bởi việc Altair có thể mang đến cơ hội lập trình cho cả người bình thường
  • Gates và Allen đã chủ động đề xuất với MITS rằng họ đã phát triển ngôn ngữ BASIC cho Altair
  • Nhưng thực tế đó là phần mềm còn chưa hề tồn tại, nên họ phải tự tay tạo ra nó

Khái niệm cơ bản của ngôn ngữ BASIC

  • BASIC là ngôn ngữ lập trình dành cho người mới bắt đầu, do hai giáo sư tại Dartmouth tạo ra vào năm 1964
  • Nó được thiết kế để ngay cả người hoàn toàn không có kinh nghiệm máy tính cũng có thể tự tạo chương trình chỉ sau một thời gian học ngắn
    • Ví dụ: chương trình tính số dư sổ séc, trò chơi cờ ca-rô
  • Đây là ngôn ngữ lập trình đầu tiên mà Gates và Allen học, và đến nay vẫn còn được sử dụng
  • BASIC là ngôn ngữ để ra lệnh cho máy tính giống như tiếng Anh, cho phép thực thi lệnh, giải toán và thực hiện các chức năng

Cách để máy tính hiểu được BASIC

  • Vấn đề là máy tính không thể tự hiểu BASIC
  • Gates và Allen quyết định tạo ra một interpreter có thể dịch và thực thi mã BASIC từng dòng một thành lệnh máy tính
    • Cách này có ưu điểm là cung cấp phản hồi theo thời gian thực, giúp người mới nhanh chóng sửa lỗi
  • Họ cũng cân nhắc cách dùng compiler để dịch toàn bộ chương trình cùng lúc, nhưng đánh giá phương pháp interpreter phù hợp hơn với người mới

Bắt đầu phát triển

  • Khi đó họ không có chip Intel 8080 dùng trong Altair, nên Paul đã phát triển một chương trình mô phỏng con chip này trên chiếc PDP-10 của Harvard
  • Gates viết phần mã chính của interpreter, còn người bạn Monte Davidoff phụ trách mô-đun tính toán
  • Trong hai tháng, ba người làm việc ngày đêm để hoàn thành phần mềm vốn chưa từng tồn tại ngoài thực tế

Vượt qua giới hạn bộ nhớ

  • Thời đó bộ nhớ máy tính rất đắt đỏ, và việc thêm bộ nhớ cho Altair đôi khi còn tốn hơn cả giá chiếc PC
  • Mục tiêu là triển khai interpreter BASIC trong phạm vi 4KB
    • Nhờ vậy người dùng vẫn còn đủ bộ nhớ để chạy các chương trình của riêng mình
  • Gates đã đạt được mục tiêu này bằng nhiều kỹ thuật tối ưu bộ nhớ khác nhau
    • Ví dụ: cấu trúc dữ liệu nén, thuật toán hiệu quả

Sự ra đời của Microsoft

  • Sau vô số đêm thức trắng, họ đã trình diễn interpreter BASIC hoàn chỉnh cho Ed Roberts, lãnh đạo của MITS
  • Buổi trình diễn thành công và MITS đã mua giấy phép cho phần mềm này
  • Thành công đó biến Altair BASIC thành sản phẩm đầu tiên của Microsoft, đồng thời cái tên Micro-Soft cũng ra đời (sau này dấu gạch nối được bỏ đi)
  • Chỉ riêng đoạn mã này đã trở thành điểm khởi đầu cho mọi đổi mới của Microsoft trong suốt 50 năm tiếp theo
  • Có thể xem câu chuyện chi tiết hơn trong hồi ký Source Code

Tải mã nguồn

  • Bạn có thể trực tiếp xem mã nguồn gốc của Altair BASIC, nơi khởi đầu của Microsoft
  • Đây là một tư liệu lịch sử cho thấy lập trình đã phát triển đến mức nào trong 50 năm qua, và Gates vẫn cảm thấy rất tự hào về đoạn mã này

Tải mã nguồn (PDF)

2 bình luận

 
iolothebard 2025-04-06

Mã nguồn BASIC cho 6502 mà Microsoft cung cấp theo hình thức OEM (Apple II, Commodore, ...) đã được khôi phục(?) về trạng thái có thể build được.
https://github.com/mist64/msbasic

Cũng có khá nhiều trường hợp tự làm trực tiếp một 6502 SBC rồi port MSBASIC lên đó.
https://github.com/beneater/msbasic

Chỉ trầm trồ thôi cũng hay, nhưng có khi tự mình lao vào sẽ còn thú vị hơn… ;)

 
GN⁺ 2025-04-04
Ý kiến trên Hacker News
  • Mã nguồn là một thứ khá thú vị để đọc. Tôi đã tìm thấy mã nguồn của GW-BASIC và có vài chú thích khá hay
    • Có một chú thích nói rằng vì không thể đưa con số vào vừa bộ đệm, nên phải lấy lại toàn bộ ký tự từ stack, lấy vị trí bắt đầu của bộ đệm rồi chèn ký hiệu "%"
    • Có một chú thích nói rằng các hằng số của bộ tạo số ngẫu nhiên không được thay đổi nếu chưa tham khảo Knuth Vol 2, Chapter 3
  • Chỉnh sửa: là GW-BASIC, không phải QBASIC
  • Steve Jobs từng nói vấn đề của Microsoft là không có gu
    • Hiệu ứng font nhấp nháy khi cuộn khiến tôi nhớ đến câu đó. Nó rất gây xao nhãng, và ngay cả khi dùng chế độ đọc cũng không thể tắt được
    • Nói vậy thôi, tôi vẫn thích Bill Gates và những gì ông ấy đã làm cho thế giới
  • Tôi đã viết một trình giả lập Intel 8080 sao cho có thể port giữa Dec10/VAX/IBM VM CMS. 8080 có thể được triển khai khá đơn giản bằng một công tắc giá trị 256. Tôi viết nó bằng FORTRAN77
    • Viết một trình thông dịch BASIC kèm số thực dấu chấm động thì khó hơn nhiều. BASIC của Gates, Allen và các cộng sự khác thực sự khá xuất sắc
  • Một chút may mắn và sự sẵn sàng chấp nhận rủi ro đã mang lại kết quả theo những cách không ai ngờ tới. Tôi không chắc trong đời mình còn được thấy điều gì giống kỷ nguyên PC nữa không. Có lẽ là điện thoại di động hoặc Internet
  • Mã nguồn được liên kết ở cuối bài (cảnh báo: PDF 100 MB)
  • Tôi thắc mắc tại sao phải bật JS mới xem được trang web này
  • Đọc bài này sau khi đọc Palo Alto của Malcom Harris thấy khá thú vị
  • Cái này thực sự rất ngầu. Tôi nghĩ văn bản là một phương tiện vẫn chưa được khai thác đủ trong thiết kế
  • Tôi muốn nói rằng "mong sẽ có một kho GitHub chứa đoạn mã này dưới dạng ASCII", nhưng rồi nhận ra Microsoft có lẽ sẽ không cho phép điều đó
  • Microsoft (và có lẽ cả Bill Gates ở góc độ cá nhân) từng tạo ra cảm giác "ác cảm" rất mạnh trong cộng đồng hacker. Nhưng không thể phủ nhận rằng ông ấy và Paul Allen là những hacker thuần túy và đã đóng góp rất nhiều cho tiến bộ công nghệ. Dĩ nhiên, tất cả chúng ta đều thích OSS hơn và sẽ chọn Linus (hoặc tên một nhà phát triển OSS khác) gấp 100 lần so với một "nhà tư bản tham lam", nhưng họ xứng đáng được ghi nhận