sexta-feira, 6 de dezembro de 2013

5 itens pra identificar um programador-índio e um chefe-cacique


Quando criança havia uma brincadeira do "chefe-mandou". Você tinha o "chefe" e os "índios". Basicamente os índios deviam fazer tudo aquilo que o "chefe" mandasse. Se o chefe não começasse a frase com "chefe mandou..." e os "índios" executassem a ação, estavam fora da brincadeira. Ganhava quem conseguisse ser o último "índio" a sobrar.

E qual o problema? O problema é que essa brincadeira virou coisa de gente grande. Tem muito "programador-índio" brincando de "chefe-mandou". Você identifica um "programador-índio" pois ele:

  1. Não tem a mínima noção do que faz, e também não se importa.
  2. Precisa de uma lista de tarefas (de preferência num issue tracker) pra poder se mexer.
  3. Se ninguém delegar um tarefa, fica o dia inteiro quietinho, sem fazer nada (preferencialmente mexendo no celular, dando umas curtidas no Facebook e vendo uns vídeos no YouTube).
  4. Conta os minutos e segundos esperando as 18h chegarem para poder continuar a brincadeira só no dia seguinte.
  5. Só faz aquilo que o "chefe-mandou", e nada mais que aquilo.

E também temos o "chefe-cacique": uma geração inteira de gerentes treinada com o que há de mais "moderno". Você identifica um "chefe-cacique" pois ele:

  1. Micro-gerencia as tarefas que cada um dos seus "índios" tem que executar.
  2. Cronometra o tempo de cada uma das tarefas.
  3. Controla até o tempo gasto no banheiro ou no cafezinho.
  4. Coloca tudo isso numa planilha ou num gráfico de Gantt pra cobrar mais empenho depois.
  5. Não confia em nenhum dos seus subordinados, pois todos só querem lhe enrolar.

Se você conhece algum "programador-índio", então peça que ele não reclame depois que tem um "chefe-cacique". Pois honestamente um "programador-índio" merece um "chefe-cacique" e merece também a remuneração ridícula que deve estar recebendo.

Se você já conviveu com algum desses tipos, saia dessa brincadeira e procure algo melhor pra você. Seja um profissional competente, um programador de verdade: um artesão de software. Não seja o último "índio" a sobrar...

terça-feira, 15 de outubro de 2013

[Hangout] Perguntas & Respostas sobre TDD com Mauricio Aniche


Aproveitando o embalo do Hangout anterior, o +Fabricio Noda resolveu convidar uma referência nacional no assunto para participar de outra sessão de Perguntas & Respostas. Dessa vez o +Mauricio Aniche nos deu a graça de sua presença e fizemos um rápido hangout.

Eu atuei mais como facilitador, pois como já disse acima, o Maurício é uma referência e compartilhou sua experiência nos poucos minutos em que conversamos.

Bom proveito!

quinta-feira, 10 de outubro de 2013

[Hangout] Perguntas & Respostas sobre TDD


Há algumas semanas o +Fabricio Noda me enviou um e-mail perguntando se eu poderia responder algumas perguntas sobre TDD (Test-Driven Development) para ajudá-lo em seu Trabalho de Graduação.

Sugeri que pudéssemos fazer um Hangout ao vivo para deixar registrado e quem sabe poder ajudar mais alguém que também estivesse interessado no assunto.

Não sei se as minhas respostas foram boas ou se servirão para a monografia do Fabrício, mas de qualquer modo o vídeo do Youtube está acima ou também pode ser visto neste link: http://www.youtube.com/watch?v=2L35NAvS5Do

quarta-feira, 18 de setembro de 2013

[Dica] Descartando suas modificações desde o último commit do git


Muitas vezes realizamos algumas alterações no código, nos arrependemos e queremos simplesmente descartar tudo e voltar ao estado em que estávamos desde o último commit.

Sim, é possível executar este procedimento com git reset e alguns parâmetros, mas ao menos pra mim o jeito mais fácil é rápido é:
git checkout -f
Dica para lembrar: o "-f" é de "f*d*-se". Ok, não é. Mas é exatamente o que você deseja fazer com o seu código descartado.

terça-feira, 10 de setembro de 2013

Meu primeiro JavaOne San Francisco


