quinta-feira, 30 de outubro de 2008
Redes sociais virtuais e educação
Criamos uma rede social para discutir esse tema e muitos outros relacionados. Se você tem interesse em participar mande um email para pedroso_araujo@yahoo.com.br.
sábado, 18 de outubro de 2008
Sala de aula na nuvem
quinta-feira, 16 de outubro de 2008
Aprenda Programar em Dez Anos
Não é difícil encontrar livros com títulos tais como: "Aprenda Java em 7 Dias", "Aprenda Pascal em Três Dias", e assim por diante. A primeira impressão que se tem é que há uma grande corrida para aprender computação, ou que computação é algo muito mais fácil de aprender que qualquer outra coisa. Ou alguém já viu livros sobre como aprender tocar piano, física quântica ou adestrar cães em tão poucos dias?
Pesquisadores têm mostrado que leva-se aproximadamente dez anos para tornar-se um expert em uma grande variedade de áreas que incluem: jogar xadrez, compor músicas, pintar, nadar, jogar tênis, etc. Mozart, considerado um prodígio musical aos 4 anos, levou mais 13 anos antes de começar a produzir música de qualidade. O grupo musical The Beatles surgiu com um sucesso em primeiro lugar nas paradas em 1964, mas já vinham tocando desde 1957. Samuel Johnson acredita que pode levar mais que dez anos: "Excelência em qualquer área pode ser alcançada apenas com esforço de uma vida toda; não dá para ser comprada por menos que isso".
Peter Norvig dá sua receita para obter sucesso em programação:
- Se interesse por programação, e faça por que é divertido. Tenha certeza que é dvertido para você dedicar dez anos nisso.
- Programe. A melhor forma de aprender é "aprender fazendo".
- Você pode passar quatro anos em uma universidade. Mas lembre-se "Educação em ciência da computação não faz de ninguém um gênio em programação tanto quanto estudar pincéis e pigmentos não fazem um bom pintor" segundo Eric Raymond.
- Trabalhe em projetos com outros programadores. Aprenda com eles e teste suas habilidades.
- Procure entender programas escritos por outros. Desenvolva programas que sejam fáceis de manter por outros programadores.
- Aprenda pelo menos meia dúzia de linguagens de programação. Preferencialmente de paradigmas diferentes: orientadas a objeto, funcionais, de script, estruturadas, etc.
- Lembre que existe um computador onde seu programa irá rodar. Saiba quanto tempo leva para o seu computador executar uma instrução, carregar uma palavra na memória, ler palavras do HD, etc.
- Se envolva no esforço de padronização de uma linguagem.
- Tenha o bom senso de cair fora desse processo de padronização tão rápido quanto possível.
segunda-feira, 13 de outubro de 2008
Convenções de código
- 80% do custo de desenvolvimento de um software é gasto com manutenção
- Dificilmente um software é mantido por toda sua vida pelo autor original
- Convenções de código dão legibilidade ao software
No caso dos componentes eu os nomeio iniciando com duas ou três letras minúsculas abreviando o tipo do componente seguidas de um nome iniciando em maiúscula:
- Botões (TButton, TBitBtn, TSpeedButton) - iniciam com btn. Exemplo: btnFechar, btnOk, btnCancelar
- Caixas de texto (TEdit) - iniciam com edt. Exemplo: edNome, edEndereco
- Caixas combinadas (TComboBox) - iniciam com cbx. Exemplo: cbxCidade, cbxEstado
- Caixas de lista (TListBox) - iniciam com lb. Exemplo: lbProfissao, lbEscolaridade
- Rótulos (TLabel) - iniciam com lbl. Exemplo: lblNome, lblEndereco
- Barra de rolagem (TScrollBar) - iniciam com sb. Exemplo: sbIdade
- Caixas de verificação (TCheckBox) - iniciam com chx. Exemplo: chxSituacao
- Menus (TMainMenu, TPopUpMenu) - iniciam com mn. Exemplo: mnPrincipal
- Formulários (TForm) - iniciam com frm. Exemplo: frmPrincipal
- Unidades (Unit) - iniciam com u_. Exemplo: u_principal
- Tabelas (TTable) - iniciam com tb. Exemplo: tbProduto, tbCliente.
- Fontes de dados (TDataSource) - iniciam com ds. Exemplo: dsProduto, dsCliente.
- Queries (TQuery) - iniciam com que. Exemplo: queProduto, queCliente.
sábado, 11 de outubro de 2008
Minha paixão pela computação - IV
domingo, 21 de setembro de 2008
Minha paixão pela computação - III
terça-feira, 16 de setembro de 2008
Tecnologia Java Card
Suas principais características são:
- Interoperabilidade. Escreva uma vez e rode em qualquer cartão que suporte Java Card.
- Seguro. Além da segurança herdada de J2SE, implementa funções de criptografia.
- É Java.
- Múltiplos aplicativos num mesmo cartão. Num mesmo cartão você pode ter serviços de banco, telefone, vale-refeição, etc.
- Dinâmico. É possível instalar um novo applet mesmo que o cartão já tenho sido distribuído. A atualização pode ser feita na próxima vez que o cartão for inserido no terminal.
- Compatibilidade com padrões existentes para smart cards.
- Cartões Subscriber Identity Module (SIM), usados em telefones celulares. Esses cartões servem para identificação dos usuários. Com Java Card podem oferecer serviços bancários, por exemplo.
- Cartões para transações financeiras online e offline. O sistema com essa tecnologia pode permitir inclusive transações offline. Se você precisar fazer um saque e não estiver próximo de um terminal a transação pode ser realizada. Na próxima vez que você se conectar os dados são sincronizados.
- Cartões de identificação de planos de saúde que podem carregar o prontuário de seus usuários.
- Programação orientada a objetos.
- Característica de proteção da linguagem aplicada aos applets Java Card e
- Disponibilidade de poderosas ferramentas de desenvolvimento.
sábado, 13 de setembro de 2008
Minha paixão pela computação - II
No DEE, nesse período, estava sendo construído, como produto de trabalhos de conclusão de curso (TCC), um microcomputador baseado no microprocessador 8080 da Intel. O 8080 era um processador de 8 bits, precursor do 8088, que originou o IBM-PC, ancestral dos atuais Core 2 Duo, Dual Core, etc. Esse microcomputador já estava funcionando, sendo operado através de um painel de chaves. Veja uma imagem desse painel aqui. Podia apenas ser programado em binário. Cada instrução assembly deveria ser convertida para binário e introduzida na memória através das chaves. Cada chave ligada correspondia ao bit 1 e desligada ao bit 0. O resultado do programa era mostrado através de um conjunto de LEDs (Diodo Emissor de Luz). Tudo muito simples e prático. Um bit errado e se começava tudo de novo. Coisa de paixão mesmo. Algo bem primitivo, mas um laboratório fantástico.
Veio então o meu maior desafio na graduação: construir um programa em assembly que permitisse a carga de programas através de um teclado e que o reultado fosse mostrado em um monitor de vídeo. As instruções do programa a ser carregado estariam em hexadecimal. Convenhamos, um pouco melhor que binário. Esse foi o meu TCC. O trabalho foi feito. Relendo-o agora eu penso que seu fosse o meu orientador eu não iria para a defesa. No entanto não tive a chance de testar o programa. O terminal de vídeo que deveria ser utilizado não chegou a tempo para a realização dos testes antes da defesa. Para alívio meu. Não sei até hoje se a coisa funcionou. Meu TCC foi todo produzido usando uma máquina de escrever manual e as figuras desenhadas à mão usando uma caneta preta e régua. Quanta mão de obra.
Enfim, em Dezembro de 1980 encerrei o curso de Engenharia Elétrica e voltei para Santarém. Mas essa parte eu começo a contar em um outro dia.
quinta-feira, 11 de setembro de 2008
Múltiplas habilidades
O curso de Sistemas de Informação tem como objetivo formar profissionais que estejam aptos a avaliar, dimensionar e selecionar recursos de tecnologia da informação de acordo com as necessidades específicas de uma organização. Esta é apenas uma das habilidades que deve ter o egresso do curso, além de outras. Assim, o curso deve prover aos acadêmicos diversas abordagens sobre uma mesma matéria de forma que eles estejam preparados para oferecer opções diferenciadas às empresas onde venham prestar serviço. Em conseqüência disso, no caso de linguagens de programação, o curso oferece o Delphi como ambiente para desenvolvimento de software comercial. Sendo o Delphi baseado na linguagem Object Pascal, é natural que essa linguagem também seja utilizada em algumas disciplinas, para preparar os alunos para o estudo de Delphi em Linguagem de Programação Comercial. E por quê Delphi? Por quê não VisualBasic? Se as duas linguagens (ObjectPascal e Basic) em que se baseiam os ambientes forem analisadas sob o aspecto de orientação a objetos a conclusão que se chega é que a abordagem de ObjectPascal é mais eficiente, principalmente quando se trata de herança. Apesar de Basic ser mais simples de ser aprendida que ObjectPascal, deve-se pensar em desenvolvimento em equipe, quando a orientação a objetos é fundamental, devido principalmente à reutilização de código. Ambas estão no grupo das chamadas Rapid Application Development (RAD), o que as tornam as mais populares para o desenvolvimento voltado para ambientes GUI (Interface Gráfica do Usuário). Segundo o índice TIOBE de setembro/2008 a linguagem Delphi é a décima mais popular do mundo. Ao se observar a lista, verifica-se que, Java é a primeira, VisualBasic a quarta e Delphi a décima. VisualBasic é mais popular que Delphi por ser a linguagem da Microsoft e não porque é melhor. As outras linguagens, pela nossa avaliação, não se enquadrariam no que se chama linguagem comercial e visual, e portanto ficam fora dessa discussão. De qualquer forma a opção por uma linguagem para desenvolver um sistema deve levar em consideração as necessidades do cliente. É uma decisão de projeto. Espera-se ter contribuído para justificar o estudo de mais de uma linguagem de programação no curso de Sistemas de Informação e também o porquê da opção pelo ambiente Delphi.
sábado, 6 de setembro de 2008
Minha paixão pela computação - I
sexta-feira, 31 de agosto de 2007
Análise de Sistemas
A análise é um mecanismo de comunicação e também um acordo entre os interessados. Na análise são definidas as funções que serão implementadas no sistema e, por conseguinte, as funções que não farão parte do escopo do mesmo.
Segundo Pressman, qualquer método de análise deve contemplar cinco atividades:
- Representar e entender o domínio da informação;
- Definir as funções que o sistema deve executar;
- Representar o comportamento do software em função dos eventos externos;
- Separar os modelos de informação, função e comportamento de maneira a apresentar os detalhes de forma hierárquica, e;
- Prover a informação essencial em direção à determinação dos detalhes de implementação.
Modelos de Análise
Existem algumas propostas de modelos para descrever a análise de sistemas:
- Modelo de Negócio: descreve como funciona o negócio onde o sistema está inserido.
- Modelo de Dados: descreve os dados armazenados na forma de um modelo conceitual, utilizando o modelo entidades-relacionamentos.
- Modelo Funcional: descreve a funcionalidade essencial do sistema, utilizando o diagrama de fluxo de dados.
- Modelo Orientado a Objetos: descreve o sistema através dos dados e das funcionalidades, utlizando o diagrama de classes.
O trabalho de análise é feito a partir da comunicação entre as pessoas interessadas. A comunicação, em geral, é feita da linguagem natural dessas pessoas, tais como o português, o inglês, etc. Um grande problema dessas linguagens é que elas permitem a formação de expressões ambíguas.
No desenvolvimento de sistemas deve-se evitar as duplas interpretações. Assim, deve ser utilizada uma linguagem de forma que uma sentença só tenha uma interpretação. Várias linguagens foram criadas, principalmente as gráficas, com o objetivo de restringir as ambiguidades e também de facilitar o entendimento por todos os interessados. Dentre essas ferramentas de análise podemos relacionar a Técnica Estruturada e a UML (Unified Modeling Language).
segunda-feira, 28 de maio de 2007
Cinco tipos de personalidades que você não quer em sua equipe
O Cowboy: esta pessoa é selvagem e lunática. Cowboys não pensam duas vezes antes de incluir comentários inapropriados ao código, esconder ovos de Páscoa na aplicação, fazer remendos no escopo do projeto. Cowboys frequentemente são trabalhadores inteligentes e rápidos e gostam de ser criativos. Trabalhe com essas pessoas, estabelecendo regras e procedimentos, controle de qualidade, tal como revisões em pares, e conversas diretas sobre o que é permitido.
O Rato: o rato é uma pessoa tímida e retraída que precisa de sua instrução, aprovação e mão forte em cada ação que ela realiza. Ratos podem ser facilmente influenciados pelos membros da equipe, stakeholders, e pelos seus próprios medos de prosseguir no trabalho. Seu trabalho é ensinar os ratos a rugir construindo sua confiança e forçando-os a tomar decisões.
A Rocha: Duro, teimoso e difícil de mudar, esse é a Rocha. Rochas são as pessoas que geralmente tem anos de experiência e querem fazer as coisas à sua maneira porque é a maneira correta. São o tipo de pessoa que dizem, "Há duas maneiras de desenvolver uma aplicação: a minha maneira e a maneira correta - e elas são a mesma". Negocie com a Rocha para estabelecer um comando firme e segui-lo.
O Linguista: Linguistas adoram linguagem, e não sabem quando parar de falar. Suas conversas sem fim consomem tempo de projeto, de reuniões, e roubam tempo de outros desenvolvedores, que estão trabalhando em suas tarefas. Você tem que negociar com essas pessoas diretamente conduzindo-as à direção certa. Se um linguista perturbar a equipe de projeto, você tem que intervir ocasionalmente.
O Tio: Lembra do seu tio favorito? É o cara com todas as brincadeiras, estórias engraçadas e truques de mágica. Você adora o seu tio, mas não quer ele em seu projeto. Tios são normalmente trabalhadores rápidos e supõem que o resto da equipe trabalha tão rápido quanto eles. Dê a eles tarefas mais desafiadoras para garantir que eles não vão ficar entediados e começar a incomodar os ouvidos do restante da equipe.
Traduzido do livro SOFTWARE PROJECT MANAGEMENT FOR DUMMIES de Teresa Luckey e Joseph Phillips lançado em 2006 pela Wiley Publishing.
A morte pela documentação
Vez após vez, organizações têm criado bons produtos mas não investido os recursos necessários em sua documentação. Muitos desses produtos se tornaram um fracasso de mercado, não por serem maus produtos, mas porque as pessoas não sabiam como usá-los.
Havia uma grande organização de software que costumava fazer bons pacotes de desenvolvimento. A versão 3 de um software desta companhia era muito bem aceito e tinha grande chance de se tornar a plataforma de desenvolvimento dominante em uma área específica.
Querendo dominar o mercado, a organização investiu todos os seus recursos na versão 4. A interface com o usuário foi mudada na versão 4. Mudaram as opções. Mudaram as chamadas. Mudaram tanto que os usuário teriam dúvidas se a versão 4 era o mesmo produto que a versão 3.
De fato, foi criado um produto de desenvolvimento que estava bem à frente de seu tempo e teria impulsionado dramaticamente a programação. O que aconteceu, na verdade, é que a coisa toda se inverteu e o software foi descontinuado. Enquanto isso, outra organização liberou o software de desenvolvimento que se tornou padrão de fato.
O que deu errado? Como essa organização falhou tão miseravelmente?
Ela vendeu o produto por dois preços. Pelo primeiro preço a empresa entregava apenas a mídia. Pelo segundo preço (quase duas vezes mais) entregava aos usuários a mídia e milhares de páginas de manuais de como usuá-lo.
Muitos programadores pensaram que mudando da versão 3 para a versão 4 estariam fazendo uma mudança evolucionária, e não compraram os manuais. Sem os manuais, os desenvolvedores se perderam sem conseguir imaginar como fazer o que eles precisavam fazer. Frustrados e aborrecidos, os desenvolvedores abandonaram o pacote.
Aqueles que adquiriram os manuais foram literalmente esmagados pelos milhares de páginas espalhadas por cinco livros que se referenciavam mutuamente de tal modo que os usuários tinham que ter todos os livros abertos ao mesmo tempo de maneira a imaginar como fazer o que precisavam fazer. Estes que gastaram o dinheiro extra também abandonaram a nova plataforma.
Naturalmente a plataforma morreu; não porque não era boa, mas porque a documentação a matou. Documentação escrita adequadamente, empacotada adequadamente como um produto de qualidade, deveria impulsionar a empresa para uma posição invejável.
Quando você projetar sua documentação, tenha em mente essa história e assegure que seus produtos não se tornem presa do mesmo fato. Esta catástrofe é bastante fácil de prevenir, mas você deve fazer um esforço consciente de fazer isso.
Traduzido do livro SOFTWARE PROJECT MANAGEMENT FOR DUMMIES de Teresa Luckey e Joseph Phillips lançado em 2006 pela Wiley Publishing.
quarta-feira, 20 de setembro de 2006
Sobre Requisitos e Projeto
"É melhor saber algumas das questões a todas as respostas" (James Turber).
"O milagre mais comum da engenharia de software é a transição da análise para o projeto e do projeto para o código" (Richard Due).
"Você pode usar uma borracha na prancheta de desenho ou uma marreta no canteiro de obra" (Frank Lloyd Wright).
"Um erro comum que as pessoas cometem quando tentam projetar algo completamente seguro tem sido subestimar a engenhosidade dos inteiramente doidos" (Douglas Adams).
domingo, 3 de setembro de 2006
Engenharia de Software - Uma história de amor e ódio
Palestra de Christian Reis na Feira de Informática 3.0 de 2003 na UFSCar. Eis alguns pontos:
- A profissão moderna mais difícil;
- Exige conhecimento técnico detalhado em uma área em constante ebulição;
- O que eu espero de vocês é que tenham paixão pelos seus produtos, e com estes produtos, que ajudem a construir o Brasil;
- Se não tiverem paixão pelos seus produtos me avisem para eu nem pensar em ser um consumidor;
- Esqueçam suas aulas: desenvolver software (de qualquer maneira) é Engenharia de Software;
- Não se enganem: escrever código, rodar e testar é um processo de software;
- O que nos falta é uma visão de escala: para que tipos de tarefas são adequados que tipos de processo;
- Obviamente, a preocupação com processo de software é menor quando é um projeto de 3 horas;
- Processo de Software é um nome chique para descrever quando sentamos juntos e planejamos construir ou consertar algo:
- Descobrir o que tem para ser feito.
- Descobrir como será feito.
- Fazer. Fazer. Fazer. Fazer.
- Descobrir se faz mesmo o que era para fazer.
(enxague, repita)
- Para aprender como construir software, precisamos de bons exemplos;
- Nenhum processo bem projetado é burocrático, inútil ou sem resultado. Mas o processo tem que se encaixar na sua equipe;
- Engenharia de Software é para ser divertido e interessante (e seu amigo na hora que dá tudo errado);
- Engenharia de Software ensina ter amor pela equipe, amor pelo usuário, amor pelo produto;
- Engenharia de Software é uma passo em direção à evolução da profissão;
- "Pessoas que dizem que algo não pode ser feito não devem interromper quem está fazendo" (Provérbio Chinês)
sábado, 2 de setembro de 2006
O que é Engenharia de Software?
Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter softwares econômicos que sejam confiáveis e que trabalhem eficientemente em máquinas reais (NAUR apud PRESSMAN, 2006).
Engenharia de Software é: (1) aplicação de uma abordagem sistêmica, disciplinada e quantificável para o desenvolvimento, operação e manutenção do software; isto é, a aplicação da engenharia ao software. (2) o estudo de abordagens como as citadas em 1 (IEEE, 1993).















