Nov 12 2009

Go, a linguagem do Google…


Pessoalmente não gosto de novas linguagens de programação. Não gosto de ter muitas opções. Por mim existiriam dias linguagens uma para quem gosta de blocos begin/end e outra pra quem gosta de { }.

package main
import "fmt"

func main() {
  fmt.Printf("Hello, 世界\n")
}

No entanto estou longe de ditar regras no mundo da computação. Ontem o Google, empresa que pretende dominar o mundo, apresentou uma nova linguagem. Go. Assisti à apresentação de uma hora do Go no youtube na noite passada e deixarei aqui minhas primeiras impressões.

Go é uma linguagem experimental que quebra alguns paradigmas. Portanto não planeje a migração do seu sistema para qualquer momento em um futuro próximo. Go é uma linguagem que utiliza-se de uma forte tipagem, então nada de somar laranjas com limões para obter uma variável limonada.

Consegue-se sentir forte influencia de Pascal na sintese da linguagem. Há tempos não atribuia valores a uma variável utilizando :=

Quando digo que Go quebra alguns conceitos é porque ela não é bem uma linguagem orientada à objetos. Go utiliza-se de tipos assim como a estrutura type do pascal. A diferença é que esses tipos podem conter métodos. Em uma analogia simplória à orientação à objetos um tipo seria uma classe.

//tipo em Pascal
type pessoa = record
     nome  : string[40];
     email : string;
end;
type pessoa struct {
   nome string,
   email string }
func (p *pessoa) getNome() string { return p.nome }
//onde
p.getNome();
ou
qualquerObjectoDoTipoPessoa.getNome() é válido

Além disso não há herança, associações entre objetos são feitas através de interfaces.

type minhaInterface interface {
     get() int;
     set(i int);
}

Assim como Java Go utiliza-se de Garbage Collection, não sendo responsabilidade do programador limpar restos de objetos alocados em memória. Go é uma linguagem concorrente, feita para suportar a execução de diversos blocos de código simultaneamente. Suas “Thread” são chamadas de gorotines.

Caso tenha algo a somar nesse post sinta-se livre para comentar.

Comments (3)

Tags: ,

Relacionados



Oct 15 2009

ArrayList em Java e C#


Esse post não tem a mínima intenção de fazer uma análise aprofundada das duas plataformas. Pode ser considerado um brincadeira com ambas as linguagens. Não quero chegar a nenhuma conclusão com este post. A idéia surgiu já que estou empolgado depois que comecei a ler o livro Head First C#.

As regras são as seguintes: Criar uma classe pessoa (Person) tendo apenas o nome como atributo e uma classe pessoas (People) que contendo um ArrayList que agregue pessoas. A classe People deve conter um método para listar todas as pessoas.

Para melhor visualização do problema utilizei uma avançada ferramenta de UML. Veja foto abaixo:

Diagrama UML

Classe Person

//Classe Person em Java
public class Person {

	String name;

