Há uma diferença entre o que fazemos como engenheiros de software e o que um violinista (ou qualquer outra coisa que exija prática física faria). Um violinista passa horas praticando metodicamente porque está ensinando a seu cérebro padrões muito específicos de como interagir com um instrumento.
Praticar engenharia de software também envolve padrões de aprendizado. Quanto mais projetos você fizer, mais aprenderá (espero) sobre o que funciona e o que não funciona. Não há receita padrão para escrever ótimos softwares (é por isso que algumas pessoas comparam nossa profissão a um "ofício" em vez de pura ciência). Então, meu conselho # 1, escreva código e escreva mais código. E não pense que se o que você está trabalhando é divertido, não está ensinando muito. Eu digo escolha algo que seja divertido; vai manter o seu interesse por mais tempo e você vai se divertir muito mais.
Você não precisa participar de um projeto de código aberto se não quiser. Basta definir uma meta para você, algo lhe interessaria e começar a codificar. Você nem precisa terminar, então não fique desapontado se no meio do projeto você decidir soltá-lo e ir para outra coisa. O mais importante é que, enquanto você se afasta desse projeto, você precisa se afastar com melhores habilidades e mais conhecimento da tecnologia que usou.
Conselhos # 2, leia Programador Pragmático . A principal parte desse livro é que, assim como você pensa sobre como escrever um software, de vez em quando você precisa dar um passo atrás e rever seu processo para pensar em escrever um software. Toda vez que você trabalhar, não basta colocá-lo em uma prateleira e seguir em frente, mas dê outra olhada nele e pense em maneiras pelas quais você poderia ter feito melhor. Você não tem que ir e realmente refazê-lo, mas, pensando nisso, você exercitará seu cérebro para reconhecer os padrões que mencionei na introdução.
Conselhos # 3, fale com outras pessoas que são apaixonadas por escrever código. Ouça o que eles fizeram e como eles abordaram as coisas. E explique a eles o que você está fazendo. Eu tenho poucos amigos no trabalho e, periodicamente, eu simplesmente entrava no cubo e rapidamente esboçava o design do software no qual estou trabalhando. Às vezes eles apenas assentem, mas outras vezes, eles podem dizer, bem, se você mudar esta caixa para cá e se livrar dessa classe, você poderia economizar 2 dias de trabalho e ganhar vantagens A, B e C.
Conselho # 4, depois de ter feito alguns projetos e encontrado alguns padrões. Volte e leia livros como o famoso livro do GoF . Se você já trabalhou, você a) reconhecerá algumas das coisas sobre as quais os autores estão falando e b) descobrirá diferentes maneiras pelas quais você poderia ter abordado seus projetos.
O conselho # 5, sempre continue lendo e desafiando a si mesmo. Nunca entre no modo que agora conheço a tecnologia X, portanto sou um especialista. Não importa o quanto você acha que aprendeu, lembre-se, há infinitamente mais para você absolver, então, no esquema geral das coisas, você ainda não sabe muito. Continue lendo blogs; aprenda um novo idioma. Por exemplo, eu tenho lido sobre F # e programação funcional, embora eu principalmente programa em C + + e comecei a aplicar conceitos funcionais para o meu código orientado a objeto. Em alguns lugares isso simplificou muito o uso de vários threads e sincronização de dados.