Todos os post de mbelo

O mercado de TI e a idade

Recomendo a leitura do artigo “Você está velho demais para TI?”, da InformationWeek Brasil. A matéria está repleta de reflexões sobre o mercado de trabalho para pessoas de idade mais avançada. Não sei o quanto influenciou o fato de eu mesmo estar chegando perto da idade limítrofe da faixa etária alvo da matéria, mas confesso que me assustei com o que o mercado considerada ‘velho’.

Veja alguns recortes de depoimentos que constam da reportagem:

“Eu não podia oferecer uma das áreas que muitas – senão todas – as empresas queriam”, disse Meyers-Jouan.

“Eu preferia ter continuado trabalhando por pelo menos mais cinco anos se não fossem as constantes rejeições, que eram relacionadas tanto à minha idade quanto às minhas habilidades”, disse Meyers-Jouan.

“Eu tinha gravatas mais velhas do que as pessoas que me entrevistavam”, relembra Bodnar.

“Em alguns casos, o edaísmo (preconceito de idade) é justificável – existem muitos profissionais que não se mantém atualizados”

Da reportagem, extraí os seguintes pontos: (i) manter-se sempre atualizado – idade não pode ser desculpa para a defasagem tecnológica, (ii) preparar-se para uma atuação como consultor autônomo – aqui, o aprimoramento de habilidades de relacionamento e negociação não podem ficar de lado.

Boa leitura!

Ao Mestre, com Carinho

horacio_soares_neto Foi com grande pesar que soube, através de um amigo, da passagem do Prof.Horácio Soares Neto neste ano de 2012.
Ele foi meu professor na década de 90 no curso de Tecnólogo da PUC. Tive o privilégio de cursar uma disciplina de metodologia de desenvolvimento de software com ele. Autor do livro “Análise Vital de Sistemas”, obra que teve grande influência na minha formação; por ela, tive transformada a minha visão pré-concebida de análise de sistemas, com a introdução de um elemento transformador no processo: os porquês.

Que nosso Deus, nosso santo Pai, o receba nos céus, pois em Terra ele contribuiu, certamente, ao educar e inspirar centanas de discípulos.

Quando a extensibilidade se torna vilã do paradigma O.O.

O título é bastante provocador, afinal, ao contrário do que ele sugere, o paradigma orientado a objetos propõe justamente oferecer alternativas mais elegantes para a extensão de uma classe.

Li o artigo intitulado Uniform Function Call Syntax (Bright, Walter) e foi uma interessante reflexão sobre as formas que utilizamos para estender as funcionalidades de uma classe já existente. As opções que tipicamente se apresentam:

1. Adicionar a nova funcionalidade diretamente na classe

Essa alternativa só é possível quando o código fonte da classe está disponível para nossa aplicação, o que nem sempre é o caso. Mesmo quando está acessível, nem sempre é conveniente fazê-lo: será que aquela funcionalidade justifica a sobrecarga que impomos à classe, e a provável violação do princípio da responsabilidade única?

2. Herança

Seria a maneira mais adequada, mas esbarra com uma limitação imposta por Java ou outras linguagens de herança simples: como combinar várias extensões? O exemplo do artigo é muito bom. Imagine a classe Integer do Java, e que eu quisesse adicionar a funcionalidade aoQuadrado numa subclasse de Integer. Outro colega necessita do método aoCubo e cria outra subclasse. Sem herança múltipla, como posso utilizar os dois métodos de maneira simples?

Além disso, nem sempre essa é uma opção: há classes que, justamente para evitar a confusão oriunda do descontrole sobre subclasses, colocam-as como ‘final’. Ou seja, estão seladas para herança.

3. Composição e Classe utilitária

As duas são maneiras mais elegantes, no meu ponto de vista, de adicionar a funcionalidade a uma classe existente. Digo isso do ponto de vista do encapsulamento. Sou capaz de adicionar a nova funcionalidade sem afetar a classe alvo. Mas não é chato ter que saber que existe uma classe IntegerUtil, ou, pior ainda, regredir do formato sintático tradicional que se aplica na orientação a objetos para o uso procedural? Não é muito melhor escrever objeto.metodo do que ClasseUtilitaria.fazAlgo(objeto) ?

Foi aí que esbarrei com essa nova modalidade de extensão: os métodos de extensão (Extension Method). Ele não difere do ponto de vista conceitual de uma classe utilitária. O diferencial dele é a forma de uso.

