Ja, Sie sollten eher gegen Schnittstellen als gegen bekannte Implementierungen programmieren, und ja, Sie sollten Schnittstellen zuerst konstruieren, anstatt sie aus Ihrem eigenen Code hervorgehen zu lassen.
Die Gründe für beide Empfehlungen sind weitgehend die gleichen: Bei der Computerprogrammierung geht es hauptsächlich um menschliche Faktoren. Viele finden das überraschend, aber denken Sie daran: Es gibt nahezu unendlich viele verschiedene Möglichkeiten, um dasselbe Computerproblem zu lösen, das gleichermaßen gut funktioniert. Fast alle von ihnen sind für jeden, der sie nicht geschrieben hat (oder in der Tat kurze Zeit später an den Autor), völlig unverständlich.
Daraus folgt, dass es beim guten Software-Engineering hauptsächlich darum geht, den gewünschten Effekt (korrekte Berechnung mit angemessener Effizienz) so zu erzielen, dass später mit dem Quellcode gearbeitet werden kann. Schnittstellen und APIs sind ein wesentlicher Bestandteil dieser Disziplin: Sie ermöglichen es Ihnen, ein Problem auf einer Beschreibungsebene gleichzeitig zu betrachten. Dies ist weitaus einfacher als das gleichzeitige Nachdenken über Geschäftskonsistenzregeln und über die Implementierung verknüpfter Listen. Daher ist es besser, eine solche Trennung von Bedenken zwangsweise durchzusetzen als es dem Client-Programmierer zu ermöglichen, Ihren Code nach Belieben zu verwenden.
Dies ist schwer zu glauben für viele Cowboy-Programmierer, die davon überzeugt sind, dass sie alles verstehen, was sie schreiben, viel besser als durchschnittliche Denker sind und die Komplexität bewältigen können, die "weniger" Programmierern Schwierigkeiten bereitet. Sich der eigenen kognitiven Grenzen nicht bewusst zu sein, ist ein äußerst verbreitetes Phänomen - deshalb sind Best Practices in der Code-Organisation so wichtig (und werden so oft ignoriert).
Um es zu wiederholen: Schnittstellen und API-Barrieren sind größtenteils gut , auch wenn Sie nur mit sich selbst zusammenarbeiten. Was externe Bibliotheken betrifft, sehe ich kein Problem darin, sie zu verwenden, wenn sie eine gut durchdachte API mitbringen, solange Sie nicht damit rechnen, diese Bibliothek gegen eine andere auszutauschen. Andernfalls kann eine Wrapper- oder Antikorruptionsschicht eine sehr gute Idee sein.