Meu Quadro de Medalhas: Aprendendo Ruby

O Soro escreveu há um tempo atras sobre como conseguir motivação pra aprender algo novo, como uma linguagem de programação. Desde a primeira vez em que ouvi falar de Ruby, la em 2001, eu estou tentando achar algum jeito de aprender a linguagem, mas a procrastinação sempre fala mais alto. Acho que o único jeito que encontrei pra aprender uma nova linguagem é ter um projeto, alguma coisa prática de verdade, nem que seja algo meio sem sentido mesmo, só pra ter um objetivo concreto e ir aprendendo com as necessidades que vão surgindo. Como não tava tão inspirado pra criar um novo job4dev (que foi o “projetinho” do miguel), e estamos em tempos de Olimpíadas, eu resolvi aprender um pouco de Ruby escrevendo um programa pra gerar meus próprios quadros de medalhas.

Eu sempre tive uma certa ressalva com esses quadros de medalhas olímpicos. Em geral eles colocam medalhas de ouro acima das de prata, e essas acima das de bronze. Isso faz com que um país que tenha uma mísera medalha de ouro fique na frente de um outro que tenha 10 de prata, o que eu acho meio que injusto. É claro que agora com os EUA perdendo da China nos ouros, a TV americana tá colocando o ranking baseado no total de medalhas. Mas daí você tá dizendo que uma medalha de prata vale o mesmo que uma de ouro, o que não é a verdade. Uma solução seria colocar pesos pra cada tipo de medalha.

Outra coisa meio injusta é que na China tem muito mais gente que na Austrália, então um ranking baseado em população também seria interessante. E mais ainda, um atleta como o Michal Phelps consegue 8 medalhas numa olimpíada, mas um time completo de futebol consegue no máximo 1. Porque não multiplicar o valor da medalha pelo numero de atletas na equipe (titular, pelo menos)?

Então a idéia inicial que eu tive foi a seguinte. Estamos em plena Web2.0, então eu devo conseguir alguns serviços que provenham os dados necessários e eu faco uma espécie de mash-up, calculando meus rankings. Eu precisaria de 2 serviços, um com os dados sobre as medalhas e esportes, e outro com dados sobre as populações dos países.

Infelizmente logo na minha primeira tarefa eu já encontrei problemas. Informação é dinheiro, e foi impossível encontrar algum site na Web que disponibilizasse as informações sobre as medalhas. Existem vários sites mostrando tabelas ou disponibilizando RSS com noticias, mas uma API pras medalhas não existe. Acabei descobrindo que existe uma tal de World News Press Association que tem o monopólio das feeds sobre os eventos olímpicos e eu teria que pagar pra conseguir acesso (como o google fez).

A minha solução foi criar um programinha em Ruby que fizesse parser das paginas do UOL. Primeiro eu baixo a pagina do quadro geral de medalhas, daí eu recursivamente baixo as paginas de cada pais (que tem no combo box). Não é exatamente uma solução elegante, mas graças as boas tags no fonte da UOL e ao HPricot (uma biblioteca pra fazer parse de HTML) não foi tao difícil agregar os dados e gerar um CSV. Porem, surgiram dois problemas. Primeiro que eu tive que abandonar minha idéia de multiplicar as medalhas pelo numero de atletas no esporte, pois essa informação seria muito chata de conseguir. Depois que eu tive que criar uma tabela traduzindo os nomes dos países de português pra inglês, já que eu queria apresentar as tabelas em inglês, e os dados de população também estariam em inglês.

O segundo passo seria conseguir informações sobre população. Eu achei um tal de Population Reference Bureau com as informações necessárias, só que de novo esbarrei em problemas. Primeiro que eles não tem um RSS ou um web service, então eu tive que fazer copy e paste da tabela. E segundo que algumas informações relativas aos países são diferentes da pagina da UOL, ou tem que ser agregadas (por exemplo, tive que adicionar a população de varias colonias francesas na da França). Pra alguns países estranhos (como “Ilhas Virgens Americanas”), que não tinham informação no Bureau, eu tive que pegar no wikipedia mesmo.

