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

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

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

Книги хорошо тем, что дают обзор проблемы, а особенно хорошие книги как SICP просто кладезь мудрости на каждой странице. Большое количество книг содержат довольно много воды, и если вы уже в теми читать их долго и скучно. Гораздо интереснее читать статьи.

Но с ними есть определенная сложность. Читать все подряд не слишком эффективно. Огромное количество статей ни о чем и написаны плохо. Бывают статьи об интересном достижении, но написана так непонятно, что нет никакой возможности разобраться. Но в целом это, пожалуй, единственный способ держать руку на пульсе. Те материалы, которые попали в книги, или уже даже книги переведенные на русский, часто глубоко устарели. На основе этих данных очень трудно создать что-то новое, все простое уже давно в своих статьях описали последователи, которые почерпнули знания из статей.

Однако, знания это не все что требуется и не только из статей их можно получать. Я уже говорил про наставника - это пример человеческого взаимодействия. Взаимодействовать можно и в более широком смысле. Нужно общаться с другими людьми в этой области. Часто у людей просто нет времени реализовать ту или иную хорошую идею. Они могут ей только поделиться. Эту идею можно подхватить развить и отрецензировать.

Подводя итог, чтобы сделать что-то великое в программировании, нужно много читать, много писать и общаться с великими. Читать чтобы знать, писать чтобы получать фидбек, общаться чтобы были идеи. В принципе, читать и писать достаточно, это уже и есть общение.