quarta-feira, 10 de setembro de 2008

10 razões por que usar Java

Sou analista e programador há cerca de 10 anos. Neste período trabalhei com várias linguagens, inclusive com Java. Este post é o conteúdo de uma palestra com o mesmo título, 10 razões porque usar Java. Não é meu intuito discutir linguagens de programação, compará-las ou persuadir o leitor a utilizar Java. Java não é a melhor linguagem de programação já inventada pois isto não existe. Há apenas razões pela qual utilizar uma linguagem de programação ou outra para resolver um determinado problema computacional.

Vamos as razões:

1 - Java é gratuíto
Java depende de uma JVM, que é gratuíta. O programador depende de um compilador e do JDK, que também é gratuíto. Programadores costumam utilizar IDEs, como o Delphi ou o o Netbeans. Para Java, apesar de haverem IDEs pagas, as duas maiores IDEs do mercado (Eclipse e NetBeans) também são gratuítas. Há vários frameworks e ferramentas para a implementação de sistemas em Java, e os mesmos também costumam ser gratuítos. A documentação é gratuíta. Servidores são gratuítos. Drivers de Banco de Dados são gratuítos.

2 - Java é padronizada
A orientação a objetos do Java ajuda a diminuir a barreira entre um diagrama UML e o código Java e permite, inclusive, a geração de códigos a partir do modelo UML. Sei que muitos programadores estão acostumados a trabalhar com programas de 20.000 linhas de código. Há linguagens que não permitem a modularização. Só é muito complicado desenvolver em equipes quando temos apenas um código-fonte de 20.000 linhas. A orientação a objetos começa a ser justificada quando temos equipes de desenvolvimento. A integração com ferramentas UML permitem também manter a documentação do sistema atualizada em relação a implementação.
O mesmo em relação a própria organização do código. Os pacotes Java são diretórios e uma classe estará escrita em um arquivo com o mesmo nome. Isto facilita trabalhar em equipes e desenvolver sistemas maiores. Além de obrigar a trabalhar com Orientação a Objetos, Java possui padrões de código que são como convenções: Classes em maiúsculo, métodos e atributos em minúsculo e uma letra maiúscula substitui um espaço em branco. Assim, se uma classe tem um atributo nome o acesso a este atributo normalmente é feito pelo método getNome().

3 - Java é interoperável
A empresa utiliza Windows mas pretende migrar para Linux. O Sistema era desktop mas será migrado para a web. A equipe de vendas irá utilizar Palmtops. O que fazer? Java. Java é interoperável, ou seja, funcionar em várias arquiteturas distintas, sistemas operacionais distintos e trabalha com paradigmas de programação distintos como desktop e web. Na web Java pode ser utilizado no servidor (JSP e Servlets) ou no cliente (Applets). Apesar de haver diferenças para a implementação (J2EE, J2SE e J2ME), a linguagem é a mesma e o conceito é o mesmo.
Indo além, Java permite também uma facilidade para internacionalização com a utilização nativa de arquivos Properties e definição automática de valores financeiros, numéricos, de data e texto. Além disto, a utilização de Unicode pode garantir a visualização de textos em vários alfabetos distintos.

4 - Java possui uma API satisfatória
A API Java traz implementada várias coisas como socket, criptografia, listas, filas, acesso a arquivos e compactadores. Também há uma API para Imagem 2D, Imagem 3D, música (MP3, Wav e Midi). É muito provável que um programador antigo em Java não conheça toda a API e nem é esta a questão. Como a API é padronizada basta ler a documentação e utilizar as classes que a linguagem já traz prontas. De toda a API Java, acho que minha paixão é a classe String. Sim, eu era programador C...
Não bastando isto, a API do Java é facilmente extensível por vários outros componentes e frameworks que complementam a API tornando o trabalho do analista muito mais simples.

