I bought a book called Cracking the Coding Interview, 189 Programming Questions & Solutions. I haven't read it yet, but I've heard good things about it. You can just jump in and start coding with very little knowledge of software engineering fundamentals, but I would start out reading about the fundamentals. I created dozens of programs without having hardly any idea what I was doing. Then, when I actually got an interview to be a software engineer, or something similar, I couldn't answer a single question they threw at me. I had no idea what I was actually doing. I would just code and used trial and error until something worked. That might be okay for some things, but it's not going to get you a job as a software engineer.
After you have a good idea about optimizing code, time and space complexity, data structures, and things like that, you should begin creating on online portfolio for yourself. You can make a GitHub Pages Website with HTML, CSS and/or JavaScript, and you should put some projects on there, too. These projects can be academic, like studying some algorithms, like different sorting algorithms and comparing their time complexities. One of the first pages I made was comparing some popular path finding algorithms and visualizing them. This was entirely academic, but was pretty interesting, and I learned a ton about searching algorithms and tree structures.
Your next step should actually be to learn all of these algorithms, like sorting algorithms and searching algorithms, because you will need to know them to solve problems optimally, and you can put all of your progress onto your portfolio.