Чи є науковий код достатньо іншою сферою, щоб ігнорувати загальні стандарти кодування?
Ні це не так.
Дослідницький код часто "викидають" і пишуть люди, які не є розробниками за фоном, наскільки сильні їхні академічні дані. Деякі з дослідницьких кодів, які я написав, змусили б мене плакати . Але це спрацювало!
Одне, що слід враховувати, - це те, щоб воротарі проектів сприяли тому, що включається. Якщо великий проект, розпочатий як проект академічного / дослідницького коду, закінчує свою роботу, і зараз це безлад, хтось повинен взяти на себе ініціативу, щоб відновити його.
Потрібно багато роботи, щоб рефакторировать існуючий код, який не викликає проблем. Особливо, якщо він взагалі специфічний для домену або не має тестів. Ви побачите, що OpenCV має посібник зі стилів, який є дуже вичерпним, навіть якщо не ідеальним. Застосовувати це заднім числом до всього існуючого коду? Тобто .. не для слабкого серця.
Це ще складніше, якщо працює весь цей код. Тому що це не зламано. Навіщо це виправляти?
Але ці проекти процвітають, підтримуються та широко використовуються!
Це відповідь у певному сенсі. Робочий код все ще корисний, тому його швидше зберігати.
Це може бути безлад, особливо спочатку. Деякі з цих проектів, ймовірно, почалися як одноразовий проект, який "не потребуватимуть повторного використання і може бути викинутий".
Також врахуйте, що якщо ви реалізуєте складний алгоритм, можливо, більше сенсу мати більш широкі методи, оскільки ви (та інші, знайомі з наукової сторони) концептуально краще розумієте алгоритм. Моя дипломна робота була пов'язана з оптимізацією. Маючи основну логіку алгоритму як один метод, було зрозуміти значно простіше, ніж намагалися б розбити. Це, безумовно, порушило правило "7 рядків на метод", але це також означало, що інший дослідник може переглянути мій код і швидше зрозуміти мої модифікації алгоритму.
Якби ця реалізація була абстрагована і продумана, ця прозорість буде втрачена для непрограмістів .
Для співвітчизників: Це питання стосується кодової бази бібліотек з відкритим кодом для обчислювально інтенсивних завдань в одній або декількох наукових областях. Це питання не стосується викидного коду. Зупиніться на мить, щоб переконатися, що ви зрозуміли кожен виділений аспект, перш ніж писати відповідь.
Я думаю, що у людей часто виникає така ідея, що всі проекти з відкритим кодом починаються так: "Ей, у мене чудова ідея для бібліотеки, яка буде дуже популярною і використана тисячами / мільйонами інших", і тоді кожен проект відбувається так.
Реальність полягає в тому, що багато проектів запускаються і гинуть. Смішно крихітний відсоток проектів "встигає" до рівня OpenCV або VTK тощо.
OpenCV розпочався як дослідницький проект від Intel. Вікіпедія описує це як частину "серії проектів". Перший його не-бета-реліз був у 2006 році, або через сім років після його першого запуску. Я підозрюю, що метою спочатку були значущі бета-версії, а не досконалий код.
Крім того, «власність» OpenCV суттєво змінилася. Це змінює стандарти, якщо всі відповідальні сторони не приймуть однакові стандарти та зберігають їх протягом тривалості проекту.
Я також повинен зазначити, що OpenCV існував протягом декількох років до того, як був опублікований Agile Manifesto, що Clean Code отримує натхнення (а VTK майже 10). VTK було започатковано за 17 років до опублікування Чистого кодексу (OpenCV був "лише" 9 років до цього).