Как измерить "понятность" языка?


Я часто читал, что некоторые языки программирования более понятны, чем другие, и несколько раз спрашивал себя, существует ли объективный способ измерить ясность языка, чтобы разработать, учитывая абстрактный синтаксис, конкретный синтаксис настолько ясный и дружественный человеку, насколько это возможно. Может быть, существуют какие-то конструкции паттернов для этой цели?

Короче говоря: как можно достичь максимальной ясности синтаксиса? Знать любой способ количественной оценки "ясности" или "выразительности" язык?

Имеет ли смысл попытаться измерить эти аспекты?

Спасибо.

7 4

7 ответов:

Я слишком много раз слышал эту фразу, небрежно брошенную на разные языки, и разные люди будут выбирать разные языки, основываясь на разных критериях.

В прекрасном коде Юкихиро Мацумото (дизайнер Ruby) приводит аргумент о том, насколько проще написать программу Hello World на Ruby, чем на Java. Хотя я не думаю, что этот пример предназначен для масштабирования, автор считает, что количество cruft, которое вы должны добавить в свой код, отражает трудность в понимании программы, написанной на этом языке. То есть, чем меньше вы отвлекаетесь, тем более "читабельной" является программа.

По моему опыту, хорошие программисты пишут четкий код на всех языках, на которых они программируют, хотя еще более четко на языках, с которыми они более знакомы. Талант автора, а также широта его опыта в этой области в конечном итоге затмевают ясность или выразительность самого языка.

Еще один момент, который следует рассмотреть, - это количество доступных библиотек и качество API. Если вам нужно написать меньше "кода поддержки", чтобы выполнить работу, то, скорее всего, полученная программа будет более понятной, потому что она кажется более прямой.

Есть некоторые исследования в области так называемого "естественного программирования", которые могут вас заинтересовать:

Http://www.cs.cmu.edu/~NatProg/index.html

Они пытаются разрабатывать языки, соответствующие человеческим ожиданиям, вместо того чтобы пытаться приспособить людей к тому, что проще всего для компьютера. И они основывают это на экспериментах. Например, изучая, сколько людей приносят обратно грушу из коробки с фруктами, когда вы инструктируете их: "принесите что-то не яблоко или яблоко". груша". (Я не успевал за их результатами, но это звучало как многообещающий проект.) Тем не менее," ясность "и" выразительность " - туманные вещи для оценки. Есть, конечно, исследования, которые делают количественную меру языков друг против друга, как компьютерная языковая игра бенчмарки. Некоторые люди взяли данные из решений, предлагаемых в этой игре, и построили графики таких тенденций, как " размер кода против исполнение":

Http://blog.gmarceau.qc.ca/2009/05/speed-size-and-dependability-of.html

Вы можете сделать некоторые шаткие предложения на основе метрик о языке общего назначения, основанные на тенденциях в размере кода, который требуется для эффективного выполнения данной задачи. Но тогда вы придавливаете довольно субъективные понятия о том, что такое" ясность "и" выразительность". (Я склонен полагать, что более короткие программы, которые делают ту же работу быстрее, часто более понятны, но их много контрпримеры.)

Таким образом, я бы сказал, что в отсутствие определенной целевой аудитории, с которой вы можете проводить исследования юзабилити с испытуемыми, вы не сделаете намного лучше, чем эти виды метрик для обобщения о языках.

(Примечание: мне нравится Rebol, и я думаю, что он обладает способностью быть невероятно ясным и выразительным...но только если вы используете его определенным образом, который включает в себя развитие диалектов DSL, как вы идете, что не так много людей думают, когда они программируют. И все же!)

Я не думаю, что есть. Ясность субъективна, и шаблоны дизайна не являются хорошей мерой для ясности языка (действительно, шаблоны дизайна обычно рождаются, чтобы обойти ограничения языка).

Некоторым людям нравится язык с богатой и лаконичной семантикой (например, perl) и не возражает против использования символов, в то время как другие предпочитают синтаксис, который напоминает естественный язык, такой, что вы, кажется, говорите с компьютером (например, Hypercard) и не возражает против многословия или двусмысленность.

Подобный вопрос обычно приводит к педантичному ответу.

Языки подобны инструментам.

Они построены в соответствии с определенными целями. Язык логического программирования решает определенные задачи более изящным способом, чем объектно-ориентированная программа. Аналогично, многие решения основного потока легко выполняются типичным объектно-ориентированным или процедурным языком.

Темперамент и другие факторы пользователя инструмента, в данном случае программиста, также имеют значение. Некоторые люди достигли изящные решения в Perl, но для меня это всегда выглядело как черная магия. Я предпочитаю структурную простоту Python. Для некоторых использование белого пространства было отвратительным.

Это была бы в лучшем случае очень субъективная оценка, если бы можно было оценить ясность и выразительность языка.

Как бы то ни было, ясное указание-это богатство производства кода на этом языке. Некоторые языки, такие как brainfuck, не были приняты, в то время как Python, Ruby и т. д. приобрели популярность. Хотя, эти и многие другие факторы могут быть только индикатором. Некоторые языки, несмотря на хорошие конструкции, могут не найти много желающих.

Сетевой эффект также влияет на принятие языка.

Я нахожу ЛОЛКОД самым понятным языком из всех:

HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
    UP VAR!!1
    VISIBLE VAR
    IZ VAR BIGGER THAN 10? KTHXBYE
IM OUTTA YR LOOP
KTHXBYE

Измерение понятности языка не так важно, как измерение понятности программиста.

Вы также можете посмотреть книгу" концепции языков программирования " последнего издания, Р. В. Себеста. В этой книге есть глава (Глава 1 или 2, точно не помню), в которой обсуждаются критерии оценки языка программирования.