Чи простота завжди покращує читабельність?
Я б сказав, може, з невеликою суперечкою, зовсім ні .
Ви можете передати мені клас із 200-членними функціями у своєму публічному інтерфейсі, і це, можливо, найбільш доступний для людини публічний інтерфейс. Це може бути радістю просто випадково прочитати такий код та його документацію. Однак я б не назвав це "простим", оскільки, незважаючи на читабельність, я мав би перейматися тим, як усі ці функції взаємодіють між собою, і потенційно слідкувати за складними крайовими справами, що виникають внаслідок неправильного використання.
Я вважаю за краще клас з 20-ти членними функціями, які не так легко прочитати на 200, що є, тому що "читабельність" не є для мене головним пріоритетом з точки зору запобігання людським помилкам та покращення ремонтопридатності коду (простота, при якій ми можемо це змінити, тобто).
Однак це все залежатиме від нашого особистого визначення поняття "простота". «Читаність» , як правило , не змінюється , що дико серед нас, якщо хто - то придбав так багато досвіду і швидкість , що вони вважають регулярний вираз дуже «читаним», наприклад, забуваючи інше нас простих смертних.
Простота
Давно був час, коли я думав, що "простота" означає "якомога легше читати". Тож я б написав код C з безліччю зручних функцій, намагаючись вдосконалити синтаксис і зробити так, щоб як можна було легше читати і писати.
В результаті я створив дуже великі, багаті бібліотеки високого рівня, намагаючись моделювати функцію для кожної природної людської думки: помічники на помічників на помічників, все для того, щоб сформувати код клієнта на більш читабельному синтаксисі. Код, про який я писав тоді, можливо, був найбільш "читабельним", але він був також самим "незрозумілим" і "складним".
Лісп
І все ж у мене була коротка пристрасть до LISP приблизно в середині 90-х (пізніше). Це змінило всю мою думку про «простоту».
LISP не є найбільш читаною мовою. Сподіваємось, ніхто не думає, що вилучення CDR та CAR під час виклику рекурсивної функції з завантаженням вкладених дужок дуже "читабельно".
Тим не менше, після того, як я намагався обтягнути мозок моїм дивним синтаксисом мови та абсолютно рекурсивними способами вчинити, це назавжди змінило моє уявлення про простоту.
Що я знайшов із кодом, який я написав у LISP, - це те, що я більше не робив тонких помилок, навіть незважаючи на хитрість думки, що я робив більш кричущі помилки (але їх легко помітити і виправити). Я не розумів, що функція виконує і пропускає тонкий, непередбачуваний побічний ефект. Мені просто було легше проводити зміни та писати правильні програми.
Після LISP простота стала для мене мінімалізмом, симетрією, гнучкістю, меншою кількістю побічних ефектів, меншою, але гнучкішою функцією, яка поєднується разом у безмежному різноманітті.
Я оцінив думку, що найнадійнішим кодом з усіх є код, який не існує. Хоча це лише сирий показник, я схильний бачити потенціал ненадійності коду виходячи з його кількості. Прагнення до максимальної синтаксичної зручності та читабельності, як правило, збільшує цю велику велику величину.
Мінімалізм
Із вкладеним у мене менталітетом LISP я віддав перевагу мінімалістичним API. Я віддаю перевагу бібліотеці з меншою кількістю, але надійніших, гнучких функцій, які менш зручні та потенційно важче читати, ніж ті, що пропонують навантажувач судна "зручними" помічниками і такі, які можуть полегшити код для "читання", але потенційно можуть подолати більше проблем з ненадійністю та сюрпризами, які виникають через нерозуміння того, що виконує одна з цих тисяч функцій.
Безпека
Інша річ щодо LISP - це безпека. Це сприяло мінімальним побічним ефектам та чистим функціям, і саме там я більше не бачив себе робити тонкі помилки, хоча труднощі з читанням і письмом мовою збільшувались більш кричущі помилки, які я міг помітити через 10 секунд.
Чисті функції та незмінні стани стали для мене кращими, коли б я міг собі це дозволити, навіть якщо синтаксис:
sword = sharpen(sword)
... трохи менш відвертий і відсторонений від людського мислення, ніж:
sharpen(sword)
Читання VS. Простота
Знову ж таки, LISP - не найчитабельніша мова. Він може зібрати багато логіки у невеликий розділ коду (можливо, більше однієї людської думки на рядок). Я схильний ідеально віддати перевагу одній людській думці на рядок для «читабельності», але це не обов’язково для «простоти».
З таким визначенням поняття "простий", іноді "простий" може насправді дещо конкурувати з "читабельним". Це розглядає речі більше з точки зору дизайну інтерфейсу.
Простий інтерфейс означає, що вам потрібно навчитися набагато менше речей, щоб користуватися ним, і, можливо, має більшу надійність і меншу кількість отриманих результатів внаслідок його мінімалізму. Вичерпна документація з цього питання може відповідати буклету, а не величезному обсягу книг. Тим не менш, це може зажадати ще однієї романтичної роботи і отримати менш читабельний код.
"Простий" для мене покращує нашу здатність розуміти функціональність нашої системи на широкому рівні. "Зрозумілий" для мене покращує нашу здатність підключати кожен невеликий рядок коду до природної мови та думки і може пришвидшити наше розуміння того, що робить один рядок коду, особливо якщо ми не вільно володіємо мовою.
Regex - приклад того, що я вважаю "надзвичайно простим". Це "занадто просто і занадто нечитабельно" на мій особистий смак. Між цими крайнощами для мене існує балансуючий акт, але в регулярному вираженні є така простота якості простоти, як я його визначаю: мінімалізм, симетрія, неймовірна гнучкість, надійність і т.д. Проблема для мене з регулярним виразом полягає в тому, що це так просто, що це став настільки нечитабельним до того, що я не думаю, що коли-небудь я стану вільним на цьому (мій мозок просто не працює таким чином, і я заздрю людям, які вміють безперечно писати регулярний код).
Так чи інакше, це моє визначення "простоти", і воно повністю незалежне від "читабельності", а іноді навіть може перешкоджати іншому, що призводить до акта врівноваження між "синтаксично зручнішим" і читабельнішим, але більшою бібліотекою чи "синтаксично" незручна ", менш читаюча, але менша бібліотека. Я завжди знаходив справжню "зручність розуміння" та справжні пріоритети "ремонтопридатності" для узгодження з останніми, з великою перевагою мінімалізму навіть за певну ціну читабельності та більш природного синтаксису людини (але не до точки регексу) . YMMV.