First read the Eobert C. Martin series on clean code. Second practice. If you haven't get a book on Code patterns.
To be a good programmer you make an application that functions. To be a great programmer you make maintainable code.
As above a goal and a path is good. Another suggestion is to think of a problem which either has been solved or something you would have solved differently. For example, suppose you don't like the way a particular application tracks your weight loss, you want % instead of just pounds lost/gained, you want the names to be anonymous. So build it, and make sure it does what you want. This will give you experience and that is really the best way to be a great software engineer.
The key is your PROBLEM SOLVING skills, your programming language proficiency comes next.
https://www.w3resource.com/index.php provides exercises with online editor for multiple languages. You could try solving the problems listed there, and companioning your solution with what is provided there.
You need to understand your goal and build a path towards it. Lets say that you have to write a program to add two inputs and display the answer.
Your goal is to display the answer.
Your steps are:
1. Ask the user for the first input
2. Ask the user for the second input
3. Do the operation
4. Display the answer
Like that you stated your goal and built your path towards it. Lastly, practice make perfect ;)
Associate yourself with other programmers. Take the time to research your passion and always be a student of learning and life! Contact technology firms such as Google and ask for advise and a walk through. Don’t make them come to you you chase your dreams!