Tiêu chí cho một ngôn ngữ lập trình được coi là trưởng thành


8

Gần đây tôi đã đọc một câu trả lời cho câu hỏi này và tôi đã bị ấn tượng bởi câu nói "Ngôn ngữ đã trưởng thành".

Vì vậy, tôi đã tự hỏi những gì chúng ta thực sự có nghĩa là gì khi chúng ta nói rằng "Một ngôn ngữ lập trình là trưởng thành"? Thông thường, một ngôn ngữ lập trình ban đầu được phát triển theo nhu cầu, vd

  • Hãy thử / triển khai mô hình lập trình mới hoặc kết hợp các tính năng mới không thể tìm thấy trong các ngôn ngữ hiện có.
  • Cố gắng giải quyết vấn đề hoặc vượt qua giới hạn của ngôn ngữ hiện có.
  • Tạo một ngôn ngữ để giảng dạy lập trình.
  • Tạo một ngôn ngữ giải quyết một loại vấn đề cụ thể (ví dụ đồng thời).
  • Tạo ngôn ngữ và API cho trường ứng dụng đặc biệt, ví dụ: web (trong trường hợp này, ngôn ngữ có thể sử dụng lại mô hình nổi tiếng, nhưng toàn bộ API phải mới).
  • Tạo một ngôn ngữ để đẩy đối thủ của bạn ra khỏi thị trường (trong trường hợp này, người tạo có thể muốn ngôn ngữ mới rất giống với ngôn ngữ hiện có, để thu hút các nhà phát triển đến ngôn ngữ và nền tảng lập trình mới).

Bất kể động cơ ban đầu và kịch bản trong đó một ngôn ngữ đã được tạo ra, cuối cùng một số ngôn ngữ được coi là trưởng thành . Theo trực giác của tôi, điều này có nghĩa là ngôn ngữ đã đạt được (ít nhất một trong số) các mục tiêu của nó, ví dụ: "Bây giờ chúng ta có thể sử dụng ngôn ngữ X như một công cụ đáng tin cậy để viết các ứng dụng web."

Tuy nhiên điều này hơi mơ hồ, vì vậy tôi muốn hỏi những gì bạn cho là tiêu chí quan trọng nhất (nếu có) được áp dụng khi nói rằng một ngôn ngữ đã trưởng thành.

LƯU Ý QUAN TRỌNG

Câu hỏi này là (về mục đích) ngôn ngữ bất khả tri vì tôi chỉ quan tâm đến tiêu chí chung. Xin vui lòng chỉ viết câu trả lời và bình luận ngôn ngữ! Tôi không hỏi liệu "ngôn ngữ X cụ thể nào là trưởng thành" hay "ngôn ngữ lập trình nào có thể được coi là trưởng thành" hay "ngôn ngữ X trưởng thành hơn ngôn ngữ Y": vui lòng tránh đăng bất kỳ ý kiến ​​hoặc tài liệu tham khảo nào về bất kỳ ngôn ngữ cụ thể nào vì những ngôn ngữ này nằm ngoài phạm vi của câu hỏi này

BIÊN TẬP

Để làm cho câu hỏi chính xác hơn, theo tiêu chí, tôi muốn nói đến những thứ như "hỗ trợ công cụ", "áp dụng theo ngành", "ổn định", "API phong phú", "cộng đồng người dùng lớn", "hồ sơ ứng dụng thành công", "tiêu chuẩn hóa" , "ngữ nghĩa sạch và thống nhất", v.v.


Về việc bỏ phiếu để đóng (không phải là một câu hỏi thực sự): Điểm chính của câu hỏi là: "Điều bạn cho là tiêu chí quan trọng nhất (nếu có) được áp dụng khi nói rằng một ngôn ngữ là trưởng thành." Các tiêu chí có thể xuất hiện trong đầu tôi là: cộng đồng người dùng lớn, API phong phú, ổn định ngôn ngữ, hỗ trợ công cụ. Nhưng tôi thực sự không chắc chắn tiêu chí nào thường được áp dụng và tiêu chí nào được coi là ít quan trọng hơn đối với định nghĩa về sự trưởng thành ngôn ngữ. Bất kỳ đề xuất về cách xây dựng tốt hơn câu hỏi của tôi đều được chào đón.
Giorgio

