I love submodules. It's similar to using a package manager but allows you to modify the submodules' code much easier. And as already mentioned you need to use `git config --global submodule.recurse true`. This really should be the default.
On top of that they are needlessly confusing. Why is there a .gitmodules file and hidden state inside the .git directory? Why aren't they cloned by default? Many of the UX issues have only been fixed if you turn non-default options on (e.g. the display of diffs can be changed from useless "submodules changed from commit 123 to 456" to "these commits have been added/removed").
Just all-round they are a mediocre idea, implemented badly.