It depends largely on what you know now, and what you are trying to accomplish. I had a different path since I began with computer programming. And I think that helped the most when I started PLC's. Object instances, Function Blocks all made more sense since I new OOP (Object Oriented Programming).
I would say start with some basic computer programming skills if you will be developing systems in the long run. If you are going to be maintaining then you don't need much programming skills per se. Either way I would recommend getting your hands on some python skills, and OOP programming. An easy way to learn visual programming is to use Raptor Flowchart tool, and it is great because it has OOP capabilities too.
For Siemens Step7 I would recommend Hans Berger books, I carry one around good for reference. Is my Step7 Bible.
Once you learn one PLC, they are all the same pretty much.
Aside from preference, instructions differences, software and hw/sw prices.
Lastly no matter how many books you read on anything nothing will make sense unless you practice it. If you have PLC's readily available make some programs start with simple input, output, timers, counters, etc. And move your way up. Design a conveyor function block, how would you tackle safety functions, hmi needs, etc.
I learned the most in plc software in the field, when implementing software and finding bugs. Troubleshooting PLC software also helps a lot. I wouldn't focus much on learning every single PLC instruction, but rather how would you implement a problem and then depending on your needs research those instructions you need to accomplish the job.