Conhecendo um pouco sobre a Linguagem Ruby!
O que é a Linguagem de programação Ruby?
Segundo Yukihiro Matsumoto, ou “Matz”, o criador da linguagem Ruby:
“Ruby é uma Linguagem de script interpretada para programação orienteada a objetos, de modo fácil e rápido. Ela tem vários recuros para processar arquivos de texto e para fazer tarefas de gerenciamento de sistemas. Ela é simples, direta ao ponto, extenssível e portável. Oh, preciso mensionar, é totalmente livre, o que significa não só livre de precisar pagar para usá-la, mais tambem a liberdade de usar, copiar, modificar e distribuí-la”
Pensamentos de Mats:
Para mim o propósito da vida é parcialmente em ter prazer. Programadores as vezes sentem prazer quando podem se concentrar na parte criativa da programação. Então Ruby foi projetado para fazer programadores felizes.
Matz começou a trabalhar no Ruby em 24 de fevereiro de 1993, a primeira versão alpha ficou pronta em dezembro de 1994. Até 1996, ele trabalhou sozinho, quando começou a se formar uma comunidade ao redor da linguagem. A partir daí, apesar de ainda fazer a maior parte do desenvolvimento sozinho, Matz passou a receber fixes e patches da comunidade.
Características da Linguagem
- Principio da Menor Surpresa
- Orientada a Objetos “de verdade” (nao como java “pseudoorientada”)
- Tipagem Dinamica
- Fortemente Tipada
- Mixins
- Clousures ou Blocos
- Continuations
- Bindings
Porque usar Ruby?
“Voce quer aproveitar a vida, não quer? Se conseguir terminar seu trabalho mais rápido e seu trabalho for divertido, isso é bom, não é? Esse é o proposito da vida, em parte. Sua vida é melhor.Quero solucionar problemas que encontro no cotidiano usando computadores, então preciso escrever programas. Usando Ruby, quero me concentrar nas coisas que faço, não nas regras mágicas da linguagem, como começar com public void alguma coisa alguma coisa para dizer “print hello world!”. Apenas quero dizer “print this!”. Não quero todas as diversas palavras mágicas. Quero me concentrar na tarefa. Essa é a idéia básica. Por isso tenho tentado fazer o código Ruby conciso e suscinto.” Mats
A Linguagem Ruby e com certeza uma excelente ferramenta para se fazer um bom programa, ela traz em si, um aglomerados de boas coisas de vá¡ria Linguagens, tais como Lisp, Perl, Python, Ada, Smaltalk, Eiffel, e muitas outras. Traz em sim o poder das linguagens Dinamicas, o poder da Orientaçao a Objetos, O Poder dos Mixins, O Poder dos Blocos, O poder dos Continuations e Binfings.
Se voce esta lendo este artigo é muito provavelmente que ja tenha ouvido falar na linguagem Ruby, talvez esteja se preguntando, “Será que devo estudar e aprender esta linguagem”, com toda certeza o meu conselho é que voce estude, mesmo que não tenha nenhuma pretenção de usá-la brevemente. A linguagem Ruby traz em si a proposta de tornar a ato de programar algo prazeroso e agradavél, contexto esses abandonado e despresado pelas outras linguagens, só isso ja bastaria para usá-la, porém, alem de tudo ela traz consigo uma comunidade forte de pensadores, não de somente usuários e sim de críticos que tornar o simples processo de aprender Ruby ainda mais edificador e agradável.
Nos proximos Artigos abordaremos as características Tecnicas da Linguagens
Fontes:
www.rubyonbr.org
www.akitaonrails.com
www.ruby-lang.org
simplesideias.com.br
Linguagem de Programação! Conhecendo para melhor Escolher!