Finalmente, com todos os dados em arquivos, eu pude criar um outro programinha em Ruby pra analisar os dados e gerar meus rankings. Eh claro que como isso é just for fun, a interface deixa muito a desejar. Mas pra quem tiver interesse, alguns rankings que eu gerei estão nesse diretório. Eu atualizo os dados usando o parser uma vez por dia. Os cabeçalhos dos rankings descrevem o que foi usado pra gerar os”values” pras medalhas (counters) e pro valor total (aggregators) a partir do numero de medalhas, e por quais campos ordenar os países.

Bom, lições aprendidas:

  • realmente o melhor jeito pra aprender uma linguagem de programação é usando. Eu não posso dizer que agora sou um programador Ruby, mas aprendi um monte de detalhes e foi bem melhor do que qualquer tutorial.
  • apesar de existir muita informação pela web, o mais chato (e difícil) é conseguir agregar a informação de varias fontes que em geral são “um pouquinho diferentes”. Por exemplo, não teria como automatizar o matching dos nomes dos países em diferentes línguas, nem como programar a intuição de “somar as populações das colonias”, a não ser que você tenha muito mais meta-informação, ou recorra a heurísticas.
  • a China nem é tao boa assim se a gente considerar o tamanho da população ;-)
  • o Brasil continua ruim, em qualquer ranking mais ou menos razoável que se faça.

O proximo passo seria aprender Ruby on Rails e fazer uma interface em que os usuarios pudessem escolher como fazer os rankings. Mas como eu teria que instalar outro servidor web e um banco de dados, e eu to meio sem tempo, vai ter que ficar pra depois… e se interessar a alguem eu mando os dados.

OpenSource na ciência

Para quem trabalha com pesquisa e desenvolvimento, acompanhar as últimas publicações em sua área é de fundamental importância. No entanto isto pode ser custoso, dado que as assinaturas de revistas científicas têm preços muito altos, dificultando o acesso ao conhecimento científico, e em última instância, desacelerando a evolução da ciência.

O conceito de “código livre” já é bastante antigo entre nós computeiros, e é certamente um dos principais fatores que contribuiu para o acelerado desenvolvimento de nossa área. Se não fossem iniciativas como o Linux, Apache e Mozilla, dentre outros, estaríamos talvez num estágio de desenvolvimento tecnológico similar ao de cinco anos atrás. Com este tipo de visão, diversas iniciativas têm sido criadas na área de divulgação científica, para fazer frente ao domínio das editoras científicas, e permitir a ampla divulgação de conhecimento. BioMed Central e PLoS são exemplos de editoras eletrônicas OpenAccess bastante conhecidas (ao menos na área em que trabalho - bioinformática, biologia e afins). Esta já é uma realidade mundial, que certamente substituirá o modelo anterior.

Seguindo esta tendência, a Faculdade de Artes e Ciências da Universidade Harvard decidiu tornar público todos os artigos publicados por seus pesquisadores a partir de 12 de fevereiro de 2008. De acordo com matéria da Agência FAPESP, também a Escola Médica Harvard pretende utilizar o modelo OpenAccess aos artigos resultantes de pesquisas apoiadas pelos Institutos Nacionais de Saúde. Iniciativas como estas, de centros de pesquisa renomados como os de Harvard, atestam o sucesso deste novo modelo de divulgação científica, e uma preocupação cada vez maior no que diz respeito à disseminação de conhecimento.

Para quem tiver interesse, o DOAJ é um diretório de publicações OpenAccess, compreendendo as mais diversas áreas. Talvez lá você possa encontrar alguma publicação que te interesse, não só para acompanhar as pesquisas recentes em sua área, como também para divulgar sua pesquisa.

Teste de conhecimentos em tipos de dados

Achei este teste no blog Programatic que achei divertido. O autor do teste considera que pra escrever um bom programa, você deve saber quais as boas estruturas e tipos de dados devem ser usados. Concordo plenamente.

O teste é simples. Basicamente, uma lista de tipos de dados e estruturas. Faça a contagem de quantos você conhece, e verifique o seu nível de conhecimentos em programação.

Cursos Livres no MIT

