I think the main issue is that you learned this on a vacum. People need constant feedback on their work, and trying to do everything yourself can be dawnting. First off, you learned off a book, and I bet the book didnt had a forum or chat that will assist you when you didnt understood the difference between STRONG and B or why you should use EM instead of PX.
Here is one of the things that would have help you even in the 2000s.
http://www.csszengarden.com/
and
https://www.sitepoint.com/
Of course is 2017, and the youtube era hit like 10 years ago, so now learning to code can be done much more easier with online classrooms like.
http://railsforzombies.org/
or https://www.codeschool.com/
Or even playing games... because gamification...
https://code.org/
Now here are two different things, being a coder, and a professional coder. If you want to be a freelancer coder, you need to know your shit, which means, know how to deal with clients, know the way they think and prepare to battle for cash. Meaning, show them a contract, ask for an advanced. And make some requriments, to set boundaries.
Your pricing strategy (working per hour or per project) is really big difference. Anyway, experiences can vary from being very good to very frustrating depending how you approach your clients.
Personal branding is important and I think you know enough to learn about it. Artistic and creative people usually used to be pushed by their own rules but dont react well to outside pressure, or maybe they do but that can vary. So althought I understood why your experience wasn't great. I would like to remind you that coding is awesome, not because is against clients, but against computers, and beating computers is great. Just like beating a Bowser with a Italian plumber.