17 dezembro 2008

Como se aperfeiçoar como programador

Encontrei faz um tempo atrás em um blog que acompanhava dois postes muito interessantes sobre como ser aperfeiçoar como programador. O primeiro apontava pra um outro post (em inglês) que sugere exercícios para se aperfeiçoar em programação Orientada a Objetos. O outro post fala um pouco sobre como melhorar seu código e muito sobre como se melhorar como programador. Aqui eu vou falar um pouco sobre esses dois posts, das coisas que mais me chamaram a atenção e que eu achei mais interessante. Porém eu recomendo que leiam os posts originais, pois ambos são muito bons, além de encontrarem mais referencias sobre o assunto.

O primeiro post é como se fosse um manual com 9 exercícios a serem praticados para se aperfeiçoar com programador OO, que por sua vez é um resumo de um capítulo de um livro (mais detalhes no post original). O título traduzido deste post seria Aperfeiçoando Pequenas Classes e Métodos Curtos Orientados a Objetos. A proposta é que se escreva um programa de 1000 linhas com as restrições listadas, restrições que devem ser seguidas a risca. Abaixo uma pequena tradução das regras (me perdoem erros na tradução):

1. Use somente um nível de identação por método. Se você precisar mais do que um nível, você precisa criar um segundo método e chamá-lo a partir do primeiro. Esta é uma das mais importantes das restrições no exercício;

2. Não use a palavra reservada 'else'. Teste a condição com o 'if' e saia da rotina se não for satisfeito. Isto previne um encadeamento 'if-else'; e nenhuma rotina merece esta coisa;

3. Encapsule todas as primitivas e strings. Isto direciona diretamente para "obsessões primitivas". Se você quer usar um integer, você primeiro tem que criar uma classe (até mesmo uma classe interna) para identificação do verdadeiro papel. Portanto o endereço é um objeto e não um integer, por exemplo. Isto produz códigos mais claros e testáveis;

4. Use somente um ponto por linha. Este passo impede você de atingir profundamente em outros objetos para pegar campos ou metodos, e conceitualmente quebrar o encapsulamento. Exemplificando, não faça isso:
Order order = new Order(orderId);
string stateId = order.Customer.Address.StateId;
5. Não abrevie nomes. Isto evita a verbosidade processual que é criado por certas formas de redundância - se que você tem que digitar o nome completo de um método ou variável, é provável que você passa mais tempo pensando em seu nome. E você vai evitar objetos chamados Ordem com métodos intitulado shipOrder(). Em vez disso, seu código terá mais chamadas, como Order.ship().

6. Mantenha as entidades pequenas. Não escreva mais do que 50 linhas por classe e não mais do que 10 classes por pacote. A regra 50 linhas por classe é crucial. Isto não somente força a concisão e mantém o foco da classe, mas também mantém a maioria das classes visíveis em somente uma tela do editor/IDE.

7. Não use nenhuma classe em mais do que 2 variáveis instanciadas. Mais de duas instâncias de variáveis de uma mesma classe é certamente a razão para sub-agrupar essas variáveis em uma classe separada.

8. Use primeiramente classes de coleções. Em outras palavras, qualquer classe que contém uma coleção não deveria conter qualquer outra variável membro. A ideia é uma extensão da obsessão primitiva. Se você precisar que uma classe agrupe coleções, então a escreva desta forma.

9. Não use setters, getters or propriedades. Esta é uma abordagem radical para fazer cumprir o encapsulamento. Isto requer a implementação da abordagem de injeção de dependência e adesão máxima ao "Teel, don't ask" (definido em alguns lugares por "Mande, não peça").
Já o segundo post é uma apresentação de Ryan Davis, e eu acho interessante dividi-lo em 2 partes.

Na primeira o autor fala sobre machucar código, mas o que seria machucar código? Bom, basicamente seria modificar totalmente um código legado que tenha sido mau escrito. Imagine aquele código onde quem codificou gosta de complicar as coisas, escreve um código que somente ele entende, cria rotinas desnecessárias... Imagine agora que você passe a ter que cuidar desse código.

É nesse caso que autor prega que devemos machucar o código, reescrever tudo o que não está bem feito, mudar o design se preciso, em fim, melhorar o sistema de uma forma geral. Eu gostei desta filosofia, e a apoio. Pena existirem lugares onde você não tem liberdade para tal.

