Archive for December, 2005

Joel on Software: The Perils of JavaSchools

Thursday, December 29th, 2005

Ótimo texto do Joel (duh! Como sempre…).

Wait a minute, I want to modify that statement. I’m not claiming, in this particular article, that there’s anything wrong with Java as an implementation language. There are lots of things wrong with it but those will have to wait for a different article.

Instead what I’d like to claim is that Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers. It may be a fine language to work in, but that’s not today’s topic. I would even go so far as to say that the fact that Java is not hard enough is a feature, not a bug, but it does have this one problem.

If I may be so brash, it has been my humble experience that there are two things traditionally taught in universities as a part of a computer science curriculum which many people just never really fully comprehend: pointers and recursion.


Now, I freely admit that programming with pointers is not needed in 90% of the code written today, and in fact, it’s downright dangerous in production code. OK. That’s fine. And functional programming is just not used much in practice. Agreed.

But it’s still important for some of the most exciting programming jobs. Without pointers, for example, you’d never be able to work on the Linux kernel. You can’t understand a line of code in Linux, or, indeed, any operating system, without really understanding pointers.

Without understanding functional programming, you can’t invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable. The very fact that Google invented MapReduce, and Microsoft didn’t, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world’s largest massively parallel supercomputer. I don’t think Microsoft completely understands just how far behind they are on that wave.

Singularity==UNIX?

Wednesday, December 28th, 2005

Há algum tempo falamos aqui sobre o Singularity, um SO de pesquisa da Microsoft. James Stoup fez uns comentários bem interessantes em seu blog, tem que ligar um pouco o filtro de exageiro (noto uma ceta raiva do Windows Vista no ar…), mas merece uma lida para quem se interessou.

“What would a software platform look like if it was designed from scratch with the primary goal of dependability?” (question found in the MS Singularity research report)Why, it would look like . . . UNIX.

O maior problema do artigo, na minha opnião, é que o Singularity não foi anunciado como um produto, ams apenas como pesquisa, logo se for feito em Sing#, Spec# ou Batatinha#, por exemplo, tanto faz. Um grande mérito da MSFT é em colocar numa pesquisa real alguns conceitos novos para sistemas operacionais.

Isso me lembra o livro que estou lendo. Distributed Systems: Principles and Paradigms, de Andrew S. Tanenbaum Maarten van Steen. Antes de mais nada: sim, eu leio Tanenbaum e gostei muito dos dois livros que li (Redes e Operating Systems: Design & Implementation -que aliás terá uma terceira ediçao em breve).

Eu comecei a ler o livro do mesmo autor chamado Distributed Operating Systems mas não consegui terminar por falta de tempo (está na fila ainda). A parte relacionada é que no Distributed Systems, o autor menciona que este livro era para ser, na verdade, uma nova edição do Distributed Operating System, mas que se generalizou apra sistemas distribuídos de diversos tipos.

O que eu quero dizer com isso? Muitos recursos hoje providos por servidores de aplicação e ambientes de runtime modernos são tão básicos que deveriam estar integrados ao Sistema Operacional. Naming (JNDI, por exemplo), RPC (RMI, CORBA, XML-RPC…), memória gerenciada automaticamente, transações… tudo isso é muito básico. É natural que a arquitetura de hoje evolua e que cada vez mais os Servidores de Aplicação passem essas responsabilidades aos Sistemas Operacionais. Nós não podemos ter aplicações distribuídas e complexas modelo 2006 com sistemas operacionais modelo 1970.

Não, Singularity não é a primeira iniciativa, não é a única e provavelmente não é sequer a mais importante das iniciativas do setor em termos de tecnologia e inovação nos últimos dez anos, porém  é uma iniciativa por uma empresa enorme e que vive de um império baseado em Sistemas Operacionais.

Java EE Matou A Orientação a Objetos?

Monday, December 26th, 2005

Post interessante doDave Churchville. Ele comenta sobre como uma aplicação Java EE padrão hoje tem tudo, menos objetos inteligentes.

Apesar de discordar do excesso de culpa que ele coloca nas ferramentas e acreditar que o problema neste caso é causa de programadores sem instrução (por que são preguiçosos ou porque acreditam em tudo que lêem no JEE Core Patterns), achei o post bem oportuno.

Koders.com: Plugin para Eclipse!

Monday, December 26th, 2005

Há algum tempo eu uso o Koders.com quando preciso de exemplos sobre o uso de alguma biblioteca ou mesmo para ler implementações de algorítmos em diversas linguagens.

Para quem não sabe, o site é um mecanismo de busca que vasculha código de diversos projetos open-source atrás do que você procura. Bem legal.

Procurando algo sobre uns parâmetros bizarros do log4j hoje fui lá e vi algo que não sabia: o Koders tem plugin para Eclipse (e VS.Net) que permite ao usuário procurar código sem sair da IDE. Para quem vive atrás de “exemplos” para tudo pode ser bem legal.

Koders.com plugin

Ho-ho-ho: Artigo Noel

Friday, December 23rd, 2005

Como presente de Natal passei um artigo que já tinha alguns meses no fundo do meu HD para o Wiki. Como está meio antiguinho, me avisem de qualquer problema e se divirtam com Groovy: Linguagem de Script para Java

Bruce Eckel: Visão estreita!

Tuesday, December 20th, 2005

Sobre o artigo de Bruce Eckel 9que é um cara que eu gosto abstante aliás no Artima falando um monte de bobeira sobre Ruby e (o livro) Beyond Java, vou deixar para vocês o comentário do cadafalso: Visão estreita!

