Мінімізувати побічні ефекти (в ідеалі їх немає)
Функцію, яка викликає 3 зміни у станах, що не належать до її власного розмаху, набагато складніше міркувати і підтримувати, ніж одну, яка просто вводить щось і виводить щось інше. Ви не можете просто знати, що робить ця функція, ви повинні пам'ятати, що вона робила, і як це впливає на всі інші відповідні функції.
Для OOP мінімізація побічних ефектів також означає класи з меншою кількістю членів, а особливо меншою кількістю членів, які можуть змінювати стан класу, оскільки функції членів можуть змінювати стани поза їх власними та мати побічні ефекти (вони можуть маніпулювати внутрішністю класу, наприклад). Це також означає заняття з меншою кількістю власних членів даних, так що для цих методів існує менше станів, щоб втручатися та менше побічних ефектів, які вони можуть викликати.
Як простий приклад, уявіть собі спробу створити фантазійну структуру даних, яка може підтримувати sorted
стан, який він використовує, щоб визначити, чи слід виконувати двійкові чи лінійні пошуки. У такому випадку може бути корисно розділити дизайн на два класи. Виклик sorted
несортованого класу може потім повернути структуру даних іншого класу, яка завжди зберігає його вміст відсортованим. Тепер у вас менше побічних ефектів (отже, менш схильних до помилок і простішого розуміння коду), а також більш широко застосовного коду (колишня конструкція була б марною як в обробці, так і в інтелектуальній ефективності людини для невеликих масивів, які ніколи не потребують сортування).
Уникайте зайвих зовнішніх залежностей
Можливо, вам вдасться реалізувати найкоротший код, який можна уявити з максимальним повторним використанням коду, використовуючи 13 різних бібліотек для виконання відносно простого завдання. Однак це передає інтелектуальні накладні витрати вашим читачам, змусивши їх зрозуміти принаймні частини 13 різних бібліотек. Цю властиву складність повинні негайно оцінити всі, хто намагався створити та осмислити сторонні бібліотеки, які потребували залучення та створення десятка інших бібліотек для функціонування.
Це, мабуть, дуже суперечливий погляд, але я вважаю за краще скромне дублювання коду до протилежної крайності, за умови, що кінцевий результат добре перевірений (не гірше, ніж неперевірений несправний код, дубльований багато разів). Якщо вибір обчислюється між 3-ма рядками дублюваного коду для обчислення векторного перехресного продукту або втягування в епічну бібліотеку з математики просто для того, щоб збрити 3 рядки коду, я б запропонував попередній, якщо ваша команда не працює на цій математичній бібліотеці , в цей момент ви все ще можете розглянути можливість просто записати 3 рядки коду замість 1, якщо це досить тривіально в обмін на переваги роз'єднання.
Повторне використання коду - це балансуючий акт. Занадто багато використовуйте, і ви переносите інтелектуальну складність способом від одного до багатьох, оскільки в цих 3 рядках простого коду, який ви зберегли вище, ціна вимагає від читачів та технічних працівників зрозуміти набагато більше інформації, ніж 3 рядки коду . Це також робить ваш код менш стабільним, оскільки якщо математична бібліотека зміниться, то і ваш код може бути. Використовуйте занадто мало, і ви також примножуєте інтелектуальні накладні витрати, і ваш код перестає користуватися центральними вдосконаленнями, тож це врівноважуючий акт, але ідею, що це балансуючий акт, варто згадати, оскільки спроба викреслити кожну маленьку форму скромного дублювання може призвести до результату, який так само важко підтримувати, якщо не більше, то протилежного крайнього.
Перевірте лайно з цього
Це дані, але якщо ваш код не обробляє всі вхідні випадки та пропускає деякі крайові регістри, то як ви можете розраховувати, що інші збережуть код, про який ви написали, що ви навіть не отримали права до того, як його перенесли на їхні очі та руки? Досить складно вносити зміни до коду, який прекрасно працює, не кажучи вже про код, який у першу чергу ніколи не був правильним.
Крім того, код, який проходить ретельне тестування, як правило, знайде менше причин для зміни. Це стосується стійкості, яка є ще більшою мірою не тільки ремонтом, а ремонтом, оскільки стабільний код, який ніколи не потрібно змінювати, не вимагає витрат на обслуговування.
Документація на інтерфейс
Поставте пріоритет "те, що робиться" над "як вони роблять", якщо ви не можете присвятити однаковий час документування обох. Чіткий інтерфейс, який очевидний у своїх намірах щодо того, що він буде робити (або, принаймні, що він повинен робити) у всіх можливих вхідних випадках, дасть зрозумілість контексту для його власної реалізації, який допоможе зрозуміти не лише те, як використовувати код, а також як він працює.
Тим часом код, якому не вистачає цих якостей, коли люди навіть не знають, що це робити, - це SOL незалежно від того, наскільки добре задокументовані деталі його впровадження. Посібник з 20 сторінок про те, як реалізується вихідний код, не вартий людям, які навіть не можуть зрозуміти, як саме його використовувати в першу чергу і що він навіть повинен робити у всіх можливих сценаріях.
Стосовно реалізації слід розставити пріоритети щодо документування того, що ви робите по-різному від усіх інших. Як приклад, Intel має ієрархію обмежувального обсягу для їх ядер проміння. Оскільки я працюю в цій галузі, я можу розпізнати основну частину того, що робить їх код, з першого погляду, не просіюючи документацію. Однак вони роблять щось унікальне, що є ідеєю пройти BVH та паралельно виконувати перехрестя за допомогою пакетів променів . Ось тут я хочу, щоб вони надали пріоритет своїй документації, оскільки ці частини коду екзотичні та незвичні для більшості історичних реалізацій BVH.
Читабельність
Ця частина дуже суб'єктивна. Мені не дуже цікаво читабельність такого роду, близького людським мисленнєвим процесам. Найбільш добре задокументований код, що описує речі на найвищому рівні, мені все ще важко дотримуватися, якщо автор використовує химерні та згорнуті думки, щоб вирішити проблему. Тим часом лаконічний код, що використовує 2 або 3 імена символів, часто може бути простішим для мене, якщо зрозуміти, чи логіка дуже проста. Я думаю, ви могли б оглянути рецензію та побачити, що віддають перевагу інші.
Мене найбільше цікавить ремонтопридатність та, що ще важливіше, стабільність. Код, який не знаходить причин для зміни, - це той, який має нульові витрати на обслуговування.