Lịch sử thuở ban đầu của Smalltalk: Khi máy tính trở thành phương tiện cá nhân

Công nghệ06 tháng 10, 2026·15 phút đọc

Bài viết của Alan Kay kể lại hành trình hình thành Smalltalk — ngôn ngữ lập trình hướng đối tượng đầu tiên — từ những ý tưởng về cộng sinh người–máy thời ARPA, Sketchpad, Simula, cho đến giấc mơ về chiếc Dynabook dành cho trẻ em. Đây là một trong những tài liệu gốc quan trọng nhất về nguồn gốc của lập trình hướng đối tượng và điện toán cá nhân.

Lịch sử thuở ban đầu của Smalltalk: Khi máy tính trở thành phương tiện cá nhân

Lịch sử thuở ban đầu của Smalltalk: Khi máy tính trở thành phương tiện cá nhân

Bài viết gốc của Alan C. Kay (Apple Computer), công bố tại hội nghị HOPL-II năm 1993, là một trong những tài liệu quan trọng nhất về nguồn gốc của lập trình hướng đối tượng và tư tưởng điện toán cá nhân. Kay kể lại hành trình từ những năm 1960 ở cộng đồng ARPA cho đến khi Smalltalk-72 ra đời và chuyển mình thành Smalltalk-76.

Ông viết bài này ngay trên máy bay ở độ cao 35.000 feet, với một chiếc notebook nặng khoảng 2,3 kg trên đùi — chiếc "Interim Dynabook" của năm 1992, có màn hình bitmap sắc nét, cửa sổ chồng lên nhau, biểu tượng, thiết bị trỏ, và phần mềm tốt nhất chạy hướng đối tượng. Smalltalk chạy trên chính hệ thống đó.

Từ "cộng sinh người–máy" đến một hệ hình mới

Hầu hết ý tưởng đều đến từ những ý tưởng trước đó. Thập niên 60, đặc biệt trong cộng đồng ARPA, sản sinh hàng loạt khái niệm về "cộng sinh người–máy" thông qua máy tính chia sẻ thời gian tương tác, màn hình đồ họa và thiết bị trỏ. Các ngôn ngữ lập trình tiên tiến được phát minh để mô phỏng những hệ thống phức tạp như nhà máy lọc dầu hay hành vi bán thông minh.

Sự chuyển dịch hệ hình sang điện toán cá nhân hiện đại, giao diện cửa sổ chồng lên nhau và thiết kế hướng đối tượng không đến từ việc xem công trình thập niên 60 là "một thứ cũ tốt hơn". Thay vào đó, lời hứa về tăng trưởng theo cấp số nhân trong hiệu năng trên mỗi đô-la đòi hỏi phải nhìn thập niên 60 như "gần như một thứ mới" và tìm ra đâu mới thực sự là những "thứ mới".

"Nguyên lý cơ bản của thiết kế đệ quy là làm cho các bộ phận có cùng sức mạnh như toàn thể." — Bob Barton

Sơ đồ minh họa tư duy thiết kế đệ quySơ đồ minh họa tư duy thiết kế đệ quy

Kay lập luận: một người sẽ tính toán với chiếc Dynabook cầm tay theo cách không thể làm được trên máy mainframe chia sẻ; hàng triệu người dùng tiềm năng nghĩa là giao diện phải trở thành một môi trường học tập theo tinh thần Montessori và Bruner; còn nhu cầu về phạm vi lớn, giảm độ phức tạp và khả năng đọc hiểu của người dùng cuối đòi hỏi phải bỏ cấu trúc dữ liệu và điều khiển truyền thống, thay bằng một sơ đồ mang tính sinh học hơn: các tế bào phổ quát được bảo vệ, chỉ tương tác qua thông điệp và có thể mô phỏng bất kỳ hành vi mong muốn nào.

Những lần "chạm mặt" đầu tiên với ý tưởng hướng đối tượng

