If there is something that I have learnt is that you must always be learning something. I know it is hard, specially if you have to work too. But careers in CS are demanding and the competition is fierce. Do not think that having a CS will get you a job. So the best way to know is to learn something new on a regular basis. We all have our preferences, but at least pick something you are interested in, and never skip the basics. Yes, that's right. Those algorithms you dislike so much are very important. There are many of them and you don't have to memorize them all by any means, but there are algorithms every CS person should know, at least how they work.
Theory is hard, it gets you headaches, but it is key to understand many problems, and their limitations. For example, you as a programmer should know that sorting a set of elements in a comparison-based model takes at least n log n time. There is no justification for not knowing it. Every programmer should know fairly well at least one of the n log n sorting algorithms: mergeSort, quickSort, heapSort, etc. And what is the only way to know it? By coding them and following them on pencil and paper. No one knows everything and nobody was born knowing. That is the first idea to keep in mind. If someone else can do it, you can too. There is only one way to get good at something: practice, practice, practice.