Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

O que está errado com Ruby?

Publicado em Developer


O título acima foi o de um post sobre Ruby, em uma tal de Bitwise Magazine, que eu nem havia feito questão de comentar.

Não, não era pelo fato do autor do post fazer uma série de críticas à linguagem não, acho que críticas tem que ser encaradas de um modo que se possa analisar e tirar proveito, mas certos artigos eu já paro de ler no começo, sejam de críticas ou de elogios, dependendo do modo que foi escrito.

Esse foi um deles, e parece que está gerando muito barulho por aí. Como disse, eu não dei muita bola para isso, mas por causa do barulho, daqui a pouco alguém me pergunta alguma coisa e resolvi fazer esse post. Vou explicar duas razões que me fizeram parar de ler assim que passei os olhos rapidinho no post.

Why é o cara!

A primeira foi que o autor disse que o tutorial do Why é horrível, com um bônus na citação:

If I was put off Ruby by the hype, I was put off more by the many cutesy introductory tutorials I encountered when trying to get into it. Why’s (Poignant) Guide is a particular horrid example, but there are many others. Sorry, if I’m getting into a new language, I don’t want to be patronised in this way. I don’t want someone chatting away to me and telling me how "cool" it all is (I’ve lived long enough as a computer programmer to know it’ll never really be "cool" to be one). I just want the straight facts, plainly put.

Em primeiro lugar, o tutorial do Why foi o primeiro que eu li de Ruby, e apesar de ser uma "viagem" só com as raposinhas e tudo o mais, é um ótimo tutorial. O Why é aquele tipo de pessoa que programa e tem "um plus a mais" que incorpora com muito bom humor nas coisas que faz. E isso é uma coisa muito boa. Agora, se o sujeito não gosta desse estilo, tudo bem, mas não venha dizendo que o material é horrível, pois não o é. O Why inclusive dá uma tirada com isso no seu post What's Wrong with Ruby? Hah Yeah, It's Me!.

O bônus que mencionei é a citação que ele diz que viveu bastante como programador para saber que isso nunca vai ser realmente "cool" para alguém. Eu acho "cool", conheço um monte de gente que acha "cool", e se ele está nessa há tanto tempo e não acha nem um pouquinho "cool", é um sujeito bem infeliz e devia ir fazer outra coisa.

Reclamar de barriga cheia

Olhem só isso:

In Ruby, if a is [1,2,3] and b is [10,20,30], then a+b is [1,2,3,10,20,30]. Why not [11,22,33]?

Tio, tira a bunda da cadeira, leia o tutorial do Why e descubra que as classes em Ruby são abertas. Está reclamando de barriga cheia. Se isso lhe incomoda tanto assim, vou dar uma dica:

class Array
	def +(other)
		copy = other.dup
		self.push(0) while self.size 1,2,3 + 4,5,6 = 5,7,9
puts "#{a1.join(',')} + #{a3.join(',')} = #{(a1+a3).join(',')}"
=> 1,2,3 + 4,5 = 5,7,3
puts "#{a1.join(',')} + #{a4.join(',')} = #{(a1+a4).join(',')}"
=> 1,2,3 + 4,5,6,7 = 5,7,9,7

Coisa difícil, não? Esse foi um exemplo simples para um array de Fixnum's. Se por acaso alguém reclamar e disser que precisa de um mais "genérico", aí vai:

class Array
	def +(other)
		copy = other.dup
		self.push(nil) while self.size ["oi mundo", "hello world", "hola"]

Aí me vem outro editor da tal da Bitwise Magazine e diz que Ruby tem complexo de inferioridade e classifica todo mundo como trogloditas que tem medo de críticas. Ah, dá licença, né.

Consistência se gera através de consistência, e definitivamente pelo menos nesses poucos trechos do artigo que foi o estopim para tudo isso estão mais para uma visão superficial, pessoal e ácida da linguagem (para não dizer incompetente) do que alguma crítica consistente e bem formulada da linguagem que mereça uma análise mais adequada, IMHO. Peçam para ele voltar a estudar inteligência artificial pois está precisando de um pouco, se não consegue nem formular a solução dos arrays antes de sair falando mal.

Atualizado: Como é melhor escrever as coisas de cuca fresca. Quando escrevi o post estava meio p da vida com o sujeito lá, mas ontem mostrando esse post para o Samir por de uma conversa sobre um post dele, dei uma olhada melhor no código e reduzi ele para:

class Array
	def +(other)
		nother = other.dup
		self.collect { |item| item += nother.shift rescue item }.push(*nother)
	end
end

Dã. :-)




Comentários

Comentários fechados.

Sem nenhum comentário.

Artigos anteriores