Conhecimentos fundamentais

Postado por Osvaldo Santana

Ja faz algum tempo que tenho notado em diversas listas de discussões da área de informática que alguns profissionais de nossa área parecem estar entrando para o mercado de trabalho sem ao menos ter alguns conhecimentos mais fundamentais sobre computação.

Um “Conhecimento Fundamental” não é um “Conhecimento Essencial” mas é extremamente útil ter esse tipo de conhecimento quando se trabalha com qualquer coisa.

Na minha simplória definição um “Conhecimento Fundamental” é um tipo de conhecimento que não necessariamente é aplicado diretamente na resolução de um problema mas que certamente enriquece muito a ‘teia’ de informações disponíveis em nossa mente. Esse enriquecimento faz com que a gente consiga apresentar soluções muito mais criativas e eficientes para determinados problemas.

Para esclarecer um pouco melhor o que eu estou tentando dizer vou citar algumas situações reais que ocorreram com algumas pessoas próximas à mim.

Operações bit-a-bit

Quando eu fiz escola técnica no segundo grau eu tive um professor (Victor) que passou um semestre inteiro explicando aritmética binária, operações bit-a-bit e um básico de lógica booleana (que no semestre seguinte foi complementada de maneira adequada por outro professor).

Nessa época vários colegas de classe ‘matavam’ essa aula porque ela realmente era bastante teórica e pouco prática e esses alunos estavam mais interessados ou em jogar Truco no páteo do colégio ou em ver o último livro de Clipper (que era a ’sensação’ da época da mesma forma que Java é a ’sensação’ do momento).

Eu assisti essas aulas e aprendi sobre deslocamento de bits, soma, subtração, multiplicação binária, aprendi como um número negativo era representado binariamente (complemento de dois e afins), e por aí vai.

Quase uma década depois eu e mais algumas pessoas em Curitiba fizemos um teste prático em linguagem C para entrar no meu atual emprego no INdT. O desafio proposto pra mim era corrigir uma função de um compressor de arquivos que fazia deslocamentos de bits e umas operações bit-a-bit com máscaras.

Corrigi a função (estourei um pouco do tempo disponível) e passei no teste. Algum tempo depois um atual-companheiro de trabalho saiu da sala e havia me dito que ele se atrapalhou com o desafio dele (que também envolvia deslocamentos e manipulações de bits) porque ele não lembrava a sintaxe da linguagem C para fazer deslocamentos de bits (>).

Se eu estivesse na mesma situação que ele eu teria solucionado o problema usando uma ‘alternativa’ à sintaxe da linguagem C e faria sucessivas multiplicações e divisões por 2 que fazem com que os bits se desloquem para à esquerda e direita respectivamente.

Esse foi um caso real onde um “Conhecimento Fundamental” teria ajudado esse meu amigo. De qualquer forma ele se deu bem no restante do teste e hoje ele trabalha aqui do meu lado.

Recursividade

A algum tempo atrás precisei desenvolver um pequeno script pra um provedor de internet que calcularia o valor com pulsos gastos pelos assinantes desse provedor para que posteriormente fossem oferecidos produtos de banda-larga para clientes que fazem uso maior de internet.

No momento em que estava pensando na forma que eu resolveria esse problema (que eh desnecessariamente complicado) emergiu dos fundos de meus “Conhecimentos Fundamentais” as minhas aulas sobre recursividade. Usei uma prática muito simples de ‘dividir e conquistar’ as ligações que encaixavam em diversas categorias diferentes de tarifação chamando a mesma função de cálculo recursivamente.

Evidente que esse script não prevê todos os casos e situações diferentes com as quais uma operadora de telefonia precisa se preocupar mas serviu adequadamente para resolver o problema em questão.

Recentemente um amigo que presta serviços para um provedor de internet que pertence à uma operadora de Telecom me disse que a equipe de desenvolvimento dessa empresa estava ‘batendo cabeça’ a várias semanas tentando resolver o mesmo problema.

Eram desenvolvedores que não possuem “Conhecimentos Fundamentais” para exercerem suas funções. Passei esse script para que o pessoal usasse.

Conhecimentos Fundamentais não envelhecem

Os profissionais de informática hoje perdem muito tempo escolhendo uma faculdade ou outra, um curso ou outro porque uma delas usa Windows e a outra Linux. Uma usa Java e a outra .Net. Algumas ainda usam Pascal e outras começam a usar Python. Os alunos ‘brigam’ com seus professores para que os mesmos ensinem Java ou C# mas nunca brigam com eles pedindo para que explique sobre Autômatos Finitos ou máquinas de Turing.

Saber Java ou C# hoje é o mesmo que ter sabido Clipper ou Cobol à alguns anos atrás. É um tipo de conhecimento que ‘envelhece’ e perde o sentido. Não é um conhecimento desnecessário, mas a aquisição desse tipo de conhecimento deveria ter uma prioridade menor do que os “Conhecimentos Fundamentais”.

Fundamentar o conhecimento é algo imprescindível que torna mais fácil, inclusive, adquirir outros tipos de conhecimentos.


Python for Maemo

Postado por Osvaldo Santana

