Nice descriptions! And putting OO last is correct. A good language can do all four paradigms, but I find OO is easiest to work with as it avoids the "Hell's Half Acre" style of programming where everything related to solving a particular problem is scattered across the entire code base. Naming conventions help, but objects concentrate thing in specific places so you can understand all the logic together.
Most people fail in OO development because they never understand IS A and HAS A relationships and tend to do huge inheritance trees when trying to solve a HAS A issue. Inheritance should not be widely used in OO development. If you can solve it with HAS A, you should.