Category Archives: Uncategorized

O programador invisível

Quais os instrumentos que você usa para perceber o mercado de software? Revistas? Conferências como QCon, DevDay, etc? Blogs como este e tantos outros? Já parou para pensar que possívelmente a maior parte do mercado de software lhe seja completamente invisível? Vou te contar uma coisa: ele é, gera um valor muito maior do que imaginamos, está na nossa frente e simplesmente não conseguimos enxergá-lo. Hoje vou falar sobre os programadores invisíveis: aqueles que geram muito mais valor que todos nós juntos e não se preocupam em aparecer.

Conversando com diversos profissionais da área tenho a impressão de que estes apenas sabem da existência das plataformas que aparecem em revistas, sites e conferências: Java, .net, PHP, JavaScript, Python, Ruby. Me pergunto: e quanto ao pessoal do COBOL, que é responsável por processar 70% de todas as transações mundiais? Cadê o povo do Fortran, ainda em amplo uso em aplicações científicas, HPC e tantos outros usos? E estas aplicações desktop que vêmos em padarias, bares, restaurantes, hospitais, lojas? E todo o código em execução hoje feito em VBA em diversas empresas? Isto sem mencionar outras plataformas como Delphi (ainda em desenvolvimento e cada vez mais interessante), Visual Basic (pré .net (depois leia este texto)), Microsoft Access (quase VBA), Perl (hoje quase não se fala mais sobre, mas ainda executa muita coisa importantíssima por aí), Power Builder (última versão saiu em 2011), Clipper, FoxPro (morto pela Microsoft em 2007), PL/SQL, R (tão usado para cálculos estatísticos) e tantas outras plataformas?

Caminhando pelas ruas olho para os prédios e fico pensando na imensa quantidade de código gerado diáriamente que não é baseado em Java, .net, JavaScript, Python ou qualquer outra plataforma falada atualmente. São programadores que não veremos em revistas ou conferências: são pessoas que saem para trabalhar, geram valor real, movimentam a economia e vão tranquilamente para casa. Será que por serem ignorados (e muitas vezes se fazerem ignorados) não estamos perdendo uma oportunidade monstruosa de aprendermos lições valiosíssimas sobre arquitetura, boas práticas de desenvolvimento e toda a experiência acumulada na manutenção de sistemas legados?

Me sinto um privilegiado pelo fato da minha primeira experiência profissional de sucesso adulta ter sido em uma empresa de engenharia e não em uma fábrica de software. Foi neste ambiente que pela primeira vez pude constatar a riqueza de linguagens e plataformas: Delphi, Fortran, Perl, C, COBOL, Lisp (AutoLisp), VB, VBA eram minhas ferramentas do dia a dia. Java e .net representavam o moderno e mesmo assim ainda se mostravam inferiores no quesito produtividade. Era fato: com o ferramental antigo nós simplesmente entregávamos o que precisava ser feito e ainda por cima era código que podíamos manter e mantinhamos por anos.

(a coisa melhorou bastante: não estou dizendo que Java ou .net não sejam produtivos)

Ao passar para fábricas de software e mencionar algo como Delphi ou VB não raro ouço frases de arrogância extrema como “graças a Deus nunca tive de mexer com isto”. Perguntando a razão por este “graças a Deus” normalmente a resposta vêm sob a forma de um “são coisa ultrapassada”, “não prestam”, “são lixo”, “ninguém usa” (!!!) etc. Logo em seguida as mesmas pessoas vão almoçar e tem seu pagamento registrado em algum sistema feito em Delphi (ou VB, PowerBuilder), vão ao banco tirar seu saldo em um caixa eletrônico que acessa um sistema COBOL e logo em seguida pesquisam algo na Internet em um site baseado em CGI. Isto sem mencionar os que criticam PHP e passam o dia inteiro no Facebook. Claro: há também aquele código em VBA embutido em uma planilha Excel usado para calcular seu salário no final do mês. Uma vingança bastante irônica.

Ignorando gigantes

