Avoid getting distracted by every new thing you read about, from frameworks to architectures. Focus first on the fundamentals of software development, which often aren't taught:<p>1. Break things down into small "complete" steps. Nope, smaller than that. Nope, you can still break that down. Test-Driven Development can help here, not by making sure you've got good test coverage, but by encouraging you to break down the solution into small, testable pieces.<p>2. When learning something new, don't copy-and-paste. Retype it if you have to, but at least understand _why_ that code will work, and maybe a bit about _how_ it will work. As you get more experienced, you can copy-and-paste, though you'll find you'll do that less anyway.<p>3. Related to 2 and the post about technical communication: learn how to concisely ask questions. The number of juniors (and seniors) asking questions, but failing to show the precise problem (or at least what they think the problem is), with enough code (but not everything!) to evaluate is...frustrating for those of us who want to help. Tell us what you tried, tell us what the errors are (precisely, i.e., here you want to copy-and-paste!), but do so with as few words as possible. This is _definitely_ a skill, so you'll get better as you do it more, so pay attention to the questions you get in response to your question. Reflect on whether that could've been included in your original question.