Cơ bản của hầu hết các ngôn ngữ thủ tục là khá giống nhau.
Họ cung cấp:
- Kiểu dữ liệu vô hướng: thường là boolean, số nguyên, float và ký tự
- Kiểu dữ liệu tổng hợp: mảng (chuỗi là trường hợp đặc biệt) và cấu trúc
- Các cấu trúc mã cơ bản: số học trên vô hướng, truy cập mảng / cấu trúc, bài tập
- Các cấu trúc điều khiển đơn giản: if-then, if-then-other, while, cho các vòng lặp
- Gói khối mã: hàm, thủ tục với tham số
- Phạm vi: các khu vực trong đó định danh có ý nghĩa cụ thể
Nếu bạn hiểu điều này, bạn đã nắm bắt tốt 90% ngôn ngữ trên hành tinh. Điều làm cho các ngôn ngữ này hơi khó hiểu hơn là sự đa dạng đáng kinh ngạc của cú pháp kỳ lạ mà mọi người sử dụng để nói những điều cơ bản giống nhau. Một số sử dụng ký hiệu ngắn gọn liên quan đến dấu câu lẻ (APL là một cực trị). Một số sử dụng rất nhiều từ khóa (COBOL là một đại diện xuất sắc). Điều đó không quan trọng lắm. Điều quan trọng là nếu ngôn ngữ đã hoàn thành đủ để tự thực hiện các nhiệm vụ phức tạp mà không khiến bạn xé tóc ra. (Hãy thử mã hóa một số hack chuỗi nghiêm trọng trong kịch bản shell của Window DOS: đó là Turing có khả năng nhưng thực sự rất tệ ở mọi thứ).
Ngôn ngữ thủ tục thú vị hơn cung cấp
- Phạm vi lồng nhau hoặc từ vựng, không gian tên
- Con trỏ cho phép một thực thể tham chiếu đến một thực thể khác, với phân bổ lưu trữ động
- Bao bì của mã liên quan: gói, đối tượng với phương thức, đặc điểm
- Kiểm soát tinh vi hơn: đệ quy, tiếp tục, đóng cửa
- Toán tử chuyên biệt: hoạt động chuỗi và mảng, hàm toán học
Mặc dù về mặt kỹ thuật không phải là một thuộc tính của ngôn ngữ, mà là một thuộc tính của hệ sinh thái nơi các ngôn ngữ đó sinh sống, là các thư viện có thể truy cập dễ dàng hoặc được cung cấp với ngôn ngữ như một phần của công cụ phát triển. Việc có một loạt các cơ sở thư viện đơn giản hóa / tăng tốc độ viết các ứng dụng chỉ vì người ta không phải phát minh lại những gì các thư viện làm. Mặc dù Java và C # được cho là rộng rãi và là ngôn ngữ tốt, nhưng điều làm cho chúng thực sự hữu ích là các thư viện khổng lồ đi kèm với chúng và các thư viện mở rộng có thể dễ dàng lấy được.
Các ngôn ngữ khó hiểu hơn là những ngôn ngữ không mang tính thủ tục:
- Các ngôn ngữ chức năng thuần túy, không có bài tập hoặc tác dụng phụ
- Các ngôn ngữ logic, như Prolog, trong đó tính toán và thống nhất biểu tượng xảy ra
- Các ngôn ngữ khớp mẫu, trong đó bạn chỉ định các hình phù hợp với vấn đề và thường các hành động được kích hoạt bằng một kết quả khớp
- Các ngôn ngữ ràng buộc, cho phép bạn chỉ định các quan hệ và tự động giải các phương trình
- Ngôn ngữ mô tả phần cứng, trong đó mọi thứ thực thi song song
- Các ngôn ngữ dành riêng cho tên miền, như SQL, Màu Petri Nets, v.v.
Có hai phong cách biểu diễn chính cho các ngôn ngữ:
- Dựa trên văn bản, trong đó các định danh tên thực thể và luồng thông tin được mã hóa hoàn toàn trong các công thức sử dụng mã định danh để đặt tên cho các thực thể (Java, APL, ...)
- Về mặt đồ họa, trong đó các thực thể được vẽ dưới dạng các nút và quan hệ giữa các thực thể được vẽ dưới dạng các cung rõ ràng giữa các nút đó (UML, Simulink, LabView)
Các ngôn ngữ đồ họa thường cho phép các ngôn ngữ văn bản dưới dạng chú thích trong các nút và trên các cung. Các ngôn ngữ đồ họa kỳ lạ cho phép đệ quy đồ thị (có văn bản :) trong các nút và trên các cung. Các ngôn ngữ đồ họa thực sự kỳ quặc cho phép các biểu đồ chú thích trỏ đến các biểu đồ được chú thích.
Hầu hết các ngôn ngữ này dựa trên một số lượng rất nhỏ các mô hình tính toán:
- Phép tính lambda (cơ sở cho Lisp và tất cả các ngôn ngữ chức năng)
- Hệ thống bài (hoặc kỹ thuật viết lại chuỗi / cây / biểu đồ)
- Máy Turing (sửa đổi trạng thái và lựa chọn các ô nhớ mới)
Được hầu hết các ngành công nghiệp tập trung vào các ngôn ngữ thủ tục và các cấu trúc điều khiển phức tạp, bạn sẽ được phục vụ tốt nếu bạn học tốt một trong những ngôn ngữ thú vị hơn trong danh mục này, đặc biệt nếu nó bao gồm một số loại hướng đối tượng.
Tôi đặc biệt khuyên bạn nên học Scheme, đặc biệt từ một cuốn sách thực sự tuyệt vời:
Cấu trúc và diễn giải các chương trình máy tính . Điều này mô tả tất cả các khái niệm cơ bản. Nếu bạn biết công cụ này, các ngôn ngữ khác sẽ có vẻ khá đơn giản ngoại trừ cú pháp ngớ ngẩn.