Câu trả lời:


7

Yếu tố chấp nhận

Tôi muốn nói là sự kết hợp của nhiều thứ khác nhau, nhưng tôi không nghĩ rằng tất cả chúng đều được yêu cầu. Một số ngôn ngữ được coi là trưởng thành ngày nay rõ ràng không đáp ứng một số trong số này.

Tôi muốn nói một sự kết hợp của:

  • Dụng cụ:
    • dòng chính: Ít nhất một bộ công cụ "chính thức" ổn định hoặc được chấp nhận rộng rãi (thực tế hoặc được nhà cung cấp khuyến nghị / hỗ trợ) (trình biên dịch, trình thông dịch, vm, biên tập viên).
    • thay thế : Một số lựa chọn thay thế ổn định và không ổn định của công cụ trên (biến thể nguồn đóng hoặc nguồn mở, biến thể tự do hoặc thương mại, tiện ích mở rộng, v.v ...).
  • Cộng đồng: Một nhóm người theo dõi và đóng góp tích cực , nhưng không nhất thiết phải lớn .
  • Sự công nhận:
    • Một số mức độ được công nhận và sử dụng bởi một số tác nhân công nghiệp (ngay cả khi trong một ngách).
    • Một số mức độ công nhận trong văn hóa phổ biến (ngay cả khi trong một ngách).

Về danh tiếng, sự công nhận và trưởng thành

Lưu ý rằng sự khác biệt ở đây là có các trình xác nhận tiêu chí mạnh mẽ và tích cực, không lớn hoặc nhiều. Để làm rõ, hãy xem xét các ví dụ rất khác nhau này:

  • Ruby là một ngôn ngữ lâu đời với sự ủng hộ của cộng đồng lớn, một triển khai tham chiếu chính thức và vv nhưng khó có thể được coi là trưởng thành cho đến khi nó giải quyết được một số khía cạnh khó khăn của nó. Nó đã nổi tiếng trước khi trưởng thành.

  • Mặt khác, phổ biến, một số ngôn ngữ từng được sử dụng rất rộng rãi (COBOL, FORTRAN ...) giờ đây ít được nhìn thấy hơn nhưng vẫn trưởng thành theo mọi nghĩa có thể. Họ đã từng nổi tiếng và trưởng thành.

  • Ngoài ra, một số ngôn ngữ thích hợp theo quan điểm của tôi chắc chắn trưởng thành, truyền cảm hứng cho sự thâm nhập thị trường nhỏ (nhưng đã thành lập) của họ. Hãy xem xét Oberon hoặc Limbo. Họ trưởng thành nhưng không bao giờ nổi tiếng. Những người khác, như R, tương đối nổi tiếng ở chỗ "hốc" của họ không thực sự là hốc (làm phiền tôi khi mọi người gọi những thứ như Scala hoặc Clojure là "ngôn ngữ thích hợp", mà họ chắc chắn không phải), mặc dù lĩnh vực ứng dụng của họ không phải là chính xác những gì bạn gọi là chính thống.

Ổn định

Dù sao ổn định? Nó khá tương đối ...

  • Tuân thủ?
    • Theo tiêu chuẩn (nếu có)?
    • Để thực hiện tham chiếu (nếu có)?
  • Số lượng bọ? (hầu như không phải là một biện pháp tốt)
  • Sử dụng trong môi trường quan trọng?

Nói chung, sự ổn định đơn giản có nghĩa là tôi không ngạc nhiên hàng ngày khi thực hiện công việc trung bình của mình bằng bộ công cụ ngôn ngữ và tôi có thể nhận được câu trả lời dứt khoát về những gì nên hay không nên xảy ra khi tôi cố gắng làm gì đó với ngôn ngữ và bộ công cụ của nó, cho dù đó là thời gian xây dựng hay thời gian chạy của các chương trình của tôi.