Kay kể lại rằng ông "chỉ vừa thoáng thấy" ý tưởng này vài lần. Lần đầu là trên máy Burroughs 220 trong Không quân Mỹ, khoảng năm 1961: một thiết kế chia file thành ba phần — phần dữ liệu thực, phần thủ tục biết cách truy cập và cập nhật dữ liệu, và phần mảng con trỏ tương đối trỏ vào các điểm vào của thủ tục. Đó là một ý tưởng tuyệt vời, dùng lại trong nhiều hệ thống sau này cho đến khi COBOL bắt buộc thay thế nó.

Lần thứ hai là với máy B5000, với bộ nhớ phân đoạn, biên dịch hiệu quả từ ngôn ngữ bậc cao, mã byte, cơ chế gọi chương trình con tự động và bảng tham chiếu chương trình (Program Reference Table) — tương ứng với sơ đồ giao diện thủ tục cho module của hệ thống file B220.

Sau Không quân, Kay làm việc cho Trung tâm Nghiên cứu Khí quyển Quốc gia, viết các hệ thống truy xuất dữ liệu khí tượng. Ông đọc bài báo của Gordon Moore năm 1965 dự đoán mật độ và chi phí silicon tích hợp sẽ cải thiện theo cấp số nhân trong nhiều năm. Lúc đó, đứng cạnh chiếc 6600 to bằng cả căn phòng làm mát bằng freon, dự đoán ấy dường như chẳng liên quan gì đến chân trời của ông.

Utah, Sketchpad và cú "đánh trúng" định mệnh với Simula

Năm 1966, Kay vào học cao học tại Đại học Utah mà "không biết gì cả" — chưa từng nghe đến ARPA hay các dự án của nó. Trên bàn của Dave Evans có một chồng tài liệu bìa nâu, và ông được đưa một cuốn: "Sketchpad: A man-machine graphical communication system" của Ivan Sutherland.

Sketchpad làm được những điều hoàn toàn xa lạ: nó là phát minh của đồ họa máy tính tương tác hiện đại; mọi thứ được mô tả bằng cách tạo một "bản vẽ gốc" sinh ra các "bản vẽ thể hiện"; điều khiển và động lực học được cung cấp bởi các ràng buộc (constraints) cũng dưới dạng đồ họa. Đây là hệ thống đầu tiên có cửa sổ cắt và phóng to, cho phép "vẽ" trên một tờ giấy ảo rộng khoảng nửa cây số vuông.

Ý tưởng về bản vẽ gốc và các thể hiệnÝ tưởng về bản vẽ gốc và các thể hiện

Rồi Kay nhận nhiệm vụ làm cho bản Algol cho máy 1108 hoạt động. Tài liệu khó hiểu như tiếng Na Uy phiên âm sang tiếng Anh — vì thực tế đúng là vậy. Đó là Simula, với những từ như activity và process không khớp với cách dùng tiếng Anh thông thường. Khi hai người trải bản liệt kê chương trình dài 80 feet xuống hành lang và bò qua nó, họ phát hiện điều kỳ lạ nhất: bộ cấp phát bộ nhớ không tuân theo kỷ luật ngăn xếp như Algol thông thường.

Vài ngày sau, manh mối lộ ra: Simula đang cấp phát những cấu trúc rất giống các thể hiện của Sketchpad. Có những mô tả đóng vai trò như bản gốc, và chúng có thể tạo ra các thể hiện — mỗi thể hiện là một thực thể độc lập. Sketchpad gọi đó là master và instance; Simula gọi là activity và process. Hơn nữa, Simula là ngôn ngữ thủ tục để điều khiển các đối tượng kiểu Sketchpad, do đó linh hoạt hơn nhiều so với constraints.

"Đây là cú đánh lớn, và tôi không còn như trước nữa."