Linguagem de Programacao
Meu nome e Isaac Guerra, sou programador a vários anos e sempre tenho me deparado com as mesmas dúvidas sobre linguagens de programação!! E o que sempre me incomoda é tentar saber, qual é a melhor? Talvez você também se sinta pressionado a sempre estar mudando de linguagem para acompanhar o mercado ou para integrar uma equipe diferente, mais no fim o sempre se pergunta qual é a melhor linguagem pra você.
Talvez seja melhor definirmos quais sao pontos importantes para uma linguagem ser boa, ou, o que realmente é importante para uma boa linguagem de programação.
Para entendermos bem sobre requisitos de linguagem seria interessante voltar-mos e vermos um pouco da história das linguagem, para levantarmos onde e quando o que usamos hoje se tornou padrão.
No começo quando criaram os primeiros computadores a valvulas, eles processavam alguns programas simples, e esses programas eram escritos diretamente em suas memórias e só continham 0s e 1s, isso mesmo não se escreviam programas, e sim binarios que seria processados diretamente nos processadores. Isso com certeza era muito ruim, pois se alterassem qualquer bit, o resultado dava errado, sem falar no tempo que se levava para se escrever um programa. Aqui ja notamos que teria que haver um meio termo entre a linguagem binária, que o computador entende, e a linguagem humana que nos entendemos, e esse meio termo é que nos chamamos de linguagem de programação, e desde então estamos tentando encontrar a lingagem ideal para ser transformarmos pensamentos em bits.
Neste momento o que tinhamos para apoiar o programador eram alguns microcódigo internos no processador (RISC, CISC), que realizavam rotinas mais complexas diminuindo assim a extensão do programa, bem mais chamar microcódigo é muito complicado, é quase como escrever binários, entao criaram os primeiros programas de apoio que serviam para montar as chamadas de microcódigos, os chamados montadores(Assembly), acredite os montadores eram revolucionários e ajudaram em muito as coisas.
Ainda que ja tivéssemos os montadores o processo de escrever um programa era muito complexo, pois tudo era feito pelo programador, tipo, se vc quisesse esvrever algo na memória RAM tinha que ir na memória achar um espaço vago, e depois escrever, ou seja, tinha que gerenciar todo o Hardware, isso era muito complexo e um programa ficava quase que 99% de codigo para gerencia Hardware e 1% com o foco fim ou seja o programa.
Neste momento vieram a linguagem de Primeira Geração que tinham como objetivo essas facilidades de genciamento de memória, outros periféricos. Escrever um programa com a obrigação de cuidar do hardware ficou mais facil, mais ai veio um complicante, a multiprogramação, ou seja varios programas rodando no mesmo hardware, bem neste momento nao era mais suficiente pois alem de gerenciar o hardware tinha que conciliar o acesso ao hardware com outros programas.
Foi quando criou-se uma camada de software que tem por objetivo gerenciar e assumir a responsabilidade de controlar o acesso ao Hardware, o Sistema Operacional(Linux, Unix, BSD, etc). Neste momento a programação ficou bem mais simples, pois essa camada apoia o Programador, onde, quando ele precisa de um espaço na memoria RAM basta pedir ao S.O. e ele realiza toda a complexa tarefaz de falar com o Hardware, e assim é com todos outros perifericos(Video, Impressora, Rede, etc) ai ficou fácil bem mais fácil, onde escrever um programa e quase que totalmente focar no objetivo fim, ou seja as funcionalidades do programa.
Até neste momento o ato de programar era pura e simplismente criar procedimentos que seriam executados pelo processador, sendo assim todos os programas nada mais eram que um monte de procedimentos, e as linguagens de programação davam condições de se escrever esses procedimentos, uma das facilidades era dar nomes aos procedimentos para depois poder chamalo pelo nome, isso é legal, outra coisa que as linguagem fazim bem era, poder nomear endereços de memória e depois chama-las pelo nome.
Foi quando um dia alguem pensou que poderia organizar melhor os procedimentos, bem a ideia nao mudou e sim mudou a organização das coisas, ainda tinhamos procedimentos nomeados, e areas de memoria nomeadas, entao criaram o objeto, um objeto nao e um procedimento a ser processado, nem tao pouco uma area de memoria a ser acessada, e sim um estrutura organizacional que juntaria em si procedimentos e memória. Por fim um programa conteria muitos objetos e os objetos conteriam os procedimentos e as variaveis, e um se comunicaria com outros por meio de menssagens. Bem parecido com o mundo real, Nasceu ai a Programação Orientação a Objetos. Muito mais complicado, mais no fundo a mesma coisa. Bem mais neste mesmo período os programadores estavam preocupados com outro problema e nao deram muita bola para a POO.
O mundo assistia a primeira onda de informatização, ja tinhamos computadores capazes de processar grandes volumes de dados e aplicações multiprocessadas, com multiusuarios, etc. E o problema era guardar grande volumes de dados de maneiras persistente, foi quando nasceu os primeios programas destinados a gerencia de dados persistentes, os SGBDs. Com isso programar ficou ainda mais facil pois ja nao nao tinhamos que se preocupar com codigos de maquina, ja nao era necessário se preocupar com acesso a hardware, agora nao era mais necessário se preocupar com guarda e busca de dados persistentes. E assim o mundo ficou por mais de uma decada, sem muitas novidades.
Nesse meio tempo nasceu várias alternativas, criaram-se impérios em Software, porém no mundo da programaçao nada de muito novo acontecia, era tudo procedimetnos nomeados, e areas de memória nomeadas, guadando dados em SGBDs onde quase tudo era feito para rodar sobre um S.O(ruindows). O problema de deixar o S.O. cuidar do acesso ao hardware e que se o S.O for ruim a aplicaçao que funciona sobre ele também será ruim, outro problema é que se a aplicaçao faz chamada as funóes do S.O ele fica altamente dependente dele, e isso foi foi o que motivou a próxima mudança no mundo do Software.
Um empresa gigante na área de Hardware(SUN) queria que as aplicaçoes rodassem em qualquer hardware ou S.O, foi quando nasceu uma nova plataforma com esse Objetivo(JAVA), essa plataforma era composta por alguns modulos, um a camada de abstraçao entre a Plaicaçao e o Sistema Operacional(VM), um interpretador RunTime, Um gerenciador de Memória(GC), Um compilador e uma Linguagem para ele(JAVA) e por fim uma biblioteca cheia de funçoes prontas(JDK). Bem para melhor funcionamento dessa estrutura ele buscaram um paradigma de programaçao que apoiasse essa filosofia, e acharam o Orientaçao a Objetos, que ja existia porém nao era muito usada.
Agora sim Programar ficou mais simples ainda, ja nao precisavamos nos preocupar com codigo de maquina, nem acesso ao hardware, nem persistencia de dados, agora uma aplicaçao poderia ser rodada em qualquer Hardware ou S.O, tinhamos também um Avanço na gerencia de memória com o “Garbage Colector” diminuindo a preocupaçao com o uso da memória RAM, tinhamos uma infinidade de codigo pronto disponívem no “Development Kit”, e o que restou para o desenvolvedor era apenas digitar poucos códigos, ai o mundo ser tornou muito chato para o progamador.
Neste mundo certinho, cinza, rapidamente germinou a cultura de transformar o ato de programar em um processo de simples engenharia, quadrado, pobre e sem brilho, foi quando mudou-se o foco do programa para o projeto, e criaram-se várias formas de escrever projetos de software(UML, etc) e por fim a documentaçao ficou rapidamente varias grandesas mariores que o proprio software, e o programador se tornou apenas um mero digitador sem grande importancia, as linguagem de programaçao(JAVA. etc) apoiaram os engenheiro e massacravam os programadores com seus, tipos e interfaces, tornado um programa um amontoado de regras que inibiam a criatividade do programador.
Bem chegamos nos dias atuais, e podemos pensar em alguns pontos que sao importantes par uma linguagem de programação.
Memória: Gerencia de memória não é tão importante estar sob responsabilidade do programador, pois hoje temos o Sistema Operaciona gerenciando o Hadware, e o Garbage Colector que gerencia o uso da propria memória. Sendo assim ao criar um variavel nao e tao importante dizer que tipo ela será, a linguagem pode fazer isso dinamicamente, sem problemas.
Hadware: É interessante que a linguagem tenha uuma infriestrutura que possibilite a execuçao em qualquer hardware, usando ou nao uma estrutura de Maquina Virtual.
Procedimentos: É notorio que o Paradigma de Orientaçao a Objetos e melhor que o Procedural, onde os procedimentos pertencem a um objeto. Porém, é interessante essa estrutura não seja tao rigida ao ponto de dificultar a programaçao, é bom que se possa criar metodos coletivos, individuais, staticos e também que se possa em tempo de execuçao criar métodos para suprir alguma necessidade desconhecida, é legal também a possibilidade de criar metods nao nomeados e dinamicos para suprir algo como programaçao dinamica.
Persistencia de Dados: Bem o Paradigma de Orientaçao a Objetos é muito bom na gerencia de procedimentos, porém não apoia em nada em persistencia de dados, e a integraçao com os antigos SGBDs e pessimo. Seria muito interessante que a Linguagem de programaçao possuíssem em sua infraestrutura a capacidade de Persistencia de dados, transparente e eficiente, que mantesse o acesso a dados totalmente na forma de objetos com uma boa infraestrutura de compartilhamento desses objetos(Algo como uma Gemstone Samlltalk).
Bibliotecas: Uma boa linguagem deve ter uma boa Biblioteca Objetos fundamentais para a funçoes mais massantes prontas porem é importante que esses Objetos sejam facilmente alterados e melhorados.
Criatividade: Por fim uma boa linguagem de programação apoia o programador em sua tarefa, pois a linguagem nada mais que que uma ferramenta para ser usada, a linguagem tem que ser simples, poderosa, deve apoia a criatividade do programador, deve ajuda-lo a encontrar possiveis falhas.
Bem na verdade exstem hoje algumas linguagem que suprem bem esses requisitos, cito smalltalk, ruby, Phyton, etc.
No fim temos que ter uma visao do que seria interessante para o futuro, mais isso veremos em um outro artigo.