Quinta-feira, Junho 05, 2008

Mais sobre ambientes de desenvolvimento

Dividi o post em três partes para melhor compreensão dos leitores.

  1. Na primeira falo da repercussão do post sobre os ambientes de desenvolvimento em Windows e Linux.
  2. Na segunda parte contarei sobre minha relação com o Windows e Linux.
  3. Na terceira e última parte falo sobre os 10 fatos que causaram tanta polêmica.

Repercussão do post


Acho que o pessoal entendeu o post anterior como um flame entre Linux x Windows.
Mas não era essa a intenção! Queria mostrar as diferenças entre os ambientes.
Alguns me chamaram de radical, disseram que gosto de alimentar lendas, etc e tal.
Tudo bem! Posso até ser radical, embora não queria (tsc).
Vou explicar isso contando um pouco sobre minha relação com Windows e Linux.


Minha relação com Windows e Linux

Sempre fui usuário Windows. Conheci o Linux (Slackware) na universidade no início de 2003.
Tornei-me usuário de Linux em tempo parcial (Linux na universidade e Windows em casa).
Como passava mais tempo na universidade (programando para disciplinas, programando para projetos de pesquisa) passava mais tempo no Linux.
Quando não terminava as atividades na universidade e levava tarefa para casa continuava desenvolvendo no Windows, mas não me sentia tão confortável quanto antigamente.
Então, instalei o Linux (Slackware) em casa, no meu desktop (fiquei com dual boot).
Posteriormente comprei um notebook com Windows e também instalei Linux (Ubuntu) nele (outro dual boot).
Continuei usando o Windows para outras atividades esporádicas e Linux para desenvolver e trabalhar.
Mas como a preguiça é a mola mestre transferi, aos poucos, a maioria das atividades que eu só realizava no Windows (jogar, editar fotos, ver filmes, etc) para o Linux.
Com isso evitava reinicializar o micro sempre que precisasse realizar algumas daquelas tarefas.
Eu sei sobre máquinas virtuais e etc, mas, na época, não queria e não tinha interesse em usá-las.
Quando comecei a trabalhar (fora da universidade) voltei a desenvolver no ambiente Windows.
Novamente não me senti confortável. Ainda estou acostumado com algumas facilidades do antigo ambiente (Linux).
E também não posso mudar o sistema operacional da minha estação de trabalho simplesmente por que não tenho poderes para tal.
Então, atualmente, estou desenvolvendo no Windows e sempre que preciso de alguma ferramenta (que não está disponível na instalação padrão) preciso solicitar para o pessoal do suporte.
Isso atrapalha pelo simples fato de que essa ferramenta está disponível, por padrão, nas principais distribuições Linux mas não está por padrão no Windows.
Agora voltarei aos fatos indicando alguns cenários e explicações adcionais.


Vamos aos fatos

1) Ambiente extremamente estável. Esqueça travamentos, fechamento inesperado de programas e aplicativos. Controle realmente o que roda em seu computador. Saiba o que realmente significa estabilidade usando GNU/Linux.

Cenário: Na minha estação de trabalho o Windows XP com Eclipse Europa (com vários plugins), JBoss e Firefox (sem add-ons) abertos ocupam 1,3Gb de memória RAM. Frequentemente a máquina fica lenta e sou obrigado a reiniciar alguns dos aplicativos por quê eles pararam de responder. Os mesmos programas abertos no Linux (do meu notebook com Eclipse Europa (e os mesmos plugins), JBoss e Firefox (com alguns poucos add-ons) ocupam 868Mb de memória RAM e geralmente não tenho que killar processos por que pararam de responder. Não quero ser radical, mas é sabido que o Linux ocupa menos memória e processamento que o Windows.

2) Grande variedade de ferramentas que auxiliam o desenvolvimento (compiladores, ferramentas de testes, depuradores, linkeditores, bibliotecas, makefiles, etc). Cada uma dessas ferramentas contribui de alguma forma com o aumento da produtividade.

Cenário: Eu sei que a grande maioria das ferramente também possui versão para Windows. Mas eu sou obrigado a instalar todas elas, uma por uma, no Windows. Dependendo da distribuição Linux se elas não vierem por padrão poderão ser instaladas com um único comando (caso sistemas que possuem apt-get: apt-get install builld-essential)

3) Um editor de textos realmente poderoso como o VI, presente na grande maioria das distribuições. Com ele realizamos desde edição de textos (incluindo recursos avançados) até programação, compilação e depuração de programas.

