Categories
Carreira

Como anda o seu inglês?

Há não muito tempo uma pessoa me procurou no IM para conversar sobre sua carreira. Ela me disse que no momento estava fazendo um curso de Java e me perguntou o que exatamente ela precisava para trabalhar numa empresa como o Yahoo!. Conversamos sobre algumas coisas até que perguntei sobre seu inglês. Para minha surpresa, ela disse que o curso de inglês iria ter que esperar um pouco porque naquele momento ela estava priorizando o curso de Java…

Se você está numa situação parecida, faça o seguinte: pare tudo que você está fazendo e vá aprender inglês. Sério, no nosso mercado é muito, mas muito mais importante do que você pode imaginar.

Em primeiro lugar, alguns dos melhores livros existentes só estão disponíveis em inglês. Poucos títulos são traduzidos e quando são levam alguns meses (ou anos) para tal, isso sem contar que as traduções muitas vezes são ruins. Por exemplo, o Domain-Driven Design do Eric Evans levou aproximadamente 5 anos para ser traduzido, o Patterns of Enterprise Application Architecture do Martin Fowler levou 4 anos, e por aí vai. Hoje em dia o tempo é menor que isso, mas mesmo assim é muito tempo. Ou seja, você não só vai ficar alguns meses (ou anos) para trás como também corre o risco de não ter acesso a uma boa parte do conteúdo mais relevante disponível.

Em segundo lugar, os grandes players de TI publicam seus blogs em inglês – assim como vários dos desenvolvedores mais influentes no mercado. De forma alguma estou desmerecendo os blogs em português (como esse aqui), mas grandes nomes como Robert Martin, Alistair Cockburn, Kent Beck – e mais algumas dezenas que eu poderia citar – escrevem em inglês. Isso sem contar as dúzias de blogs como o TechCrunch, Mashable, High Scalability ou até mesmo o xkcd. Se você não entende inglês você não poderá aproveitar todo esse conteúdo.

Em terceiro lugar, a maioria dos projetos Open Source relevantes são em inglês. Por exemplo, você está acompanhando o desenvolvimento do Node.js? Você já estudou Clojure? E o Rails 3? Linux? Python? Projetos da Apache Foundation? Se você já brincou com alguma dessas coisas (ou todas) certamente foi porque você sabe inglês. E você pode não somente usar essas coisas para desenvolver como também estudar os códigos para entender como funcionam ou contribuir com os projetos. Enfim, um mundo gigantesco de oportunidades.

Eu poderia dar mais um monte de motivos – como dizer que a maioria dos lugares mais relevantes que todo mundo gostaria de trabalhar vão exigir que você saiba inglês – mas acho que só isso já é mais do que suficiente. Inglês é uma das coisas mais essenciais para profissionais de desenvolvimento de software e você não pode ignorar isso. Corra atrás e aprenda inglês “pra ontem”, essa é sua prioridade número um!

Categories
Linux

6 meses 100% Unix

Nesta última semana (no dia 15/08) completei 6 meses de migração total da minha estação de trabalho para o Ubuntu Linux!

Tenho contato com Linux há alguns anos, desde o início do ano de 2000 para ser mais exato. Nesta época eu trabalhava numa empresa que tinha vários servidores RedHat Linux, que era a distribuição mais popular na época, além de umas máquinas Solaris. Aprendí a usar Linux facilitado pelo contato diário com todos esses servidores porém na minha cabeça aquilo alí nunca seria adequado para ser usado em um desktop.

Só passei a levar o Linux como desktop mais a sério no ano de 2004 quando conhecí pessoalmente uma empresa que funcionava 100% com Debian e Kurumin (em absolutamente todos os servidores e desktops). Qualquer software que não fosse livre era totalmente desencorajado. Pela primeira vez eu estava vendo o Linux sendo usado para absolutamente tudo no dia a dia de uma empresa (que me parecia utópico) e comecei a acreditar que seria possível trabalhar bem e fazer tudo que se fazia no Windows utilizando somente software livre.

No fim de 2004 mesmo fiz uma tentativa frustrada de usar um desktop Linux (Mandrake). Como falei foi totalmente frustrada porque o meu hardware era muito novo e nem um pouco comum pois eu havia comprado todos os últimos lançamentos da época. Tive uma dificuldade enorme de achar drivers. A resolução do meu monitor ficou péssima e a placa de som não funcionava. Além disso o Open Office não abria direito planilhas feitas no Microsoft Office e vice e versa. Duas semanas depois quando ainda estava lutando para fazer minha placa de som funcionar acabei deletando sem querer o /etc! Para quem não sabe, isso significa que eu deletei todas as configurações do sistema e a máquina simplesmente nem ligava mais!

Foi quando eu decidí que ia comprar um iMac. O Mac OS X (sistema operacional da Apple) tem todo o poder do Unix aliado a uma interface incrível. Foi a melhor coisa que poderia ter feito. Ele é suficientemente fácil para que a minha esposa possa usá-lo e ao mesmo tempo extremamente poderoso para que eu possa desenvolver, instalar, compilar e tudo mais que eu preciso. É claro que por não ser o sistema operacional mais popular do mundo tive algumas dificuldades mas nem se compara ao inferno que eu vivia.

Só que no trabalho eu ainda usava o Windows e tinha que conviver diariamente com todas aquelas mazelas de vírus, spyware, telas azuis, travamentos, pop-ups mortais, alto consumo de memória, lentidão, etc. Durante muito tempo todo o meu kit de trabalho foi Windows e eu sempre pensava que nunca seria possível ter todas aquelas mesmas ferramentas em um Linux, o que sempre me levava a descartar qualquer tentativa de migração.