Há 16 anos. Lembro-me quando comecei a utilizar a plataforma Java, ainda na graduação, para desenvolver um projeto de iniciação científica. Era o início de 1997, e na época eu tinha apenas 18 anos.

Não levou muito tempo para eu me interessar profundamente por Java, tanto que fiz desta tecnologia objeto de estudo, aperfeiçoamento e sustento de toda minha vida profissional.

Quando vi as notícias do JavaOne (na época em sua segunda edição) fiquei maravilhado e suspirei: "um dia eu gostaria de estar lá e viver tudo aquilo". Desde então tenho esperado de modo ansioso e contemplativo o dia em que isso fosse possível.

Pois bem, depois de um longo tempo de espera este sonho "adolescente" (sim, já tem 16 anos) está muito próximo de ser realizado. Confesso que não sei definir o que me passa na cabeça, pois tenho dezenas de pensamentos e sentimentos misturados de modo infantil nos últimos dias. É uma realização, uma conquista, um sonho, uma ansiedade, uma alegria, uma tristeza - enfim, um pouco de tudo.

Não sei se ao vivenciar tudo isso terei vontade de rir, chorar, admirar, suspirar etc. Ou talvez apenas consiga ficar em paz comigo mesmo. Sempre quis um dia poder "estar" entre os melhores. Sei que nesse evento poderei "estar" com os melhores, mesmo que não seja um deles. Pelo menos ainda não. Mas esse é um sonho que ainda pode ser construído.

Agradeço de coração ao +Bruno Souza e ao +Vinicius Senger pelo convite e pela oportunidade. Pra mim foi uma grande e grata surpresa, além de uma realização enorme.

Aos que me estimam, peço-lhes que me ensejem votos de boa sorte. Nossa palestra será no dia 25/09/2013, às 10:00h (GMT-8). É o maior desafio até agora e espero que também o mais gratificante. Até lá!

sexta-feira, 28 de junho de 2013

Configuração do WiFi no Raspberry Pi (Debian 6)

Esta "carretinha" pra moto chama-se WiPi, que é homófona do módulo WiFi do Raspberry Pi, o Wi-Pi.

No TDC2013 em Florianópolis comprei meu primeiro Raspberry Pi, juntamente com o módulo WiFi. Tudo rodou perfeitamente, mas acredito que levei muito mais tempo do que gostaria para configurar o módulo WiFi (Wi-Pi) no Debian 6. Foram quase 2 horas de trabalho, e vários sites diferentes mostrando formas de configuração diferentes. Mas consegui.

Para os impacientes, segue abaixo a receita de bolo. É só copiar e colar no terminal do seu Raspberry Pi com Debian 6. Basta alterar o MEUSSID e a MINHASENHA pelo SSID e senha do seu WiFi, respectivamente. Lembre-se de depois reiniciar o seu Raspberry Pi.

Pra quem quiser saber o que está acontecendo, a "mágica" acontece com o wpa_supplicant, que é uma daemon que conecta o seu módulo WiFi em diferentes APs (Access Points) dependendo do SSID encontrado.

A linha wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf do arquivo /etc/network/interfaces informa que você quer conectar no AP através do wpa_supplicant, e o arquivo /etc/wpa_supplicant/wpa_supplicant.conf contém as informações de SSID e senha. Você pode informar quantos blocos network={} desejar. Eu mesmo criei um bloco para conectar no AP da minha casa e outro bloco para conectar no AP do meu escritório.

IMPORTANTE: não se esqueça de reiniciar o Raspberry Pi após alterar as configurações. ifup/ifdown ao menos não funcionaram comigo.

segunda-feira, 3 de junho de 2013

Minha passagem pelo TDC2013 Florianópolis


Muito feliz. Este é o sentimento que tenho para descrever como me senti após participar do TDC2013 em Florianópolis.

Confesso que minha experiência na participação em eventos não é vasta, e participo do TDC em Florianópolis apenas pela segunda vez. Mesmo assim descobri que cada evento possui uma atmosfera diferente. Um evento não é somente as palestras, as pessoas, as guloseimas, as festas. Um evento é o conjunto da obra. É aquela velha estória que diz que o todo é maior que a soma das partes.

