Как измерить «понятность» языка? - PullRequest
4 голосов
/ 25 сентября 2010

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

Вкратце: как можно достичь максимальной ясности синтаксиса? Знаешь какой-нибудь способ количественной оценки «ясности» или «выразительности» языка?

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

Спасибо.

Ответы [ 7 ]

3 голосов
/ 25 сентября 2010

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

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

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

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

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

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

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

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

3 голосов
/ 25 сентября 2010

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

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

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

Другим важным моментом является количество доступных библиотек и качество API. Если вам нужно написать меньше «кода поддержки», чтобы выполнить работу, то, скорее всего, результирующая программа будет более понятной, потому что она выглядит более точной.

2 голосов
/ 25 сентября 2010

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

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

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

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

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

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

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

2 голосов
/ 25 сентября 2010

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

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

1 голос
/ 25 сентября 2010

Я считаю LOLCODE самым понятным языком из всех:

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
0 голосов
/ 25 сентября 2010

Вы также можете взглянуть на книгу «Концепции языков программирования» последнего издания BY RW Sebesta.В этой книге есть глава (главу 1 или 2, которую я точно не помню), в которой обсуждаются критерии оценки языка программирования.

0 голосов
/ 25 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...