Дополню ответ
bromzh лучший способ изучения
Ограничивать себя и практиковаться.
Ограничения даже могут быть искуственными, типа "никогда ни использовать $scope". То есть если хочется, лучше хорошенько подумать "а как без него?". Очень редко, его нужно использовать напрямую, но в подавляющем большинства это директивы и работа с событиями, в целом же на вашем уровне это может просто не понадобиться.
Или там "никогда не используйте фильтры для работы с коллекциями, пусть результат фильтра всегда будет строкой". Это сразу сильно ограничит вас в том как убить свое приложение и превратить шаблоны в кашу, а так же чуть почистит мозги.
Или... "Не полагаться на двустороннее связывание". То есть... оно увы в angular 1.x везде, но нужно понимать риски с этим связанные и стараться делать все так, что бы элементы нижнего уровня ничего не меняли на верхнем уровне, а все изменения проходили либо через колбэки или сервисы. Исключения - формы, тут двусторонний биндинг бывает очень полезным.
Так же "Никогда не использовать ng-controller", или "Делать все на stateless компонентах" и все такое.
Для всех этих правил есть свои исключения, но нужно 10 раз подумать можно ли соблюсти правило прежде чем его нарушить.
Я так же собрал
парочку толковых ссылок которые могут быть полезны новичку. Там так же пример ооочень простого приложения с тестами.
Так же рекомендую сразу же изучить хотя бы основные плюшки ES6 с babel и использовать их. Таким образом можно сильно упростить структуру приложения.
А ну и да, ТЕСТЫ! Пробуйте писать приложения используя TDD, это очень полезно для новичков и так же действует как ограничение. Типа "если неудобно писать тесты - подумай как сделать так что бы было удобно писать тесты изменяя тестируемый код". Ну и все такое. У TDD есть свои правила вроде "не меняйте тесты и код одновременно" и т.д.
Новички должны быть в ежевых рукавицах.