Já a segunda parte da apresentação fala sobre como se melhorar como programador, pregando basicamente a auto-disciplina para se manter focando no que é necessário fazer e abstenção de distrações que possam atrapalhar seu trabalho. Levando-se isso em conta, isso serve não só para programadores como para qualquer profissional.

Uma coisa muito importante que é mencionado nessa apresentação é que é necessário "entender a sim mesmo tão bem quanto se entender o código" para se chegar a um auto nível como desenvolvedor, e sugere que você se faça constantemente as seguintes perguntas:
  • Como eu faço melhor?
  • Como eu não vi aquele bug?
  • Onde eu estou perdendo em clareza?
  • Como eu posso usar melhor minhas ferramentas?
  • Onde eu desperdiço meu tempo?
  • Como eu me foco melhor?
  • Onde eu estou me segurando?
  • Onde eu estou errando?
Bom, existe muitas coisas importantes nessa apresentação, aqui a intenção foi dar somente um gostinho para vocês sentirem, e se gostarem não deixem de ver a apresentação.

22 outubro 2008

Nova versão do Controle Financeiro

Após quase 1 mês e meio, volto aqui para informar que a nova versão do Controle Financeiro Pessoal já está disponível. O sistema é praticamente o mesmo, porém com uma interface diferente , na minha humilde opinião melhor que a versão anterior, mas ainda tem que melhorar muito. As mudanças nas funcionalidades são:
  • - Inicialmente são mostrados somente os lançamentos do mês atual;
  • - Abaixo da tabela de lançamentos há um seletor de mês que, ao ser alterado, busca os lançamentos do mês selecionado;
  • - Um filtro melhorado, mais prático de se usar e de desabilita.
Bom, como disse, as funcionalidades quase não se alteraram, ficando a novidade maior por parte da aparência nova. O objetivo agora é acertar uns pequenos detalhes que estão faltando, criar um pequeno help para explicar o funcionamento do sistema, e após isso acrescentar novas funcionalidades. Também tentarei refinar um pouco mais a interface, só que ainda to brigando um bocado com HTML e CSS...

Aos que tiverem interesse em visualizar como está o sistema, é só utilizar o usuário "convidado" e a senha "convite01". E aos que quiserem utilizar o sistema (ta certo, não esta muito "usável" ainda, mas já quebra um galho) é só enviar e-mail para tiago_stos at yahoo.com.br.

09 setembro 2008

Mudança de arquitetura

Algumas notícias sobre o sistema Controle Financeiro Pessoal. Primeiro, agora temos um domínio próprio, www.perludum.com.br, o sistema podendo ser acessado no link www.perludum.com.br/cfp, o link anterior ainda esta ativo. A outra notícia é mais técnica, relacionado a arquitetura utilizada.

Sim, estou mudando totalmente a arquitetura do sistema, e com isso também toda a parte visual. Os motivos que me levaram a troca de arquitetura são:
  • - o modo de desenvolver páginas web com o GWT acaba gerando bastante trabalho para mudanças, tendo que compilar mesmo para alterações minúsculas na interface, já que tudo é código Java;
  • - não é muito fácil encontrar informações para resolver algumas dúvidas sobre desenvolvimento com GWT;
  • - estava procurando uma arquitetura onde pudesse ter uma produtividade melhor e fosse mais simples.
Com base nisso e em algumas pesquisas, a arquitetura escolhida foi o framework MVC Mentawai e a biblioteca JavaScript/Ajax JQuery. Com base com o que desenvolvi até agora com essa nova arquitetura, acredito que acertei na escolha.

O Mentawai se propõe ser um framework bem simples e fácil de se utilizar, sem a necessidade de muita configuração para faze-lo rodar, e nesse ponto ele cumpre muito bem o que promete. Porém, apesar de ter uma configuração simples, ele me parece ser um framework robusto e maduro. Não tenho parâmetros para compará-lo com outro framework, mas pelo que já vi dele estou adorando ;-)

O JQuery é a biblioteca JS que, segundo o que dizem, é a mais prática de se utilizar, por usar uma sintaxe mais limpa, além de ser bem leve. Porém por ser bem leve também é uma biblioteca básica, o que pode ser rapidamente resolvido utilizando plugins para as mais variadas finalidades.