Depois de algum tempo e um pouco mais experto pela quantidade de problemas vividos e resolvidos, tomei coragem e novamente me forcei a trocar meu desktop principal para Linux, dessa vez para o Ubuntu (desktop principal = que eu uso mais = do trabalho). Me proibí de usar Windows e decidí que se eu tivesse um problema não importa qual fosse eu iria parar e resolvê-lo não importa quanto tempo levasse.

Confesso que foi complicado porque tive que fazer com que a minha (quase) solitária máquina Linux funcionasse perfeitamente e de forma transparente num ambiente totalmente Windows. Introduzir uma máquina de desenvolvimento Linux num ambiente com duzentas máquinas Windows não é tão fácil. Todas as convenções da empresa se baseiam em estações Windows e eu tive um certo trabalho para “portar” tudo isso. Nada muito complicado mas levou um tempo e deu um certo trabalho. Mesmo com todos os problemas fiquei impressionado como foi tudo muito mais fácil de configurar e instalar desde minha última vez. Não só no Ubuntu como no Fedora, que era minha segunda opção.

O mais legal disso tudo foi que, ao provar que é totalmente possível desenvolver em Java no nosso ambiente Vignette com Linux e software livre, acabamos gerando uma reação em cadeia dentro da empresa. Claro que eu não fiz nada sozinho, várias outras pessoas já usavam desktops Linux na empresa. Minhas contribuições foram apenas em mostrar que dava para fazer tudo que os desenvolvedores Java da empresa precisavam no Linux e em aliciar vários outros desenvolvedores Java a fazer parte do movimento. E o movimento cresceu tanto e ficou tão sério que a empresa já tem um projeto oficial para migrar todas as estações para Linux!

Categories
Shell script

Se você não sabe Shell script, deveria saber

Ontem estava conversando com um amigo meu sobre shell script. Na verdade nós conversamos sobre esse assunto várias vezes nos últimos tempos. Sempre conto para ele como eu resolví um problema interessante com shell script e ele fica com água na boca e diz: “caramba, eu tenho que aprender esse troço”.

Shell script é pau pra toda obra. Para quem trabalha com Unix direto como eu, saber shell script pode fazer a diferença entre levar 30 minutos para resolver um problema ou levar 10 segundos para resolver o mesmo problema. Muitas vezes dá pra resolver com apenas uma linha de shell script. Pelo que eu me lembro nunca passei de umas 25 linhas. É sério.

É claro que o shell script não serve para todas as coisas. Por exemplo, ele não é feito para programar um site como este. Mas para as coisas que ele serve ele não decepciona. Vou dar exemplo de algumas coisas doidas que eu andei fazendo nas últimas semanas, todas com menos de 25 linhas de shell script:

1) Precisava visualisar simultaneamente os logs de 7 servidores de aplicação. Quando eu desse um refresh na tela (browser) precisava saber para dos servidores que o balanceador iria me jogar e visualizar o log deste servidor. E a cada refresh da tela o servidor pode mudar. Então, fiz um script para conectar simultaneamente em todas as máquinas e na mesma tela me mostrar as mensagens de log de todos os servidores, indicando no início da linha qual o servidor que havia mandado a mensagem. Tempo para fazer: 2 minutos. Linhas de script: 8 + arquivo de configuração com o endereço dos servidores.

2) Em determinadas horas o request para um mesmo Servlet feito pelo mesmo browser na mesma máquina e com os mesmos parâmetros estava gerando respostas completamente diferentes. Quem viu isso foi o técnico do suporte, que jurou de pé junto que era verdade. Olhando o código da aplicação deveria ser impossível que isso acontecesse mas como o cara jurou pela mãe dele, tinha que comprovar. Então resolví fazer um script para baixar 50.000 vezes o conteúdo deste Servlet. A cada vez que o conteúdo era baixado comparava com o anterior para ver se estava diferente. Em caso positivo ele parava a execução e me mostrava na tela a diferença entre os dois. Tempo para fazer: 10 minutos. Linhas de script: 21. (ah, todos os 50.000 arquivos baixados eram iguais um ao outro!)

3) Os DBAs aqui da empresa estavam limpando o banco de dados e selecionaram umas 30 tabelas candidatas a serem removidas do banco de dados por não estarem sendo utilizadas. Então eles me pediram para dar uma olhada nos nossos projetos e verificar se realmente elas não estavam sendo utilizadas em nenhum sistema. Fiz então um script para varrer o repositório de projetos e buscar por arquivos contendo uma ou mais das tabelas relacionadas. Tempo para fazer: 20 segundos. Linhas de script: 1 + arquivo de configuração com o nome das tabelas.

Provavelmente se eu não soubesse shell script estaria até agora escrevendo alguma coisa em Java ou qualquer outro treco para fazer tudo isso e não teria tempo de escrever no meu blog! Como eu quero ter tempo de escrever aqui preciso resolver meus problemas o mais rápido possível e por este motivo o shell script é essencial na minha vida! Hehe.

Agora é sério, já deu para ter uma idéia de como é interessante?

Para você poder começar neste minuto, selecionei alguns links legais para leitura:

– Conceitos básicos de Unix: http://sc.tamu.edu/help/general/unix/unix.html
– Wikipedia – Shell script: http://pt.wikipedia.org/wiki/Shell_script
– Prompt-doc: “Tira Dúvidas” sobre Shell: http://aurelio.net/curso/conectiva/conectiva-shell-prompt.html
– Shelldorado – Shell tips & tricks: http://www.shelldorado.com/shelltips/