У меня опыт небольшой. Python, Django, Flask, и по большей части - на oDesk. По моему мнению, самое что ни на есть важное - это: 1) выбор адекватных заказчиков, способных точно объяснить, что им надо, и желательно - технически компетентных; 2) Грамотное общение с ними. На всякое предложение о работе подписывается много людей. Чтобы выделиться среди этой толпы, необходимо потратить определённое время и силы. Внимательно прочесть предложение, подумать над ним и сформулировать в ответном письме вкратце:
- Ваш опыт, пусть и кратко, относительно данного проекта.
- Ваше представление о том, как следует реализовать этот проект (вкратце; но можно двумя словами, но желательно - обоснованно, упомянуть о том, что вот такую-то фичу вы реализуете с помощью MongoDB для пущей скорости). Пустословия и популизма не надо.
- Предполагаемые сроки. Я их обычно завышаю раза в два. Это позволяет решить задачу с запасом и устранить возможные баги, глюки и т.п. Гораздо лучше, чем обнаружить потом, что времени катастрофически не хватает.
Очень хорошо, если Вы сразу напишете ещё и некоторые рацпредложения. Вежливо и корректно, конечно.
Короче говоря, необходимо 1) найти те проекты, в которые стоит вникать и разбираться; 2) вникнуть и разобраться так, чтобы заказчик понял: Вы - компетентный специалист, работаете на совесть, сделаете обещанное и качественно. По крайней мере, очень постараетесь. Если с самого начала тон общения построен именно так, если Вы задали уровень и поддерживаете его, то в случае возможных проблем, неувязок, нестыковок, как правило, люди относятся с пониманием.
Каждый язык имеет свою сферу применения, возможности и ограничения. Даже языки общего применения такие, как С\С++, Java, C#, русский, английский... Определитесь какими проектами собираетесь заниматься (Web-разработка, Настольные приложения, Мобильные приложения, Операционные системы, Низкоуровневое программирование микропроцессоров и т.д. и т.п.). Определитесь с эко-системой в которой предполагаете программировать (Microsoft, Oracle, Google, Apple, ...). И только после этого вы сможете определиться с языком на котором придется(!) программировать. Как показывает практика одним "универсальным" языком все равно не обойтись. Помните, что изучение синтаксиса и грамматики языка это только начало... Если выбирать между Java и Python, то IMHO для обучения программированию лучше выбрать именно Java, как более специфицированный и формально точно определенный язык, для которого найдете много учебников. Мой совет: сначала читайте первоисточники от Sun\Oracle. Откройте Учебник по Java, возьмите IDE NetBeans (это наиболее удачный инструмент для начинающих... на стартовой странице внутри IDE найдете полезные ссылки на различные обучающие материалы), и вперед... Удачи!
Какой бы не взяли, а JavaScript все равно нужно будет осваивать, начните с него, а там, может, и Node.js приглянется.
Знакомый фрилансер в свое время говорил, что проще всего найти фрилансера в топе, который делегируют/оутсорсит свою работу другим фрилансерам. Ну и еще стоит отметить, что стоит поискать работу на вебмастерских форумах и писать там заказчику в ЛС.
Я начинал свой путь с написания своих программ, котрыми пользовался долгое время, и которые мне было интересно разрабатывать и работать. Далее нужно подковатся в правилах оформления исходных кодов, для вашего языка программирования. И конечно, много-много практики, и изучения чужих проектов. Конечно нужен опыт для создания совего хорошего open source проекта. Лучше коенчно присоединится к интересному и не сложному проекту, и помогать в разработке. Тут ведь какое дело, без практики и Свойих ошибок опыта не будет, и нужно, "заболеть" этим делом, если душа к этому не лежит, то и смысла в обучении не будет, результатов не будет. Это ж творческая работа ведь! Книги можно здесь советовать лишь мануалы и описание целевого фреймворка и целевой платфомы. Желательно еще определится в направлении. Т.е. это может быть web, базы данных или что то еще. После можно определится и с яп и фреймворками. И удачи!
Самое лучшее - это взять боевую задачу, хоть и свою, и реализовать ее ОТ и ДО. Тоесть не просто забить на нее на этапе - работает и отлично, а создать документацию, может даже оформить страничку проекта, собрать какое то сообщество, а главное сделать проект open source.
Это в целом даст маленький опыт создания и запуска завершенного продукта.
Найти человека уровня выше чем ваш, который бы помогал и подсказывал как и куда двигаться дальше. Это позволит вам обойти N-ое количество проблем (+потраченного времени в пустую) и значительно ускорит получение опыта. Не зная ваш текущий опыт и знания трудно что либо подсказать по существу. Вы даже не написали какой язык используете.