O único problema dessa mudança de arquitetura é que os conceitos entre programar utilizando GWT e utilizando essa nova arquitetura (mais de acordo com o padrão de programação para web, acredito eu) é que, para quem só começou a se aventurar agora em desenvolvimento web, são completamente diferentes. Com GWT o desenvolvimento é bem mais parecido com a programação para desktop, talvez isso explique ele ter sido minha primeira opção quando resolvi desenvolver para web. Mas foi muito bom ter iniciado com o GTW, assim pude assimilar alguns conceitos de programação para web mais facilmente.

Por hora estou desenvolvendo essa nova versão do sistema. Acredito que até o final da semana que vem devo ter algo para mostrar.

22 agosto 2008

Disponibilização do sistema Controle Financeiro Pessoal

Este post é para informar que o Controle Financeiro Pessoal esta disponível em http://tiagosantos.nasua.net/cfp/ para quem quiser ver como esta. O usuário disponível é "testando" e a senha é "1234" (sem aspas, claro :). Porém essa localização é temporária, e por hora o sistema é só para testes mesmo, mas se alguém tiver interesse em testar mais a fundo, é só se manifestar nos comentários.

Ainda existem muitas melhorias a serem feitas para que o sistema fique "usável", e seria bem interessante receber feedback sobre o que já esta pronto, sobre melhorias necessárias e sobre recursos desejáveis.

01 agosto 2008

Controle Financeiro Pessoal

Conforme postei a algum tempo (aqui e aqui), dei início a um projeto chamado Controle Financeiro Pessoal, que visa ser um sistema para controle de finanças pessoais, como se fosse um simples fluxo de caixa. Já existe alguma coisa pronta, bem básico mas utilizável.

Como dito, é um sistema Web, porém das ferramentas e frameworks que pretendia utilizar inicialmente só restou o Hibernate. Estou utilizando basicamente o GWT com Hibernate no projeto, já que foi a forma mais simples para mim, que nunca havia programado para Web, começar o desenvolvimento deste pequeno projeto.

O que esta pronto no sistema atualmente é o login e adição/alteração/exclusão de lançamentos. Tudo bem básico ainda, porém pretendo melhorar bem mais o sistema. Os próximos passos serão:

- Melhoria na interface principal do programa;
- Desenvolvimento de consultas para visualização na tela;
- Repetição de lançamentos, para despesas/receitas que existentes em vários meses;
- Cadastro de usuário (atualmente é feito diretamente na base de dados).

Essas são as melhorias que, acredito eu, sejam as mais urgentes a serem feitas, mas tenho planos maiores para o sistema.

Um problema que estou tendo é o de encontrar uma hospedagem que seja barata e boa. Tentei a www.hosted.com.br que oferece hospedagem JSP por pouco mais de R$ 13,00, porém não se demonstrou muito útil já que não consegui colocar o sistema para rodar lá, e também o suporte da hosted se negou a me dar qualquer ajuda sobre o assunto. Ainda não cancelei o plano da hosted, ficarei até o final do mês, q esta pago... Até lá pretendo fazer ainda algumas tentativas para rodar o sistema na hosted. Se alguém tiver alguma informação sobre como colocar o sistema para rodar na hosted, ficarei grato se fosse me passado.

26 junho 2008

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!

29 maio 2008

Ensino e mercado de trabalho

O link abaixo é sobre uma pesquisa realizada sobre demanda de mão de obra e qualidade ensino. Algumas das coisas que a pesquisa fala eu comentei aqui, outras completam o assunto. Leitura muito interessante.

http://www.inovacaotecnologica.com.br/noticias/noticia.php?artigo=pesquisa-mostra-que--apagao-de-engenheiros--e-iminente

27 maio 2008

Rede Social Acadêmica

Hoje acabei tendo uma ideia um tanto quanto interessante. Depois de uma conversa com minha namorada sobre a faculdade EAD que ela cursa, juntando a experiência (não muito boa) que estou tendo na faculdade presencial e o post que escrevi sobre inovação na educação pensei: "Por que não fazer uma rede social voltada para fins acadêmicos?". Hoje em dia existem redes sociais para quase todas as finalidades, desde redes para pessoas que se gostam muito até para pessoas que se odeiam. A maioria dessas redes são utilizadas para fins inúteis, somente perda de tempo.

