Как стать программистом?
Чтобы стать программистом, который не просто пишет по гайдлайнам, но ещё и всё понимает и чувствует код, надо написать не один десяток велосипедов и сравнить свои велосипеды с велосипедами других программистов. Понять, почему твой велосипед работает хуже и написать новый велосипед. 

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

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