	public Person(String name){
		this.setName(name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
//classe Person em C#
namespace ConsoleApplication1 {
    class Person {
        private string name;

        public Person(string name) {
            this.setName(name);
        }

        public string getName() {
            return this.name;
        }

        public void setName(string name){
            this.name = name;
        }

    }
}

Classe People

//Classe People em Java
import java.util.ArrayList;
import java.util.List;

public class People {

	List people = new ArrayList();

	public void addPerson(String name){
		Person p = new Person(name);
		people.add(p);
	}

	public void listPeople(){
		for(Person p : people){
			System.out.println(p.getName());
		}
	}
}
//Classe People em C#
using System;
using System.Collections;

namespace ConsoleApplication1 {
    class People {
        ArrayList people = new ArrayList();

        public void addPerson(string name){
            Person p = new Person(name);
            people.Add(p);
        }

        public void listPeople() {
            foreach (Person p in people) {
                Console.WriteLine(p.getName());
            }
        }
    }
}

Classe Main

//Classe Main em Java
public class Main {

	public static void main(String[] args) {
		People p = new People();
		p.addPerson("Rodrigo");
        p.addPerson("José");
        p.addPerson("João");
        p.listPeople();
	}

}
//Classe Main em C#
namespace ConsoleApplication1 {
    class MainClass {
        static void Main(string[] args) {
            People p = new People();
            p.addPerson("Rodrigo");
            p.addPerson("José");
            p.addPerson("João");
            p.listPeople();
            Console.ReadKey();
        }
    }
}

Garanto-lhes que o resultado foi o mesmo em ambas as plataformas. Algo parecido com a imagem abaixo:

Resultado Final

Resultado Final

Comments (1)

Tags: , ,

Relacionados



Sep 01 2009

A arte e a ciência…


Embora tenha há tempos tenha me posicionado a favor da regulamentação das profissões ligadas à informática ocorrida na semana passada, não havia comentado este assunto que deu bastante o que falar em blogs profissionais e acadêmicos.

Não acredito que o ensino superior seja o único caminho para formação bons analistas ou desenvolvedores. Porém certamente essa é a melhor maneira de agregar conhecimento e técnica à carreira.

Existe um estalo ou toque mágico que só nos é perceptível na academia. Esse estalo não vem no momento em que passamos no vestibular ou ao fazer a matrícula na instituição. O que eu chamo de toque mágico é quando lá pelo final do segundo ano de curso começa-se a ver as coisas com outros olhos. De uma hora para outra tudo se encaixa e faz sentido. É preciso ser muito perceptivo para ver isso. Mas passa-se a perceber que cada disciplina do curso está interrelaciona por mais tênue que seja essa ligação.

Infelizmente não são todos que tem essa percepção. Mas esse é o momento em que entende-se como o processo funciona. É o momento em que todos os conceitos passam a fazer sentido.

Embora tenha essa visão romântica da academia descrita acima, não acredito que análise ou desenvolvimento de sistemas seja arte e sim ciência. Muito compara-se desenvolvedores com artistas. Confesso que tenho meus momentos de inspiração enquanto programo, mas não acredito que a inspiração venha de uma veia artística.

Arte é criação. Quando pinta-se um quadro a inspiração utiliza-se das pinceladas do artista para chegar à tela. Uma vez pronta essa tela não é revisada, não existem bugs nem implementações de novas funcionalidades. Imaginem como o artista ficaria ofendido quando o comprador da obra solicitasse que uma arvore fosse retirada ou inserida em uma tela de paisagem.

Desenvolvimento de Sistemas é ciência. Existem técnica, métodos e processos. Estudam-se as melhores práticas de programação e desenvolvimento. O software possui um ciclo de vida que o mantém ativo por muitos anos. E é necessário revisitar o código eliminando bugs e criando novas funcionalidades com uma freqüência bastante grande.

Acredito que autodidatas possam atingir um nível de conhecimento bastante grande, porém dificilmente alcançarão o toque mágico que os fará entender o conceito por trás das coisas.

Comments (2)

Tags: , ,

Relacionados



Jun 18 2009

O mais novo cirurgião…


Desde o dia de ontem não é mais necessário possuir um diploma para exercer a profissão de jornalista. A decisão foi do Supremo Tribunal Federal (STF) à pedido do Sindicato das Empresas de Rádio e Televisão no Estado de São Paulo (Sertesp). Meu primeiro comentário no twitter foi o seguinte:

twitter

twitter

Eu sou contra a decisão do STF. Acredito que omissão ou valorização de informação em notícias e matérias podem causar influência sobre os leitores. Isso é

uma responsabilidade bastante grande. Eu não sou jornalista. Escrevo esse blog por hobbie. Tenho domínio em assuntos relacionados à tecnologia, minha área de formação. Não me sentiria confortável escrevendo sobre política, economia ou futebol. Acredito que produziria textos muito mais elaborados se tivesse cursado ao menos um curso básico de técnicas de redação.

Aceitaria escrever para um veículo de comunicação desde que sob a supervisão de um editor diplomado. A responsabilidade de escrever é muito grande e não pode estar nas costas de alguém que não foi preparado para isso.

Em parte eu tomo as dores dos jornalistas nesse retrocesso por que minha profissão não é regulamentada e qualquer “zé ruela” se diz programador, analista de sistemas, DBA ou Arquiteto de Software. Acredito sim que pessoas possam aprender uma profissão sem passarem por uma universidade. Mas também acredito que esse é o caminho das pedras.

Freqüento diariamente fóruns de discussão na web. Reparo que muitas vezes as dúvidas enviadas não estão relacionadas à linguagens ou técnicas de programação e sim à falta de conceito desses usuários de fóruns. Acabam criando o código sem saber o motivo das linhas copiadas. Geram código mal feito, com linhas desnecessárias e de difícil manutenção pelo simples fato de não terem certeza do que estão fazendo.

Vou contar um caso que acredito já ter relatado por aqui. Na empresa em que trabalhava no Brasil éramos uma equipe de cinco ou seis desenvolvedores

responsáveis por manter a retaguarda de um sistema comercial. Os membros da equipe que não possuiam formação universitária estavam cursando suas últimas

disciplinas ou desenvolvendo o tão temido TCC.

Chegou o dia de a equipe crescer e um novo integrante passou por uma avaliação prática e uma entrevista com um dos sócios da empresa. A avaliação prática foi muito boa. O guri saíu-se muito bem no teste. E mandava muito bem mesmo. Programava muito, fazia coisas bastante legais. Porém havia aprendido tudo o que sabia seguindo tutoriais e fóruns na web. Não demorou muito para que o sistema e o resto da equipe tivessem seus primeiros conflitos com o “calouro”. A falta de instrução acadêmica não permitia que ele falasse a mesma língua do resto da equipe. Embora rotinas avançadas fossem desenvolvidos por ele na prática, não entendia o conceito por trás dos códigos. A Experiência durou pouco mais de três meses. Não houve adaptação do novo membro à equipe.

Eu sou favorável ao criação dos CRI’s, Conselhos Regionais de Informática, e a regulamentação das profissões relacionadas à área. Em caso o candidato à

membro do CRI não tenha formação técnica ou acadêmica, porém experiência de anos de mercado que lhe coloque em nível de igualdade com portadores de diploma é só fazer um Poscomp para provar sua aptidão.

Sempre bom resaltar que desenvolvimento de sistemas é um responsabilidade. Um erro na lógica e seus clientes pode estar deixando de pagar impostos ou ainda de ganhar dinheiro. Quem será responsável pelos sistemas desenvolvidos em access pelo sobrinho do dono da loja?

Você iria em um dentista que não tenha concluído a faculdade? Construiria um prédio sem um Engenheiro Civil?

Deixando claro que acredito em autodidática quero ressaltar que os anos que passei desenvolvendo sistemas financeiros ou contábeis não me tornam analista financeiro ou contador. Escrever esse blog não me torna jornalista. E copiar códigos da web não te tornam profissional de informática.

Comments (2)

Tags: , , ,

Relacionados



Jun 03 2009

Se programadores construíssem aviões…


Comments (1)

Tags:

Relacionados



Feb 12 2009

Conflitos Conceituais…


Meu primeiro emprego, na verdade um estágio, foi no ano de 2001. Trabalhei em uma empresa de grande expressão nacional na vertical escolhida para desenvolvimento de suas soluções. Minha principal atribuição era criar scripts em uma ferramenta Rational para automatização de testes de sistema. Na época conhecia apenas algoritmos estruturados e alguma coisa de Pascal.

A partir daí tomei gosto pela coisa e decidi que focaria toda a minha carreira ao desenvolvimento de software. No início da carreira eu era um jovem com muito potencial e muita vontade de aprender. Fazia muitas coisas por instinto, utilizava-me de técnicas de programação em que nem sempre entendia o “porque”, utilizava-me de pouca literatura, porém, depois de algumas horas em frente ao código solucionava meus problemas.

Com certeza o curso de Sistemas de Informação abriu meus horizontes. Embora este curso não seja voltado apenas à atividades de desenvolvimento me tornou uma bom programador. Vale salientar que o curso de Sistemas de Informação não visa formar desenvolvedores, mas sim Analistas de Sistemas e Analistas de Negócios.

Com o passar do tempo acabei me tornando um bom programador passei do Pascal para o Delphi que na época oferecia maiores oportunidades de emprego na região do Vale do Itajaí. Resolvi aprender algo de Web tendo uma rápida passagem pelo ASP e chegando ao PHP. Passei anos programando em Java para os trabalhos acadêmicos e até por diversão o que culminou com o desenvolvimento do meu TCC em Java. Tive ainda experiência com PL/SQL. Brinquei com C# e hoje facinado pela web estudo um pouco de Ruby on Rails.

A minha visão de como as coisas concretizam-se foi o que mais mudou do período do estágio em 2001 até o tempo presente. Descobri que mais importante do que decorar nomes de objetos, métodos e funções é entender o conceito por trás da lógica.

Em uma das empresas em que trabalhei a equipe da qual fazia parte era composta de duas pessoas com gradução completa e outras três pessoas que, assim como eu, buscavam sua formação. Nós falavamos a mesma língua tinhamos um bom entrosamento. O ápice desse entrosamento podia ser comprovado pelo fato de toda a equipe desenvolver códigos muito semelhentes.

Quando houve a necessidade de aumentar a equipe a empresa promoveu entrevistas e testes práticos. O novo integrante da equipe foi escolhido entre quase uma dúzia de candidatos. A pessoa tinha experiência anterior em nossa concorrente direta, era cheio de idéias e um bom desenvolvedor. Porém não atendia à faculdade. Aprendeu com cursos e internet o que me lembrava meu início de carreira quando era uma pessoa desapegada à conceitos.

Com o tempo foram surgindo conflitos com o novo integrante que não acreditava em conceitos e sim em linhas de código. Infelizmente aquela equipe não era a mais adequada pra ele. E sua participação em nossa equipe durou poucos meses, embora fosse muito bom em “escrever código”.

Em desenvolvimento de sistemas temos que ter claro em nossas cabeças que quando tudo parece estar em entropia a solução não está em “remendar código” e sim rever as bases estruturais do sistema e os conceitos aplicados à ele.

Hoje me sinto muito seguro em meu código não me preocupo em decorar nomes de funções já que o mais importante é saber o que utilizar para uma situação específica. Utilizo-me da internet como aliada para pesquisar documentação e sempre procuro pensar no que vou desenvolver, desenhar a solução nem que seja em uma folha de ofício antes de escrever código.

* reprodução da minha matéria do projeto eleva

Comments (0)

Tags: ,

Relacionados



Feb 04 2009

brincando com API do Twitter…


screenshot do meu aplicativozinho para twitter

screenshot do meu aplicativozinho para twitter

Passei algum tempo na noite de ontem brincando com a API do Twitter. Como grande parte dos sites de web 2.0 o twitter tem API aberta para que desenvolvam-se mash-ups. Existem diversas API’s para uma infinidade de linguagens. A minha opção foi por PHP.

Baixei uma API php que chama métodos de API oficial do twitter. Encontrei-a no gitHub. O link está aqui. A documentação oficial do Twitter é encontrada em um wiki específico.

O código possui duas partes fundamentais. A primeira é instanciar a classe Twitter. Uma vez tendo o objeto twitter é possível fazer requisições que serão devolvidas no formato desejado. A segunda é trabalhar com esses dados. No meu caso como escolhi XML utilizei uma classe DOM para tratar esses dados. Um exemplo de código pode ser visto abaixo:

 //pega arquivo contendo a API
 require "twitter.lib.php";

 //informa-se username e password
 $username = "rkammer";
 $password = "#######";

  //instancia o classe do twitter
  $twitter = new Twitter($username, $password);

  //chama método que busca informações de amigos no formato escolhido através de parâmetro
  $data = $twitter->getFriends("xml");

  //instancia classe para tratamento de arquivos XML
  $doc = new DOMDocument() or die("erro i");

  //passa XML para o obejto
  $doc->loadXML($data) or die("erro ii");

  //seleciona o elemento root do XML
  $users = $doc->getElementsByTagName("user");
  foreach($users as $user){

    //busca dados dentro do elemento name
    $name  = $user->getElementsByTagName("name")->item(0)->nodeValue;

    //busca dados dentro do elemento location
    $location = $user->getElementsByTagName("location")->item(0)->nodeValue;

    //busca dados dentro do elemento location
    $description = $user->getElementsByTagName("description")->item(0)->nodeValue;

    echo $name." - ".$location." - ".$description;

  }

Quem quiser ver o resultado da minha brincadeira pode ver meus amigos do twitter aqui ou ainda buscar seus próprios amigos utilizando esse link

Comments (1)

Tags: , ,

Relacionados



Jan 22 2009

Meu primeiro widget…


Desde que cheguei à California, quase seis meses atrás, uma das questões que mais complicam a minha cabeça é que aqui não utiliza-se o sistema métrico. Eu não tenho mínima noção de libras, milhas, pés ou onças…

Decidido à solucionar meu problema, na semana passada, criei uma paginazinha utilizando Javascript para fazer as conversões mais comuns. Hospedei essa página na Locaweb, mas estava decidido à compartilhar isso, já que conheço muitas pessoas com a mesma necessidade de conversão que eu.

Hoje dando uma olhada na API de Gadgets do Google resolvi transformar minha pequena aplicação em um gadget ou widget como gosto de chama-los. Widgets são aqueles pequenos pedaços de software que podem ser embarcados em outras páginas ou aplicações.

Bastou-me criar um arquivo XML com definições da minha aplicação e publicar na Biblioteca do Google para meu widget estar pronto e funcionando… Quem quiser brincar com ele está ai em baixo, também é possível disponibilizar no seu site, blog e até mesmo no orkut. Pode ser editado por esse link.

Comments (1)

Tags: , ,

Relacionados



Dec 11 2008

Google OS, vem ai??


Suposta tela do GoogleOS publicada em 2005pelo Gizmodo... Até agora nada...

Suposta tela do GoogleOS publicada em 2005 pelo Gizmodo... Até agora nada...

A Net Applications é uma empresa que monitora o tráfego da internet e guarda informações de máquinas de usuários. Em seu último relatório descobriu que trinta e três por cento dos acessos vindos da sede do Google, domínio google.com, utilizavam-se de um sistema operacional desconhecido.

Bastou o informação acima ser divulgada para que a especulação iniciasse. Muitos andam dando como certo o desenvolvimento de um sistema operacional pelo pessoal de Mountain View.

Sabe-se que internamente o Google utiliza-se de uma versão modificada do Ubuntu, o Goobuntu. Acredito que esses acessos vieram desse sistema. Embora antes do lancamento do Chrome tenha apostado contra o desenvolvimento de um browser pelo Google, ainda desacredito no criação de um sistema operacional pela empresa.

O mercado de OS é dominado quase que totalmente pela Microsoft e não tem por que o Google entrar essa briga. Alguns porém argumentam que o Google pode estar tramando um Sistema Operacional Totalmente Web.

Se é um sistema totalmente web, não é um sistema operacional! Um sistema operacional nada mais é do que um conjunto de softwares (drivers), utilizado para gerenciar componentes de hardware. Esse é o conceito acadêmico de Sistema Operacional. Nada tem a ver com a interface gráfica ou área de trabalho. Um desktop web não é, nem nunca será, um Sistema operacional.

Anos atrás eu acreditava que a popularização do Linux no mundo dos desktops chegaria assim que tivéssemos um Linux de marca. Isso não aconteceu com a chegada do Oracle Unbreakable linux, sistema baseado no Red Hat. Como o Google é a empresa do momento, talvez essa popularização chegasse.

Não sei o que acontece por trás dos portões do Google, mas aposto contra o desenvolvimento de um Sistema Operacional.

Comments (149)

Tags: , , ,

Relacionados



Nov 04 2008

Em busca de simplicidade…


Houve um tempo em que eu gostava de coisas complexas. Adora escrever várias linhas de código. Inclusive pensava que se um dia tivesse um blog que faria o meu próprio engine. Aos poucos comecei a admirar a simplicidade e interfaces agradáveis. Me rendi ao blogger e mais adiante ao wordpress.

Passei os anos da faculdade programando em Java. Inclusive fiz o desenvolvi o meu TCC em Java utilizando Swing com o Eclipse seco, sem nenhuma ferramenta que me auxiliasse ao menos na construção das interfaces. Acreditava que Java era o nirvana das plataformas e que resolvia tudo de forma intuitiva.

Diz a lenda que um bom programador deve apreender ao menos um linguagem por ano. Nos últimos anos estive ocupado entre fazendas de kiwi na Nova Zelândia, emprego no Brasil e a extrema vontade de viver aqui na California. Com meus objetivos encaminhados achei que chegou a hora de buscar novos conhecimentos técnicos.

As linguagem que domino hoje são: Delphi, PHP, Java e um pouco de PL/SQL. Estava disposto a aprender algo novo. A primeira coisa que me veio à cabeça foi C#. Realmente C# é muito legal e prazeiroso. Além de extremamente bem documentado. Inclusive o Visual Studio possui versões gratuitas disponíveis para Download.

Mas eu queria algo diferente e bastante novo. Pensei em Python/Django e acabei com Ruby on Rails. Há algumas semanas dedico parte do meu tempo livre a seguir tutoriais e assistir vídeo aulas no YouTube. Passei do Hello World em poucos minutos, mas ainda caminho na nova linguagem. No Rails, principal framework utilizado para rodar a linguagem Ruby, é onde fica grande parte da magia. Muita coisa está pronta no rails. Utiliza-se de convenção ao invés de configuração ou seja coloque os arquivos no lugar certo e esqueça XML’s ou INI’s para validar paths.

Quer mais um exemplo de como abandonei a complexidade e fui em busca da simpliscidade? Ao procurar uma ferramenta para programar Ruby logo pensei no Eclipse e em seus milhares de plugins, a maioria de terceiros. Isso é muito complexo e muitas vezes os plugins são incompatíveis entre si. Queria uma solução que fosse um pacote. E optei pelo Netbeans para Ruby. Sempre fui defensor do Eclipse, mas não me sinto nem um pouco mal por isso.

O fato é: Sabem aqueles vídeos de criação de blogs em quinze minutos com Rails que pipocam no Youtube. É realmente verdade! Ruby é muito fácil e intuitivo. Me fez ir de encontro a simplicidade.

Comments (1)

Tags: , , , ,

Relacionados