I use them all the time. They're a nice way to practice the "Crash early" philosophy, better to have to solve why an assertion failed than to have to deal with bad/corrupted output.
The issue is you have to kind of make it a habit. I rarely see any middle ground in it, people are either not used to it and almost never use them or people use them and they're littered rigorously throughout the code. You just have to get into the mindset of noticing "Oh hey, I'm implicity assuming something here, let me explicitly confirm it 'assert(ASSUMPTION)'"