Nhưng sự ổn định cho ai đó viết ứng dụng điện thoại thông minh và sự ổn định cho ai đó viết hệ thống y tế hoặc hệ thống điện tử là một loại chim khác.


+1 (không chỉ mà còn) vì bạn đang chạm vào yếu tố nguồn mở. Có một TON ví dụ trong đó các giải pháp nguồn đóng (và thường là thương mại) tốt hơn các giải pháp thay thế nguồn mở. Có các công cụ nguồn mở, thư viện, v.v ... cho một ngôn ngữ, tuy nhiên đến lúc trưởng thành, vì (đối với tôi, ít nhất), nó có ý nghĩa nhiều hơn là những người có lợi ích tài chính đối với ngôn ngữ đã sử dụng ngôn ngữ đó do đó họ đã sử dụng ngôn ngữ đó nhiều hơn lý do thực tế.
Shivan Dragon

@haylem: Tôi đồng ý với bạn rằng nổi tiếng và trưởng thành không giống nhau. Điểm tốt. Về sự ổn định, tôi nghĩ rằng nên liên hệ nó với mức độ "bất ngờ" khi sử dụng ngôn ngữ.
Giorgio

@haylem: Hiện đã có hai phiếu để đóng câu hỏi (tôi muốn những phiếu như vậy được kèm theo một số lời giải thích, vì điều đó sẽ giúp tôi cải thiện câu hỏi của mình). Một lý do có thể là so sánh ngôn ngữ là một chủ đề tế nhị có thể bắt đầu tranh luận (mặc dù tôi không thấy nhiều tranh luận cho đến nay). Bạn có nghĩ rằng có thể xây dựng câu trả lời của bạn mà không cần tham khảo các ngôn ngữ cụ thể không? Tôi nghĩ mọi người sẽ hiểu quan điểm của bạn về việc trưởng thành và được lan truyền rộng rãi mà không đề cập đến các ví dụ cụ thể.
Giorgio

@Giorgio: câu trả lời của tôi đã là ngôn ngữ bất khả tri, phần thứ hai chỉ là làm rõ với các ví dụ. Tôi sẽ cố gắng viết lại / mở rộng nó một chút vào ngày mai nếu tôi có thời gian.
haylem

5

Tôi thực sự đã có cùng một thắc mắc một vài năm trước đây. Trước đó, tôi đã quyết định rằng một ngôn ngữ đã trưởng thành (nghĩa là tốt cho việc giải quyết các vấn đề thuộc loại x) nếu nó có hầu hết các tính năng cần thiết để giải quyết vấn đề đó. Nói cách khác, có bao nhiêu công cụ giải quyết vấn đề cụ thể mà tôi phải tự tạo ra so với bao nhiêu công cụ đã đi kèm với ngôn ngữ. Theo nhận xét của bạn, tôi sẽ xóa ví dụ ngôn ngữ cụ thể và thay thế nó bằng một ví dụ bất khả tri về ngôn ngữ:

Về cơ bản, tôi nghĩ rằng một ngôn ngữ có rất nhiều thư viện "người trợ giúp" và "tiện ích" được xây dựng hoàn thiện hơn so với ngôn ngữ mà một số ngôn ngữ đó không tồn tại (và trong đó tôi phải viết chúng - hoặc một cái gì đó tương tự như họ - chính tôi)

