?

Log in

No account? Create an account
Читаемость кода - lqp
November 19th, 2016
12:51 am

[Link]

Previous Entry Share Next Entry
Читаемость кода
В последнее время снова начал читать книжки по программированию и около.

В современной философии программирования высшей ценностью является "ясность и читаемость кода", ради которой полагается жертвовать едва ли не всем остальным, что есть в программировании. Вроде бы логично. Однако есть нюансы

*) Читаемость кода есть функция от уровня и характера образования читающего субьекта. Код, кристально ясный для Эдгара Дейкстры или Дональда Кнута, будет запутанно-непонятным для начинающего уеб-погромиста,научившегося жабаскрипту на краткосрочных курсах кулинарного техникума.

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

*) Читаемость кода есть функция от количества содержащегося в этом коде информации. Алгоритм, расписанный на 10 экранов всегда будет "более читаемым" в пересчете на экран текста, чем тот же алгоритм, расположенный на одном экране. Однако далеко не факт, что во втором случае понимание алгоритма целиком будет легче или быстрее, чем во втором. А так да, программист живенько топчет кнопки со стрелочками, процесс идет...

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

Tags:

(5 comments | Leave a comment)

Comments
 
[User Picture]
From:gorrah
Date:November 19th, 2016 03:29 am (UTC)
(Link)
Это ценность не для языка, а для разработки. Код должен быть легко читаем, чтобы его могли легко поддерживать и развивать сотрудники выпустившей программу конторы. Которых, увы, не набрать поголовно из Дейкстр и Виртов. Иной раз придется и "уэб-программистами" обойтись, если на лучшее бюджета нет. Нет, если денег куры не клюют и все позиции можно поголовно занять выпускниками MIT и физтеха с отличием... Но в реальной жизни так почему-то бывает редко.
From:lqp
Date:November 19th, 2016 07:30 am (UTC)
(Link)
Ну так это замкнутый круг.

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

Кстати, 60% кода пишется не на продажу и не софтоторговыми конторами.
[User Picture]
From:gorrah
Date:November 19th, 2016 09:48 am (UTC)
(Link)
Помимо идиотов и гениев есть еще довольно много промежуточных ступеней. Кроме того, будь ты хоть гений, но плохо структурированный код ты будешь читать и понимать гораздо медленней. А на продажу там или нет, почти любой код требует развития и поддержки. Даже когда написанную собственноручно для себя приблуду через годик читаешь, зачастую возникают мысли "как я такое наваял-то?"
From:lqp
Date:November 19th, 2016 02:55 pm (UTC)
(Link)
Это то, с чего я начал. В то время как примеров однозначно плохого кода можно указать в избытке, "хорошо структурированный код" - понятие субъективное и контекстно-зависимое.

Какие-нибудь "Design Patterns" в рамках одной школы будут образцом хорошего стиля программирования, а для других - ужас-Ужас-УЖАС.

[User Picture]
From:gorrah
Date:November 19th, 2016 03:30 pm (UTC)
(Link)
Паттерны проектирования к понятию "хорошо читаемый код" (так будет точней) имеют отношение постольку-поскольку, это скорей готовые и эффективные (что, впрочем, обсуждаемо) рецепты решений часто встречающихся проблем.
Хорошо читаемый код - это скорей то, о чем книга "Чистый код" Мартина. Внятно читаемые и осмысленные названия переменных, функций, методов, классов. Отсутствие невнятных вызываемых параметров функций и методов, числом 100500. Отсутствие неожиданных и неявных эффектов вызова методов и функций, например, когда функция а-ля CheckEmail не только проверяет валидность адреса, но еще и пишет его в поле структуры данных пользователя, а то и в БД. Отсутствие ненужного петросянства и залежей неинформативных комментариев. И тому подобное.
Что касается контекстной зависимости, тут скорей речь о стандартах оформления. Где то так принято, где то так, но отсебятничать и смешивать не нужно.
--- Powered by LiveJournal.com