A princípio havia pensado apenas em um sistema para ensino que possibilitasse a iteração remota entre alunos e professores, isso totalmente em tempo real. Seria algo para vencer as barreiras das distâncias geográficas, sem ser aquela chatice que se vê em alguns cursos EAD, onde o professor fica em um telão explicando a matéria e a única iteração se da na forma de um chat, nada prático quando se esta em curso. Acho que se pode ir além. O ideal seria essa iteração ser por voz. Uma vídeo conferência com voz seria o ideal, onde os alunos pudessem conversar em tempo real com o professor e também com demais alunos. Tecnologia para isso existe... Você pode pensar "isso seria ótimo mesmo para cursos EAD", mas eu digo que cursos presenciais podem se beneficiar muito disso.

Imagine o seguinte cenário, pegando como exemplo o curso de ciência da computação: existem matérias que todo aluno deve cursar, porém algumas matérias são mais específicas, matérias que direcionam os alunos para certas áreas da informática (desenvolvimento, infra-estrutura, banco de dados, gestão...). Na minha opinião deveríamos poder escolher quais matérias cursar, porém para uma universidade dar essa escolha para o aluno ficaria inviável. E é aqui que entra o sistema citado acima. A universidade matéria cada matéria centrada em uma unidade (caso a universidade em questão tenha várias unidades), transferindo as aulas via vídeo conferencia. Sim, teria um gasto com isso, porém menor do que manter professores extras.

Essa foi a primeira parte da ideia que tive. Talvez ela não seja tão boa quanto pensei que fosse, e talvez eu não tenha conseguido descrever ela tão bem quanto a forma com a qual eu desenvolvi ela em minha cabeça. Porém a ideia evoluiu, e junto com ela evoluiu a complexidade. E aqui entra a parte de rede social acadêmica. E aqui novamente eu talvez não consiga detalhar tão bem como a forma que imaginei.

Do início desse século até agora vimos a tecnologia evoluir e se transformar muito, e muito rapidamente, e notamos isso principalmente quando olhamos para a Internet. Redes sociais foram criadas e se multiplicaram como coelhos, apareceu a Web 2.0 e as novas formas de compartilhamento da informação, a cada dia aumenta o número de pessoas que acessam a Internet... Enfim, aparentemente tudo gira em torno da Internet hoje em dia, porém a educação, algo tão importante, esta ficando de fora dessa evolução. Apesar da Internet ser um ótimo meio de pesquisa, quase todo conhecimento humano estar disponibilizado espalhado por sites, a evolução da tecnologia e da Internet ainda não atingiu a educação de forma satisfatória. Sei que existem empresas empenhadas em informatizar a educação, criar meios transmissão de conhecimento, aperfeiçoar aulas a distâncias, mas ainda não vi nada que use toda essa tecnologia apresentada hoje na Internet.

A minha imagem de uma rede social acadêmica englobaria (basicamente):
  • Aulas em vídeo conferência;

  • Iteração direta entre aluno, professor e demais alunos;
  • Aulas armazenadas para consulta posterior em uma área de vídeos;
  • Podcasts sobre aulas, matérias, assuntos disponibilizados tanto pelos professores quanto por alunos;
  • Listas de discussão e fóruns;
E o que temos disponível, em se tratando de tecnologia, par se construir tal rede social? Bom, vejamos:
  • Redes sociais por si só são iguais a mato, todo lugar tem;
  • Para aulas em vídeo conferência poderia ser utilizado algo como o Yahoo! Live;
  • Armazenamento de vídeos: You Tube;
  • Podcast: se vídeo não é problema, som também não é problema;
  • Lista de discussão e fórum: Google Groups, Yahoo Grupos;
Bom, esse é só um pequeno exemplo para mostrar que tecnologia par tal rede existe. Talvez algumas coisas precisem ser melhoradas em muito, como vídeo conferencia, mas acredito que o maior desafio esteja mesmo em integrar todas essas tecnologias.

Como disse, não consegui descrever tudo o que imaginei sobre o assunto. Na verdade o que escrevi é somente uma pequena fração, e a cada linha que escrevo a ideia cresce mais. Mas por hora eu fico por aqui.

26 maio 2008

Projeto criado

Acabei de disponibilizar os fontes do projeto pessoal que criei. A página do projeto é http://code.google.com/p/controlefinanceiropessoal/, não existe muitas coisas lá ainda, somente uma descrição do projeto, algumas das futuras features que pretendo adicionar ao projeto e, é claro, os fontes.

Caso alguém se interesse, fiquem a vontade para comentar.
Criei uma nova tag no blog para post sobre o projeto, a tag CFP.

GWT

