Slashdot Mirror


Is Ruby's Decline In Popularity Permanent? (computerworld.com.au)

An anonymous reader quotes Computerworld: Ruby has had a reputation as a user-friendly language for building web applications. But its slippage in this month's RedMonk Programming Language Rankings has raised questions about where exactly the language stands among developers these days. The twice-yearly RedMonk index ranked Ruby at eighth, the lowest position ever for the language. "Swift and now Kotlin are the obvious choices for native mobile development. Go, Rust, and others are clearer modern choices for infrastructure," said RedMonk analyst Stephen O'Grady. "The web, meanwhile, where Ruby really made its mark with Rails, is now an aggressively competitive and crowded field." Although O'Grady noted that Ruby remains "tremendously popular," participants on sites such as Hacker News and Quora have increasingly questioned whether Ruby is dying. In the Redmonk rankings, Ruby peaked at fourth place in 2013, reinforcing the perception it is in decline, if a slow one.

30 of 253 comments (clear)

  1. Is Ruby's decline in popularity permanent? by Anonymous Coward · · Score: 4, Funny

    What is Ruby?

  2. Fad languages don't live long by KiloByte · · Score: 4, Insightful

    Meanwhile, we grown-ups use Perl and C and laugh at the demise of this week's hipster language.

    Now get off my lawn.

    --
    The creatures outside looked from Alt-Right to Antifa; but already it was impossible to say which was which.
    1. Re:Fad languages don't live long by Anonymous Coward · · Score: 2, Informative

      Perl and Ruby are dead. C, Java, C#, Python, and Javascript are humming along nicely. Not sure what your point was supposed to be.

    2. Re:Fad languages don't live long by Frequency+Domain · · Score: 2, Informative

      Ruby is 20+ years old. I wouldn't call that a fad language. Heck, I'm old enough to remember when people said the same thing about C and Perl relative to FORTRAN, PL/I, and COBOL.

    3. Re:Fad languages don't live long by Pseudonym · · Score: 3, Funny

      Perl is like Python, only less stupid and more compatible with itself.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    4. Re: Fad languages don't live long by willy_me · · Score: 4, Insightful

      And PHP. With the release of the PHP 7, it's now faster in some cases than python.

      Like a race between a snail and a tortoise...

      If one is going to tout the virtues of these languages - do not use speed. Their strengths are elsewhere.

    5. Re:Fad languages don't live long by DCFusor · · Score: 2

      Not many grownups here, I see... Seems to me those fad languages are perl with all the good stuff left out. Funny how easy it is to do things in perl, even with newer machines, NGINX, and whatever opsys and hardware. Sure is tough to remember which parts of perl were left out of python, ruby, php and so on, and which perverted weak->strong typing conversions they do differently. One weird language is enough! I'll take the one that takes the least typing and which gives you more choice to either write super clean code, or enough rope to shoot yourself in the foot, depending on mood. And with control over when garbage collection can run, so even some realtime stuff works well.

      --
      Why guess when you can know? Measure!
    6. Re:Fad languages don't live long by Pseudonym · · Score: 2

      Web languages don't live long

      FTFY

      Every single new trendy language seems to want to be a web framework first and a programming language second, and seem to be designed by people who know how shitty existing web frameworks are but don't know what a well-designed programming language looks like.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    7. Re: Fad languages don't live long by Jack9 · · Score: 2

      PHP5+ has been faster than any given version of Python.
      Ruby is the worst performer, consistently.
      I still find people who haven't benchmarked file processing or heavy business logic.
      It doesn't take much time to reveal performance gaps.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    8. Re: Fad languages don't live long by s1d3track3D · · Score: 3, Insightful

      Ruby is the worst performer, consistently.

      Yet, in web apps, language execution speed is almost never the bottleneck, it's almost always database related, network, dns, etc.

    9. Re: Fad languages don't live long by tigersha · · Score: 2

      And programmer time. That is where Ruby shines. Many webapps will execute 1 hour of CPU time in their lives.

      --
      The dangers of excessive individualism are nothing compared to the oppressiveness of excessive collectivism
    10. Re:Fad languages don't live long by LostMyBeaver · · Score: 5, Interesting

      Library clutter and corporate dependence generally decides the fate of a programming language.

      C exists for the "I'll write everything myself crowd" and after nearly 50 years, C is still very popular because it's a very primitive language that allows programmers to be primatives. Consider the Linux kernel and Gnome which are probably the two biggest C projects ever. They don't have common collection types and while glib implements some mediocre standards collection types, very often in C, you spend 3/4 of your time just writing endless code to add items to lists or not. In the Linux kernel, the collection types are truly terrible... but really fast. C is a purest language in the sense of "I'd write it all in assembler, but I haven't figured out how to handle cross architecture there yet". C is probably the most indispensable language ever as it's the underlying foundation of computing. Though, we're making smart shifts slowly away from it. It's the new assembler in the sense that languages like Rust and Go are offering all the love of C with some run down features common in modern languages.

      C++ would have suffered a death by now if it weren't for Qt coming along and setting a standard for how to program in C++. Even now, it's getting more and more difficult to use C++ as the language lacks direction. Half the people want it to compete with C and the other half wants it to compete with C# or Java. Also consider that multiple mega-billion dollar companies have banked their entire existence on C++. Rust looks like it will edge away a little on C++. Of course, much of that will be dependent on the quality of the standard libraries.

      Java has a committee of elders (really, they're getting old now) that rule the library infrastructure of Java with an iron fist. As such, writing large scale projects with it makes sense. Java is the new COBOL. Billions or trillions of lines of business critical code are written in it. It's not the best language for anything in particular but it wears many hats. But Java doesn't gain its strength from being a language, it gains it from being a library and runtime.

      Javascript is actually probably going to be one of the first languages to die... and quickly. For example, already people are leaving it for TypeScript... because JavaScript is not dependable and never has been. Now that there is an accepted paradigm for bridging other languages into the DOM, it is clear that it's no longer necessary to write in Javascript directly. There's always been so many issues with compatibility from version to version and implementation of Javascript that it always made sense to have a language that compiles into Javascript rather than using it directly. Now with WebAssembly, there's a lot more about to happen as languages begin to target WebAssembly as their back end... and Javascript as a fallback. WebAssembly is still missing a great way to manage memory, but it still looks REALLY promising.

      C# is a controlled language and is easy. And it gets a lot of great new features without overwhelming the programmers with them. You can be a newb scripter or a seasoned veteran programmer and C# probably can work for just about anything you want to write. It also is the only universal programming language at this time (Javascript might count too but doesn't compile native... though this might not matter anymore) as it supports pretty much every major platform today. It also looks like there's some really good legitimate projects to make a real end-to-end cross platform solution for C# as well, especially with Xamarin,forms and XAML to HTML5, There are some real struggles at this point in time with C# because Microsoft is spreading in every direction trying to make a solution that will work for everyone while still remaining polished. .NET Core 2 and ASP.NET Core 2 look REALLY REALLY promising but there will still be work to do. But with C# addresses everything from Web to OS to Docker all in a single solution format which makes it really nice. Oh... and there's the who

    11. Re: Fad languages don't live long by JaredOfEuropa · · Score: 2

      No (3rd party) cookies and no tracking ought to be the default.

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    12. Re: Fad languages don't live long by TheRaven64 · · Score: 2

      CPython has always been a horrible implementation. It's not even at the standards of a 1980 implementation of Smalltalk in terms of performance and Python is easier to generate efficient code from than Smalltalk. HHVM is just amusing: for Facebook's use case, they could get away with never running the GC for most workloads, which would give them around a 30% performance increase... except that PHP makes it observable in the language whether an array has more than one reference and so they need to pay ref counting overhead on everything.

      --
      I am TheRaven on Soylent News
    13. Re:Fad languages don't live long by Megane · · Score: 2

      When I was his age, I had to solder in an extra RAM chip to get lower-case!

      --
      #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
    14. Re:Fad languages don't live long by Megane · · Score: 2

      You're soaking in it*. Slashdot was written in mod_perl, and still is for all I know.

      *now there's an old meme, does any millennial know who Madge is?

      --
      #naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
    15. Re:Fad languages don't live long by Kjella · · Score: 4, Insightful

      Javascript is actually probably going to be one of the first languages to die... and quickly.

      Hahahaha no. Javascript is to the web what Java is to the enterprise, there's tons and tons of code and libraries written for it that needs to be maintained and improved, full rewrites rarely happen, rarely succeed and take forever. Other languages that compile down to Javascript won't be a threat any more than Rust and Go replacing C. Even if WebAssembly takes off it's 20 years late to become the standard exchange format, as long as you must have Javascript fallbacks for everything why would you bother unless your site is performance sensitive? You could support just JS or JS+WebAssembly, seems like an easy choice for me. Java applets, Flash, plug-ins in general - Javascript has been slaying all the competition. Even if WebAssembly takes off, is there any reason to think it'll be more than inline ASM for performance critical parts? I think it's just a niche for performance optimization, not a general replacement.

      --
      Live today, because you never know what tomorrow brings
  3. Re:Kids by 110010001000 · · Score: 2

    Oh yeah and C++ has been around for 38 years. It ain't going anywhere, especially with Moore's Law ending.

  4. Python Won. by 0100010001010011 · · Score: 4, Interesting

    It's pretty clear that Python's going to come out on top of the GenY/Millenial coding club. Ruby got a quick lead making Web 2.0 development easy but Python hit critical mass just by the number of available packages. Numpy, Matplotlib, etc. "How to ___ with Python" nearly always turns up a result.

    And peers: No, just like COBOL and FORTRAN, C and your current $favorite_language isn't ever going to go away. I still do a lot of C, Matlab and Simulink at work. But when I have the opportunity Python is just faster due to the shear number of packages that already exist.

    1. Re:Python Won. by 0100010001010011 · · Score: 3, Insightful

      Perl won the GenX popularity contest a long time ago. No one is coming after your Perl, don't worry. You can use it until the day you die.

      You'll be able to recruit Perl developers long after your death just like they do for COBOL and FORTRAN.

      And when Millennials get older hey'll have as many complaints about what ever the next gen programming language is and why Python is the best thing ever. Slashdot will be running stories about "Perl developer shortages" and life will go on.

      You're doing the technological equivalent of arguing over what hammer is better. No one is going to take away your blacksmith's anvil or coarse hammers. I just prefer something else.

      . I'd rather have the choice.

      I'd rather just learn how to do both and teach my brain how to switch depending on what I'm developing. It's about as different as learning to speak another language and then doing so. Arguing than Spanish's word order is better than German's isn't going to help you solve any problems nor is screaming at the Germans in Spanish to "just learn Spanish".

      Today I'll work in Python, tomorrow Bash, the rest of the week Matlab. Occasionally PHP, C, VBA, JavaScript and a few others. Same reason I have to deal with Git, SVN, and ClearCase. In the corporate wold it's easier to learn to do something new than change the momentum of an entire corporation.

      And you can't paste a long program into a single line edit box as the indentation matters.

      I take that time to proof read and learn the language and customize the example I copy and pasted for my application.

      Whitespace as a statement delimiter is stupid, and it being popular just means that there are a lot of stupid people.

      _______ is stupid, and it being popular just means that there are a lot of stupid people.

      Somewhere there's an old assembly developer saying something very similar about the C developers. And the C developers about the Perl, and Perl about Python, Python about what ever comes next.

      It's a language, not a religion.

    2. Re:Python Won. by erapert · · Score: 2, Informative

      It's such a shame too because Ruby is nicer and more regular than Python. Everything Python tries to do Ruby does better.

      For example:

      # run some other program using the shell and get its stdout
      # ruby:
      out = `ls -al | foo -a -b | grep -i bar`
      # python:
      from subprocess import call
      call(["ls", "-l"])

      # string length, toString etc.
      # ruby
      puts '10'.to_i.to_s
      # python
      print (string (int ('10')))

      # classes
      # ruby
      class Dog
          # getters and setters implemented with one line if that's your style
          attr_accessor :breed :name

          # constructor: notice no stupid __double_underscores__
          def initialize(breed, name)
              # Instance variables are denoted with the @ sigil
              @breed = breed
              @name = name
          end

          def bark
              puts 'Ruff! Ruff!'
          end

          def display
              # string interpolation like a civilized scripting language
              # note that parenthesis are semi-optional in ruby
              puts "I am of #{@breed} breed and my name is #{@name}"
          end
      end

      # python
      # note the repetitive and pedantic use of self everywhere
      class Dog ():
          # note the hacky __double_underscores__ necessary to prevent name collision for the class' constructor
          def __init__ (self, breed, name):
              self.breed = breed
              self.name = name

          def bark (self):
              print ("Ruff! Ruff!")

          def display (self):
              # lack of proper string interpolation makes this clunky and tedious
              print ("I am of {breed} breed and my name is {name}".format(breed=self.breed, name=self.name))

  5. Re:Is Ruby's Decline In Popularity Permanent? by Aighearach · · Score: 4, Interesting

    Yes.

    The web fad moved on. They're never coming back. And good riddance.

    Ruby will continue to grow in popularity for other types of uses.

  6. Re: Ruby hangs when run from PowerShell by lucm · · Score: 2

    Puppet just hangs. It's not Windows-specific; it's a feature of this nightmarish system. I've seen cases of million+ queued jobs slowly murdering the masters. Maybe it works if one has 3 servers and 12 lines of config but in a real environment it's just a terrible system.

    Take puppet to the backyard and shoot it in the head. Then bring in Ansible. No flaky agent, no constant chat on the network, no mysterious ordering of tasks, no need to find countless plugins written by random people to do the most simple of things. I've seen Ansible work smoothly on 2,500+ servers with fairly complex variations in configs and dynamic inventories.

    I've never seen anything good written in ruby and puppet is just par for the course.

    --
    lucm, indeed.
  7. Ruby is my favorite snail by Theovon · · Score: 2

    As far as interpreted languages are concerned, Ruby is by far my favorite. I can code in that language far faster than any other, despite having decades more with the likes of C and C++. It’s nice for quick-and-dirty prototypes and things that don’t require a lot of processing power. But for serious tasks, it’s just too damn slow. I have tried, for instance, to write parsers in Ruby because its string and array manipulation are really convenient, but for most data sources, the Ruby programs just can’t keep up. And I’m no slouch at playing “golf” with intricate Ruby expressions. What’s worse is that with the global interpreter lock, I can’t get more throughput from threading.

    I’m not a huge fan of Python in terms of syntax, but although general Python code is of comparable things, Python has some tools that make it invaluable. I’m thinking specifically of sympy and numpy. Simpy is an amazing symbolic algebra library. I can’t tell you how nice it is in machine learning to be able to have it automatically compute partial derivatives of arbitrarily complex expressions. And when you can organize your data into vectors and matrices, numpy can use GPUs to get incredible throughput. This is the only reason I bothered to learn Python, and it’s one reason Python is eating Ruby’s lunch.

  8. Re:Is Ruby's Decline In Popularity Permanent? by Hylandr · · Score: 2

    Rails may be taking a back seat, but Chef is very much in use, and will be for some time to come.

    --
    ~ People that think they are better than anyone else for any reason are the cause of all the strife in the world.
  9. Not surprised by cjonslashdot · · Score: 2

    Ruby is fantastic for writing a-lot of code quickly. But it has terrible performance, and is has terrible maintainability characteristics (I recall doing global file system searches to find the file that defines something that my code requires, which is brought in by another require, and then another).

    Performance sometimes matters. If one's app requires 20 VMs in Ruby, but only 2 VMs in Go or C++, then the cost difference can be substantial.

    Also, Ruby - while 20 years old - is surprisingly immature. E.g., a few years back, I wrote a multi-threaded program in Ruby. It didn't work. After days of scratching my head, I discovered that while Ruby used native threads, it had a global interpreter lock, forcing the native threads to take turns. Maybe they have fixed this by now. My program needed true concurrency, so I had to re-write it using processes. Gosh - Java got threads working after the first two years.

    Firms that really know how to maintain large codebases have also discovered that type-safe languages are very effective for maintainability. Check out this post: https://medium.freecodecamp.or... . I myself have experienced this: I once translated a fairly good sized codebase from Ruby to Java, and in the process discovered a large number of potential bugs - thanks to Java's type safety. I have found that when I refactor Java code, I introduce zero new bugs, but when changing Ruby code, the only thing that prevents new bugs is a large suite of unit tests. Thus, writing in Ruby _requires_ that one write comprehensive unit tests. I personally don't use TDD - I use ATDD, so my focus is on acceptance tests, not unit tests. Ruby _forces_ me to write unit tests. I don't want to be forced to work a certain way.

    I am not bashing Ruby - I think it is great for some things - but people (like those at Google) have come to understand its shortcomings.

  10. Re:Javascript pushing it down by mean+pun · · Score: 2

    I have never touched Javascript and I know nothing about the 'promise' construct, but people don't use callbacks, upcalls, futures, promises, or whatever they are called for the fun of it. They do it because the sequential execution model is not good enough. They have to deal with unscheduled events, including user clicks; they have to communicate with other systems that will reply at an unpredictable moment in the future (if at all); they have to move lengthy computations out of the main thread to avoid sluggish response to the user. Or they just have keep multiple cores busy and coordinate the work on these multiple cores.

    Thus, i'm pretty sure JS does not 'really, really wants to use callbacks to sequence things', it wants to offer a mechanism to break out of the rigid sequencing of imperative execution. If and only if necessary.

  11. Re:Javascript pushing it down by phantomfive · · Score: 2

    Problem is that many many Javascript libraries now use callbacks as a normal method of operation, often when it's not necessary. The result is now you get the "callback of death" with many nested layers of callbacks. It is ugly but worse, hard to read. Here is an example and some solutions.

    --
    "First they came for the slanderers and i said nothing."
  12. Re:so if not RoR.... by guruevi · · Score: 2

    Whatever language and framework you or your team is most versed in.

    You can do this in PHP if that's what your programmers know but when you set forth programming language requirements based on mostly managerial gibberish, you've failed at design.

    Whether your applications is going to end up with a REST or SOAP interface with an RDBMS or NoSQL backend is largely unimportant to the customer, as long as it works, is done in time and is easy to maintain.

    For a new application, since you specified you 'require' REST as an API, I wouldn't even go the layer of ORM + RDBMS, most of the time an Object Oriented DB may be sufficient here since you don't require any state and most inquiries will be (or should be) simple. So since you've got REST + OODBMS and you need a service layer - at this point, I'd be looking more at Zend or NodeJS because those are the broadest understood and fit better with your prerequisite of a stateless object-oriented API.

    --
    Custom electronics and digital signage for your business: www.evcircuits.com
  13. Re:Is Ruby's Decline In Popularity Permanent? by colourmeamused · · Score: 2
    It definitely won't disappear but we are probably past peak Ruby. It has simply been out-niched, I can't easily think of a 'Ruby is best for this' use case today. Python hitching a ride on the data science gravy train might be the first nail - remember the days when your scientist or mathematician or engineer buddy would ask whether they should learn Ruby or Python, and you actually had to think.

    When the rise and fall of the Ruby empire is written, Chef will probably have a part in both stages. Ruby is more a victim there, but some of my most frustrating encounters with Ruby have involved Chef. Sticking to Ruby earned Chef favour from developers but Puppet's custom DSL choice was the right one. Using Ruby forces hard dependencies where everything ends up being dependent on 'windows' and 'yum' and 'apt'.

    A major problem with the first era of config management / DevOps was too much code that does too little. Instead of telling Chef via an abstraction to enable the apache service, you have to write:

    service 'apache2' do
    service_name apache_service_name
    case node['platform_family']
    when 'rhel'
    if node['platform_version'].to_f < 7.0 && node['apache']['version'] != '2.4'
    restart_command "/sbin/service #{apache_service_name} restart && sleep 1"
    reload_command "/sbin/service #{apache_service_name} graceful && sleep 1"
    end
    when 'debian'
    provider Chef::Provider::Service::Debian
    when 'arch'
    service_name apache_service_name
    end
    supports [:start, :restart, :reload, :status]
    action [:enable, :start]
    only_if "#{node['apache']['binary']} -t", environment: { 'APACHE_LOG_DIR' => node['apache']['log_dir'] }, timeout: 10
    end

    And this is one of the better written actively maintained cookbooks.

    Then there is the annoyingly common convention where every time there is a new release of the underlying package, you have to update a hash in the Chef code and release a new version of the Chef cookbook, which of course is delayed - looking at you Elasticsearch.

    It runs 'yum install elasticsearch' which installs a signed package from the repository. But the first law of config management is 'support everything and let the lowest common denominator dictate design'. So supporting whichever crappy OS / release that does not have native packages always takes priority over writing something that just works and will continue to just work.

    e.g. The Chef yum provider can't handle obsolete package versions. If you tell Chef to install somepackage-x.y.1, and that version has been obsoleted by somepackage-x.y.2, somepackage-x.y.2 gets installed while Chef thinks it installed somepackage-x.y.1. The next time you run Chef with exactly the same config, it will fail because of the implicit downgrade.

    Which brings us to the Third law of config management: Idempotence in config management is like world peace for the U.N. - promising an idealized unachievable goal confers nobility and thus failing at it all the time is ok.

    Ruby isn't the culprit here but it is the enabler. Manual dependency management means no one configures versioned cookbook dependencies. So your infrastructure is code defined, but what that code is is a spur of the moment thing as Chef fetches the freshest stuff off supermarket.chef.io. Bringing us to the second law 'it mostly works' is good enough.

    In the world of clustered distributed multi-node services, the much praised Kitchen test framework can't test multi node deployments. Have a two-node Elasticsearch cluster - forget writing tests, and add a bunch of timeout hacks to handle asynchronous builds. Let's have a long existential discussion over whether multi-node testing is really needed and continue to write tests for whether "package 'ap