Потому что способ получения данных может меняться. Например, сегодня ты получаешь данные напрямую из БД, а завтра она уедет на отдельный сервер и тебе будет предоставлен только какой-нить GraphQL. Ты перепишешь только свой класс доступа к данным, но так чтобы он реализовывал уже существующий интерфейс. Тогда весь остальной проект править не придётся.
Интерфейсы обеспечивают контракт - правила, по которым части приложения обмениваются данными между собой.
Благодаря этому, возможно на этапе планирования проекта "нарезать" приложение на интерфейсы, а потом раздать разработчикам задания на реализацию той или иной части. За счёт строгого контракта, повышается вероятность того что получившиеся части соберутся и заработают вместе :)
Что касается ресурсов, если "для самых маленьких", то:
- видео Наиля Алишева - объясняет подробно и понятно;
- курс Заура Трегулова, есть на Udemi, промокод у него на ютубе. Если нет возможности оплатить Udemi, он же есть на Stepik. Курс платный, но "по цене шаурмы";
- видео на каналах Евгения Сулейманова и LetsCode, там есть примеры создания проекта с нуля, можно познакомиться "как это вообще делается";
- можно почитать лекции
здесь.