Neste post informei que estava começando um projeto particular e que utilizaria as seguintes tecnologias: JSP, Servlet, Struts, Hibernate. Bom, após uma tentativa frustrada de utilizar o YUI (Yahoo User Interface) diretamente com o Struts, decidi tentar aprender somente o que precisava saber sobre Struts primeiro, antes de utilizar alguma coisa diferente no projeto, como interface com AJAX que é o caso do YUI. Novamente fiquei frustrado. Bom, aprendi os conceitos do Struts, fiz alguns testes que funcionaram perfeitamente, inclusive com acesso ao banco de dados utilizando Hibernate. Mas o que me frustrou foi em relação justamente à interface.

O motivo dessa frustração foi por que não existe uma padronização que todos todos concordem para integrar o Struts com o JSP. Pesquisando, alguns diziam que o melhor era utilizar as JSTL padronizadas, já para alguns casos a maioria dos desenvolvedores recomendavam a utilização das taglibs do próprio Struts... Não encontrando um censo comum, nem uma forma fácil de integrar o Struts com JSP (deixo claro que essa é minha opinião que formei com algumas horas estudando Struts), decidir abandonar os estudos desse framework.

Procurando alternativas optei por me dedicar ao GWT (Googlel Web Tookit), que é um framework para criação de interface web baseado em Ajax. O funcionamento dessa ferramenta, que era de uso interno do Google mas foi disponibilizado como código aberto para quem quiser utilizar, é bem simples. A ideia central é a de gerar código JavaScript através de código Java... Você desenvolve a interface com código Java, mais ou menos parecido com a forma como você desenvolve utilizando Swing, porém você só pode utilizar componentes do GWT. A partir desse código, o compilador do GWT o compila para código JavaScript, gerando assim a interface.

Porém o GWT somente utiliza poucos recursos do Java e, principalmente, ele não suporta recursos que sejam do Java 5 ou mais recentes, ou seja, só suporta até o Java 1.4. Mas isso não chega a ser problema, pois o GWT é uma ferramenta voltada para criação de interfaces gráficas, logo não são necessários muitos recursos a mais do que o próprio GWT disponibiliza. Bom, não são necessários muitos recursos extras, mas algumas vezes são necessários alguns recursos, como por exemplo para se utilizar Hibernate com anotações eu seu projeto. Não vou entrar nesse assunto agora, porém no próximo post pretendo dar uma esclarecida nisso.

Outro detalhe importante sobre o GWT é que, sendo ele somente uma ferramenta para a criação de interfaces gráficas para web baseado em Ajax, todo o código que não esta relacionado à interface deve ficar no que é chamado de Server-side Code, ou seja, a lógica de negócio fica nessa área do projeto. Basicamente o Server-side Code é um servlet que é acessado pela interface como serviço, e é aqui que podemos utilizar todos os recursos do Java.

Não vou me aprofundar sobre esse assunto, porém segue alguns links que falam sobre isso de uma maneira melhor do que eu poderia explicar (e que me ajudaram muito a entender sobre o funcionamento da ferramenta):

http://loogica.wordpress.com/2006/11/30/gwt-voce-entendeu/

http://www.pbjug.org/jugs/documentos/google_web_toolkit


Após essa breve introdução sobre o GWT eu paro por aqui. Quem chegou a meu post aprender sobre GWT, recomendo que leiam os dois artigos dos links acima. Nos próximo posts irei colocar exemplos de utilização do GWT, inclusive de como passar a limitação sobre recursos do Java 5 e mais recentes.

06 abril 2008

Apenas uma idéia

Estava mexendo com o Google Desktop, mais necessariamente nos gadgets, buscando algum que fosse útil ao meu dia-a-dia. Encontrei dois em especial, o Tasks e uma interface com o Google Calendar, bem simples mas interessante.

E vendo o funcionamento dessa interface do gadget com o google calendar fiquei pensando, não seria ótimo uma gama de aplicativos onde os dados e o processamento fiquem em sites web e tenhas interfaces com aplicativos residentes em nossos PCs?? Eu penso que sim.

Claro que aplicativos com interface web são muito bem vindos e úteis, porém algumas coisas podem ser melhores aproveitadas tendo uma integração com o desktop, integração essa que navegadores não oferecem (pelo menos eu desconheço).

