Так, вам слід кодувати інтерфейси, а не відомі реалізації, і так, ви повинні спочатку побудувати інтерфейси, а не виходити з власного коду.
Причини обох рекомендацій багато в чому однакові: комп’ютерне програмування багато в чому стосується людських факторів. Багато хто вважає це дивним, але вважають: існує майже нескінченна кількість різних способів вирішити одну і ту ж обчислювальну задачу, які однаково добре працюють. Майже всі вони абсолютно неможливо зрозуміти тому, хто їх не написав (або насправді авторові через короткий час).
Звідси випливає, що хороша інженерія програмного забезпечення багато в чому полягає в тому, як досягти бажаного ефекту (правильне обчислення з розумною ефективністю) таким чином, що дозволяє згодом працювати з вихідним кодом. Інтерфейси та API - важлива частина цієї дисципліни: вони дозволяють думати про проблему на одному рівні опису одночасно. Це набагато простіше, ніж одночасно думати про правила узгодженості бізнесу та про реалізацію пов'язаних списків, і тому насильно нав'язувати таке розмежування проблем краще ніж дозволяти клієнтському програмісту використовувати ваш код будь-яким способом, який йому подобається.
У це важко повірити багатьом програмістам-ковбоям, які впевнені, що вони розуміють усе, про що вони пишуть, набагато краще, ніж середні мислителі, і можуть впоратися з усією складністю, яка створює проблеми «меншим» програмістам. Не усвідомлення власних когнітивних меж є надзвичайно поширеним явищем - саме тому кращі практики в організації коду настільки важливі (і так часто ігноруються).
Повторимось, інтерфейси та бар'єри API - це дуже добре , навіть коли ви співпрацюєте лише з собою. Що стосується зовнішніх бібліотек, якщо вони принесуть продуманий API із собою, я не бачу жодної проблеми в його використанні, оскільки він не передбачає заміни цієї бібліотеки на іншу. Інакше обгортковий або антикорупційний шар може бути дуже хорошою ідеєю.