quinta-feira, dezembro 29, 2005

Comunidade C++

Como resultado do Encontro de Programadores C++, já está no ar o site, cortesia do Rodrigo Strauss.

Não fui o único a aprender a programar com cartões perfurados...

No seu post de hoje, Joel Spolsky menciona que ele também aprendeu a programar com cartões perfurados e discute a redução da dificuldade nos cursos de C.S. das universidades americanas. A perfuradora de cartões que aparece lá é muito mais bonita que as que eu usava...

segunda-feira, dezembro 19, 2005

Revistas e Livros

Em 1976 comprei a minha primeira revista com alguma relação a computadores, a "1977 Electronic Experimenter's Handbook" da Popular Eletronics. Para quem não sabe, em 1975 a Popular Eletronics trouxe na capa o primeiro kit de microcomputador. Nos anos seguintes, comprei mensalmente a Popular Electronics e mais ocasionalmente a Radio Electronics (que também trazia artigos sobre microcomputadores).

Alguns anos mais tarde, encontrei no meu estágio alguns exemplares da revista Byte. A revista Byte foi uma das mais influentes nos anos 80 e seus artigos tinham uma abrangência e profundidade que nunca mais encontrei em outras revistas. Nos anos 90 a Byte foi aos poucos piorando, eu desisti de comprar quando saiu um editorial pedindo desculpas pelas brincadeiras das edições de abril... Atualmente a Byte existe somente eletrônicamente.

Em 81 eu conheci a revista Dr Dobbs, mais dedicada a software para micros. A Dr Dobbs continua firme e forte e pode atualmente ser assinada em formato eletrônico, uma boa opção para quem não pagar um dinheirão na banca ou sofrer com a inconstância do correio.

Uma das várias colunas da revista Byte era a "User's Column". O nome da coluna, escrita por Jerry Pournelle, se deve aos relatos feitos na visão de um usuário. Entretanto, o Dr Pournelle nunca foi um usuário comum, graças a seus contatos ele sempre obteve equipamentos e softwares de ponta (muitas vezes na cortesia, mas isso nunca atrapalhou o seu senso crítico). Um dos costumes da User's Column é ter o "livro do mês" (muitas vezes dois, o de informática e o não relacionado a informática).

Tentando copiar este costume, dentro das minhas limitações, vou colocar comentários curtos sobre os livros que tiver lido. No momento acabei de ler "The HP Way" de David Packard. Este livro se concentra mais nas filosofias empresariais da HP do que na sua história, mas é uma leitura fascinante. Mesmo dando um desconto para uma eventual não-isenção do autor, fica claro que a HP foi uma empresa espetacular. Ajuda também a entender porque os herdeiros de David Packard e Bill Hewlett foram contra à associação da HP à Compaq.

Encontro de Programadores C++

Iniciativa do Rodrigo Strauss, ocorreu no sábado (17/dez) um encontro de programadores C++. Foram mais de quatro horas trocando experiências e contando "causos". A idéia é repetir o evento a cada 2 a 3 meses. Assim que o Rodrigo voltar de férias vamos ter um site, aberto para todos os interessados em C e C++ (experientes ou novatos).

"Many Years Later..."

Na semana passada tivemos um encontro do pessoal dos "bons tempos" da Humana. Quem quiser se divertir procure na foto acima as pessoas que aparecem no meu post anterior (dica: o único que não compareceu foi o mais à direita na foto de 88).

domingo, dezembro 11, 2005

Desenvolvimento nos Anos 80

O meu post anterior me fez lembrar sobre as condições de desenvolvimento nos meus primeiros empregos, nos anos 80.

Uma diferença em relação aos dias de hoje era a inexistência de micros sobre as mesas. Os micros ficavam normalmente em uma sala separada, o laboratório. Na foto, o laborátório da Humana Informática, em junho de 88.