andre-the-giant4Recentemente ouvi um podcast fascinante sobre a plataforma System i da IBM, que foi lançada em 1988. O choque veio quando o entrevistado (Steve Will) falou a respeito do conjunto de instruções usado pela plataforma: o TIMI (Technology Independent Machine Interface). Todo software que executa no System i (ou quase todo) é compilado para este conjunto de instruções. Mudou a arquitetura dos processadores (32 para 64 bits ou CISC pra RISC, por exemplo) não precisa recompilar nada: o TIMI, que é um formato intermediário simplesmente se adapta para a nova plataforma. Lembra alguma coisa? No .net se chama CIL, no Java se chama bytecode. Surgem respectivamente em 1996 e 2002. TIMI provávelmente existia bem antes disto. (alguém aqui lembra do P-Code do Visual Basic?)

O interessante é que a plataforma System i é extremamente popular, usada por diversos estabelecimentos nos EUA e restante do mundo e difícilmente ouvimos algo a respeito (eu a conheci neste podcast).

Outro exemplo interessante: sabia que o CODASYL de 1957, responsável por definir o COBOL, previa a execução de código gerado dinâmicamente? E que o System/360, lançado em 1964 pela IBM já tinha recursos como máquinas virtuais, OCR e tantos outros que julgamos modernos hoje?

IsaacNewtonE ei: isto ocorre até nos dias atuais. Já leu meus dois posts (aqui e aqui) recentes sobre arquietura baseada em micro serviços nos quais mostro que estes na realidade são o SOA que já conhecíamos há anos mas cujo hype diminuiu nos últimos tempos?

De onde você acha que surgem idéias geniais como o bytecode Java, as máquinas virtuais da VM Ware e todos estes SGBDs que vêmos por aí? De onde você acha que o Oracle saiu (Daqui)? Fato é que esta nossa fixação no novo e ignorar do passado nos torna o “anti-newton”: não vêmos além por ignorar os gigantes sobre os quais devíamos escalar os ombros.

Na minha opinião devíamos babar menos em cima do que nos vendem como novo e de vez em quando olhar para o prédio ou sala ao lado: muito provávelmente há um profissional entregando, gerando valor com tecnologias que vieram antes (e que funcionam perfeitamente bem) e aplicando soluções a problemas que ainda lutamos para entender (e nos vendem como novidade).

Baixar a cabeça e andar com estes gigantes discretos é sempre uma boa idéia. Estes não se preocupam em aparecer em conferências e blogs (normalmente não vão): enquanto discutimos sobre qual a melhor plataforma (Java ou .net, Node.js, Grails, Ruby) ou nos preocupamos em criar sistemas escaláveis que serão usados por no máximo uns 300 usuários/dia estes caras estão indo pra casa tranquilos por terem terminado seu trabalho.

Momento histórico para “Vire o Jogo com Spring Framework”

thumb_beta_spring_largeUm post rápido (e o menor da história de /dev/Kico) só pra contar um fato histórico.

Hoje, dia 9/12/2013, “Vire o Jogo com Spring Framework” superou os mil primeiros exemplares vendidos. :)

Massa né? Rumo aos próximos 1000, assim como o próximo livro, que ainda não sei o nome mas é sobre Groovy/Grails e que já estou escrevendo há algum tempo. :)

(sim, pela Casa do Código também)

Muito obrigado a todos vocês que acreditaram em mim. :)

Melhorando a segurança de scripts na JVM: o script eterno – vídeo

scriptEtenroNo vídeo anterior mostrei como é possível tornar sistemas Java fácilmente extensíveis embarcando uma linguagem de script – no caso Groovy, é claro – em seu projeto. Agora começo a mostrar como evitar boa parte dos perigos que esta técnica trás para seus sitemas.

Inicialmente este vídeo era parte de um outro bem maior: no entanto, para facilitar a sua vida e a minha, estou dividindo este vídeo em partes expondo estas ameaças uma a uma, a começar pela que chamo de “script eterno”, ou seja, aquele código não necessáriamente malicioso cuja execução jamais termina. Exponho aqui ao menos as diretrizes que você deve seguir para evitar o problema.

Este vídeo fala bastante sobre a API Concurrent do Java. Caso ainda não tenha domínio sobre esta, recomendo a leitura dos links a seguir:

 Referências

Programação concorrente e Threads (da excelente apostila aberta da Caelum): http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/

