Повторне використання коду - досить гарна ідея. Не великий .
Я маю перспективу з приблизно 30 років інженерії програмного забезпечення, яку намагаються "повторно використовувати".
Я почав досліджувати «повторне використання коду» як тему дослідження ще в 80-х, після виявлення я повторно використав дизайн однієї ОС, яку я побудував на початку 70-х років, для іншої ОС, яку створив наприкінці 70-х.
Гарна частина повторного використання коду - це можливість іноді повторно використовувати чесний богу попередній код. Але світ повний коду; як можна знайти те, що ти хочеш? Ось що я називаю Прокляттям повторного використання :
Я Дід Мороз (добре з відкритим кодом), і в мене є пакет з 1 мільярдом програмних компонентів. Ви можете мати будь-яку з них.
Успіхів у виборі.
Щоб добре вирішити проблему повторного використання:
- повторному користувачеві потрібно якось вказати, що йому потрібно (функціонально, продуктивність, мова цілі, припущення щодо середовища, ...)
- повинна бути бібліотека "багаторазового використання" коду, який індексувався різними способами цими потенційними критеріями
- повинен існувати якийсь механізм для вибору елементів-кандидатів (на мільярд елементів, ви не можете переглянути їх усі особисто)
- повинен бути спосіб охарактеризувати, наскільки далеко від специфікації обрані кандидати
- повинен існувати якийсь регулярний процес, щоб дозволити повторному користувачу змінювати обраний код для багаторазового використання (ось найбільший внесок OOP: ви можете редагувати існуючий компонент / об'єкт, заміняючи його слоти. OOP не надає іншої допомоги).
- все це явно повинно бути дешевшим, ніж просто його перекодувати
Здебільшого, що було виявлено протягом багатьох років, це те, що для коду, який підлягає багаторазовому використанню, він має бути розроблений для цієї мети, або він містить занадто багато неявних припущень. Найуспішніших бібліотек повторного використання коду насправді було досить мало. Можливо, бібліотеки та фреймворки є кодом для багаторазового використання, і вони надзвичайно успішні; Java та C # досягають успіху не тому, що вони досить хороші комп'ютерні мови, а тому, що у них доступні величезні добре розроблені, реалізовані та документовані бібліотеки. Але люди не дивляться на вихідний код у бібліотеках; вони просто називають добре задокументований API (призначений для загального використання).
Те, що повторного використання коду не було зроблено (OOP також), не забезпечує накази покращення нашої здатності до кодування систем.
Я думаю, що ключовим недоліком є те, що будь-яке повторне використання коду є принципово обмеженим, оскільки в коді вбудовано занадто багато припущень . Якщо ви зробите код крихітним, ви мінімізуєте припущення, але тоді витрати на побудову з нуля не дуже великі, а прибутки від повторного використання не ефективні. Якщо ви зробите колоди коду величезними, вони в новому контексті вони практично марні. Як і Гуллівер, вони прив’язані до пляжу мільйоном крихітних струн, і ви просто не можете дозволити собі розрізати їх усіх.
Над тим, над чим ми повинні працювати, - це повторне використання знань для побудови коду . Якщо ми можемо це зробити, то ми можемо застосувати ці знання для побудови потрібного нам коду, обробляючи поточний набір припущень.
Для цього все ще потрібна однакова можливість специфікації для характеристики компонентів програмного забезпечення (ви все одно повинні сказати, що ви хочете!). Але тоді ви застосовуєте це "конструктивне" знання до специфікацій, щоб генерувати потрібний код.
Як спільнота, ми ще не дуже добре в цьому. Але люди роблять це постійно; чому ми не можемо його автоматизувати? Досліджень дуже багато, і це показує, що це можна зробити за багатьох обставин.
Одним з основних механізмів, необхідних для цього, є механічні інструменти для прийняття "описів компонентів" (це лише формальні документи та їх можна розібрати як мови програмування) та застосувати до них перетворення програм .
Укладачі вже роблять це: -} І вони справді хороші в класі проблем, з якими вони вирішуються.
Моделі UML з генерацією коду - це одна спроба зробити це. Не дуже вдала спроба; майже все, що кажуть у більшості моделей UML - "у мене є дані, які виглядають так". Досить важко генерувати справжню програму, якщо функціональність не залишиться.
Я намагаюся створити практичні системи трансформації програм, інструмент під назвою DMS . Досить добре відволікався, застосовуючи програмні перетворення не стільки до абстрактних специфікацій для генерування коду, скільки до застарілого коду для його очищення. (Це та сама проблема в рефераті!). (Для побудови таких інструментів потрібно багато часу; я цим займаюся вже 15 років, а тим часом ви повинні їсти).
Але DMS володіє двома ключовими властивостями, які я описав вище: здатність обробляти довільні формальні специфікації та здатність фіксувати "знання про генерацію коду" як перетворення та застосовувати їх на вимогу. І що примітно, ми створюємо в деяких особливих випадках якийсь цікавий код із специфікацій; DMS багато в чому будується, використовуючи себе для створення своєї реалізації. Це досягло для нас принаймні частини обіцянки повторного використання знань: надзвичайно значні підвищення продуктивності праці. У мене є команда з близько 7 технічних людей; ми написали, ймовірно, 1-2 MSLOC "специфікацій" для DMS, але маємо 10MSLOC згенерованого коду.
Підсумок: повторне використання знань покоління - це виграш, а не повторне використання коду .