5 - Java possui frameworks, padrões de projeto e Componentes
A engenharia de software vem propondo soluções para minimizar o trabalho do analista já há um tempo. Padrões de projetos, frameworks e componentes são exemplos destas propostas. Há vários exemplos de como implementar padrões de projetos em Java e vários padrões de projeto que foram propostos pensando nesta linguagem. Frameworks Java facilitam a implementação de sistemas complexos e componentes fazem com que o programador Java possa compartilhar seu conhecimento com toda a comunidade Java. Alguns exemplos:
  • Jakarta Struts
  • JasperReports
  • Hibernate
  • Jakarta Velocity
  • JSF
  • GWT
  • Jakarta POI
  • Log4J
  • JSTL
6 - Java é documentada
A documentação da linguagem, chamada Javadoc, está disponível gratuitamente. E possui um padrão de organização estruturada como documento HTML. Os desenvolvedores de frameworks e componentes costumam utilizar este padrão de documentação para documentar seus códigos. Isto facilita em muito tanto o trabalho em equipe quanto a reutilização de código de terceiros em outras implementações. Além disto, junto com o compilador Java vem um aplicativo para geração de JavaDoc do código que você acabou de implementar.

7 - Java permite sistemas distribuídos
Com a utilização de redes de computadores em empresas, sistemas distribuídos se tornam a cada dia mais realidade. Java permite a utilização de programação em redes possuindo implementações em sua API nativa para sockets, RMI, CORBA e Webservices. No caso especíifico de CORBA, junto com o compilador Java vem um aplicativo que gera a partir da IDL toda a estrutura de classes para uma aplicação CORBA.

8 - Java integra com Bancos de dados
Eu sei que várias linguagens conectam-se com bancos de dados, porém a interface JDBC faz com que a comunicação com bancos de dados em Java funcionem de maneira homogênea. Além disto, há atualmente implementações de drivers de banco de dados para Java para a maioria dos bancos comerciais. Inclusive ODBC. Inclusive Access. Inclusive bancos de dados feitos em Java e que não dependem de servidores. A API JDBC permite a migração de um sistema de um banco de dados para outro a partir da alteração de sua conexão. Isto facilita a passagem de uma aplicação do ambiente de desenvolvimento e testes para o ambiente de produção.

9 - Java é multi-thread
A multi-programação em Java é nativa. Toda a API Java baseia-se em comunicação por eventos e o controle de Threads em Java é simples de ser implementado e bastante eficiente. Toda classe Java possui métodos para implementação de semáforos e na API há especificações para implementar métodos que não permitam acesso concorrente.

10 - Java é moderna
A linguagem Java integra vários conceitos modernos, como por exemplo o Ant, Maven, XML, Orientação a Aspectos, Agentes móveis, Testes de Software e integração com repositórios. Java se tornou uma das linguagens mais utilizadas no mundo. Exemplos em livros são feitos em Java. Padrões de projetos são apresentados em Java. Componentes e exemplos de frameworks são feitos em Java. Devido as razões acima apresentadas, muitas empresas utilizam Java. O resultado disto é que há várias oportunidades de emprego nesta linguagem.

Para os que gostam de comparar linguagens de programação e tentam explicar qual a melhor linguagem de programação, fica a pergunta: Podemos dizer que o martelo é a melhor ferramenta de um marceneiro?

terça-feira, 9 de setembro de 2008

A minha menina - Nova versão do 64 Studio

"Ela é minha menina
E eu sou o menino dela"


Há algum tempo que distribuições de software, principalmente de Linux, possuem um número e também um nome. Desta vez, a versão 2.1 do 64 Studio foi lançada com o nome "A minha menina" em homenagem a canção do músico brasileiro Jorge Ben (Jor). Não, não é a tradução disto para o inglês, é exatamente isto: A minha menina.

O 64 Studio é uma distribuição de Linux voltada para áudio e Multimídia. Baseada no Debian 4.0 (também chamado "Etch") possui em suas configurações Kernel RT e várias aplicações para multimídia. O Debian é uma distribuição de Linux muito utilizada em servidores devido a sua estabilidade. Ao contrário de outras distro, o Debian costuma lançar novas versões apenas de 2 anos em 2 anos pois todos os pacotes de uma versão são auditados pela comunidade de desenvolvimento.


Com o objetivo de corrigir alguns erros e atualizar versõe de softwares, "A minha menina" veio substituir a versão "Eletric", também chamada de 2.0, lançada em Julho de 2007.

