Có một vài định nghĩa về sức mạnh ngoài sự hoàn thiện của Turing. Mark đã trích dẫn những gì tôi có xu hướng nghĩ là "định nghĩa Paul Graham." Đó là một định nghĩa khá hay, với một lỗ hổng nghiêm trọng: nó sai. Về mặt lý thuyết, đây là một định nghĩa rất tốt về sức mạnh ngôn ngữ, nhưng bạn biết họ nói gì về sự khác biệt giữa lý thuyết và thực hành ...
Nếu mọi người đều có khả năng viết mã hoàn hảo, không chỉ hoàn toàn không có lỗi mà còn hoàn toàn không có bằng chứng trong tương lai, thì định nghĩa của Paul Graham sẽ là chính xác. Nhưng đó rõ ràng không phải là trường hợp. Trong thế giới thực, phần lớn thời gian và nỗ lực dành cho công nghệ phần mềm không phải được tạo ra bởi việc tạo ra sản phẩm ban đầu, mà bằng cách bảo trì sau đó. Tùy thuộc vào số liệu thống kê mà bạn nghe, (và có thể thay đổi khá nhiều từ dự án này sang dự án khác), bảo trì có thể chiếm bất kỳ nơi nào từ 60% đến 90% tổng số nỗ lực dành cho một chương trình.
Việc bảo trì thường được thực hiện bởi những người không phải là người đã viết mã ban đầu và thường là vài tháng hoặc thậm chí nhiều năm sau khi viết mã ban đầu, điều đó có nghĩa là ngay cả với người viết mã gốc, nó cũng có thể là "mã của người khác" điểm. Nếu bạn muốn làm việc hiệu quả trong quá trình bảo trì, bạn cần có thể nhanh chóng xác định mục đích ban đầu của mã bằng cách đọc nó.
Do đó, một ngôn ngữ mạnh hơn là ngôn ngữ giúp mã dễ đọc nhanh hơn, không phải ngôn ngữ giúp mã dễ viết nhanh hơn. Có xu hướng có sự chồng chéo khá lớn giữa hai loại, nhưng các khái niệm cũng thường có mục đích chéo, vì cú pháp ngắn gọn sẽ thường bỏ qua các chi tiết mà trình biên dịch / trình thông dịch có thể dễ dàng suy ra hơn một lập trình viên bảo trì.
EDIT: Có một điểm quan trọng khác trong việc mô tả sức mạnh của ngôn ngữ: phạm vi các khái niệm mà bạn có thể diễn đạt và bạn có thể dễ dàng đạt được cả hai đầu của ngôn ngữ đó như thế nào. Paul Graham thích đánh giá điều này về mức độ trừu tượng mà bạn có thể đạt tới, nhưng đó chỉ là một nửa. Bất kỳ ngôn ngữ nào áp đặt giới hạn trừu tượng thấp hơn, bên dưới mà bạn không thể đi khi cần thiết, sẽ bị tê liệt vì các chi tiết bị trừu tượng hóa đều có lý do. Đây là điểm khác biệt giữa ngôn ngữ đồ chơi dễ đọc như COBOL và ngôn ngữ mạnh mẽ dễ đọc: COBOL không có con trỏ và không có quyền truy cập vào lắp ráp nội tuyến, nơi bạn có thể diễn đạt bất kỳ tính toán nào, ngay cả những ngôn ngữ mà COBOL không phù hợp.
COBOL cũng không đặc biệt tốt trong việc đạt được mức cao của phổ trừu tượng. Theo Wikipedia, nó "không có các loại do người dùng định nghĩa và không có các hàm do người dùng định nghĩa", điều này gây khó khăn cho việc tạo các thuật toán và cấu trúc dữ liệu.