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