Assertions feature heavily in Design by Contract (DbC) which as I understand was introducted/endorsed by Meyer, Bertand. 1997. Object-Oriented Software Contruction.
An important feature is that they mustn't produce side-effects, for example you can handle an exception or take a different course of action with an if statement(defensive programming).
Assertions are used to check the pre/post conditions of the contract, the client/supplier relationship - the client must ensure that the pre-conditions of the supplier are met eg. sends £5 and the supplier must ensure the post-conditions are met eg. delivers 12 roses.
(Just simple explanation of client/supplier - can accept less and deliver more, but about Assertions).
C# also introduces Trace.Assert(), which can be used for release code.
To answer the question yes they still useful, but can add complexity+readability to code and time+difficultly to maintain.
Should we still use them? Yes,
Will we all use them? Probably not, or not to the extent of how Meyer describes.
(Even the OU Java course that I learnt this technique on only showed simple examples and the rest of there code didn't enforce the DbC assertion rules on most of code, but was assumed to be used to assure program correctness!)