Por exemplo, o próprio google desktop oferece recurso onde a barra pode ficar na lateral em modo sempre visível, o que é ótimo quando usamos o gadget do calendar deixando-o sempre a vista e sendo avisados de qualquer evento adicionado ao google calendar. O mesmo recurso poderia ser utilizado no gadget tasks, transformando ele num gerenciador de tarefas bem mais interessante. Eu acredito que alguns aplicativos fariam um casamento perfeito ao aliar o melhor dos recursos da internet com o melhor dos recursos do desktop. Pena essa não ser uma tendência.

01 abril 2008

A educação precisa de inovação

Volto a tocar novamente no assunto metodologia de ensino. Por mais que eu tente me acostumar não consigo me conformar com a maneira com que as aulas são ministradas. Estamos num mundo onde tudo se modifica, tudo evolui e ao que parece somente as escolas não mudam, e quando digo "escolas" me refiro desde o ensino fundamental até os cursos de graduação.

Vamos aos fatos:
- desde quando entramos na primeira série do ensino fundamental até quando nos formamos na faculdade temos a presença do professor como a figura principal dentro da sala de aula;

- os recursos mais utilizados são livros, papel, lápis, caneta e borracha;

- geralmente o professor comporta-se como em um monólogo, ou então com uma mínima participação dos alunos;

- a participação dos alunos muitas vezes é forçada por perguntas que geralmente ninguém sabe responder ou não tem interesse em responder;

- o modo mais utilizado para estimular os alunos a estudarem é "quem não estudar vai tirar nota baixa";

- os alunos ficam, de certa forma, dependentes dos professores para lhes tirarem as dúvidas, mostrarem materiais novos e lhes mandarem estudar.
Esses são os fatores que mais denunciam a necessidade de mudança de metodologia de ensino. E não apenas mudar, é preciso inovar. Hoje em dia vemos tecnologia em todos os lugares que vamos, e é preciso utilizar toda essa tecnologia na educação.

Cursos EAD (Ensino A Distância, injustamente descriminados por muitos) são bons exemplos de uso da tecnologia na educação, inclusive com o uso massivo da internet, e também são bons exemplos de quebra de paradigma e inovação. A maior parte do material para consulta, a entrega de exercícios e as próprias aulas ministradas são via internet. A parte de inovação no estudo vai de encontro com o que escrevi neste post, onde após assistirem a aula os exercícios são resolvidos e debatidos em grupo, bem diferente do modelo cada-um-por-si praticado na maioria dos cursos presenciais. Um bom começo para mudarmos a metodologia de ensino talvez seja utilizar o que há de bom no EAD.

Outro exemplo de uso da tecnologia na educação são os notebooks educacionais de baixo custo. Eu enxergo essas iniciativas como uma luz no fim do túnel da decadente educação fundamental brasileira. Mas como nem tudo são flores, existem pesquisas que indicam que o mau uso desses notebooks pelas crianças podem diminuir o desempenho nas aulas. E isso me leva ao ponto onde eu queria chegar. De nada adianta o uso de toda tecnologia disponível se a aula não é interessante. E não se enganem, qualquer matéria pode ser a mais interessante do mundo, ou uma tortura inimaginável, vai depender muito de como essas aulas são ministradas. E posso dizer seguramente que o maior motivo pelo qual as salas de aula ficam vazias é a falta de interesse dos alunos pelas matérias.

É necessário inovação para fazer os alunos se interessarem pelas aulas, estudarem e realmente aprenderem. Um começo para realizar essa inovação é abusar de trabalhos em equipe dentro de sala de aula (só fica estranho escrever que uma metodologia tão antiga pode ser considerada inovação, mas...). A realização de trabalhos em grupos durante as aulas tiraria parte da responsabilidade do professor de transmitir todo o conhecimento para os alunos, que passariam a compartilhar mais conhecimento e buscariam informações em outras fontes (livros, internet...), tirando a dependência que os alunos tem do professor, que teria um papel mais de coordenação. Só fica a dúvida se alguns professores iriam aceitar perder parte de sua importância dentro da sala de aula.

Uma outra ideia que poderia dar certo é em relação ao foco do que é ensinado em algumas matérias. Em todos os cursos temos matérias que não estão diretamente relacionadas com o curso. Essas matérias não precisam ser estudadas em seus detalhes, logo o foco das aulas poderia ser estudos de casos onde são utilizados esses conhecimentos.

Bom, estou ainda organizando essas ideias, as quais pretendo apresentar na universidade onde estudo. Acho que mudanças assim só acontecem quando os maiores interessados tomam a iniciativa nesse sentido, que no caso são os alunos. Caso eu tenha mais alguma novidade sobre o assunto postarei aqui.