Cenário: Eu sei que existem editores de texto que são bem mais intuitivos que o VI e também bastante poderosos, mas tente abrir, por exemplo, no editor de texto padrão do Windows (Notepad) um arquivo de texto de 380Mb. O Notepad vai parar de responder. Com o VI eu não tinha esse problema e ainda podia susbtituir grandes trechos do arquivo através de expressões regulares (eu sei, outros editores fazem o mesmo mas não trabalham muito bem com arquivos realmente grandes). Eu não usava o VI para escrever esse arquivo. O arquivo era gerado por um programa. Eu gerava várias massas desses arquivos e usava-os como entrada para outro programa. Posteriormente a edição e substituição de trechos desses arquivos foram automatizadas com scripts shell (eu sei que também dá para automatizar tarefas assim no Windows, mas lembre que você terá que instalar o Cygwin, por exemplo).

4) Configuração de ambientes de produção com servidores de aplicação onde podemos testar os sistemas desenvolvidos. Não importa em que linguagem você está desenvolvendo (java, php, ruby, python), a facilidade será a mesma para todos.

Explico: Eu já sei o que você está pensando. Que isso é possível nos dois ambientes. Mas ainda assim prefiro um ambiente mais robusto para testes e simulações.

5) Documentação. A documentação para o programador é sempre bastante extensa e disponível. Esse é outro ponto que deixa evidente a superioridade do ambiente GNU/Linux.

Explico: Disseram que documentação demais é ruim, que atrapalha. Só se for para quem não gosta de ler. Documentação boa e atualizada nunca é demais. Não precisa ler a mesma coisa em muitos lugares. Basta ler em um único lugar. Nunca tive problema com documentação abundante.

6) Servidores de integração de código/documentação (CVS, SVN) disponíveis e prontos para uso nas principais distribuições. Você não precisa mais se preocupar com quem está a versão mais nova do código.

Explico: Tudo bem. Já sei. Isso tem nos dois sistemas. Mas lembra que eu tenho que instalar no Windows. Em algumas distribuições Linux eles já estão instalados.

7) Ambientes gráficos à gosto do freguês. Tem para todo o tipo de computador. Com recursos avançados (KDE, Gnome) ou extremamente minimalistas (WindowMaker, FluxBox). E todos eles com recursos que deixam o ambiente gráfico do Windows comendo poeira (vide: múltiplos workspaces, ferramentas de acessibilidade, extrema flexibilidade para configuração e padronização).

Cenário: Pessoal, vou apontar um recurso bacana presente em todos os gerenciadores de janelas citados. Múltiplos Workspaces. Existe para Windows também, mas eu tenho que instalar. Outro recurso: marcar uma janela como sempre visível. Existe para Windows também, mas eu tenho que configurar num tweaks da vida.

8) Infinita variedade de IDEs leves que atuam como ponto de integração para o desenvolvimento focadas na automação de tarefas rotineiras (build, geração de documentação, empacotamento, deploy, etc).

Explico: Eu sei que também tem para Windows. Acredite, eu sei. Mas eu queria ter um algumas ferramentas nativas do Windows que só fizessem um trabalho e eu pudesse trocar de IDE sem ter que ajustar mil e uma coisas para fazer funcionar.

9) Ferramentas de gerência de projetos e acompanhamento de atividades livres, de boa qualidade e aos montes. Nenhum projeto bem sucedido de verdade vive usando tickets para controlar as atividades. Certamente você precisará dessas ferramentas para controlar o quê, quando e quanto tempo cada desenvolvedor está levando para desenvolver suas atividades.

Explico: Realmente não sou um expert em ferramentas de gerência. Mas conheço alguns gurus que preferem ferramentas livres como as citadas pelo pessoal do GUJ. Mas ainda acho que não fui radical quanto a isso.

10) O Shell. Não há nada semelhante ao poder que ele te dá. Nenhum programador GNU/Linux experiente vive sem ele. Todas as outras ferramentas comentadas acima e outras que comentarei em futuros artigos combinadas ao shell proporcionam o agradável ambiente facilitador da produtivadade chamado GNU/Linux.

Cenário: Imagine tarefas simples como renomear centenas de arquivos de uma única vez. Ou então fazer backup de arquivos espalhados pelo sistema. Ou então automatizar diversas outras tarefas que você repete, incansavelmente, todos os dias. Pessoal, sei que o Windows com Cygwin também faz isso, mas eu tenho que sair instalando. Já o shell... bem, ele já está lá me esperando.


2 nerd(s) responderam:

Rodrigo disse...

Tambem passo por alguns problemas que voce citou pois uso Linux em casa e Windows no trabalho.

Otimo artigo.
Parabéns.

[]s

Maximiliano Guzenski disse...

hm, nada contra duas explicações pois tambem utilizo windows e linux , mas se basear no fato que no windows tu tem q "instalar" nao é suficiente pois eh so fazer uma "listinha" de tudo q tu quer e usar menos de 2h da tua vida configurado o windows.

Quando ao windows usar mais memoria: bem em casa eu tenho 4gb, entao nao to nem ai pra isso (e memoria eh relativamente barata).

Eu trabalho com arquitetura java, desenvolvo aplicações gigantescas e cara, o windows XP eh extremamente estável.