Como brasileiro, nada melhor do que saber que uma distribuição de Linux veio buscar em nossas terras a inspiração para seu nome. Agora, fica a dúvida de como ficaria a pronúncia de "A minha menina" pelos vários utilizadores desta distribuição em outros países.

A canção "A minha menina" do Jorge Ben (na época não tinha o Jor) foi regravada pelos Mutantes e também pela banda inglesa The Bees. Para ouvir a canção e ver a letra, clique aqui. A versão dos Mutantes também se encontra online neste endereço.
Fontes:

segunda-feira, 8 de setembro de 2008

Diminuindo Latência - Parte I - Memórias

Atualmente os processadores de computadores tem velocidades grandes. Porém há no mercado processadores com o mesmo clock e com preços diferentes e gente que jura que o mais caro é melhor. A justificativa é uma tal de L2 maior. Como hardware não é minha área, neste post tentarei explicar o que é este tal L2 e que diferença ele fará no desempenho final do computador.

Um conceito inicial: barramento

No computador, os componentes são conectados por meio de um barramento. No inglês, Bus. O barramento é o caminho que os dados utilizam para "passear" entre os diversos componentes de um computador. Como os dados do teclado vão parar no processador? Pelo barramento. Assim como é por meio do barramento que eles vão do processador para sua placa de vídeo. No computador há níveis distintos de barramentos. Uma analogia simples é comparar os barramentos às nossas estradas. Há barramentos com várias vias cuja velocidade máxima permitida é de 500Km/h e barramentos como estradas de terra aonde você corre o risco de encontrar uma vaca dormindo no meio do seu caminho. Continuando...



Entendendo o processador

Processador. Quando falam em processador eu penso em um processador de alimentos, como um multiprocessador da Arno. O processador é uma máquina que só sabe processar. Só faz isto. A velocidade de seu processador irá influenciar no quão rápido os alimentos serão "picados". Um processador dual core é como um liquidificador com 2 hélices. Em princípio irá processar muito mais rapidamente. Porém, o tamanho do copo do processador também influi na velocidade final do preparo de seu almoço.


O copo do liquidificador: Memória Cache L1

O processador posui uma memória interna que guarda o que ele está processando. É como o copo do liquidificador. Quanto maior o copo, mais ele processa de uma vez. É uma memória super rápida que cabe muito pouco. O copo do liquidificador é chamada L1. A memória cache L1 fica dentro do processador e o tempo de latência para o acesso a estes dados é de 2 ciclos do processador. O barramento de acesso do processador ao cache L1 é de 512 bits. É como uma estrada aonde a velocidade máxima permitida é de 512 Km/h. A cache L1 é dividida em 2 partes: dados e instruções. A parte de instruções varia muito de um processador para outro tendo, por exemplo, o Pentium 4 aproximadamente 150KB de instruções. Já a parte de dados, que também varia um pouco pode ter 8KB ou 16KB. O tamanho do copo do liquidificador? Vamos deixar por 166KB.

O balcão da pia: Memória Cache L2

Em computadores mais antigos, como o Processadores Soquete 7, a memória cache L2 ficava na placa mãe e não no processador. Mantendo nossa metáfora, é como se a memória cache L2 fosse o balcão da pia aonde o nosso processador de alimentos se encontra. Quando uma receita precisa de vários processamentos o nosso cozinheiro (no caso, o sistema operacional) vai até a despensa e traz um monte de coisa e coloca no balcão. Se o balcão for pequeno, ele trará poucas coisas e então nosso processador muito rápido ficará esperando que o cozinheiro traga novas coisas para serem processadas. A L2 é muito maior que a L1 porém o acesso a seus dados possui uma latência de 7 ciclos de máquina. A largura do barramento para o acesso a L2 pode ser algo na ordem de 256 bits. Lá estamos circulando por uma rodovia rápida, 256 Km/h, mas muito mais lenta que a L1. Há processadores que possuem L2 na ordem de 2MB.
A despensa: Memória RAM