Kay cho rằng lý do cú đánh có sức công phá lớn như vậy là vì ông đã thấy ý tưởng đó đủ nhiều lần, đủ nhiều dạng khác nhau, đến mức sự nhận ra cuối cùng mang tính khái quát đến mức có chất lượng của một khoảnh khắc giác ngộ. Nền toán học của ông xoay quanh đại số trừu tượng với vài phép toán áp dụng cho nhiều cấu trúc; nền sinh học tập trung vào chuyển hóa tế bào và phát sinh hình thái quy mô lớn, với các cơ chế đơn giản điều khiển quá trình phức tạp và một loại khối xây dựng có thể biệt hóa thành mọi khối cần thiết.

Hệ thống file B220, B5000, Sketchpad và cuối cùng là Simula — tất cả đều dùng cùng một ý tưởng cho những mục đích khác nhau. Lần đầu tiên, Kay nghĩ về toàn thể chính là toàn bộ chiếc máy tính, và tự hỏi tại sao lại phải chia nó thành những thứ yếu hơn gọi là cấu trúc dữ liệu và thủ tục. Tại sao không chia nó thành những chiếc máy tính nhỏ? Không phải hàng chục, mà là hàng nghìn — mỗi chiếc mô phỏng một cấu trúc hữu ích.

FLEX, Engelbart và giấc mơ Dynabook

Năm 1967, Dave Evans giới thiệu Kay với Ed Cheadle, người đang làm một "cỗ máy nhỏ" cho các chuyên gia phi máy tính. Đó không phải máy tính cá nhân đầu tiên — vinh dự đó thuộc về LINC của Wes Clark — nhưng Cheadle muốn lập trình nó bằng ngôn ngữ bậc cao. Kay đề xuất JOSS, và thế là dự án FLEX ra đời.

LINC — một trong những máy tính cá nhân đầu tiênLINC — một trong những máy tính cá nhân đầu tiên

FLEX kết hợp ý tưởng từ JOSS (sự chú ý cực độ đến trải nghiệm người dùng cuối), EULER của Wirth (loại bỏ kiểu dữ liệu, đưa thủ tục thành đối tượng hạng nhất) và đặc biệt là Simula. Một số đặc điểm nổi bật:

  • Con trỏ đối tượng dựa trên mở rộng từ descriptor của B5000, gồm hai con trỏ: một tới "master" và một tới thể hiện.
  • Nhận ra rằng := không phải là toán tử mà là một loại chỉ mục có thể chọn hành vi từ một đối tượng phức tạp — nhờ đó có thể xử lý mảng thưa mà không sinh phần tử thừa.
  • Cấu trúc điều khiển coroutine để tạm dừng và phục hồi đối tượng; file và tài liệu được coi như tiến trình bị treo, hiển thị trên màn hình và mở bằng cách trỏ vào.
  • Cấu trúc when — kiểu "ngắt mềm" hướng sự kiện, với biểu thức boolean được biên dịch thành cây sắp xếp giải đấu lưu đệm kết quả trung gian, hiệu quả rất cao và tương tự kỹ thuật dùng cho bảng tính ngày nay.

Cũng năm đó, Utah đón Doug Engelbart — một nhà tiên tri của điện toán tương tác. Ông đi cùng máy chiếu 16mm và điều khiển từ xa để trình diễn hệ thống NLS (oNLine System). Theo Engelbart, định mệnh của NLS là "tăng cường trí tuệ con người" thông qua một phương tiện tương tác điều hướng qua "các vector tư duy trong không gian khái niệm". Hệ thống của ông làm được những điều đáng kinh ngạc ngay cả theo tiêu chuẩn ngày nay: siêu văn bản, đồ họa, nhiều khung, điều hướng và nhập lệnh hiệu quả, cộng tác tương tác.

Gordon Moore và định luật mang tên ôngGordon Moore và định luật mang tên ông

Trong bối cảnh đó, Định luật Moore lại hiện về, lần này với sức công phá lớn. Lần đầu tiên Kay thực hiện bước nhảy vọt: đặt một chiếc TX-2 tương tác cỡ căn phòng, hay thậm chí một chiếc 6600 10 MIP, lên mặt bàn. Ông gần như sợ hãi trước hàm ý: điện toán như chúng ta biết không thể tồn tại được nữa — ý nghĩa thực sự của từ này đã thay đổi.

