не только. Главное чтобы был тот, кто бы направлял тебя в работе. Потому что когда сидишь над какой-то проблемой и … над ней пару часов, то как-то теряешь время. Уметь программировать - это не только “знание библиотек и технологий”, это умение критично оценить плюсы и минусы сущесвующих технологий, умение построить правильную архитектуру приложения, это уместно применять паттерны, понимать основы работы протоколов, стандартов и еще до фига…
Мало уметь учиться и думать. Нужно еще железную волю, желание решать проблемы, и знакомых, к которым можна обратится, а еще лучше работать с хорошими программистами.