I have a college degree in CS, and learned about Java and OCaml. Java was used as introduction, and in most CS classed, except the theoretical ones. OCaml was part of learning a different programming paradigm. Since OCaml wasn't a successful entry in my CV, I became a better Java programmer. Also, most jobs are for Java programmers. Later on I learned Golang.
I know about the simplifications provided by Java, i.e. garbage collection. I also know, that C doesn't do garbage collection and you have to know when to allocate and when to free the memory. But during my education I was never taught to think in this kind of way. We never learned algorithms in the aspect of memory. I feel like I missed something.
So my question is, how deep do I have to dig, before I can start writing passable C code, without having myself put obstacles in my way, because of my own crufty code and deep misunderstanding of relevant issues?