Cộng đồng lập trình đang tích cực thảo luận về nguồn gốc và tính phù hợp của các thuật ngữ lập trình phổ biến, đặc biệt là tại sao chúng ta gọi hàm thay vì sử dụng các từ thay thế như triệu hồi hoặc thực thi. Cuộc trò chuyện này đã tiết lộ những hiểu biết thú vị về cách ngôn ngữ lập trình phát triển từ các thực hành máy tính thời kỳ đầu.
Các thuật ngữ thay thế được sử dụng trong lập trình:
- Invoke: Trang trọng hơn, xuất phát từ tiếng Latin "invocāre" (gọi đến)
- Execute: Thuật ngữ chung nhấn mạnh hành động được thực hiện
- Apply: Được sử dụng trong ngữ cảnh lập trình hàm
- Activate: Liên quan đến bản ghi kích hoạt trong bộ nhớ
- Perform: Được sử dụng trong ngôn ngữ lập trình COBOL
- Transfer: Thuật ngữ ban đầu tập trung vào luồng điều khiển
Kết nối với thư viện: Từ sách đến mã nguồn
Thuật ngữ gọi trong lập trình có nguồn gốc sâu xa từ khoa học thư viện, có từ những năm 1870. Các nhà khoa học máy tính thời kỳ đầu đã mượn khái niệm số gọi được sử dụng để tổ chức sách trong thư viện. Khi các lập trình viên cần truy cập các chương trình con được lưu trữ trong cái mà họ gọi là thư viện mã nguồn, họ sẽ gọi chúng bằng các số định danh, giống như yêu cầu một cuốn sách từ thủ thư. Thực hành này đã trở nên quen thuộc đến mức vào năm 1958, Fortran II đã giới thiệu câu lệnh CALL theo nghĩa đen, củng cố thuật ngữ này trong văn hóa lập trình.
Kết nối giữa thư viện vật lý và thư viện mã nguồn không chỉ là ẩn dụ. Các máy tính thời kỳ đầu thực sự lưu trữ các chương trình con trên băng từ, được tổ chức giống như sách trên kệ, mỗi cái có hệ thống định danh riêng.
Dòng thời gian lịch sử của thuật ngữ "Call":
- 1876: Melvil Dewey giới thiệu "số gọi" thư viện
- 1947: John W. Mauchly sử dụng "called in" cho các chương trình con
- 1956: MANIAC II sử dụng "call number" cho các chương trình con
- 1958: Fortran II giới thiệu câu lệnh "CALL" theo nghĩa đen
- 1959-1960: Algol áp dụng thuật ngữ "procedure call"
- 1961: Lần đầu tiên ghi nhận việc sử dụng cụm từ "to call X"
- 1963: Cách sử dụng hiện đại trở thành tiêu chuẩn
Biến thể sử dụng hiện đại và sự khác biệt theo vùng miền
Cộng đồng lập trình ngày nay sử dụng một số thuật ngữ thay thế cho nhau, mặc dù gọi vẫn chiếm ưu thế. Một số nhà phát triển thích triệu hồi vì tông điệu trang trọng hơn, trong khi những người khác sử dụng thực thi để rõ ràng hơn. Thú vị là các ngôn ngữ và văn hóa khác nhau đã định hình những sở thích này. Ví dụ, các lập trình viên Phần Lan dịch gọi thành kutsua, có nghĩa là mời hoặc triệu tập - cho thấy họ xem việc gọi hàm giống như triệu tập sự trợ giúp hơn là thực hiện cuộc gọi điện thoại.
Cộng đồng cũng đã lưu ý những cách sử dụng thuật ngữ buồn cười, đặc biệt là trong số các sinh viên có tiếng Anh là ngôn ngữ thứ hai, những người có thể nói rằng họ đang gọi một nút hoặc gọi từ khóa return. Những đặc điểm ngôn ngữ này làm nổi bật cách thuật ngữ lập trình có thể gây nhầm lẫn ngay cả đối với các nhà phát triển có kinh nghiệm.
Thuật ngữ đa ngôn ngữ:
- Finnish: "kutsua" (mời/triệu hồi)
- C: Sử dụng "Invoke" cho các delegate và phương thức phản chiếu
- Tcl: Sử dụng "command" thay vì function
- Smalltalk: Triển khai các câu lệnh if như các phương thức
- Excel: Xử lý các cấu trúc điều khiển như IF dưới dạng hàm
Sự lan truyền của thuật ngữ lập trình
Sự phát triển từ máy tính thời kỳ đầu đến lập trình hiện đại cho thấy các thuật ngữ mới có thể lan truyền nhanh chóng như thế nào khi chúng phù hợp với người dùng. Những từ ngắn gọn, dễ nhớ giúp các nhà phát triển tạo ra các kết nối tinh thần có xu hướng lan truyền nhanh chóng trong cộng đồng lập trình. Thuật ngữ gọi thành công vì nó ngắn gọn, dễ nhớ và kết nối với các khái niệm quen thuộc như triệu tập sự trợ giúp hoặc yêu cầu dịch vụ.
Lý do nó được gọi là trình biên dịch [khoảng năm 1952] là vì mỗi chương trình con được đặt một từ gọi, bởi vì các chương trình con nằm trong một thư viện, và khi bạn lấy thứ gì đó ra khỏi thư viện, bạn biên dịch mọi thứ.
Góc nhìn lịch sử này tiết lộ bao nhiêu từ vựng lập trình hiện tại của chúng ta xuất hiện từ các nhu cầu thực tế và các phép tương tự quen thuộc, thay vì lập kế hoạch ngôn ngữ cẩn thận. Hiểu được những nguồn gốc này giúp giải thích tại sao một số thuật ngữ nhất định tồn tại trong khi những thuật ngữ khác biến mất, và tại sao các ngôn ngữ lập trình tiếp tục phát triển thuật ngữ của chúng ngày nay.
Tham khảo: Phrase origin: Why do we call functions?