Não seria legal, ao invés de usar:

Integer resultado = IntegerUtil.aoQuadrado( meuInteger );

usar:

Integer resultado = meuInteger.aoQuadrado();

Pois é isso que os métodos de extensão habilitam. O código abaixo seria uma aproximação em C# da classe utilitária:

public static class IntegerUtil {
   public static Integer aoQuadrado(this Integer valor) {
      return valor * valor;
   }
}

O this, no código anterior, faz a mágica. Ainda não consegui relacionar o impacto desse novo recurso com as linguagens dinâmicas, como o Ruby. Alguma opinião?

Referências:

Bright, Walter. Uniform Function Call Syntax. Dr.Dobb’s. 2012.

Extension Method. Wikipedia. 12 October 2012.

Ubuntu com interface convencional

Resolvi escrever esse pequeno artigo apostando que muitos colegas amantes do Linux Ubuntu – como eu – se depararão com o mesmo sentimento de aversão que tive à nova interface Unity, introduzida na versão 12.4 “Precise Pangolin”.

Eu queria atualizar, afinal da Precise Pangolin é uma versão LTS (com suporte estendido da Canonical), mas não gostei da Unity. Não quero aqui tecer críticas a esse esforço, que me pareceu colossal e bastante sofisticado, mas esbarrei com dois problemas ao usá-la: 1. no meu computador, com um processador Celeron, ficou muito lento; 2. não achei a interface prática para uso profissional.

Por consequência, queria voltar ao gnome.

Aqui descrevo o que fiz, registrando o devido crédito ao blog onde originalmente pesquisei e busquei essas informações, com uma pequena modificação de minha parte:

Instalei os seguintes pacotes:

sudo apt-get install gnome-shell gnome-tweak-tool gconf-editor

Baixei o tema Clearlooks-Phenix 2 for GTK 3.4 and newer em http://gnome-look.org

Repare que baixei a versão para gnome GTK 3.4, pois foi a que foi baixada no processo anterior. Ao extrair o pacote, um arquivo README na pasta docs instrui a extrair o pacote, renomear a pasta para Clearlooks-Phenix e colocá-la na pasta /usr/share/themes/ (você precisará fazer isso como root)

Achar o System Tools >> Preferences >> Advanced Settings. Nela, na opção Theme >> Windows e em Theme >> GTK+ Theme mudar para o tema  recém-instalado.

Executei por linha de comando o gconf-editor

Naveguei até a opção /apps/metacity/general. Na propriedade button-layout, alterei para menu:minimize,maximize,close

Pronto! Tudo eu antes gostava.

Resenha do artigo ‘O perigo silencioso’

Essa é uma primeira resenha que me atrevo a escrever sobre algo que acho intrigante, mas que não é minha “praia” profissional. Porém, mesmo trabalhando com computação, calhou de, em vários projetos, envolver-me com temas ligados a sistemas financeiros: contábeis, orçamentários, tributários e de auditoria. Não que me dê qualquer distinção, mas posso dizer que sou, no mínimo, um interessado “com noções básicas”.

Mas vamos lá: o momento atual do nosso país me intriga; minha percepção é de um governo que gasta com pouco controle. Quando comento com colegas, ninguém concorda com a minha visão. O artigo da Miriam Leitão e de Álvaro Gribel esclarece um pouco sobre como o governo consegue manter essa situação de gastos por tanto tempo: uma verdadeira bomba relógio, um verdadeiro engodo finaceiro que, em algum momento, cobrará seu preço. Temos o exemplo claro do que ocorre em economias como a europeia. Nos julgamos tão diferentes deles para não sofrer da mesma armadilha?

Uma coisa que aprendi em economia é que o perigo que ocorre por debaixo dos panos é sempre o mais nefasto. Vocês entenderão o que quero dizer ao ler o artigo.

Leia aqui o artigo ‘O perigo silencioso’, publicado em O Globo, que inspirou esse post.

Recomendação de “Eclipse and Java for Total Beginners”

Pesquisando material de aula sobre Programação Orientada a Objetos em Java, tive a grata surpresa em encontrar essa série de vídeo-aulas, hospedadas no site SourceForge, portanto disponível para qualquer um que queira assistir.

