Елементи стилю програмування
Багато технічних книг починаються з жахливо нудного і нудного введення. Винятків небагато, і книга «Ідеальний код», про яку я розповів у минулому пості, — одна з тих, запровадження якої варто прочитати.
Ось перші два абзаци:
Я почав працювати програмістом улітку 1982 року. Через кілька тижнів після цього один із системних адміністраторів дав мені почитати книги The Elements of Programming Style, Brian W. Kernighan, PJ Plauger, і Algorithms + Data Structures = Programs, Niklaus Wirth.
Це стало для мене відкриттям. Я вперше дізнався, що програми — щось більше, ніж прості інструкції для комп'ютера. Вони можуть бути елегантними, як найближче оточення президента, витонченими, як підвісний міст, і промовистими, як есе Джорджа Оруелла.
Напевно, про книгу Вірта чули багато. А ось про стару книгу Кернігана — навряд. У мережі з цього приводу глухо є електронна версія перекладу часів СРСР, але вона лежить на буржуазному ресурсі з погодинним доступом, тому скопіювати її за осудний час неможливо.

"Елементи стилю програмування" це невеликий
150-сторінковий збірник прикладів коду з поясненнями, чому наведений код гівно. Книга дійсно давня, всі приклади написані на Фортрані і PL/1 з великою кількістю принад а'ля 20 goto 10 , але на увагу заслуговують кілька десятків «правил», розкиданих по всій книзі. Безперечно, ці правила важливі як історія становлення філософії UNIX. Дуже схожі правила можна знайти у книзі Реймонда "Мистецтво програмування для UNIX".
Перефразовуючи висловлювання з елементів стилю (Elements of Style by Strunk & White), правила стилю програмування, як і стилю англійської мови, іноді порушують навіть кращі письменники.Втім, коли правило порушується, зазвичай у програмі знаходиться якась компенсуюча якість, яка досягається за рахунок порушення. Якщо ви не впевнені в покращенні, ймовірно, найкраще буде дотримуватися правил.
-
Говоріть те, що ви маєте на увазі просто і прямо.
Сама суть філософії UNIX: «Будь простіше, глухий кут».
Пишіть програми просто – не робіть їх надто хитромудрими.
АналогічноПравилу ясності: Ясність краще за розумність.
Найчастіше цим грішать хаскелісти та великі любителі патернів проектування.
АналогічноПравилу економії: Час програміста дорого; скоротите його за допомогою машинного часу.
Замінюйте повторювані вирази викликами функцій.
Ліспери додадуть: заміняйте повторюючі керуючі конструкції макросами.
Дужки виключають двозначність.
Велика кількість дужок у правильних місцях позбавить двозначності, підвищить читаність і збільшить розширюваність - ліспери знають про що я (loop & iterate).
Мантра "структурного програмування".
Над цим правилом вже 20 років ламають голову програмісти на С++.
Як в анекдоті: якщо Рабінович зможе правильно наспівати вашу програму — вона пройшла тест.
Використовуйте зсув рядків (іденцію) длярозділення блоків коду.
Якщо пишіть на пітоні, можете проігнорувати це правило.
АналогічноПравилу поданняРеймонда: Зберігайте знання даних так, щоб логіка програми була тупою і надійною.
Спочатку напишіть на псевдокоді, потім переведіть машинною мовою.
Літературне програмування пішло далі в цьому підході — спочатку напишіть псевдокодом, а потім допишіть машинною мовою.
Рекурсія не повинна бути затичкою в кожній бочці (як у мові Scheme), з нею потрібно бути дуже обережним - за вбивчою силою вона близька старому доброму goto (якщо вважаєте інакше - спробуйте розібратися в системі хоча б з трьох взаєморекурсивних функцій). У більшості випадків краще віддати перевагу ітеративним конструкціям рекурсивним.