Tôi đang nói về tất cả những điều này trong quá khứ bởi vì những ngày này tôi đã bỏ khá nhiều lối suy nghĩ đó và nghĩ về sự trưởng thành của một ngôn ngữ như thế này:

  • cộng đồng đó mạnh đến mức nào Có bao nhiêu tài liệu, sách, ví dụ thích hợp ở đó. Điều này rất quan trọng, bởi vì bạn có thể có những ngôn ngữ rất hay và có thể phù hợp hơn với một số nhiệm vụ cụ thể so với những ngôn ngữ khác, nhưng tài liệu kém, do đó bạn không bao giờ thấy được lợi thế của chúng.

  • hiệu suất. Đối với một nhiệm vụ nhất định và một triển khai x nhất định, ngôn ngữ mà việc triển khai đó sẽ chạy nhanh hơn sẽ trưởng thành hơn. Vâng, đây là một khu vực rất xám và đối với hầu hết các ngôn ngữ và nền tảng, thật khó để so sánh. Tuy nhiên, đối với một số ngôn ngữ và nền tảng nhất định, nó khá đơn giản để xem ngôn ngữ nào hoạt động tốt hơn. Đối với một số loại vấn đề này là rất quan trọng.

  • lỗi. Ồ vâng. Tôi chưa bao giờ nghĩ về điều này cho đến khi tôi nhìn thấy nó bằng chính mắt mình. Tôi sẽ không đưa ra bất kỳ ví dụ nào vì tôi không muốn có vẻ như tôi đang làm hỏng ngôn ngữ này hay ngôn ngữ khác, nhưng có những ngôn ngữ ngoài đó (tốt hơn, chính xác hơn là môi trường biên dịch và thời gian chạy cho một số ngôn ngữ nhất định) rất có lỗi, đến mức bạn không còn có thể tin tưởng và ước tính một cái gì đó sẽ hoạt động như thế nào. Đối với tôi sự trưởng thành của một ngôn ngữ rơi rất nhiều khi đây là trường hợp.

Những lý do tại sao tôi thay đổi cách tôi nghĩ về một ngôn ngữ trưởng thành hơn là:

  • trước hết, thực tế là một ngôn ngữ có rất nhiều thư viện trợ giúp và các tiện ích có thể không phải lúc nào cũng có nghĩa là chúng thực sự hữu ích. Các thư viện đó vẫn còn chung chung và chúng có thể cách xa một số nhu cầu cụ thể mà bạn có, do đó cuối cùng tôi có xu hướng tự viết lại một phần trong số chúng để có giải pháp cụ thể hơn, hiệu quả hơn.

  • hơn nữa, những thứ như hiệu suất và tài liệu về ngôn ngữ & nền tảng là những thứ khó bù hơn so với việc thiếu thư viện. Nếu mã bạn viết bằng ngôn ngữ x và nền tảng y chậm, việc tự tối ưu hóa nó sẽ không bao giờ tốt bằng việc thay thế nó bằng ngôn ngữ x2 và nền tảng y2 mà một nhóm người (có thể thông minh hơn) mà tôi đã tối ưu hóa. Tương tự như vậy đối với tài liệu, việc thiếu nó sẽ mất nhiều thời gian hơn cho việc làm bằng chứng về các khái niệm, thử nghiệm và lỗi, khám phá mã nguồn và đơn vị thử nghiệm để xem cách thực hiện một cái gì đó. Và ngay cả khi bạn trải qua tất cả những điều này, bạn vẫn không biết liệu giải pháp bạn chọn có phù hợp nhất hay không, vì những người tạo ngôn ngữ dự định cho nó hoạt động.


Cảm ơn câu trả lời nhưng xin vui lòng tránh đề cập đến các ngôn ngữ cụ thể, vì điều này có thể dẫn đến cuộc tranh luận nằm ngoài phạm vi của câu hỏi.
Giorgio

Tôi thích nó tốt hơn với một ví dụ cụ thể, thực tế.
Blrfl

@Blrfl: Có thể dễ đọc hơn nhưng sau đó mọi người có thể bắt đầu tranh luận về các ngôn ngữ lập trình khác nhau và câu hỏi được đóng lại là "không mang tính xây dựng".
Giorgio

1
@Shivan Dragon: Cảm ơn bạn đã xóa các tài liệu tham khảo cụ thể và cảm ơn câu trả lời thú vị. +1.
Giorgio

2
@Blrfl: Tôi có xu hướng đồng ý nhiều hơn với Giorgio ở đây, mỗi lần so sánh cụ thể được thực hiện giữa các ngôn ngữ mà chúng thường được theo sau bởi các cuộc tranh luận không hồi kết và, như luật của Godwin, nó thậm chí có thể đi xuống các tài liệu tham khảo của Hitler :). Tốt hơn để lại nó bất khả tri.
Shivan Dragon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.