Como alguns freqüentadores deste blog já devem saber estou trabalhando no port do Python para a plataforma Maemo. O projeto está recebendo todo o apoio do INdT, onde trabalho, e agora se tornou um projeto ‘oficializado’ e 100% apoiado pelo instituto.

A idéia do projeto é fazer com que Python seja a linguagem scripting oficial da plataforma, assim como o AppleScript é a linguagem script oficial da Apple.

Para que isso seja possível pretendemos criar um projeto aberto para colaboração de todos os pythonistas. Já criamos o http://pymaemo.sourceforge.net e pretendemos fazê-lo crescer consideravelmente durante esse semestre juntamente com o aumento da integração de Python com a plataforma.

Eu estou superalegre porque é a primeira vez que realmente irei manter um projeto OpenSource de verdade (com código, documentação, lista de discussões, controle de bugs, repositório CVS, etc).

Pra quem já desenvolve com PyGTK+ em Linux vai ficar surpreso ao perceber que é ‘exatamente’ a mesma coisa desenvolver para Maemo (exceto talvez por uma pequena diferença na forma de se organizar uma aplicação). Só podia ser muito parecido mesmo, afinal, é o já famoso PyGTK+ que está rodando no dispositivo.

Lembrem-se que, se você estiverem com algum problema para desenvolver em Python para a plataforma Maemo é só ‘dar um grito’ que nos esforçaremos ao máximo para colaborar.


À Sombra de Titãs

Postado por Osvaldo Santana

Não, eu não morri. Sim, estou passando por uma crise criativa. E já vou avisando que esse post está completamente mela-cueca e “puxa-sacos” :)
Todo nerd é saudosista. Se isso não fosse verdade nós não nos interessariamos por coisas como MSX, TRS-80 e Apple II. Como nerds costumamos chamar de antigüidades enquanto os outros chamam apenas de lixo ou velharia.

Com meu ‘bit’ saudosista habilitado (só nerd pra escrever essas coisas) resolvi fazer um levantamento do meu envolvimento com as pessoas da Comunidade do Software Livre brasileira.

Eu tive uma sorte muito grande de sempre ter convivido ao lado de “Titãs” do Software Livre. Se fosse possível “aprender por osmose” eu certamente seria um gênio mas infelizmente não é. Para homenagear essas pessoas resolvi dar nome aos GNUs (ha ha ha que tentativa horrível de fazer um trocadilho).

O legal desses GNUs é que nem sempre eles aparecem ‘na mídia’ ou são tratados como ‘personalidades’ por outros membros da comunidade mas certamente eles fizeram algo pelo Software Livre.

Meu envolvimento com Software Livre começou efetivamente em 2000 quando comecei a trabalhar na Conectiva. Antes disso os programinhas Clipper que eu fazia eram liberados mas não sabia que isso era SL.

Hoje eu tenho a impressão que fui trabalhar lá por causa de uma ‘falha’ no processo de contratação. Só pode ter sido isso essa a razão. Afinal, nessa época eu não me envolvia com comunidade, me batia por dias tentando estabelecer uma conexão PPP (e nem era Winmodem :P) e nunca tinha conseguido concluir com sucesso uma compilação de kernel :). Nunca tinha feito uma linha de código em C para ambientes Unix (só para DOS) e mesmo assim fui parar no departamento de Pesquisa & Desenvolvimento da Conectiva. Meu inglês hoje é muito ruim, imagine naquela época :)
Lá na Conectiva, que hoje se chama Mandriva, trabalhava a elite do Software Livre brasileiro. Alguns desses profissionais ainda estão por lá e outros estão ‘por aí’. Para citar alguns: Arnaldo Melo (acme), Cavassin, Rodarvus (vulgo Rodrigo), Gustavo Niemeyer (Python, Smart, …), Sérgio Bruder (PontoBR), Cláudio Matsuoka (um moonte de coisas), Hélio (KDElio), Alfredo Kojima (WindowMaker, apt-rpm, …), Aurélio (verde, que à época era o verde666), Paulo César Andrade (driver Vesa pro XFree86), etc etc etc etc etc… E eu lá, no meio desse monte de gente :)
Não preciso dizer que ter trabalhado na Conectiva é equivalente a jogar na Seleção Brasileira para um jogador de futebol.

Algum tempo depois fui trabalhar Objective Solutions onde tive o privilégio de conhecer caras muito bons, entre eles: Klaus Wuestfeld (Prevayler). Na Objective eu aprendi a programar usando Orientação à Objetos.

Trabalhar com Python também faz com que a gente tenha contato com pessoas fora do comum no quesito inteligência. Não é qualquer comunidade que dispõe de pessoas do naipe de Luciano Ramalho, Érico Andrei, Jean Ferri, Rodrigo Senra, Pedro Werneck, Xiru, Sidnei da Silva, Gustavo Barbieri, José Nalon, etc etc etc.

As pessoas que fazem muito blablabla (chamados de “Boi” pelo Júlio Cezar Neves) deveriam se inspirar no trabalho dessas pessoas citadas aí em cima e parar de ficar discutindo coisas inúteis sobre “Melhor distribuição Linux”, “Gnome vs. KDE” ou outra coisa do tipo.