Functional and imperative programming is very different. Functional programming is a paradigm that emphasizes the evaluation of mathematical functions. In other words, functional programming attempts to solve problems through a series of computations. Imperative programming, on the other hand, emphasizes state and mutable data. This paradigm attempts to solve problems via a procedural approach.
Prior to Ruby, most languages favored one paradigm over the other and many only allowed for the one approach. Ruby’s balance between functional and imperative programming is what distinguishes it from other languages. Ruby treats both as if they were equal citizens. This allows programmers to break problems down into components and then approach solving those sub-problems in very distinct ways.
Since the release of Ruby in 1995, the language has developed a strong user base. Some time prior to 2006, Ruby had earned mass acceptance and had outgrown its reputation as a language for enthusiasts. Professional software development teams were now using Ruby to solve problems in enterprise scenarios. The TIOBE index, which measures the growth and worldwide usage of programming languages, currently ranks Ruby as the twelfth most used language in the world.
While being 100% cost free helps Ruby’s popularity, the language’s flexibility is at the core of its success. Like many of today’s most-used programming languages, Ruby operates in terms of objects. Everything is an object. However, unlike in many of the most popular languages, in Ruby everything truly is an object. Ruby’s pure object-oriented approach makes the programmer responsible for many coding aspects handled by modern compilers. However, the tradeoff is a combination of capabilities that is not available in any other language.