Sobre os pools de thread em Java: http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html

Código fonte do vídeo

Link para o repositório no GitHub: https://github.com/loboweissmann/groovy-grails-na-pratica
Busque pelo projeto contido no diretório “embarcando_groovy_segurança” – Nota: há material incompleto do próximo vídeo lá dentro (shame on me).

E o vídeo?

Ah: aqui o link http://www.youtube.com/watch?v=rjN3S0JiMzc

Dando cara de Grails ao Clojure

Algum tempo atrás postei aqui no blog alguns questionamentos relacionados à orientação a objetos. Não ao paradigma em si, mas sim ao fato de raríssimas vezes questionarmos o seu uso. Então resolvi sair do teórico e ir pra prática. Como resultado, iniciei o desenovlvimento de um framework web que fosse baseado em uma linguagem que não fosse essencialmente orientada a objetos mas que ao mesmo tempo me possibilitasse programar de uma forma mais funcional e, talvez, até mesmo procedural (este era o desafio).

Então criei o projeto itexto Projekt, que é um framework que estou desenvolvendo (ainda está muito tosco, já vou avisando) para ser a base do novo sistema de issues da itexto. Ele é baseado nos conceitos que mais amo no Grails: convenções sobre configuração, facilidade do desenvolvimento, não precisar reiniciar o servidor em desenvolvimento, etc. Ainda há muito chão pela frente: já iniciei o desenvolvimento de uma interface de linha de comando mas o controlador, ao menos o grosso dele, já encontra-se implementado.

Clique neste link para ver o vídeo em que demonstro este meu trabalho. http://www.youtube.com/watch?v=RRGB1j1_PDY&feature=youtu.be

Já postei parte do código fonte no GitHub também. Vocês podem vê-lo neste link.

EDIT: já dei um nome melhor pra criatura: Daft

Publicado meu artigo sobre Redis na Java Magazine 114!

Clique na imagem para ver os detalhes da edição

Acaba de ser publicado um artigo que escrevi para a Java Magazine sobre o Redis. Para quem não conhece, este é um banco de dados NoSQL baseado no modelo chave-valor. Atualmente é uma das minhas ferramentas favoritas pelo fato de oferecer excelente performance, facilidade de uso e gerenciamento e, também, não menos importante, seu poderoso suporte a estruturas de dados como listas, hashes, conjuntos e, óbviamente, strings. :)

Neste artigo apresento o banco de dados para desenvolvedores Java. Assim vocês poderão aprender como integrar suas aplicações a este banco de dados usando o seu driver padrão para Java, o Redis. Acredito ser uma apresentação interessante para aqueles que estão neste momento buscando alternativas ao modelo relacional. Só para constar, eu também estou desenvolvendo um curso sobre o assunto para a DevMedia que pode ser acessado neste link.

Espero que gostem do artigo. Nos próximos meses deve sair um para a SQL Magazine no qual analiso com profundidade o que vêm a ser NoSQL e como esta família de ferramentas nos auxilia a resolver diversos problemas com os quais topamos no nosso dia-a-dia mas que, devido ao nosso vício no modelo relacional, acabamos por resolver de maneiras muito mais complexas do que o necessário.

Ah! E você pode ter uma prévia do artigo neste link! ;)

Evento: Papo de Empreendedor – Belo Horizonte

É sempre ótimo termos eventos aonde podemos conhecer novas pessoas que compartilhem os mesmos objetivos que você. E sabe o que é mais legal? Vai ocorrer algo assim em Belo Horizonte no dia 26 de janeiro (2013). Se chama “Papo de Empreendedor”, aonde todos aqueles que planejam iniciar novos negócios ou se interessam pelo assunto podem se encontrar, em um ambiente bastante descontraído e trocar idéias.

Acho ótimo poder participar e ajudar um evento como este, e gostaria de aproveitar este post para agradecer ao meu amigo André Pereira por esta iniciativa! Precisamos de mais gente como ele em Belo Horizonte. Abaixo vocês podem ver o banner do evento e logo em seguida o link que os direcionará para o formulário de cadastro para que confirmem sua presença. Espero por vocês lá!

Para confirmar sua presença, clique aqui.