Em 2001 o MIT anunciou a criação do OCW (MIT OpenCourseWAre). Esta é uma iniciativa que procura utilizar a internet para avançar o conhecimento e educar estudantes das mais diferentes áreas em todo o mundo - seguindo a missão da instituição. Através de seu site, o OCW publica gratuitamente materiais dos cursos utilizados no MIT, incluindo notas de aulas, conjuntos de problemas, vídeos e demonstrações.

O primeiro piloto, com 50 cursos surgiu em 2002. Em 2003 o projeto foi oficialmente lançado, contando com cerca de 500 cursos. De acordo com as informações do site, em 2007 praticamente todos os cursos do MIT foram publicados. É uma excelente fonte para aqueles que têm interesse de aprender algo novo, aprofundar seus conhecimentos e manter-se atualizado. Vale lembrar que de acordo com o ranking de universidades citado pelo Raphael, a instituição é considerada como sendo a décima melhor universidade do mundo.

Esta iniciativa inspirou diversas outras universidades do mundo, que então criaram o OpenCourseWare Consortium, que agrega desde renomadas instituições dos Estados Unidos, Europa e Japão, até instituições de países como Vietnã e Colômbia (não há nenhuma universidade brasileira no consórcio).

Cabe notar que a disponibilização do material não garante certificação de nenhuma espécie,  e tampouco corresponde fielmente a todo o material dos cursos. De qualquer forma, é uma excelente fonte por aqueles ávidos por conhecimento. Eu mesmo já comecei a consultar o material de três cursos bastante interessantes: Introdução à probabilidade e estatística, Algoritmos para Biologia Computacional e Análise Econômica para Decisões de Negócios. Mas se você preferir, pode fazer um curso sobre Imperialismo Europeu nos séculos XIX e XX, Alemão (língua) ou Biomedicina Aeroespacial e Engenharia de Suporte à Vida. São várias as possibilidades.

USP e Unicamp entram na lista das 200 melhores Universidades do mundo.

Nóis é pobre, mais nóis é bom de pesquisa, mané!

Um relatório publicado pelo The Times Higher Education Supplement mostra o resultado de uma pesquisa feita entre os acadêmicos, empregadores e estudantes para avaliar a qualidade das universidades. Esse ano, percebe-se o notável crescimento das universidades da Inglaterra e uma agradável surpresa para os nativos da Banânia: a USP e a Unicamp aparecem listadas.

Reportagem sobre o assunto, e a lista de todas as 200 melhores universidades que eu puxei do site do THES.

Ócio criativo

Há algum tempo atrás, um colega de projeto mandou para os membros da equipe o link para o artigo Você é um profissional ou um moleque?, escrito pelo Vitor Pamplona. A idéia central do texto é tentar estabelecer meios de se determinar se um indivíduo é ou não um bom profissional. O texto termina assim:

“Uma boa pergunta a se fazer é: se você fosse sócio da empresa onde você trabalha, o quão mais você trabalharia? Faça uma regra de três e veja o % de seu profissionalismo. No final, não se assuste se você concluir que profissionalismo depende diretamente de ASSUMIR RESPONSABILIDADES.”

Considero que o texto termina bem. De fato, um bom profissional é aquele que assume suas responsabilidades e executa suas tarefas com seriedade e com zelo de sócio. Muito bem. Infelizmente não concordo com o trecho central do texto. Aquela na qual o autor define o que um bom sócio faria:

“Você permitiria, por exemplo, que um profissional contratado pela sua empresa passasse digamos, meia hora por dia no orkut? Ou, quem sabe, você permitiria que seu funcionário lesse e-mails de piadas e mensagens de auto-ajuda durante o expediente? E aquele que combina uma festa pelo msn durante o expediente? Se você não permitiria este tipo de atitude, então porque você as faz? Quanto tempo do seu dia útil você simplesmente joga fora? Dia útil é o dia produtivo, ficar tomando café, por exemplo, é tempo jogado fora. Ler notícias repetidas, blogs sem conteúdo (talvez esta leitura), perder tempo com instalação da versão SEMPRE mais nova de um software. Tudo isso é perda de tempo útil. Se, ao chegar na empresa, sua primeira ação é tomar um café e ler noticias, você está perdendo tempo! Deveria ter feito isso em casa, e não no seu período de produção.”

