I think a good starting point is to integrate the principles described in the Simple Made Easy[1] & Hammock Driven Development[2]. These are overarching first principles that help in designing and writing code, but also in communication & team work.<p>[1]: <a href="https://www.infoq.com/presentations/Simple-Made-Easy/" rel="nofollow">https://www.infoq.com/presentations/Simple-Made-Easy/</a>
[2]: <a href="https://www.youtube.com/watch?v=f84n5oFoZBc" rel="nofollow">https://www.youtube.com/watch?v=f84n5oFoZBc</a>
Some of the things that helped me:<p>- Write thousands of lines of code and learn from your (inevitable) mistakes.<p>- Read books and articles written by people who are smarter than you are.<p>- Work with people who you can learn from.
Honestly? Don't.<p>Get a piece of paper from a university (degree). Then find a company that will pay you. They will waste your potential, your health, and your youth in exchange for mediocre pay - enough that you have a decent life, but never enough for you to be able to quit. You will be bored and eventually you will be fired when you get older, nut not old enough to retire.
Sitting 14 hours a day in front of the screen and not giving up, even when you seem not to be making any progress. Stick to it and don't cave in - the results will follow.<p>Always share knowledge with those who know less and learn as much as you can from those who know more. Help others, ask questions, practice and try to have fun while doing it!<p>Good luck :)
I would suggest you do the following:
1. Practice. Keep doing software development activities (code websites, clone apps)
2. Understand the basics. You should know the basics and fundamentals by heart. I suggest you read on about Data Structures and Algorithms.
3. Always write down what you learn.
Becoming pro at software engineering and mastering the art of programming are two, mostly independent, things. One is achieved by getting paid, the other by dedicating your life, and neither implies the other.<p>"Ars longa, vita brevis."
Write it down:<p>When debugging<p>When planning<p>When getting assignments<p>When attending meetings<p>When things are due<p>Engineers are notorious for recording artifacts of everything. I noticed when I started to do that, my skills and performance increased significantly.