Что действительно нужно, чтобы стать хорошим программистом — так это страсть к программированию.
Плюсану, это самое главное.
Важно еще помнить, что наукоемкое ИТ, где сильная теоретическая подготовка по CS имеет значение, - это очень узкая ниша (если считать по количеству вакансий), а в большинстве практических задач подготовка нужна минимальная. Я занимаюсь базами данных, мне в свое время хватило один раз прочитанного на intuit.ru курса по реляционным базам данных с кратким экскурсом в реляционную алгебру (неделя ненапряжного чтения по вечерам). После этого мозги повернулись в нужном направлении и дальше пошло по накатанной, а дальше гораздо большее значение имеет наличие возможности попрактиковаться на реальных задачах и знание конкретных инструментов (конкретных СУБД).
То же самое можно сказать о других направлениях.
К тому же на практике часто надо знать какие-то вещи, совсем не связанные с программированием: основы бухучета, законодательство, основы той или иной области бизнеса (если работаете над автоматизацией этого бизнеса) и т. д. Я, например, так и не осилил бухгалтерию. Пробовал что-то читать, но очень быстро понял, что это не мое. Некоторое время даже поработал в одном месте, где требовалось иметь представление о межбанковских расчетах и приходилось общаться с бухгалтерами, после нескольких месяцев ощущения себя неспособным ничего понять и ничего сделать ничтожеством благополучно сбежал в другое место, где все это не нужно.
А, по-моему, эта страсть часто развивается вместе с опытом программирования. Т.е. чем больше кодишь, тем больше затягивает.
Судя по некоторым историям на программерских форумах - не всегда. Многим надоедает после нескольких лет. У меня это была практически "любовь с первого взгляда" - один раз в 1994-м в школе написал (переписал с бумажки, на самом деле) одну программу - и все, привет. Жаль только в 1994-м было не настолько очевидно, что надо на программиста идти учиться.