Com certeza, se fosse sócio faria todas estas coisas. Simplesmente porque nenhum bom profissional de tecnologia consegue ficar o dia inteiro focando apenas no trabalho, mantendo a qualidade do que faz. Considero que nossa profissão exige uma boa dose de trabalho intelectual (note bem: estou falando de BONS DESENVOLVEDORES), e portanto passamos uma boa parte do tempo queimando neurônios (ressalto mais uma vez: estou falando de BONS DESENVOLVEDORES).

O conceito de ócio criativo é algo que eu considero importantíssimo para que um trabalho seja feito com qualidade. As vezes, 15 minutos de pausa para café e papo sem compromisso permitem que uma solução seja encontrada. Muitas vezes, uma pequena pesquisa pela internet, em blogs, sites especializados e fóruns permite encontrar modos mais eficientes de se resolver um problema. E acreditem: no mundo em geral, e na tecnologia em particular, muitas vezes o barato sai caro. E a conta no final fica altíssima. Que jogue a primeira pedra aquele que nunca viu um algoritmo tosco escrito por alguém que simplesmente queria entregar.

Muitas vezes, quando eu falava isso em rodas de amigos e com gente fora da profissão, tinha a impressão de que as pessoas me olhavam com cara de freak. “Isso é coisa de computeiro que se acha diferente, e que quer ficar no oba oba”. Mas dois textos me mostraram que não só eu tenho razão, mas também que este problema tem afetado a qualidade do trabalho em outras áreas.

O primeiro texto, A falta de first life nas agências foi publicado no Webinsider pelo Cezar Caligáris. Segundo o autor, as grandes agências de publicidade brasileiras estão perdendo qualidade. Motivo?

“Uma idéia é semelhante a uma receita. Você pode fazer desde um prato básico que funciona até experimentar algo novo que surpreende. Mas para conhecer os “ingredientes” que estarão no seu anúncio ou campanha, você precisa ter referências na vida real. Algo que os publicitários têm cada vez menos tempo para buscar. Passando cada vez mais tempo nas agências, não sobra tempo para conviver com outras pessoas e, consequentemente, ter emoções e sentimentos. Imagine quantas boas idéias aparecem, por exemplo, do convívio com um filho? Em uma ida a um restaurante, observando as pessoas ao seu redor? Até mesmo a tristeza pode ser inspiradora - quantas músicas incríveis não vieram desse sentimento?”

O outro texto vem da área do Direito. O artigo Saving Good Judgment From the BlackBerry Culture discute os efeitos causados pelos métodos de comunicação instantânea (no caso um Blackberry) sobre a qualidade de pareceres jurídicos produzidos por advogados de grandes escritórios. A pressão por uma resposta imediata e o fato do advogado estar sempre online fazem com que uma demora seja considerada como falta de profissionalismo.

“More and more clients seem to expect a response to an e-mail or a voicemail within an hour. Twenty-four/seven availability is assumed, and many view turning the BlackBerry off, even during religious observances, weddings and funerals, as professional sacrilege.

O resultado são trabalhos com menos qualidade e clientes insatisfeitos a médio e longo prazo. Portanto, tempo para pensar, arejar as idéias e reciclar os conceitos é vital para um bom trabalho, um resultado de qualidade.

Voltando ao tema do artigo. Se ficar eventualmente fazendo coisas que não estão forçosamente ligadas ao seu trabalho não serve para definir um indivíduo como incompetente no ambiente de trabalho, então como medimos a nossa qualidade e o nosso profissionalismo? Bom, vou transcrever o comentário que eu fiz no blog do Vitor, que me parece refletir de forma sintética a minha opinião:

“Para mim, um bom profissional é aquele que atinge suas metas e entrega um trabalho de qualidade. Não me importa se ele fez isso em uma hora ou em oito, se ele ficou lendo orkut e piadas ou se ele ficou comentando este artigo.”

Link do Dia: Rosetta Code

