Oui, vous devez coder contre des interfaces plutôt que des implémentations connues, et oui, vous devez d'abord construire des interfaces plutôt que de les faire émerger de votre propre code.
Les raisons des deux recommandations sont en grande partie les mêmes: la programmation informatique concerne principalement les facteurs humains. Beaucoup trouvent cela surprenant, mais réfléchissent: il existe un nombre presque infini de façons différentes de résoudre le même problème informatique qui fonctionnent aussi bien. Presque tous sont complètement impossibles à comprendre pour quiconque ne les a pas écrits (ou en fait à l'auteur peu de temps après).
Il s'ensuit qu'une bonne ingénierie logicielle consiste essentiellement à obtenir l'effet souhaité (calcul correct avec une efficacité raisonnable) d'une manière qui permette de travailler avec le code source plus tard. Les interfaces et les API sont une partie cruciale de cette discipline: elles vous permettent de penser à un problème à un niveau de description à la fois. C'est beaucoup plus facile que de penser à des règles de cohérence métier et à des implémentations de listes chaînées en même temps, et donc imposer une telle séparation des préoccupations de force est mieux que de permettre au programmeur client d'utiliser votre code comme il l'entend.
C'est difficile à croire pour de nombreux programmeurs de cow-boys, qui sont convaincus qu'ils comprennent tout ce qu'ils écrivent, sont bien meilleurs que les penseurs moyens, et peuvent gérer toute la complexité qui pose des problèmes aux programmeurs "moindres". Ne pas être conscient de ses propres limites cognitives est un phénomène extrêmement courant - c'est pourquoi les meilleures pratiques dans l'organisation du code sont si importantes (et si souvent ignorées).
Pour répéter, les interfaces et les barrières API sont largement bonnes , même lorsque vous ne coopérez qu'avec vous-même. En ce qui concerne les bibliothèques externes, si elles apportent une API bien pensée avec elles, je ne vois aucun problème à l'utiliser, car tant que vous ne prévoyez pas d'avoir à échanger cette bibliothèque contre une autre. Sinon, un wrapper ou une couche anti-corruption peut être une très bonne idée.