Este ano pela primeira vez ocupamos o Oceania Convention Center na Praia dos Ingleses. Se o ano passado a impressão era que tudo estava meio "apertado", este ano a certeza é a de que o TDC encontrou o lugar adequado.

Acredito que o que me deixa realmente satisfeito é poder participar de uma comunidade. É por encontrar, rever e conhecer pessoas maravilhosas como +Yara Senger+Vinicius Senger+Bruno Souza+Otávio Gonçalves de Santana+Bruno Borges+Jomar Silva+Elias Nogueira+Aldrin Leal+Klaus Boeing+Michel Graciano+Manoel Pimentel+Rodrigo Cândido da Silva+Marcondes Maçaneiro+Neto Marin+Marcelo Quinta e várias outras pessoas fantásticas que um evento como este vale a pena. Acompanhado de muito camarão e a vista da praia, melhor ainda.

Pude ainda contribuir com 3 palestras, nas trilhas Java University, JavaEE e Arquitetura. Espero que tenham sido proveitosas aos que assistiram. Abaixo segue o link com os slides no Speakerdeck.

https://speakerdeck.com/yanaga/entrega-continua-continuous-delivery
https://speakerdeck.com/yanaga/jpa
https://speakerdeck.com/yanaga/artesanato-de-software

segunda-feira, 13 de maio de 2013

Ter um filho, escrever um livro e...


Plantar uma árvore! Há um ditado popular que diz que para ter uma vida realizada basta "ter um filho, escrever um livro e plantar uma árvore". Não necessariamente nesta ordem, já que o que importa é o conjunto da obra. Filhos já tenho dois, e finalmente escrevi o primeiro livro. A árvore ficará para depois...

Confesso que achei que seria mais fácil. Escrevi o livro a convite do EAD do CESUMAR para a disciplina de Banco de Dados. Banco de Dados não é exatamente a minha área de atuação, mas é algo com que inevitavelmente acabo trabalhando no cotidiano.

Inúmeras horas de esforço, muitas noites dormindo muito pouco e várias palavras depois surgiu o resultado. A quem teve a oportunidade de lê-lo, espero que tenha sido proveitoso. Sempre fica a sensação e o desejo de ter feito um trabalho melhor. Infelizmente a pressão do tempo me obrigou a termina-lo, mas ainda bem que foi assim: caso contrário nunca teria fim.

Este foi um livro que os meus compromissos profissionais me obrigaram a produzir; mas com esta experiência espero poder ainda este ano ao menos iniciar um outro projeto: escrever um livro por puro prazer. Aos poucos venho desvencilhando-me de várias outras atividades para tentar fazer algo que há anos está no meu desejo. Espero que consiga. Quem sabe daqui a um ano posso ter algo melhor pra compartilhar com vocês.

terça-feira, 7 de maio de 2013

Eu não acredito (mais) em super heróis...


Há cerca de 3 anos tenho passado pelo momento profissional mais delicado da vida até então. Muita coisa aconteceu, muitas reflexões se passaram e agora que a trajetória volta a se tornar uma ascendente posso compartilhar um pouco das duras experiências que tive.

Durante muito tempo acreditei que para ter sucesso em algo bastava ser muito bom naquilo. O sucesso seria consequência. Entretanto, ser bom naquilo que faz pode te ajudar muito sim, mas de nada vai lhe adiantar se ninguém souber disso. Descobri que tão importante quanto ser bom é permitir que os outros saibam o quão bom você é. Não que eu o seja, mas como diz o ditado, "galinha que não põe ovo vai pra panela". O importante é cacarejar. Mesmo que o seu ovo não seja lá essas coisas...

Senti também que o meu idealismo sobre software livre, métodos ágeis, código bem feito, artesanato de software etc poderiam transformar o mundo. E, tolo ou não, continuo acreditando nisso. Mas descobri que sou humano, e para atender minhas necessidades mundanas preciso de algo chamado dinheiro. Percebi que enquanto eu não tiver dinheiro suficiente para sustentar o meu mundo, não conseguirei mudar o mundo de ninguém.