Introdução a Ruby (sem Rails) para Programadores Java

Monday, December 19th, 2005

Artiguinho bacana no developerworks com uma introdução da linguagem Ruby para programadores java, vale uma lida.

Detalhe: o artigo está com data de 20/12/2005(!)

James Gosling Fala Sobre Linguagens Especialistas: FUD?

Sunday, December 18th, 2005

James Gosling, pai do Java para a comunidade, fala sobre linguagens de script e linguagens especialistas em sua última entrada. Segundo Gosling, estas linguagens são bem legais, mas limitadas demais.

Na minha opinião, ele perde totalmente o ponto. Se a questão era levantar um debate sobre tipagem estática vs. dinâmica, o que ficou foi FUD em cima das mini linguagens.

Não dá pora saber ao certo o que ele tenta argumentar. Primeiro linguagens dinâmicas/de script não seriam rápidas o suficiente… bem Java já foi taxada de lenta tantas e tantas vezes que é engraçadoi ver o baluarte da tecnologia falando isso de outra.

Depois um ponto seria que as linguagens se prendem demais a um tópico específico, como geração de PDF ou manipulação de texto. Aqui o texto fica estranho… é óbvio que as linguagens são especializadas, este é o ponto inicial!

Um ponto que eu deixo claro na minha palestra sobre novas tendências em Java é que tecnologia nenhuma vai substituir Java completamente em curto/médio prazos. Java is everywhere, pro mal ou pro bem, e o que surgem são especialistas.

Hoje temos especialistas para web, para manipulaçãod e texto, manipulação de dados, processamento de XML… em breve teremos especialistas por seguimento de negócios.

Eu esperava ansioso pelo que o Gosling ia falar da onda “Beyond Java”. Deve ser estranho ser um visionário por 10 anos e acordar como um dinossauro, mas como Obie falou: eu esperava mais.

O problema é que mesmo que Gosling não tenha atacado mais fundo as novas tendências (talvez ele realmente não queira fazê-lo, ou talvez não queira se expôr, sei lá), um post por James Gsoling é sempre um post pelo Pai do Java, e isso causa reações. Um exemplo típico é esta entrada por Simon Brocklehurst.

Apesar de não conehcer Obie Fernandez eu conheço um pouco do seu trabalho, acompanho seu blog e conheço pessoas que o conhecem. Tentar desmerecer um argumento por que a pessoa “não tem credenciais” ao invés de atacar o argumento em si é o tipo de coisa deprimente que me faz ficar fora do mundo acadêmico, onde isso é muito comum. A respsota do Obie está aqui.

Ataques pessoais à parte (isso é tão comum que não merece tanta atenção), pensar fora da caixa é difícil para muitas pessoas. Como falei nesta entrada e em outros lugares, Ruby não vai substituir Java. Rails pode influenciar o desenvolvimento web a um ponto inacreditável (além de roubar uma fatia de mercado grande nos próximos meses) e definitivamente Java não é mais a única linguagem da JVM. Qual vai ser o papel da linguagem Java, da linguagem Ruby, das outras linguagens e novas tendências é o que venho estudando nos últimos meses, mas ainda é muito cedo para fazer previsões concretas.

Quando se fala em substituir Java, as pessoas acham que tudo que se faz em Java irá ser feito em Ruby, e isso é o ponto onde a cegueira do “Java R0X” atrapalha. Nenhuma outra linguagem conseguiu ser tão everywhere e dificilmente outra conseguirá. Não é o objetivo. Não existe linguagem tamanho único e Java é a prova disso.

Os trabalhos recentes em VMs portabilidade tendem para um ambiente cada vez mais neutro em relação a linguagem, você pega a ferramenta mais indicada para o trabalho.

Provavelmente a infra-estrutura (pense em Hibernate, Spring, Driver JDBC…) de um sistema vai ser feita numa linguagem tipada e que use o compilador para achar erros, como Java ou C#.

Para as regras de negócio em creio que DSLs, linguagens específicas para domínios, vão deixar seus programadores realmente se preocuparem muito menos com bits e mais com processos de negócio.

Para o resto as linguagens mais simples podem servir como gluecode utilizando os componentes criados pela Camada de Negócios ou pela infra-estrutura e fazendo todo o trabalho que hoje é dos XMLs e configuração espalhada por todo canto. Se for para apostar num cenário, neste momento aposto neste.

Freelas e Freedom

Saturday, December 17th, 2005

Há algum tempo atrás, eu escrevi o Guia de Guerra para Freelancers, um artiguinho contendo um pouco das minhas experiências em quase 10 anos prestando serviços para outras empresas.

Hoje eu acabo de ler o blog do Felipe Gaúcho, do Cejug, sobre sua opção de ser consultor (i.e. freelancer) permanentemente.

Se você gostou do Guia de Guerra…, os comentários neste post falam mais sobre o tema, bem interessantes.

Spring vs. Anemic Domain Model

Friday, December 16th, 2005

Outro dia falei aqui sobre o uso de AspectJ e DI para implementar ActiveRecord no Spring 2.0. Jeff Xiong faal sobre um ponto do post que eu não comentei: isso não evita Anemic Domain Models.

Como mencionei algumas vezes, é uma questão de gosto fazer

dao.save(obj)

Ou

obj.save()

E o Jeff deixa claro o ponto: Para evitar um domínio anêmico, o que você tem que fazer é implementar e dividir responsabilidades, não implementar ActiveRecord.