10 março 2008

Utilização das linguagens de programação

Novamente lendo o blog do Cezar Taurion me deparei com um post bem interessante falando sobre o debate que temos visto ultimamente sobre a substituição do java por linguagens de programação dinâmicas, mais especificamente Perl, PHP, Python e Ruby.

faz algumas semanas que esse debate (em alguns casos são brigas) vem acontecendo principalmente em fóruns, lista de discussão e blogs. Muitas vezes intitulado como o "fim do Java" ou "a morte do Java", esse debate teve início, se não me engano, em uma matéria de um site de noticias norte-americano que não sei qual foi, somente li posts brasileiros comentando sobre o assunto, mas ele falava justamente que o Java, em pouco tempo, seria substituído por linguagens dinâmicas e pela plataforma .Net da Microsoft. No post do Cezar não foi mencionado o .Net, mas foi bem comentado sobre as linguagem dinâmicas, e foi mencionado também o site da Tiobe Software que é conhecido por disponibilizar uma espécie de ranking das linguagens de programação.

Resolvi dar uma passada no Tiobe para ver como anda o ranking das linguagem de programação e analisar principalmente as linguagens citadas no post. Neste mês temos: Java aumento de 2,61%; PHP queda de 0,68%; Perl queda de 0,64%; Python aumento de 0,70%; Ruby queda de 0,11%. Analisando assim podemos dizer que Java é a linguagem que tem crescido mais dentre as mencionadas.

Mas essa análise não mostra a tendência de utilização das linguagens, que pode ser constatada olhando-se o gráfico, que mostra o período de 2002 à 2008, onde podemos ver que Java já passou por um período de queda muito maior, mas agora esta mais estável, e que as linguagens dinâmicas tem sim uma curva de utilização com forte subida, a não ser Perl que esta em queda. Porém se observarmos com atenção vemos que a maior parte do mercado que essas linguagens dinâmicas tem tirado é da dupla C/C++, e não do Java.

Levando somente esses dados em consideração, não acredito que seja possível dizer, nesse momento, que Java vai morrer (até mesmo por que linguagens de programação não morrem, somente diminuem a utilização), nem mesmo que Java será substituída por outras linguagens ficando sua utilização restrita a alguns nichos e a sistemas legados. Aliando isso aos argumentos que Cezar Taurion colocou, podemos acreditar que, nas palavras de Cezar, "Aprender e ser proficiente em Java ainda é e será por muito tempo uma boa opção profissional."

Só para terminar, outras observações interessantes que podemos fazer analisando o gráfico do Tiobe:
- C# não tem crescido tanto quanto a Microsoft gostaria, ficando apenas com 4,143% de utilização;
- Visual Basic tem crescido bastante, será que isso é por causa do Visual Basic .Net ter se transformado em uma linguagem realmente boa para desenvolvimento, ou o pessoal gosta mesmo é da facilidades de criar "telinhas" somente utilizando o mouse?
Bom, a respeito do Visual Basic, eu não sei se realmente a versão .Net esta boa, mas até a versão 6 que eu conheço a única vantagem que essa linguagem tem em cima de várias outras é a facilidade de se criar telas, fora isso não vejo nenhum motivo para um crescimento tão grande dessa linguagem. Eu particularmente acho o VB uma linguagem péssima para se criar sistemas grandes, talvez seja melhor para criar pequenos aplicativos, e mesmo assim costuma dar muito problemas na hora do desenvolvimento. Mas eu não conheço o VB .Net, talvez por ter melhorado muito nessa versão esse seja o motivo desse crescimento. Preciso conferir isso.

06 março 2008

Novo projeto

Conforme disse no post anterior, estou iniciando um projeto para estudo de Java. Bom, não é só para estudo, é também uma necessidade pessoal que tenho. Vou falar um pouco deste projeto.

Eu costumo controlar meu orçamento pessoal em uma planilha eletrônica, que até funciona satisfatoriamente, porém todo o trabalho é feito manualmente, o que gera muito trabalho. Mas a ideia de desenvolver um pequeno sistema para controle financeiro não é nova, já vem de uns 3 anos atrás, quando eu comprei um PDA (um Palm Zire 21) visando procurar algum software para essa finalidade que eu pudesse instalar nesse PDA. Mas como não encontrei nenhum que me atendesse, resolvi eu mesmo desenvolver um sistema, pensando inicialmente usar o J2ME, mas como não existia JVM para aquele modelo de palm acabei conhecendo o SuperWaba que poderia ser considerado, a grosso modo, como uma "cópia" do Java especializada para rodar em PDAs (não é isso, mas não achei nesse momento uma explicação melhor).