Sinto-me também um perfeccionista. Mas ser perfeccionista é muito diferente de ser perfeito. E dói muito descobrir pela experiência que quanto mais vivo, menos "perfeito" eu me torno. Também não que um dia eu o tenha sido, mas perceber que a distância entre você e o seu ideal aumenta não é algo agradável. Acredito também que não tenha me tornado pior: só a visão da realidade é que se tornou menos embaçada.

Durante um bom tempo também me senti um hipócrita. Por conveniência, falta de dinheiro ou de tempo muitas vezes disse SIM quando deveria ter dito NÃO. E continuo afirmando que dizer NÃO é bom, pois as vezes em que o fiz valeram a pena. Também prometi prazos que não pude cumprir, criei código do qual não me orgulho, atualizei sistemas sem os devidos testes... E sofri as consequências de cada uma destas atitudes. Já me auto-flagelei e sofri o suficiente com isso. Hoje não mais.

Hoje não acredito (mais) em super heróis. Hoje ainda tenho as pessoas que admiro, mas não acho que alguém possa ser um "super herói". Pelo menos não o tempo todo. Hoje creio que todos, por melhor que sejam, precisam de um "alter-ego" humano. E como todo humano, erram. Eu, particularmente, erro demais. Novamente não que possa ser herói de qualquer coisa, apenas tenho minhas convicções e ideais. Nestes, continuo acreditando. E os continuarei defendendo e divulgando. E errando muito mais.

Aprendi que a vida não é decidida entre o certo e o errado. E que ninguém pode estar "certo" o tempo todo. Se vocês acreditam que fazendo software melhor, estarão participando de um mundo melhor, parabéns. Vocês já estão na jornada do artesão de software. E mais do que dar os passos certos, o importante é estar no rumo certo. E se vocês fraquejarem e errarem pelo caminho, não se sintam mal. Vocês não estarão errando sozinhos..

Boa jornada! Mas tenham dinheiro pelo menos para as passagens, caso contrário não chegarão a lugar algum...

sábado, 4 de maio de 2013

Não, o problema não é a linguagem. O problema é você.

Sim, o problema é você.
Nos últimos meses tenho lido e presenciado um volume considerável de programadores reclamando das linguagens de programação com que trabalham. Acho justo, já que como disse Bjarne Stroustrup, existem somente dois tipos de linguagens de programação: aquelas das quais as pessoas reclamam, e aquelas que ninguém usa. ("There are only two kinds of languages: the ones people complain about and the ones nobody uses").

Mas darei nome aos bois: tem muito programador Java por aí querendo migrar para linguagens como Ruby ou Scala só porque em Java "é muito difícil fazer isso ou fazer aquilo". Nada contra migrar de linguagem. Eu até gosto de estimular a diversidade, pois considero que na jornada para se tornar um artesão de software é necessária essa ecleticidade de conhecimento. O problema é o motivo.

Ruby (ou Scala, ou coloque sua linguagem favorita aqui) tem closures. Java não tem (ainda, diga-se de passagem). Ou qualquer outro motivo parecido. Daí eu pergunto: você realmente sabe o que é uma closure? Sabe usar e pra que serve? E estas perguntas valem também pra qualquer motivo.

É uma questão de bagagem. Ao invés de tentar procurar uma linguagem melhor, o verdadeiro objetivo é como conseguir ser um programador melhor. Perdoem-me, mas muitos dos quais ouvi essas coisas programam mal. Muito mal. E não é "achismo". É a experiência de ter programado junto. Outra parte não posso afirmar que programa mal, pois não tenho esta experiência. Mas onde há fumaça...

Escolha uma linguagem e fique com ela. Até ficar bom. Não importa qual. Quão bom? Bom o suficiente pra perceber suas limitações em saber o que realmente está fazendo. Afinal de contas, pense como empregador: você prefere alguém que é ruim em várias linguagens ou alguém que é no mínimo "meia-boca" numa única? Vale uma reflexão, mesmo que seja pequena...

Pois no final de tudo uma linguagem de programação é apenas uma ferramenta que lhe permite expressar suas ideias. Se você não possui ideias (ou possui ideias ruins) e não sabe expressá-las corretamente, qualquer linguagem serve: Algol, Fortran, Cobol, C, Java, C#, Ruby, Scala ou Clojure. Você não vai conseguir usar nenhuma mesmo...