Para quem gosta de ler código alheio, ver diferentes formas de abordar um problema e de comparação entre linguagens, sugiro dar uma lida no wiki Rosetta Code (http://www.rosettacode.org/wiki/Main_Page).

Descrição do  wiki: “Rosetta Code is a repository for code examples that go beyond the traditional “Hello World!” example. A series of tasks are listed, and visitors to this site are asked to complete the tasks in the language of their choice. The tasks are intended to cover a variety of needs commonly found in software.”

Kata para programadores

Kata - Um conjunto estilizado de movimentos que simulam uma variedade de defesas e ataques contra um inimigo invisível. Um kata é utilizado para aperfeiçoar o estilo, aprender concentração, assim como demonstrar ataques, defesa e contra-ataques. ( Extraído de http://la.essortment.com/karateterminolo_raan.htm - tradução livre )

Dojo - literalmente “lugar do Caminho”. Também “lugar da iluminação”. ( Extraído de http://www.aikido.itu.edu.tr/dictionary.htm - tradução livre )

Com certeza, todos o leitores com mais de 20 anos lembram-se do Daniel Larusso (vulgo Daniel Sam), aquele rapaz com cara de bebê chorão e chassi de pernilongo, destruindo seus adversários no “All Valley Karate Tournament”. E tudo isso graças aos gloriosos ensinamentos do Sr Miyagi, que iam de pintura de paredes e enceramento de carros, a dancinhas esquisitas à beira da praia, vulgo Kata. Provavelmente, baseado nesse incrível exemplo, algumas pessoas como Dave Thomas resolveram aplicar esta prática ao mundo dos programadores. De acordo com Dave, assim como em outras áreas, para desenvolvermos nossas habilidades precisamos de muito treino. Baseado nisto, ele desenvolveu uma série de katas para programadores - pequenos exercícios para treinar nossas habilidades de programação, lógica, estrutura de dados, etc.

Baseado neste mesmo conceito, um grupo de pessoas criou um Dojo virtual, para que as pessoas se reunam para a prática de katas. Este Dojo ainda está engatinhando, e atualmente contém somente cinco (em 04/09/2007) katas cadastrados. Mas certamente irá crescer.

Pessoalmente, gostei muito desta idéia. Muitos programadores têm o interesse e a vontade de aperfeiçoar suas habilidades, mas não sabem como fazê-lo. Desenvolver pequenos projetos sozinho, ou em grupos (comunidade open-source) é uma boa alternativa, mas nem todos têm tempo para se comprometer suficientemente para tais atividades. Além disto, nem sempre se consegue exercitar as diferentes habilidades úteis a um programador faixa-preta quinto dan.

Como gostei muito desta idéia, tentarei à medida do possível colocar uns katas aqui. E aqueles que quiserem, podem entrar em contato pelo alexandre(at)log4dev.com, que teremos prazer em divulgar suas sugestões, e dar-lhes sempre todo o crédito.

Nota: falando em dar o devido crédito, a idéia deste post surgiu a partir de um artigo de Amr Elssamadisy do InfoQ

Powered by ScribeFire.

Algoritmos de Ordenação

Existem aqueles que pensam que teoria de computação, complexidade, estruturas de dados e algoritmos são perda de tempo. É bem verdade que no dia a dia do desenvolvimento de aplicações webs comuns (basicamente CRUD), estes problemas são em geral irrelevantes. Além do mais, a grande maioria das linguagens já possui bibliotecas com implementações muito boas destes algoritmos e estruturas de dados.

Outros, como eu pensam que saber este tipo de coisas pode ser um diferencial, e que conhecimento nunca é demais. Sem contar que as vezes nos deparamos com problemas difíceis a serem resolvidos, e ter uma bagagem teórica (uma caixinha de maldades, como diria um ex professor da faculdade) abrangente pode ser o pulo do gato. Para aqueles que são como eu, e que querem revisar os algoritmos de ordenação, aconselho este site: http://linux.wku.edu/~lamonml/algor/sort/sort.html.

Mais uma do Google

Acabei de descobrir o site Google Code for Educators, que contém uma série de tutoriais sobre tecnologia. Dei uma olhada no curso de AJAX, parece ser bem feito. Além disso, o sistema oferece alguns vídeos de palestras e um sistema de busca especializado em material didático e científico.

Lógica e Gramática

Quando eu entrei na UNICAMP em 1999 para iniciar minha graduação, me contaram que a grade curricular do curso de Ciência da Computação da USP incluia aulas de redação. Na época, achei um tanto quanto ridículo. Afinal, todos lá haviam passado pelo vestibular da FUVEST e portanto deveriam saber escrever corretamente. Correto?

Errado! Hoje, estou convencido de que redação deveria ser obrigatório em todos os cursos de graduação de computação. E vou ilustrar minha opinião com dois textos que recebi recentemente.

“Oba blz galera.???
Meu nome e X.
Eu estou conhecendo Python agora por essas semanas e gostei bastante..
So que nao tenho muita noçao de programaçao e algo que gosto mais tenho um
pouco de dificuldade, gostaria que vcs me indicase um livro bom e em
portugues, que possa me ajudar .
Estou conhecendo python na faculdade onde estudo, tem um maluco la que manja
bastante Nome dele e Y..Alguem ja ouviu falar dele.
Ate mais espero fica bom em progrmaçao com vcs.”

“bom eu fiz uma pagina com iframe bem no meio dela mais antes do iframe no lugar dele eu queria colocar ums textos umas fotos se a pessoa quando clica no menu da certim o iframe mais quando eu coloco os textos e as fotos em div os textos ficam na frente do iframe tem como fazer o div sumir quando o iframe for ativado??”

(O primeiro foi extraído de uma lista de discussão de Python, e o segundo foi um comentário/pergunta enviado para este blog).

E porque a minha preocupação a respeito deste tema? Basicamente, por dois motivos.

O primeiro tem a ver com o email enviado para a lista de discussões. Não espero que computeiros escrevam textos inspirados no estilo de Machado de Assis. Mas hoje, em tempos de internet, comunidades de desenvolvimento globais, projetos open source, fóruns e listas de discussão, a comunicação escrita se tornou uma ferramenta importantíssima: textos mal escritos ou confusos tornam a troca de idéias confusas.

O segundo motivo é mais grave, e tem a ver com o comentário/pergunta feito no meu blog. Eu confesso que ja reli esta pergunta algumas vezes e não tenho ainda certeza de ter entendido o que o leitor quer saber. E para não dizerem que eu tenho má vontade, enviei esta pergunta para algumas pessoas, e nenhuma delas entendeu. Daí eu pergunto: qual a essência, o ponto fundamental, da atividade de programação? Descrever de uma forma lógica e estruturada um conjunto de instruções utilizando uma linguagem formal que permitam que um computador execute uma tarefa. Certo? OK. E chegamos portanto no ponto crucial: como esperar que um programador consiga escrever programas corretos e estruturados em C/Java/Perl/Python/Whatever se este tem dificuldades para se expressar de forma clara e estruturada em português?

Gramática e lógica são definitivamente duas ferramentas que deveriam fazer parte da “caixinha de maldades” de cada desenvolvedor.

Qual é o seu papel na inovação tecnológica de sua empresa?

De todas as empresas de tecnologia que você conhece e admira, quantas surgiram da cabeça de um executivo que fez uma extensa pesquisa de mercado? Quantos produtos que causaram revoluções em uma indústria são resultado de anos de pesquisa e aprimoramento de um processo de manufatura?

Pode procurar, eu espero.

Achou algum? Eu sou capaz de apostar que não. E não é por culpa do seu mecanismo de busca favorito. A resposta é mais simples: produtos e idéias que revolucionam mercados (e que no processo deixam seus autores ricos) são desenvolvidos à margem dos objetivos e planos daqueles que fazem parte do establishment.

O iPod, o Ford T, o algoritmo do Google… todos eles surgiram da cabeça de alguém que estava buscando um meio diferente de resolver um problema. Em muitos casos, tudo partiu de um conceito simples, desenvolvido por alguém que apenas observou a forma que as pessoas trabalhavam e intuiram que uma solução melhor era possível.

Tente fazer isso para a sua empresa. Leve uma proposta de uma nova idéia para o seu chefe e veja a sua reação. Mesmo se for uma boa idéia, seu chefe não vai se entusiasmar em implementar algo que pode custar a cabeça dele se der errado. Antes de fundar a Apple, Steve Wozniak pediu a seu chefe para desenvolver o computador dentro da HP, que era seu empregador. Só depois que a HP abriu mão da idéia é que Woz se juntou a Jobs rumo a seu projeto bilionário.

Ainda hoje, grandes empresas se mostram eficientes em gerenciar e manter negócios já existentes, mas péssimas na criação de valor e novas riquezas.

Antes que você se pergunte “E eu com isso?” e volte para o seu jogo de WoW (ou Winning Eleven se você for menos geek do que gostaria de admitir), tente refletir um pouco sobre o seguinte: como trabalhar em uma grande empresa de tecnologia hoje, se a inovação contínua é algo que não costuma ser bem feita dentro da empresa?

Tom Peters é um cara que já pensou bastante no assunto.

Para o leitor que prefere ler toda a API do Java a ler algo sobre o mundo corporativo: Tom Peters é tido como um dos gênios de administração e negócios. Parte dos seus princípios está justamente em explicar porque grandes empresas não devem ter medo de derrubar seus próprios negócios estabelecidos. É o que é chamado Destruição Criativa.

Transcrevo uma de suas pílulas de sua sabedoria: Contrate os Freaks.

Never hire a human being who had a 4.0 (NT: 4.0 é a nota máxima na faculdade americana) in college. If they had a perfect GPA, it means they bought the act and never screwed around. Now a 2.0 is probably not so good. But the ones who had 3.0, yeah! Those are the freaks you want!

Fica mais bonito quando as palavras são dele, não? Além do mais, ele te cobraria milhares de dólares por palestra, enquanto meu texto sai mais barato que um dogão no Pacaembu. Mas a mensagem é a mesma: as empresas que quiserem continuar relevantes no seu mercado de atuação precisam dar espaço para pessoas com pensamento criativo, fora do lugar comum.

Como eu estou começando a escrever agora e preciso mostrar serviço, eu vou dar uma dica bônus: se você for um dos “freaks”, objetos de desejo de Peters, você é muito mais importante para a empresa do que vice-versa. Use isso a seu favor!

A lógica é simples: uma Grande Empresa ™ já tem um negócio estabelecido, e tem que gastar muita energia (pessoal, recursos, departamento judiciário, lobby, marketing) na manutenção desse negócio. Além disso, eles precisam de você se quiserem pensar o Futuro. Em troca, eles lhe prometem um salário e um crachá. Lucro e Risco provenientes do seu trabalho são diluídos, já que seu trabalho vai ser composto com o trabalho de todos os outros, do Diretor até o Office-Boy.

Mas, sendo o “freak” que é, você só tem a ganhar se trabalhar sozinho ou com um número reduzido de pessoas, preferencialmente “freaks” como você. O risco aumenta, mas as chances de lucro aumentam ainda mais.

Considere que o “risco” em questão em casos de empresas que tem custo baixo de operação, como um negócio online, é apenas a possibilidade de ficar sem o salário da empresa. Diante de uma lógica dessas, aceitar o salário da empresa (por melhor que seja) parece-me um roubo!

Pode levar tempo para que mais pessoas percebam isso. E mais tempo ainda para que as pessoas façam essa transição na forma de encarar a sua vida profissional. Mas esse é um processo que já está em curso, e aqueles que agirem mais rápido vão ser mais beneficiados.

Agora, cabe uma pergunta: quem você quer ser? O Diretor da Empresa que não vai encontrar talentos que aceitem trabalhar (a não ser em troca de um gordo salário e benefícios) na sua empresa, ou o freak que aprendeu muito mais que as respostas para as provas da faculdade e entregou todos os projetos no prazo?

multi-user electro-acoustic music instrument with a tabletop tangible user interface

Seguindo a linha do post anterior, queria falar sobre uma outra forma de interatividade que, de certa forma, é parecida com a anterior por usar alguns conceitos semelhantes mas na prática se mostra totalmente inovadora e diferente.

O Reactable, definido pelos próprios autores como uma “multi-user electro-acoustic music instrument with a tabletop tangible user interface” pode ser visto como um sintetizador modular (se olharmos para ele como um instrumento musical) ou até mesmo como uma linguagem de programação de controle de fluxo (se olharmos ele como um representante fiel de sistemas de controle movidos a sinais elétricos que dão origem a muito daquilo que conhecemos de robótica e computação).

Vou postar aqui alguns vídeos que na minha opinião valem serem assistidos para entender completamente o conceito sendo explorado. O sistema é simples. Basicamente uma câmera posicionada abaixo de uma mesa que captura os objetos que são colocados em cima da mesa e os movimentos que são feitos nos objetos. O resto dos efeitos e controles é feito por luzes e por um sistema computacional de controle. Depois de mostrar os vídeos tento comentar alguma coisa em cima do que pode ser visto neles, mas, como vocês vão ver, nada melhor mesmo que os vídeos para explicar o Reactable.

You need to a flashplayer enabled browser to view this YouTube video

You need to a flashplayer enabled browser to view this YouTube video

You need to a flashplayer enabled browser to view this YouTube video

Como se pode ver pelos vídeos, o Reactable é, antes de mais nada, um sintetizador musical, um instrumento musical. E desta forma, como se pode ver por uma simples busca na internet, já foi usado em algumas festas na Europra. Imagina um que um bom DJ não conseguiria fazer com uma interface destas? Além do show musical, certamente seria um show a parte as imagens da manipulação do Reactable.

Por outro lado, como também é possível ver pelos vídeos, o Reactable nada mais do que reproduz um sistema de controle, no qual você pode compor suas ondas geradoras, retroalimentações, filtros de freqüência e etc. de forma a montar um sistema de controle. E, neste sentido, ele não deixa de ser uma linguagem de programação. Só que com uma interface muito mais intuitiva e com uma capacidade de mostrar o resultado da atuação do sistema de uma forma que realmente dá para visualizar a resposta antes de, por exemplo, ter que implementar um sistema de controle com as mesmas características para controlar um braço mecânico de um robô de uma linha de montagem.

Olhando por outro lado, também consigo ver nele uma tremenda e inovadora ferramenta educacional. Há se meus professores de física, sistemas de controle e telecomunicações tivessem acesso e disposição para usar uma ferramenta dessas durante as aulas! Certamente os conteúdos que, em geral são complexos e difíceis de entender por envolverem o espaço de freqüências, convoluções e etc. poderiam ser muito melhor compreendidos pelos alunos em um tempo bem menor!

E, ainda assim, se esquecermos tudo isso e voltarmos ao tópico sobre o qual estávamos falando originalmente, o Reactable nos mostra, de forma contundente, uma nova forma de interação homem-máquina que dá maior poder de expressão e de visualização de resultados para as pessoas que estão interagindo com o computador. É claro que vocês podem estar pensando como uma coisa como o Reactable poderia se aplicar na vida de uma pessoa comum, que usa o computador para navegar na internet e ler e-mails. Neste sentido, talvez a utilidade do multi-touch screen seja mais fácil de se enxergar. Mas não podemos de forma alguma descartar coisas como o Reactable, já que conceitos como este podem tornar possível, por exemplo, a apresentação de um objeto físico real (que não seja um quadradinho de plástico com um símbolo desenhado como nos exemplos) a um computador. Vocês já imaginaram nas possibilidades que podem se abrir se um computador conseguir a efetivamente reconhecer objetos e/ou pessoas que são apresentados a eles?

Probleminhas em LISP

Hoje, um dos links no meu leitor de RSS retirado da lista de populars do del.icio.us apontava para uma página com pequenos probleminhas a serem resolvidos em LISP, com código fonte.  Os problemas eram muito parecidos com alguns que eu tive que resolver quando aprendi LISP na universidade, e não por acaso: a página em questão era do meu ex-professor do curso João Meidanis. Coincidências a parte, a página é uma otima fonte para quem quer aprender ou relembrar esta linguagem.

Palestra sobre AJAX

Em algumas horas, darei uma palestra na Semana de Computação da UNESP/Rio Claro sobre AJAX. Acho que vai ser uma experiência interessante. A quem puder se interessar pelo assunto, estou disponibilizando aqui os slides da palestra em PDF.

Palestra sobre AJAX

Next Page »