Максимально эффективная методика изучения программирования?
=============================================================

 Понимаю, что вопрос слишком обширный, но я просто в замешательстве, итого что я имею:  
* Много свободного времени
* Огромное желание стать программистом // тут примечание: я не хочу быть говнокодером, я готов уделять кучу времени обучению, изучать множество книг и постоянно развиваться, лишь бы вырасти в истинного профессионала

  
**Накидаю тут свои размышления:**  

Как мне кажется моя главная проблема сейчас, это то, что я изучаю книги по программированию (сейчас это Java) так как это делал на мехмате, условно если читаешь книгу по матану, то там все упорядоченно таким образом, что все последующие теоремы используют уже пройденные теоремы, то есть грубо говоря начинается все с аксиом и постепенно приходим к сложнейшим теоремам. Ну так вот, если ты не понял текущую теорему, то соответственно и не будет полного понимания следующей, которая использует предыдущую, и поэтому ты не идешь дальше пока не поймешь текущую. То есть изучаешь все досконально, и сейчас мне кажется, что это не очень хорошая методика для изучения программирования, сижу на одной странице пока не пойму каждый символ, тестирую код изменяя каждый параметр, смотрю что, как и почему изменяется, то есть изучение идет вширь. По итогу материал изучается очееень медленно.   
  

Многие советуют начать пилить мини-проект и изучать по ходу дела лишь то, что требуется не сильно углубляясь куда-либо, но разве мы не получаем кучу пробелов в знаниях? Или это не так уж и страшно? Но ведь даже если пилить мини-проект, то уже нужно знать хотя бы основы языка, а для этого нужно прочитать хоть одну книгу по основам языка, все книги которые я смотрел там везде порядка 1000 страниц, а с моим способом изучения я и книгу то буду 100500 часов изучать.  
  

Итого вся сила в балансе? Где-то не углубляться, а где-то досконально изучать, ну а как определить то, что изучать во всех подробностях, а что нет? Как при таком обилии доступной информации понять, какая действительно нужна, не учить лишнего (малополезного на начальном этапе) и при это не упустить что-то действительно важное?  
  

А может самый простой способ это - изучить лишь то, что требуется чтобы взяли джуниором, а там уже под руководством опытных коллег пойму как развиваться дальше?   
  

Помогите советами пожалуйста 

 Дотошный подход это хорошо, когда нужно разобраться в чем-то конкретном. Для азов и первичного проникновения - нет. Раз вы уж начали с Java - пройдите курс "Методология программирования" Стенфордского Университета, видео лекций есть в открытом доступе, бесплатно (<https://see.stanford.edu/Course/CS106A).> Оно на английском, разумеется. Вот этого курса будет достаточно чтобы понять для себя путь джедая.  
  

А если в двух словах, то рабочая схема плюс-минус такая:  
  

1. изучаем синтаксис языка  

2. изучаем основные концепты языка и списки DOs и DONTs с примерами  

3. садимся пилить real world задачи  

4. в процессе сталкиваемся с углубленными вопросами, их изучаем по мере поступления  

5. GOTO 4 

 Вам весь язык не нужен. Это как и с иностранными языками — есть 500 самых часто используемых слов, с помощью которых можно нормально общаться.   
  

Так и в любом языке программирования. Не нужно знать всех методов, нужно понимать базовый синтаксис — переменные, циклы, функции, классы и методы и понимать парадигмы программирования — ооп в вашем случае. Этого достаточно, чтобы начать работать. Все тонкости нужно узнавать по ходу дела. Как работает тот или иной нативный метод — тоже. Не нужно их держать в голове, нужно лишь знать, что он есть.   
  

Короче, не упарывайтесь. Здесь нет экзаменов, билетов и препода, который может что-то спросить из самого скучного раздела.   
  

Но, к слову, дотошность — это тоже хорошо. Только включайте ее по мере необходимости, чтобы не вредила работе и скорости обучения. 

 Методика наиболее эффективного обучения:  

1. Закрой Тостер  

2. Открой учебник  

3. Пиши код  

4. Закрой Тостер! 

 Максимально эффективная методика изучения программирования = практика