Kay đặt câu hỏi: nếu thay vì vài nghìn máy mainframe và vài nghìn người dùng được đào tạo, sẽ có hàng triệu máy cá nhân và người dùng, phần lớn nằm ngoài kiểm soát của tổ chức — thì ứng dụng và đào tạo đến từ đâu? Cần một hệ thống mở rộng được (extensional system), trong đó người dùng cuối tự tùy biến và thậm chí tự xây dựng công cụ của mình.

GRAIL, LOGO và sự hình thành của "phương tiện động cá nhân"

Năm 1968, tại RAND, Kay thấy GRAIL — hệ thống đồ họa kế thừa JOSS. Chiếc bảng vẽ RAND nổi tiếng do Tom Ellis phát minh để thu nhận cử chỉ con người, còn Gabe Groner viết chương trình nhận dạng và phản hồi hiệu quả. Dù mọi thứ được gắn bằng kẹo cao su và hệ thống thường xuyên sập, Kay chưa bao giờ quên những tương tác đầu tiên của mình: thao tác trực tiếp, mang tính loại suy, không có chế độ, và đẹp đẽ.

Một tháng sau, ông gặp Seymour Papert, Wally Feurzig, Cynthia Solomon và những nhà nghiên cứu đầu tiên đã xây dựng LOGO và dùng nó với trẻ em ở các trường học Lexington. Đây là lũ trẻ đang lập trình thực sự với một ngôn ngữ và môi trường được thiết kế riêng.

Cuộc gặp này cuối cùng đánh trúng Kay với điều mà định mệnh của điện toán cá nhân thực sự sẽ là: không phải một phương tiện động cá nhân, như ẩn dụ của Engelbart đối lập với "đường sắt" của IBM, mà là một thứ sâu sắc hơn nhiều — một phương tiện động cá nhân (personal dynamic medium).

Với một phương tiện, người ta có thể đợi đến trung học và dạy "lái xe"; nhưng nếu nó là một môi trường, nó phải vươn vào thế giới tuổi thơ. Kay nhớ đến Aldus Manutius, người 40 năm sau khi máy in ra đời đã đưa cuốn sách về kích thước hiện đại bằng cách làm cho nó vừa với túi yên ngựa. Chiếc máy phải không lớn hơn một cuốn sổ tay, cần giao diện thân thiện như JOSS, GRAIL và LOGO, nhưng có tầm vươn của Simula và FLEX.

Kay làm một mô hình các-tông, đổ chì viên vào để cảm nhận trọng lượng (phải dưới 0,9 kg), gắn bàn phím lẫn bút cảm ứng, và dự đoán Dynabook khi ra đời khoảng một thập niên sau sẽ có mạng không dây.

Từ FLEX đến Smalltalk: các đối tượng như những máy chủ

Năm 1969, tại hội nghị về Ngôn ngữ Mở rộng được (Extensible Languages), Ned Irons trình bày IMP — hệ thống đã hoạt động nhiều năm và thanh lịch hơn hầu hết các đề xuất chưa chạy được. Ý tưởng cơ bản của IMP: có thể dùng bất kỳ cụm từ nào trong ngữ pháp làm tiêu đề thủ tục và viết định nghĩa ngữ nghĩa theo ngôn ngữ như đã được mở rộng tới thời điểm đó.

Trong cách tiếp cận của Irons, mọi thủ tục trong hệ thống tự định nghĩa cú pháp của nó theo cách tự nhiên và hữu ích. Kay đưa ý tưởng này vào phiên bản thứ hai của FLEX và bắt đầu thử nghiệm trình thông dịch trực tiếp thay vì trình biên dịch hướng cú pháp. Và rồi ông nhận ra: cầu nối tới một hệ thống dựa trên đối tượng có thể nằm ở việc mỗi đối tượng là một trình thông dịch hướng cú pháp cho các thông điệp gửi tới nó. Chỉ một động tác đó thống nhất ngữ nghĩa hướng đối tượng với lý tưởng về một ngôn ngữ hoàn toàn mở rộng được.

