Ngôn ngữ lập trình đã tiến hóa ra sao?
Ngôn ngữ đầu tiên là Fortran, có từ năm 1957. Nó được biết như một ngôn ngữ của phép tính số (Fortran - Formula Translator, dịch công thức). Ngôn ngữ này đã sinh ra một gia đình đông đúc, trong đó chủ yếu có Cobol, thích hợp với các chương trình quản lý, theo như tên gọi của nó, Common Business Oriented Language (Ngôn ngữ chung cho doanh nghiệp). Cobol là ngôn ngữ chữa sai sót của năm 2000[1]: nhiều chương trình phải chữa được viết bằng Cobol và những người lập trình làm chủ được ngôn ngữ đã qua này cũng hiếm... Trong gia đình này còn có Pascal hiến cho giảng dạy hoặc C, nổi tiếng là nhanh. Nó giúp cho người lập trình tự quản lý bộ nhớ của máy.
Trong những năm 1960 đã ra đời Lisp, đứa con đầu tiên của một gia đình hoàn toàn khác: ngôn ngữ hàm số. Ngôn ngữ này được gợi ra trực tiếp từ phép tính lambda, là thuyết có từ những năm 1930 cho phép biểu thị tất cả các phần tử của một phép tính như những hàm số, kể cả các số nguyên. Ngôn ngữ hàm số dựa vào chữ viết và sự kết hợp của các hàm số này. Ưu điểm của cách tiếp cận này là dễ đưa ra một ý nghĩa toán học cho từng chỉ dẫn của ngôn ngữ, tức là chương trình. Người ta gọi đó là tạo ngữ nghĩa cho ngôn ngữ. Kỹ thuật này đã giúp các nhà nghiên cứu phát triển những ngôn ngữ tin cậy hơn. Nhưng những người lập trình chuyên nghiệp còn ít sử dụng ngôn ngữ hàm số.
Có tới hàng nghìn ngôn ngữ. Nhưng chỉ khoảng vài chục được sử dụng thật sự và những ngôn ngữ được các nhà lập trình ưa thích có thể đếm trên đầu ngón tay. Sau hết, đại đa số các ngôn ngữ là tương đương về tiềm năng biểu thị. Vây tại sao lại nhiều như vậy?
Trên thực tế, các chương trình chuyển đổi gắn liền với mỗi ngôn ngữ đều có tiếng là nhanh hoặc tin cậy ít nhiều, và bản thân các ngôn ngữ có thể ít nhiều dễ sử dụng theo các ứng dụng. Vì vậy một số ngôn ngữ phù hợp với các vấn đề rất xác định, ví dụ quản lý cơ sở dữ liệu. Mỗi nhà tin học có sự ưa thích riêng. Hơn nữa, đó là những ưa thích khó thay đổi, nhất là vì những ngôn ngữ thường dùng có các thư viện, được cung cấp nhiều về các chức năng đã được lập trình trước.