It depends on the level of sophistication that you need in your design.
For Instance,
If you are very clear in each step that your microcontroller is supposed to do (step by step) then you can look at its instruction set and you can convert your flow chart into an assembly code this can also be very helpful in precise control over your timing and it saves a lot of your code space which will be very important when you have a very big application and your Program code memory is as small as 5KB.
However,
If you have no stringent timing requirements and your application is small in terms of its demand for code memory then you can go for C language it gives you a very abstract level of coding which will take care of all the difficult assembly coding for you in its compiling and linking stages, it also gives portability i.e., code written for one microcontroller can almost be used for other microcontrollers with little or no change.
Moral of the story is, it all depends on your application, if you have a big application and have a microcontroller with small program code memory then you have no other option than to use assembly language.