Cheguei a desenvolver duas versões de um aplicativo de controle de orçamento para o PDA utilizando SuperWaba. A primeira ficou horrível, já a segunda ficou bem melhor, porém ainda não estava em um nível no qual poderia ser utilizado no dia-a-dia, sem falar de alguns pequenos bugs. Mas apesar do pequeno sucesso que tive, acabei desviando minha atenção desse software e acabei deixando-o de lado... para começar utilizar a planilha.

Após um bom tempo utilizando a planilha, comecei a pensar se não seria melhor desenvolver um pequeno sistema para substituir a planilha, logicamente adicionando mais recursos. Juntei isso com a vontade de aprender a desenvolver para a web com Java, então criei o projeto no Google Code chamando Controle Financeiro Pessoal. Bom, sobre o projeto posso dizer que será um sistema web, utilizará JSP, Servlet, Struts, Hibernate... e tudo mais que eu tiver direito ;-)

Qual critério usei para escolher essas ferramentas? Bom, praticamente to tentando aprender o que é mais pedido pelo mercado de trabalho. Principalmente sobre o Struts, já vi em vários lugares que ele nem de longe é o melhor o framework MVC que temos, mas ainda é o mais pedido nas vagas, por isso vou utiliza-lo no aprendizado.

E o motivo de fazer um sistema web é por que poderei utiliza-lo em qualquer lugar onde tenha um computador com acesso a internet, além do mais como a tendência de cada vez mais podermos acessar internet através de PDAs, celulares e smartphones, a intenção é, se o projeto der certo, desenvolver uma interface para dispositivos portáteis acessarem. Vamos ver no que vai dar.

28 fevereiro 2008

Tirando as teias de aranha...

Depois de muito tempo sem postar nada no blog, volto aqui para começar mais uma temporada de posts...
No ultimo post disse que estaria iniciando um novo projeto (sistema de backup), porém algumas coisas mudaram e desisti desse projeto, pelo menos por hora (pode ser que algum dia eu ainda possa inicia-lo).
E se eu não iniciei esse projeto, então o que eu andei fazendo???? Bom, primeiro me empolguei com a possibilidade de ingressar em um projeto open source de grande porte, o Openbravo ERP.
Partindo deste post do Cezar Taurion onde ele fala sobre possíveis projetos open source que terão um bom crescimento, cheguei a conclusão de que talvez fosse muito bom para mim participar de um projeto de localização de um software ERP de boa visibilidade. Em primeiro lugar iria me aprofundar no conhecimento de sistemas ERP, em segundo lugar eu iria me aprofundar nos estudos de java, além de poder colocar em meu currículo como experiência ;-). Mas não foi bem assim...
Primeiro não havia nenhuma comunidade aberta que estivesse trabalhando nessa localização em que eu poderia entrar, então eu me empenhei em agitar algumas pessoas para criar essa comunidade. E consegui... Mas nem tudo são flores. No inicio com a empolgação em que muitos estavam com o projeto (inclusive eu) as coisas andaram um pouco. Criamos um grupo de discussão e um projeto no google code para trabalhar com o projeto. Foi traduzido algumas páginas de manuais no wiki oficial do projeto e também uma melhoria nos arquivos de tradução do sistema logo nas primeiras semanas. Mas acho que a empolgação durou pouco, inclusive para mim. Em poucas semanas o grupo de discussão parou de receber mensagens, a tradução aparentemente parou de ser feita e o projeto acabou largado as traças. O que aconteceu? Pelo que percebi, era necessário um líder de projeto, alguém que controlasse as coisas e incentivasse a continuidade do projeto, porém acho que não havia ninguém com esse perfil para um projeto do tamanho que esse iria se tornar. E não, eu também não tenho esse perfil, apesar de eu praticamente ter possibilitado a criação desse projeto.
Uma outra conclusão a que cheguei é que eu não estou pronto para participar de um projeto muito grande, ou seja, não tenho conhecimento técnico suficiente para isso. Um motivo pelo qual resolvi não participar mais do projeto de localização.
Levando tudo isso em conta resolvi criar um pequeno projeto para melhorar meu conhecimento em java. Mas sobre isso falo no próximo post.