Самое лучшее - это взять боевую задачу, хоть и свою, и реализовать ее ОТ и ДО. Тоесть не просто забить на нее на этапе - работает и отлично, а создать документацию, может даже оформить страничку проекта, собрать какое то сообщество, а главное сделать проект open source.
Это в целом даст маленький опыт создания и запуска завершенного продукта.
Найти человека уровня выше чем ваш, который бы помогал и подсказывал как и куда двигаться дальше. Это позволит вам обойти N-ое количество проблем (+потраченного времени в пустую) и значительно ускорит получение опыта. Не зная ваш текущий опыт и знания трудно что либо подсказать по существу. Вы даже не написали какой язык используете.
Я начинал свой путь с написания своих программ, котрыми пользовался долгое время, и которые мне было интересно разрабатывать и работать. Далее нужно подковатся в правилах оформления исходных кодов, для вашего языка программирования. И конечно, много-много практики, и изучения чужих проектов. Конечно нужен опыт для создания совего хорошего open source проекта. Лучше коенчно присоединится к интересному и не сложному проекту, и помогать в разработке. Тут ведь какое дело, без практики и Свойих ошибок опыта не будет, и нужно, "заболеть" этим делом, если душа к этому не лежит, то и смысла в обучении не будет, результатов не будет. Это ж творческая работа ведь! Книги можно здесь советовать лишь мануалы и описание целевого фреймворка и целевой платфомы. Желательно еще определится в направлении. Т.е. это может быть web, базы данных или что то еще. После можно определится и с яп и фреймворками. И удачи!