Educação, disse Einstein, é o que nos resta após termos esquecido tudo o que nos ensinaram na escola. Tendo me formado há mais anos do que eu gostaria de mencionar, posso agora seguramente estimar o que terá sobrado das cadeiras que cursei no Instituto de Informática da UFRGS.
Há muito tempo eu tinha a certeza de que algo faltava no curso e após ler um texto de Richard Feynman sobre a educação no Brasil, pude perceber claramente que era a realidade. Alguns exemplos estão claros na minha memória. Em primeiro lugar, a insistência no modelo OSI e nos detalhes da sintaxe do ASN.1 nas aulas de redes. Em segundo, as aulas de autômatos sem nenhuma menção às expressões regulares (lendo o Mastering Regular Expressions, finalmente compreendi o papel de NFAs e DFAs). Em terceiro, o professor de Sistemas Operacionais que nos propôs escrever um montador antes mesmo de mencionar o Lex e o Yacc (e no ano anterior à cadeira de compiladores). Nem preciso entrar no mérito de cadeiras como "Computador e Sociedade".
Obviamente, o propósito do curso não era ensinar informática. No entanto, algum mérito deve ter tido o curso, porque eu dificilmente o trocaria por outro no estado (não descarto a possibilidade de que seja apenas empáfia acadêmica). E o que restou após quatro anos de matérias e tarefas abstratas e aparentemente sem benefícios práticos foi a habilidade de enfrentar problemas novos e em áreas que não domino. Normalmente, a isso dar-se-ia o nome técnico de picaretagem, mas garanto que os egressos da UFRGS o fazem com muita propriedade e com as devidas referências bibliográficas.
Mesmo assim, acho que o currículo deveria ser reformado radicalmente. É preciso tirar a ilusão de que as matérias têm algum valor prático. Nos meus anos de faculdade, brincava-se sobre a cadeira de Corte e Costura para Processamento de Dados. Ela não serve, porque tem valor prático.
Acho que o Instituto de Informática precisa de cadeiras verdadeiramente abstratas, inúteis e arbitrariamente complicadas. Proponho estudos como Lacumetria Antropométrica (medição de lagos usando partes do corpo humano como unidade). Ou então Filatelia Computacional (estudo de selos com referências à informática). Finalmente, a minha favorita, a Kleroterionologia (estudo dos aparelhos usados pelos gregos antigos em suas eleições). Tenho certeza que a SBC compreenderá!
sábado, 22 de outubro de 2011
terça-feira, 11 de outubro de 2011
Quantum Countdown Sort
O Countdown Sort já foi otimizado e agora entra para o reino quântico!
O módulo Quantum::Superpositions agrega dois operadores ao Perl: all e any. Eles recebem como parâmetro uma lista que é comprimida para um único valor que é a sobreposição de todos os valores da lista original. Então, magicamente, podemos realizar operações e comparações simultâneas sobre todos os valores de uma lista.
Fundamentalmente, o Countdown Sort é simples. Ele percorre uma lista de números positivos, subtraindo 1 de cada valor; cada vez que a subtração resultar em 0, o elemento original correspondente é adicionado à lista ordenada.
Com a sobreposição quântica, podemos simplificar substancialmente o código. Quanto a melhorar o desempenho, teremos que esperar um computador quântico.
E um pequeno teste confirma que a rotina realmente funciona:
O nome do método já garante a seriedade do pesquisador!
O módulo Quantum::Superpositions agrega dois operadores ao Perl: all e any. Eles recebem como parâmetro uma lista que é comprimida para um único valor que é a sobreposição de todos os valores da lista original. Então, magicamente, podemos realizar operações e comparações simultâneas sobre todos os valores de uma lista.
Fundamentalmente, o Countdown Sort é simples. Ele percorre uma lista de números positivos, subtraindo 1 de cada valor; cada vez que a subtração resultar em 0, o elemento original correspondente é adicionado à lista ordenada.
Com a sobreposição quântica, podemos simplificar substancialmente o código. Quanto a melhorar o desempenho, teremos que esperar um computador quântico.
use Quantum::Superpositions;
sub quantum_countdown_sort {
my @unsorted=@_;
my @sorted=();
my $d=0;
while($#sorted<$#unsorted) {
push(@sorted, $d) if any(@unsorted)-$d==0;
$d++;
}
return @sorted;
}
E um pequeno teste confirma que a rotina realmente funciona:
print join ',', quantum_countdown_sort 10,25,2,30,0,1,11;
0,1,2,10,11,25,30
O nome do método já garante a seriedade do pesquisador!
segunda-feira, 3 de outubro de 2011
IIN
Os economistas têm uma infinidade de índices para avaliar as economias, mas eu quero propor um novo. Creio que o melhor medidor do potencial econômico de uma nação seria o Índice da Incompetência Nacional.
Há um bom tempo eu venho elaborando esta idéia; recentemente mudei-me e precisei de vários prestadores de serviços e graças à incompetência generalizada deles, pude completar a idéia para o meu índice.
Em primeiro lugar, há a dimensão da pontualidade. Não é que tenham dificuldade em acertar o horário, é que muitos não conseguem sequer chegar no dia combinado!
Em segundo lugar (e acho que essa é uma das dimensões mais importantes do IIN) está a espetacular dificuldade de comunicação. Eles não são capazes de avisar que vão atrasar-se dois dias. Tampouco são capazes de enumerar as peças que devemos comprar ou as ações que devemos tomar com 48h de antecedência. Tampouco são capazes de compreender frases simples, como "pinte esta parede de azul" ou "não vou estar aqui à tarde".
E a incompetência não está restrita ao aspecto gerencial de suas profissões. Os prestadores de serviços esquecem suas ferramentas (tanto de trazê-las como de levá-las), deixam obras inacabadas (e perigosas, como vazamentos de gás) e danificam tudo que está ao redor do seu ponto focal. A sujeira que deixam para trás é insignificante perto da má qualidade da execução.
Se olharmos aos países vizinhos, veremos que há países com economias menos diversificadas e com menor produção de tecnologia, mas cujos padrões de vida são significativamente melhores. Refiro-me ao Chile, ao Uruguai e à Argentina. A única explicação que tenho a dar é que o IIN deles deve ser muito menor.
Há um bom tempo eu venho elaborando esta idéia; recentemente mudei-me e precisei de vários prestadores de serviços e graças à incompetência generalizada deles, pude completar a idéia para o meu índice.
Em primeiro lugar, há a dimensão da pontualidade. Não é que tenham dificuldade em acertar o horário, é que muitos não conseguem sequer chegar no dia combinado!
Em segundo lugar (e acho que essa é uma das dimensões mais importantes do IIN) está a espetacular dificuldade de comunicação. Eles não são capazes de avisar que vão atrasar-se dois dias. Tampouco são capazes de enumerar as peças que devemos comprar ou as ações que devemos tomar com 48h de antecedência. Tampouco são capazes de compreender frases simples, como "pinte esta parede de azul" ou "não vou estar aqui à tarde".
E a incompetência não está restrita ao aspecto gerencial de suas profissões. Os prestadores de serviços esquecem suas ferramentas (tanto de trazê-las como de levá-las), deixam obras inacabadas (e perigosas, como vazamentos de gás) e danificam tudo que está ao redor do seu ponto focal. A sujeira que deixam para trás é insignificante perto da má qualidade da execução.
Se olharmos aos países vizinhos, veremos que há países com economias menos diversificadas e com menor produção de tecnologia, mas cujos padrões de vida são significativamente melhores. Refiro-me ao Chile, ao Uruguai e à Argentina. A única explicação que tenho a dar é que o IIN deles deve ser muito menor.
sexta-feira, 2 de setembro de 2011
Epidemia
Eu vasculho os logs do meu sistema e encontro ocorrências sempre em grupos de duas ou três. De quando em vez, são quatro ou cinco. Minha primeira conclusão é que as pessoas estão premindo os botões duas vezes, mas os intervalos de tempo são relativativamente grandes entre os registros repetidos (trinta segundos ou dois minutos).
Pode ser uma epidemia de transtorno obsessivo-compulsivo. Aparentemente, o transtorno está relacionado a um QI mais alto e, curiosamente, nosso país tem uma incidência alta. Infelizmente, os argentinos têm mais ainda. Talvez seja sobre esse tipo de coisa que Gödel quebrava a cabeça: ter muito TOC é bom ou ruim? Definitivamente, não consigo decidir.
Além disso, não há nada para fazer. Se meus usuários estivessem abusando do duplo-clique (já vi quem fizesse um quádruplo clique), eu poderia desabilitar o botão depois do primeiro clique. Talvez eu possa adicionar um contador à página: você já fez isso 9 vezes. Mas não quero que fiquem, ademais, paranoicos.
Por enquanto, vou lavar as mãos.
Pode ser uma epidemia de transtorno obsessivo-compulsivo. Aparentemente, o transtorno está relacionado a um QI mais alto e, curiosamente, nosso país tem uma incidência alta. Infelizmente, os argentinos têm mais ainda. Talvez seja sobre esse tipo de coisa que Gödel quebrava a cabeça: ter muito TOC é bom ou ruim? Definitivamente, não consigo decidir.
Além disso, não há nada para fazer. Se meus usuários estivessem abusando do duplo-clique (já vi quem fizesse um quádruplo clique), eu poderia desabilitar o botão depois do primeiro clique. Talvez eu possa adicionar um contador à página: você já fez isso 9 vezes. Mas não quero que fiquem, ademais, paranoicos.
Por enquanto, vou lavar as mãos.
quinta-feira, 25 de agosto de 2011
Métodos frágeis
Uma das práticas mais desastrosas que eu já vi é a de nomear artefatos com os códigos dos casos de uso. A motivação é boa (relacionar os casos de uso ao código que os implementa), mas, como geralmente acontece quando os primeiros princípios são levados adiante por muito tempo antes de se dar uma espiadinha na realidade, o resultado é terrível.
Por exemplo, há quem dê aos JSPs de um projeto Java nomes como "UC123.jsp". Já vi até classes com esse tipo de nome.
Em primeiro lugar, poucos artefatos relacionam-se a apenas um caso de uso. O que o programador vai fazer para resolver isso? Não podemos chamar um JSP de "UC123,127,201.jsp". Em segundo lugar, fica muito difícil ler e encontrar o código que queremos em projetos grandes.
Em terceiro lugar (e este é o motivo mais importante), essas tentativas de burocratizar o código alienam todos os programadores que amam seu trabalho e que preocupam-se com a qualidade do que escrevem. Código bom tem qualidades estéticas para quem sabe apreciá-lo e esse tipo de nome obscurece qualquer tentativa de prover elegância a uma arquitetura.
Por exemplo, há quem dê aos JSPs de um projeto Java nomes como "UC123.jsp". Já vi até classes com esse tipo de nome.
Em primeiro lugar, poucos artefatos relacionam-se a apenas um caso de uso. O que o programador vai fazer para resolver isso? Não podemos chamar um JSP de "UC123,127,201.jsp". Em segundo lugar, fica muito difícil ler e encontrar o código que queremos em projetos grandes.
Em terceiro lugar (e este é o motivo mais importante), essas tentativas de burocratizar o código alienam todos os programadores que amam seu trabalho e que preocupam-se com a qualidade do que escrevem. Código bom tem qualidades estéticas para quem sabe apreciá-lo e esse tipo de nome obscurece qualquer tentativa de prover elegância a uma arquitetura.
quarta-feira, 17 de agosto de 2011
Ramais rebeldes
Descobrir o ramal de uma pessoa é muito fácil. A intranet os tem todos. Mas algumas pessoas mais antigas (mesmo que de espírito) gostam do velho hábito de usar a telefonista. Como elas não existem mais, alguém vai cumprir o papel, mesmo que involuntariamente!
Então, em nome da paz no ambiente de trabalho, uma técnica pavloviana e pacífica deve ser usada para treinar os preguiçosos chamadores.
A técnica é simples e consiste em, inicialmente, fazer o chamador pensar que a chamada será redirecionada para o alvo pretendido. O treinador deve dizer que "vou passar a ligação para o ramal XYZ", mas deve colocar ênfase e repetir o número com "se a ligação cair, o ramal é XYZ". Então, aperta-se o botão para transferir e coloca-se o telefone no gancho, para que a ligação caia.
Se o chamador insistir, basta repetir a operação. É garantido o resultado em, no máximo, três chamadas (exceto para alguns casos extremos, geralmente restritos a peixes dourados).
Então, em nome da paz no ambiente de trabalho, uma técnica pavloviana e pacífica deve ser usada para treinar os preguiçosos chamadores.
A técnica é simples e consiste em, inicialmente, fazer o chamador pensar que a chamada será redirecionada para o alvo pretendido. O treinador deve dizer que "vou passar a ligação para o ramal XYZ", mas deve colocar ênfase e repetir o número com "se a ligação cair, o ramal é XYZ". Então, aperta-se o botão para transferir e coloca-se o telefone no gancho, para que a ligação caia.
Se o chamador insistir, basta repetir a operação. É garantido o resultado em, no máximo, três chamadas (exceto para alguns casos extremos, geralmente restritos a peixes dourados).
sexta-feira, 12 de agosto de 2011
Força superior
O usuário aproximou-se com um ar otimista e afirmou que "precisamos disponibilizar este software na intranet". A prática me levou a temer esses arroubos dos usuários. Fiz uma cara amigável e perguntei se o programa era para desktop ou para web.
Era desktop, claro. Mas isso é ruim? O diretor autorizou a publicação do sistema na intranet. Já está tudo aprovado.
Ah bom! Se o diretor aprovou a publicação na intranet, então não temos nada a temer. Vou retornar o workflow com um pedido de esclarecimentos.
Era desktop, claro. Mas isso é ruim? O diretor autorizou a publicação do sistema na intranet. Já está tudo aprovado.
Ah bom! Se o diretor aprovou a publicação na intranet, então não temos nada a temer. Vou retornar o workflow com um pedido de esclarecimentos.
Assinar:
Postagens (Atom)