No meu estágio na Scopus Tecnologia (1981), trabalhei no desenvolvimento de uma aplicação em Assembler para o microcomputador de 8 bits (MicroScopus). O desenvolvimento era feito no próprio MicroScopus; quando entrei já existia uma quantidade bem razoável deles no laboratório. Exceto por alguns problemas com a novíssima tecnologia de dupla densidade nos disquetes de 8", o desenvolvimento ocorria bastante bem. O MicroScopus trabalha apenas com disquetes de 8", winchester para micro ainda era algo novo (se bem que tinha um protótipo com disco de 5 MBytes) e os disquetes de 5 1/4" eram vistos como não profissionais.

Quando fui contratado fui alocado para o desenvolvimento do firmware de duas nova família de terminais de vídeo (Lepus e TVA 2000). O firmware também era desenvolvido em Assembler, porém em sistemas de desenvolvimento da Intel (Intelect). A Scopus possuia somente dois equipamentos (com disquetes de 8", é claro), por este motivo as edições mais pesadas eram feitas nos MicroScopus. Uma dificuldade adicional era que o hardware estava sendo desenvolvido e testado em paralelo ao software.

Posteriormente, ainda na Scopus, fui trabalhar no software do Nexus 1600, um dos primeiros PC-compatíveis nacionais. Novamente o hardware foi desenvolvido em paralelo com o software, porém neste caso tínhamos dois IBM PC (8088 4.7MHz, disquetes de 5 1/4") para desenvolvimento (em Assembler e Pascal) e teste. No final do desenvolvimento chegou um recem lançado IBM XT, com HD de 10MBytes. Depois que o projeto de hardware ficou estável (uma história interessante para um outro post) e a fábrica conseguiu alcançar a demanda, o laboratório passou a contar com uma quantidade razoável de Nexus. Para surpresa do marketing, só se usava o disquete de 5 1/4" (apesar de uma unidade externa de 8" ter sido desenvolvida) Em 85 a linguagem C começou a ser usada.

Em 1986 fui para a Humana. Uma empresa menor, incialmente tinha somente um Nexus 1600 (8088 8Mhz, 256K e dois disquetes de 5 1/4") para desenvolvimento, demonstração e treinamento. Dois computadores de 8 bits (um MicroScopus e um compatível Apple II) eram às vezes usados para edição. Com a minha chegada foi necessário adquirir mais um micro, no caso um Monydata (8088 8Mhz, 704K mas só um disquete de 5 1/4"). Para impressionar nas demonstrações do software para clientes, o monitor CGA era colorido (um luxo para a época). A Humana desenvolvia primariamente em C, usando Assembler apenas para trechos mais críticos.

Na foto de 88, da esquerda para a direita, um Itautec, o Nexus 1600, o Monydata e um Nexus 2600 (a única máquina com HD). Nos anos seguintes iriam se juntar a eles dois Microtec e um Proceda, todos com HD. Em 1989, embalada por um bom ano, a Humana comprou um lote de micros da Itautec para a sala de treinamento (com disquete) e para o desenvolvimento (com disquete e HD). A novidade destes micros era o vídeo EGA (porém os monitores eram monocromáticos). Com a chegada deles, um dos micros antigos (Proceda) foi para a minha mesa (afinal, eu era o chefe do desenvolvimento!).

quinta-feira, dezembro 08, 2005

Como eu Aprendi a Programar e Como Isto Me Afetou


Meu primeiro contato sério com programação foi no primeiro ano da faculdade, em 1977. O curso de Introdução à Computação para os alunos de Engenharia utilizava a linguagem Fortran IV. Mais que a linguagem, a forma como era feitos os exercícios práticos teve uma influência forte na minha forma de desenvolver software.

A primeira dificuldade era editar o programa. O programa era escrito em formulários especiais (folhas de codificação), que eram entregues para a digitação. Após 2 ou 3 dias, recebia-se o deck de cartões perfurados. Existia para os alunos uma sala com cerca de duas dúzias de perfuradoras, porém normalmente somente 2 estavam totalmente funcionando e várias estavam totalmente inoperantes. É claro que esta sala precisava ser compartilhada pelos 600 alunos do primeiro ano.

A USP dispunha na época de um mainframe Burroughs B6700. A interação dos alunos de toda a USP com ele era através da sala de auto-serviço (cafeteria), onde ficavam uma leitora de cartões e uma impressora. Filas para usar a sala não eram incomum.

O uso do computador era controlado por um sistema de créditos. No início do curso o aluno recebia uma certa quantidade de créditos (algo entre 35 e 45) para serem usados em todos os exercícios do semestre (4 ou 5). Cada execução de programa (tanto o compilador como o seu) consumia um crédito. Existiam limites de tempo e de linhas impressas para o interromper programa em loop ou abusos (tem a famosa estória do poster da Mona Lisa, mas fica para outro dia).

Chegada a sua vez na fila, você colocava os cartões na leitora, apertava um botão, recolhia os cartões lidos e ia rezar na frente da impressora. Após alguns minutos, saia a sua impressão e você saia da sala para analisá-la.

Tratava-se, portanto de uma ambiente sem depuração interativa e com fortes restrições para o ciclo editar-compilar-executar. O resultado era pensar muito mais que codificadar. Na escola faziam-se coisas como o “teste de mesa”, simulando a execução do programa com papel e lápis. O deck de cartões era verificado à mão atrás de erros de sintaxe. Quando ocorria um erro, se procura entender direitinho as causas e verifica-se atentamente se o erro era repetido em outros pontos. Cada letra da impressão de saída era examinada atrás de pistas dos erros.

Embora o processo de desenvolvimento tenha melhorado muito com o passar dos anos nas minhas experiências fora da escola (estágio e posteriormente trabalho), restrições ainda estariam presentes por cerca de uma década. Por exemplo, em 1987 era comum usar um PC sem HD, usar um editor separado do compilador e depurar em assembler com o debug ou o symdeb.

Atualmente trabalhamos em ambientes integrados, que compilam programas em segundos (ou menos) e dispomos de depuradores altamente interativos. Se por um lado isto evita processos ineficientes (como a conferência manual de sintaxe), incentiva também um procedimento preguiçoso e a técnica de programação por tentativa e erro. Quantas vezes corrigimos apenas os primeiros erros de sintaxe indicados e mandamos recompilar ao invés de examinar os outros erros da lista? Quem nunca saiu testando alternativas ao invés de consultar uma documentação ou pensar um pouco? Quantos ainda rabiscam papel tentando conferir um algorítmo ao invés de ir andando passo a passo, corrigindo somente os erros com os quais topar?

Um pouco das técnicas passadas ainda me acompanham até hoje. Particularmente, tenho uma tendência a usar pouco depuradores. Entre outras coisas, é sempre divertido surpreender alguém apontando um erro no código somente olhando o fonte e o resultado. Alguns até acham isto mágica...

terça-feira, dezembro 06, 2005

Rock Progressivo

Um dos efeitos colaterais de ter passado a adolescência nos anos 70 é o gosto por rock progressivo. Uma dica vinda do site oficial do Rick Wakeman: uma rádio belga tem um programa semanal de 2 horas, sem intervalos comerciais, que toca principalmente rock progressivo. E o programa fica disponível para download em MP3 em

http://www.boborocks.be/playlists.php

(é, o apresentador tem a alcunha de Bobo, fazer o que).

Uma curiosidade é que nos últimos programas sempre tem uma versão de Stairway to Heaven, a do dia 6 de novembro é impagável.

Só não esqueçam que duas horas de MP3 dá uns 110 Mbytes, portanto é para quem tem banda larga.

segunda-feira, dezembro 05, 2005

TechEd 2005 – 01/dez

Continuando os meus comentários sobre as palestras:

Introdução ao Windows Communication Foundation (Leonardo Bruno Lima)

Uma palestra sobre o Indigo, que se propõe a unificar DCOM, Remoting, Web Services, etc e com isso simplificar o desenvolvimento de aplicações que expõe e consomem serviços. Estourou o tempo alocado.

BizTalk 2006 e Windows Workflow Foundation (Thiago Cruz)

Como a palestra anterior estourou o tempo e era no lado oposto do evento, entrei com o barco já andando e não consegui me sincronizar direito.

Geração Dinâmica de Código e Interface com Usuário (Pedro Lourenço)

Uma idéia diferente: uma aplicação que no meio da execução dispara a recompilação de um dos seus trechos. Atraiu o meu lado geek/hacker, com a exploração das classes de compilação existentes no .Net Framework. O argumento do palestrante é que esta solução tornaria as aplicações mais flexíveis e ágeis. Um exemplo dado é o cliente que liga pedindo uma alteração e o suporte envia um novo trecho do fonte para ser recompilado pela aplicação. Aí o meu lado manager assumiu e comecei a me perguntar como ficariam o controle de versão e o suporte de uma aplicação que pode ser alterada dinamicamente.

A idéia de aplicações expansíveis é bastante antiga. No tempo dos mainframes acho (não sou tão velho assim) que tinha uns tais de “exit points”, chamadas a módulos externos que ficavam em aberto nas aplicações, para o cliente “grudar” processamentos adicionais. Certamente era uma das idéias das DLLs e ActiveX que nos levariam ao paraíso e que muitos dizem ter criado um inferno (DLL Hell).

Migrando Aplicações PHP e MySQL para .Net (Marcelo de Pauli)

Uma exposição de caso: a re-escrita de uma aplicação cheia de problemas para o ambiente .Net. Um esforço louvável do apresentador em não cair nos lugares comuns da briga Microsoft x Software Livre. Grande parte dos problemas da aplicação original tinham origem na análise e em um processo conturbado de desenvolvimento (4 equipes diferentes ao longo de 4 anos). As principais críticas ao PHP (não orientado a objeto) e ao MySQL (falta de controle da integridade relacional) não se aplicam totalmente às versões mais recente, mas é indiscutível a melhor qualidade técnica dos produtos Microsoft. Pontos extra pela distribuição de um CD com a apresentação e material adicional. O tempo foi insuficiente para uma demonstração completa do antes e depois.

Criando uma Camada de Acesso a Dados Genérica (Rogério Carvalho)

Uma coisa que sempre me preocupou foi o fato do Ado.Net usar classes separadas para cada tipo de banco de dados. Nesta palestra foi apresentado como criar uma camada genérica, que se adapta em tempo de execução ao banco utilizado. Palestra muito boa. O demo foi ambicioso demais (principalmente por ter sido codificado ao vivo), mas felizmente em seguida vinha o intervalo e o apresentador soube tratar bem o estouro do tempo (fez o sorteio dos brindes para liberar os poucos afobados e terminou a demo com a sala cheia).

Segurança no Desenvolvimento WEB (Maycol Romelli)

A maior parte do assunto tratado pode ser vista, com calma, nas apresentações do CD de Segurança do MSDN Brasil. No TechEd a apresentação foi totalmente corrida, no meio do caminho eu “perdi o sincronismo” e não achei mais.

Usando o SQL Server 2005 em Dispositivos Móveis (Max Netto)

Um fato agradável é que o SQL Server CE 2005 vem junto com o SQL Server 2005. Existem várias facilidades novas para o desenvolvedor, principalmente na parte de gerenciamento. Existe também um Query Analiser para CE, ótimo para o desenvolvedor, agora é só não deixar cair na mão do usuário.

TechEd 2005 – 30/nov

Depois do sufoco do evento de lançamento, o TechEd pareceu confortavelmente cheio. Como no ano passado, a Microsoft juntou o evento de Desenvolvedores ao de Profissionais de TI. Exceto pelos keynotes, eram palestras simultâneas em 7 salas (fora as palestras dos patrocinadores).

O principal problema foi tempo. As duas primeiras palestras de cada dia tinham apenas 45 minutos e as demais 1 hora. Vários dos palestrantes não levaram isto em conta, prejudicando a apresentação deles e de outros.

Abaixo comentários sobre as palestras que eu assisti.

Windows Vista (Bjorn Rettig)

A próxima versão do Windows deve sair no final do ano que vem. A Microsoft claramente entrou em “release mode”, já tendo cortado várias features (a única forma comprovada de reduzir o tempo de desenvolvimento no meio de um projeto). As novidades na interface gráfica chamaram a atenção de todos e deixou no ar a pergunta: é um grande avanço em usabilidade ou apenas figurinhas bonitas (eye-candy)?

Outra preocupação é quanto ao hardware necessário. Por enquanto falam apenas de um “processador atual”, pelo menos 512M de Ram (1G aconselhado) e uma placa de vídeo 3D também “atual”. Prevejo um bom 2007 para AMD, Intel, nVidia, ATI, etc.

World Ready Software (Houman Pournasseh)

Ao contrário da maioria das empresas americanas, a Microsoft sempre foi muito atenta para a adaptação de aplicações ao mercado mundial e o Visual Studio .Net coloca ferramentas para adaptação da interface com o usuário ao alcance todos. Uma boa notícia para bilíngües e desenvolvedores é que no Windows Vista o “core” do sistema operacional independe de língua e a interface pode ser mudada através de um “language pack” (supondo que estes language packs sejam fornecidos gratuitamente ou a baixo custo).

Uma vez que a maioria dos desenvolvedores brasileiros foca apenas o mercado brasileiro, ficou a sensação de estarmos no outro lado do assunto (no lado dos que usam aplicações internacionais).

Introdução ao Windows Presentation Foundation (Miguel Ferreira)

Uma visão geral do novo módulo de apresentação do Windows, também conhecido pelo codenome Avalon. O objetivo é levar o usuário a fazer a “imersão” nas aplicações, através de gráficos 3D e animação. No final foi mostrada uma aplicação médica excelente, mas fica a sensação de que algumas animações e efeitos são puro eye-candy.

Fundamentos de Desenvolvimento para Windows Vista (Fabio Galuppo)

Esta palestra se concentrou mais no XAML, a nova linguagem para definir a interface com o usuário no Avalon. A idéia é ter para aplicações Windows algo semelhante ao code-behind do Asp.Net. O decano dos programadores Windows (Charles Petzold) já está escrevendo um livro a respeito.

MSBuild (Fabio Vasquez)

Palestra interessante sobre uma nova ferramenta para controlar a geração de versões, uma espécie de MAKE turbinado controlado por um arquivo XML.

Windows Mobile 5.0 & Visual Studio 2005 (Fernando Zandoná)

Na verdade uma apresentação sobre o Compact Framework no SmartPhone. A palestra ficou bastante divertida graças à demo (tirava uma foto, enviava para um WebService que confirmava o recebimento através de SMS) e a uma votação via SMS feita “em background”.

domingo, dezembro 04, 2005

Lançamento Visual Studio 2005, SQL Server 2005 e BizTalk Server 2006

Terça passada (29/nov) foi o evento de lançamento dos produtos acima. Cerca de 3000 pessoas assistiram, o que deixou o local totalmente lotado. O fato de ter sido anunciado que os primeiros 500 receberiam uma cópia dos produtos garantiu uma fila imensa.

Uma conseqüência deste excesso de gente foi a divisão das pessoas em duas salas já nos keynotes. Na sala “técnica” os keynotes foram exibidos em telões, sem a presença física de palestrantes. A julgar pela reação do público, não agradou.

Neste tipo de evento costuma me bater uma forte sensação de deja-vu, o que acaba gastando a minha paciência. As apresentações são sempre recheadas de chavões elogiosos. A nova versão sempre traz avanços imensos em usabilidade, confiabilidade e desempenho. Colocando de outra forma, a versão que no lançamento anterior era perfeita é vista agora como cheia de falhas que a nova versão corrige...

O Visual Studio 2005 é a primeira revisão para valer do Visual Studio .Net (a versão 2003 é, para mim, apenas correções de bugs e inclusão das features que não ficaram prontas a tempo para o lançamento original). Junto com o VS 2005 está saindo o .Net Framework 2.0 (e o .Net Compact Framework). Aparentemente a plataforma e a ferramenta vão avançar sempre juntas. O ambiente de desenvolvimento está melhor do que nunca, principalmente para as famosas demos de criar uma "aplicação" praticamente sem escrever código.

Com o SQL Server 2005 a Microsoft parece estar partindo para a ofensiva final sobre o mercado de banco de dados. No Ado.Net a Microsoft começou a empurrar com mais força os desenvolvedores para o SQL Server, ao substituir as classes genéricas de acesso a banco de dados da Ado originial por classes específicas. Agora existe integração quase total entre o VS e o SQL Server. O SQL Server teve aperfeiçoamentos em escalabilidade e resistência a falhas visando as grandes aplicações críticas. No outro extremo, a versão Express é grátis (free as in freee beer) para não deixar espaço para o sotware livre (free as in free speech).

O BisTalk 2006 é a figurinha estranha do lançamento. Primeiro porque foi anunciado, não lançado. Segundo porque é um produto pouco conhecido e pouco usado. De uma forma extremamente simplificada, o BizTalk é um ambiente que permite de forma simples (visual, clicando e arrastando) criar procedimentos automáticos de integração de sistemas. Ao receber uma informação de um sistema (via arquivo, email, banco de dados, etc) o BizTalk a repassa para outros sistemas convertendo o formato e fazendo pequenos processamentos. Aparentemente a maioria das empresas acha que é melhor e/ou mais barato escrever uma aplicação específica para isto.

sexta-feira, dezembro 02, 2005

Apresentação

Estou finalmente me aventurando a fazer um blog, vamos ver se o trabalho e a família vão deixar algum tempo para colocar besteiras por aqui. Neste blog vou comentar sobre hardware e software e, mais ocasionalmente, banalidades. Neste primeiro post, um resumo da minha vida com computadores.

O meu contato com computadores começou no primeiro ano da faculdade, em 1977. A minha turma teve a discutível honra de ser a última turma da Poli (Escola Politécnica da Universidade de São Paulo) a usar cartões perfurados até o último ano (no ano seguinte foi inaugurada a sala de terminais de vídeo para os alunos).

Ao final de 81 me formei em Engenharia Eletrônica Digital e fui trabalhar na Scopus Tecnologia, no auge da reserva do mercado de informática. Trabalhei lá em firmware de terminais e depois no projeto de software para um dos primeiros micros brasileiros compatíveis com o IBM PC. Nesta época escrevi o meu primeiro livro da série PC Assembler, que foi publicado pela Editora Campus.

Em 86, chateado com as limitações de ser um desenvolvedor de software numa empresa primordialmente de hardware, fui para uma pequena software house a Humana Informática. Lá trabalhei no desenvolvimento de softwares de comunicação para PC que foram bem sucedidos no mercado. Infelizmente, veio o plano Collor bem num instante de mudança do mercado, com a ascensão do Windows e redes locais.

Após alguns anos dando murros em ponta de faca, fui para a Seal Eletrônica, uma empresa especializada em sistemas para captura automática de dados (leia-se coletores de dados e códigos de barras). Lá, além de desenvolver software para equipamentos móveis com comunicação por radio frequência, trabalhei como "desbravador de tecnologias" e gerente de projetos. Na virada do milênio tive uma curta experiência como Gerente de Produto.

Em 2002, decidi arriscar a sorte como empresário, abrindo a Tamid Tecnologia junto com um amigo (não por coincidência, colega na Scopus, Humana e Seal). A Tamid se especializa em software para equipamentos móveis (principalmente coletores e PDAs).

Dependendo do meu humor, nos próximos posts vou relembrar os bons tempos em que software de verdade se fazia em Assembler ou comentar as maravilhas tecnológicas atuais ou chutar previsões sobre o que está para vir.