Digo que tive a grata surpresa pois, ao contrário de muito material de má qualidade que tipicamente encontro, esse material possui uma qualidade fantástica; tanto em qualidade da produção, quanto na do conteúdo exibido propriamente. Gostei tanto que assisti a todas as vídeoaulas e, mesmo trabalhando há mais de 6 anos com Eclipse como IDE, descobri funcionalides surpreendentes desta excelente ferramenta. O conteúdo abordado em Java é moderno e muito bem apresentado.

Por fim, o material é tão bom que recomendo mesmo para quem tem apenas uma compreensão básica de Inglês.

Segue o link: http://eclipsetutorial.sourceforge.net/totalbeginner.html

DART: por que mais uma plataforma?

Li um interessante artigo sobre a linguagem DART e vou compartilhar minhas impressões com vocês. A primeira coisa curiosa sobre o artigo é ele ser classificado como Green Paper. Eu nunca tinha ouvido falar nesse termo; já eram de meu conhecimento os white papers. Aparentemente um “green paper” vem a ser um artigo em forma de proposta; algo para discussão; nada definitivo.

Voltando para o assunto principal, que é essa nova plataforma DART, achei interessante os argumentos que fizeram a Google se dispor a desenvolver essa nova plataforma. Abaixo enumero alguns dos pontos que achei importante.

Por que se chama plataforma?

Porque ela é composta de uma máquina virtual, de uma linguagem de programação e ferramentas para o desenvolvimento.

Para que mais uma linguagem?

Sem dúvida essa é a pergunta fundamental. A motivação da Google baseia-se na percepção da tendência de “engorda” do lado cliente em aplicações WEB. As chamadas aplicações de uma única página (Single Page Application) estão crescendo em importância, principalmente para tirar proveito da grande capacidade de processamento ocioso que a camada cliente (os navegadores) dispõe. Até os navegadores dos celulares atuais dispõe de grande processamento.

Nesse tipo de aplicação de página única, o código de execução de uma aplicação – ou pelo menos toda a parte de um caso de uso específico – é carregado para o lado cliente. As necessidades de dados armazenados no servidor são supridas com invocações assíncronas pela já consagrada tecnologia AJAX. Recursos como banco de dados já estão disponíveis nas versões novas dos navegadores que suportam HTML5 e facilitam uma série de tarefas que antes exigiam a conexão ativa com o servidor. Até mesmo aplicações offline são possíveis nesse ambiente.

Mas por que não JavaScript?

Minha primeira reação ao ler os propósitos de DART foi: “mas já temos JavaScript”. Muitos, imagino, vão pensar inicialmente da mesma maneira. Entretanto, recursos do JavaScript que o torna extremamente flexível e poderoso, quando levados para desenvolvimento em larga escala, acabam expondo fraquezas. A não tipagem e a execução dinâmica de código tornam o código JavaScript difícil para ambientes de trabalho em equipe. Esses recursos tornam inviáveis certos feedbacks que as IDEs contemporâneas e ferramentas de integração contínua oferecem para desenvolvimentos descentralizados. Uma pequena falha de um desenvolvedor pode compromenter a aplicação e tal falha só ser percebida no momento da utilização.

Bem, é isso. Quem quiser, recomendo a leitura desse artigo, escrito por Chris Buckett.

Green Paper do DART

Phising com URLs parecidas

Acabo de ser vítima de um endereço de internet falso, criado com a intenção de se passar pelo autêntico sítio e assim conseguir informações pessoais. Essa tática conhecida como “Phising”.

Obviamente que tentar enganar um internauta assim não deve ter boas intenções para uso desses dados.  Minha intenção era digitar o endereço do Gmail, mas acabei digitando www.gmai.com (falta o L). Resultado: fui direcionado para uma página que imita a identidade visual do Gmail e se faz passar por uma promoção do sítio autêntico. Tive o cuidado de verificar que se tratava de uma farsa pesquisando na internet. Fica o alerta!

Tela do Sítio Falso

Classes Aninhadas

Li esse excelente artigo publicado no blog da Caelum, de autoria de Eric Torti, que trata de classes aninhadas em Java. Embora esse assunto seja extensamente coberto em boas bibliografias sobre a tecnologia, achei esse artigo muito interessante por reforçar a questão do encapsulamento e por usar um exemplo do padrão State que tira proveito de classes aninhadas. Vale a leitura.

http://blog.caelum.com.br/classes-aninhadas-o-que-sao-e-quando-usar/