Meu melhor conselho é focar nos fundamentos, como a lista que Robert Harvey sugeriu. O desenvolvimento de software é um monstro complexo que leva anos para se tornar remotamente bom, especialmente no tópico de bom design de interface. É realmente difícil apreciar muitos aspectos do desenvolvimento de software sem antes experimentá-los. Mesmo algo tão básico quanto comentar código pode ser subestimado. Desde o primeiro dia, você é ensinado a escrever um código bem documentado. Admito que não foi até que eu realmente estava tentando entender o código que escrevi meses atrás, antes de realmente apreciar o valor de bons comentários. O mesmo pode ser dito para muitos conceitos de programação. Por exemplo, encapsulamento de dados, módulos com baixo acoplamento e interfaces limpas.
O recurso mais valioso que encontro são meus colegas de trabalho. Você está indo para escrever código incorreto. Apenas aceite isso. É o que você faz para garantir que você escreva melhor o código ao longo do tempo que o define como programador. Por exemplo, quando comecei a trabalhar, minha empresa não tinha nenhum tipo de código formal ou procedimentos de revisão de design. Decidi submeter meu trabalho às críticas de meus colegas mais antigos e, para ser sincero, me senti um idiota por boa parte do meu primeiro ano de trabalho.
O desenvolvimento de software é uma experiência de aprendizado contínuo. Faça muitas perguntas, revise seu código, entenda o porquê das sugestões que os seniores dão, não tenha medo de questionar a validade das sugestões que os desenvolvedores seniores dão e, acima de tudo, não tenha medo de estar errado. Eventualmente, o fator de intimação ou a sensação de ser modismos oprimidos. Para o registro ... as curvas de aprendizado são péssimas.