A memória RAM é a despensa da cozinha. Muito maior que o balcão da pia L2. Externa ao processador ela costuma ser maior e normalmente pode até ser aumentada. O tamanho da memória RAM, em máquinas 32 bits, pode chegar a 3,2GB. Há um tempo de latência para buscar dados na despensa. O barramento de acesso do processador a memória é chamado de Front Side Bus. A largura média dele é de 64bits. Temos uma despensa grandona mas que precisa ser acessada por uma estradinha que a velocidade máxima é de 64Km/h. Como atualmente os periféricos podem acessar diretamente a memória (DMA), talvez você ainda encontre uma vaca dormindo nesta estrada. E lá se vão vários ciclos de máquina para trazer até o balcão da pia o que precisa ser cozinhado para o jantar. Memória também possui freqüência. Freqüência é a velocidade de acesso aos dados da memória. Maior freqüência, dados acessados mais rápidos.

O mercado do outro lado da cidade: HD

Heis que nem tudo está na memória. As vezes é necessário ir buscar em um mercado do outro lado da cidade. Na nossa história, o HD. Atualmente é comum encontrar discos rígidos de 200GB. Há modelos no mercado que ultrapassam 1TB. Muito grande. Mas longe. A via de acesso ao HD é o chamado Internal Bus. Aqui há uma diferença entre HDs IDE, IDE 2, SATA, SATA 2 ou SCUSCI. Cada um tem uma largura e uma velocidade de barramento diferente. Mas aqui não é apenas o barramento que importa, tem a velocidade do carrinho dentro do mercado. A velocidade de leitura e gravação de HDs varia. HDs de Notebook costumam girar a uma velocidade máxima de 5400 RPMs enquanto a maioria dos desktops gira em torno de 7200 RPMs. Há HDs SCUSCI que giram acima de 10.000 RPMs. A largura de barramento, ou seja, a estrada para o mercado, pode não importar tanto se o carrinho de compras andar devagar. Você vai demorar para encher o carrinho e não vai adiantar muita coisa correr depois.

O mercado de outra cidade: DVD / CD

Sem entrar em detalhes de velocidades, o DVD nesta história é o mercado da cidade vizinha. Estrada pedagiada.

Juntando tudo

Se o intuito é configurar um computador para trabalhar com baixa latência, será preciso se preocupar com:
  • HD - velocidade, conexão e, dependendo do propósito, tamanho;
  • Memória RAM - tamanho, velocidade de barramento, freqüência;
  • Processador - Velocidade, tamanho de L1 e L2 e velocidade interna de barramento;
  • Placa mãe - velocidade dos barramentos de memória e disco além, é claro da compatibilidade com a memória, processador e HD escolhidos.
Fontes:
  • http://pt.wikipedia.org/wiki/Cache
  • http://pt.wikipedia.org/wiki/Front_side_bus
  • http://www.intel.com

Imagens:
  • http://comprar.todaoferta.uol.com.br/
  • http://www.eletrodomesticosforum.com
  • http://pt.wikipedia.org/wiki/Front_side_bus
  • http://br.geocities.com/friolandianet/genial.html

Ciência da Computação ou Sistema de informação?

Muita gente pergunta a diferença entre cursos da área de computação, em especial Sistemas de Informação e Ciência da computação. Sem o intuito de comparar os cursos apresento esta contextualização em um bate-bola:

  • Ciência da computação: Ciência Exata
  • Sistemas de Informação: Ciência Social Aplicada

  • Ciência da computação: Computador como atividade fim
  • Sistemas de Informação: Computador como atividade meio

  • Ciência da Computação: SO, IA, TC, ES, SD
  • Sistemas de Informação: ERP, CRM, SCM, SAD, SIG

  • Ciência da computação: C++
  • Sistemas de Informação: UML
  • Ciência da computação: Álgebra relacional
  • Sistemas de Informação: DER

  • Ciência da computação: Teoria
  • Sistemas de Informação: Prática

  • Ciência da computação: Matemática
  • Sistemas de Informação: Administração

  • Ciência da computação: Próximo ao Hardware
  • Sistemas de Informação: Próximo ao Usuário

  • Ciência da Computação: Práticas Unix
  • Sistemas de Informação: Práticas CMMI