Hình ảnh trong đầu Kay là những chiếc máy tính riêng biệt gửi yêu cầu tới những chiếc máy tính khác, và bên nhận phải chấp nhận và hiểu trước khi bất cứ điều gì xảy ra. Theo thuật ngữ ngày nay, mỗi đối tượng là một server cung cấp dịch vụ, với việc triển khai và tùy nghi hoàn toàn phụ thuộc vào quan hệ của server với bên được phục vụ.

Tại dự án AI Stanford (SAIL), Kay dành nhiều thời gian nghĩ về KiddyKomputers dạng sổ tay hơn là về AI, nhưng có hai thiết kế AI rất hấp dẫn:

  • PLANNER của Carl Hewitt — hệ logic lập trình được, tạo nền tảng suy diễn cho SHRDLU của Winograd.
  • Hệ hình thành khái niệm của Pat Winston — xây dựng mạng ngữ nghĩa và so sánh chúng để tạo loại suy và quá trình học. Đây là một dạng "hướng đối tượng": các cung của mỗi mạng đóng vai trò thuộc tính trong bộ ba AOV, bản thân chúng cũng được mô hình hóa như mạng. Ví dụ, cung bậc một LEFT-OF có thể được hỏi câu hỏi bậc cao hơn như "Nghịch đảo của ngươi là gì?" và mạng của nó trả lời: RIGHT-OF.

Cũng mùa thu năm đó, Kay nghe Butler Lampson nói về CAL-TSS, hệ điều hành dựa trên capability trông rất "hướng đối tượng". Các con trỏ không thể giả mạo (kiểu B5000) được mở rộng bằng mặt nạ bit hạn chế quyền truy cập vào các phép toán nội bộ của đối tượng. Điều này củng cố ẩn dụ "đối tượng như server". Vấn đề duy nhất — mà các nhà thiết kế CAL không xem là vấn đề — là chỉ một số thứ nhất định (thường là lớn và chậm) mới là "đối tượng". Những thứ nhanh và nhỏ thì không. Điều này cần phải sửa.

LISP: vẻ đẹp và vết nứt trong viên ngọc

Cú đánh lớn nhất với Kay khi ở SAIL cuối năm 1969 là thực sự hiểu LISP. Mọi sinh viên đều biết car, cdr và cons, nhưng Utah nghèo nàn ở chỗ không ai dùng LISP, và do đó không ai thấu hiểu được sự huyền diệu của eval và apply.

"Tôi khó có thể tin nổi ý tưởng của LISP đẹp đẽ và kỳ diệu đến mức nào."

Nhưng LISP có những lỗ hổng sâu trong nền tảng logic. Ngôn ngữ thuần được cho là dựa trên hàm, nhưng những thành phần quan trọng nhất — như biểu thức lambda, quote và cond — lại không phải là hàm, mà được gọi là special form. Landin và những người khác đã có thể biểu diễn quote và cond thông qua lambda bằng những thủ thuật khéo léo và hữu ích, nhưng vết nứt vẫn còn trong viên ngọc.

Trong ngôn ngữ thực dụng, mọi thứ tốt hơn. Không chỉ có EXPR (đánh giá đối số của nó) mà còn có FEXPR (không đánh giá). Và câu hỏi tiếp theo của Kay là: tại sao lại gọi nó là hàm...


Bài viết gốc: "The Early History of Smalltalk" — Alan C. Kay, HOPL-II, 1993. Đây là một trong những tư liệu quan trọng bậc nhất để hiểu vì sao lập trình hướng đối tượng ra đời, và vì sao điện toán cá nhân — từ chiếc laptop bạn đang dùng đến ý tưởng về máy tính cho trẻ em — đều mang dấu ấn của những suy nghĩ từ thập niên 60.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