Ну, для начала, надо научиться решать базовые вещи. В случае вёрстки - тупо уметь верстать всё, на что взгляд попадёт, в разумных пределах. Я учебные макеты не доводил до конца, если понимал, что всё дальше делается по аналогии) Разбирал именно сложные моменты, например, адаптивность со сменами положений фона, ретину, анимации.
В случае с жс и другими яп для начала надо на кодварсе многое нарешать. Чтобы быть уверенным джуном, хотя бы 5 лвл задачи нужно садиться и решать. Именно решать, находить своим умом, не подглядывая в ответы. Такой подход очень хорошо "точит" мозги. Ну и регулярность. После - реализовать какой-то полноценный проект, используя знания и документации. Если цель прокачать мозги - тогда без фреймворков, разбираясь с дом-манипуляциями и тп. Долго, но качественно)
Если цель - устройство на работу фронтом или разработка своего проекта - то надо разбираться с воркфлоу, там, реакты - вью - ангуляры - свелте, библиотеки, таск-раннеры, бандлеры, шаблонизаторы, и прочая, прочая. Тут тоже показатель - завершённость проекта. Если на вёрстку можно класть, щас вёрсткой не удивить, то тут вот надо прям рабочий проект создать.
Перевожу: в случае с языками программирования надо именно научиться алгоритмически решать поставленную задачу, освоить базовую библиотеку языка, научиться делать лаконичные функции, циклы, рекурсии. После всё становится достаточно простым и понятным, т.к. фундамент заложен и закреплён решением частных случаев.
Ещё момент про "две книги". Изучение материала с разных сторон - это бест практис вообще, так рекомендуют вообще всё разбирать. Естественно, должно быть об одном и том же) Подробнее
можно прочесть тут.
Удачи :)