Programador especialista – a inércia em TI

Resolvi escrever sobre generalismo e especialização em desenvolvimento pois acho que é um debate interessante e os dois lados tem seus prós e contras. Meu perfil de gostar de aprender e desenvolver coisas diferentes me faz gostar mais do generalismo: me formei em design, sou desenvolvedor front-end no iG e gosto muito de desenvolvimento back-end, que exercito no And After, Eu Compraria e outros projetos pessoais.

Desde que entrei no iG estou em contato direto com NodeJS (leia como instalar o NodeJS no Ubuntu). Já tinha ouvido falar, tinha achado esquisito o conceito de javascript no back-end mas nunca tinha trabalhado com o Node, apesar da curiosidade.

Fiquei curioso e resolvi, antes de sair escrevendo código e aprender "na marra", me aprofundar mais em NodeJS, para isso corri para os tutoriais e li alguns ótimos livros:

  • What is Node?
  • The Node Beginner Book
  • Hands on NodeJS
  • Mastering NodeJS

Não terminei de ler todos os livros ainda, e também não fiz nenhuma aplicação em node, mas os livros me despertaram a curiosidade do debate desenvolvedor generalista vs desenvolvedor especialista. 

O Daniel Sperb já escreveu sobre formação generalista no design, e resolvi iniciar o debate no desenvolveimtno, o que é melhor: conhecer de forma um pouco mais rasa diversas linguagens e métodos ou se especializar em uma única linguagem ou método?

Brett defende a idéia (e me convenceu disso) de que é melhor conhecer diversas metodologias, linguagens e frameworks do que ser um especialista em uma única linguagem, método ou framework. Segue uma citação do livro:

"It's simply this: use different solutions for different problems. Even better, use the right solution for a particular problem"

É simplesmente isso: use diferentes soluções para diferentes problemas. Ainda melhor, use a solução certa para um problema específico.

Brett McLaughin, What is Node?

Eu comecei programando em PHP, fui para o ASP por causa de um emprego, voltei a programar PHP e aprendi o framework Code Igniter (que eu adoro) e graças ao Well estou aprendendo CakePHP agora, um outro framework PHP. Também estou estudando NodeJS, mas na verdade no iG sou desenvolvedor front-end: HTML5, CSS e javascript (com jQuery).

Especialista: tão focado em uma solução que pode não
visualizar nada em sua visão periférica.

Não defendo a idéia de apenas "arranhar" em uma dúzia de linguagens e não saber nenhuma direito, mas acho muito válido ter a mente aberta a novas tecnologias e idéias se aprofundar um pouco e dominar o básico de linguagem, e aí partir para fazer a mesma coisa em outra (ou em outro framework). Sei qunão é possível (e nem deve ser saudável) fazer isso com todas ou a maioria das linguagens, mas com algumas.

No CodeIgniter hoje eu me sinto a vontade para desenvolver qualquer coisa – mas o Well me apresentou algumas facilidades do Cake (bake e outras artimanhas para preguiçosos) que não sei se existe no CI, e essa é uma forma de "abrir a cabeça"  a novas idéias, talvez meu próximo projeto seja em Cake e não em CI, porque não?

A inércia no mundo de TI

A verdade é que, no geral, somos preguiçosos e reagimos negativamente a mudanças. Quem é empreendedor não pode agir desta forma, e os profissionais pró-ativos também não deveriam. As mudanças também são oportunidades: estar a frente tecnologicamente, aprender novas tecnologias, se promover, reduzir custos. 

A mudança pode trazer muitos benefícios, mas para isso você deve combater a inércia de deixar de fazer as coisas exatamente do mesmo modo que você fazia antes.

PHP resolve tudo? Talvez, com uma gambiarra aqui ou ali. E isso serve para qualquer outra linguagem, sei que um especialista faz o que quiser com a linguagem que domina, talvez com alguma deselegância no código aqui ou ali, mas será funcional.

"There's a certain inertia in not just web design, but all of programming. That inertia can be stated axiomatically like this: the more you learn, and become good at a certain approach or technique or language, the likely are you to use that (…) but this inertia often causes you to use a tool because you know ir, rather than beacause it's the right tool".

Brett McLaughin em What is Node?

É, de certa forma, natural esta inércia citada pelo Brett, mas é o motivo pelo qual as gambiarras acontecem.

 

Dificuldades do generalismo

Acho que o desenvolvedor generalista ainda tende a ser um pouco menos valorizado do que o especialista na "avaliação padrão" de junior, pleno e senior que o mercado faz. Não sei o quanto é valorizado alguem que domine diversas linguagens e metodologias e que não queira partir para a burocracia gerencial e queira continuar com a "mão na massa".

Outra dificuldade que vejo para o generalismo é se manter atualizado com as diversas tecnologias. Estudar e estar familiarizado com uma tecnologia é relativamente fácil: ler alguns livros, escrever algum código para testar e montar um projeto. Em menos de um ano, se você tem alguma experiência com outras linguagens, você já "se dá bem" com uma linguagem ou framework, mas e se manter atualizado em duas ou três linguagens? Acho que isso requer um pouco mais de estudo do que um programador que só le os últimos releases do PHP e do MySQL, por exemplo (com todo respeitos aos especialistas que se revoltarão com este texto).

Vantagens do especialista

Neste post explorei as vantagens que vejo no generalismo, quando você precisar de chegar em um ponto de conhecimento que o generalismo não proporcionou, você certamente vai penar um pouco mais que o especialista – e se isso se tornar constante em um projeto talvez seja hora de rever se não compensa contratar um especialista, no caso de não existir outra ferramenta (linguagem, framework, etc) que você domine que sirva para resolver o seu problema.

Sei que o especialista também tem suas vantagens sobre o generalista. Provavelmente a qualidade de código será um pouquinho melhor, talvez ele saiba explorar melhor ferramentas e bibliotecas específicas para cada situação, resultando em uma performance mais avançada, ou numa economia de servidor.

Para situações muito específicas ou de extrema performance, provavelmente um especialista também saiba como explorar melhor de forma exaustiva uma linguagem.

 

Quero a opinião dos leitores, você prefere ser um especialista ou generalista? E para contratar, acha mais vantagem contratar um especialista ou generalista? Porque?

 

Leia também:

10 razões para programar em par

Esse ano estou experimentando várias metodologias a fim de aumentar minha produtividade, seguindo as regras da #startupddadepressao o negócio para aumentar a produtividade é: não dormir, não ter vida, work work work.

Brincadeiras parte, estou testando algumas metodologias de organização e produtividade. Em casa criei um kanban board para gerenciar tarefas e prioridades do And After e principalmente do lançamento da loja de camisetas do Eu Compraria!

Kanban board

Meu board a alguns dias

Também venci um preconceito que tinha e comecei a experimentar a técnica do Pomodoro (eu tinha um preconceito forte, achava bem babaca até experimentar). No iG eu e um colega testamos em um projeto a programação em par (sempre acreditei nas vantagens, mas nunca tinha testado efetivamente) e o resultado também foi bacana, mas isso vou relatar em outro post.

A programação pareada pode ser bastante desconfortável no início (eu senti isso), pois a maioria dos desenvolvedores estão acostumados a ter uma máquinada, ver seus e-mails e manter aberto um comunicador instantâneo que nem sempre é utilizado para trabalho. Compartilhar um computador e não ter acesso o tempo todo a seu e-mail ou comunicador pode ser desconfortável no início, mas temos que concordar que são matadores de produtividade (com o Pomodoro essa queda de produtividade é reduzida). Eu e um colega utilizamos a técnica do pareamento para um projeto, começou com debates de "como vamos fazer", foi para "como vamos implementar" e aí sentamos juntos e começamos – percebemos que ficou mais fácil programar, uma feature que nem eu nem ele faríamos sozinhos em menos de dois dias foi desenvolvida em um dia, com boa qualidade.

Comentei com a Bia que tava gostando, e ela me encaminhou um e-mail com 10 razões para utilizar a programação em par:

  1. Melhora a disciplina: pares são mais propensos a fazerem a coisa certa e são menos propensos a fazerem pausas longas.
     
  2. Maior qualidade: o trabalho é feito e revisado constantemente por duas pessoas. As soluções são mais simples e com menos erros.
     
  3. Fluxo de trabalho: a atenção e foco no trabalho são mais fortes. Um ajuda o outro a manter o foco no trabalho e criar um fluxo contínuo de produção. Este fluxo é mais resistente a interrupções: enquanto um lida com a interrupção o outro continua trabalhando.
     
  4. Melhora a moral: trabalhar coletivamente traz mais satisfação e reconhecimento. As amizades são fortalecidas e novos laços de amizade são criados.
     
  5. Propriedade coletiva: trabalhando em par, e rotacionando periodicamente os pares, todos ganham um conhecimento integral de todas as partes de um projeto.
     
  6. Mentoring: um par mais experiente ensina um par menos experiente a aprender durante do projeto. A troca de conhecimento é mais eficiente e rápida.
     
  7. Multi-disciplinaridade: a troca de experiência entre os pares proporciona a formação de um perfil multi-disciplinar. Isso significa que, além da competência técnica que domina, cada integrante do par pode aprender sobre outras competências e ter acesso a outros conhecimentos.
     
  8. Auto-gerenciamento: quanto mais as pessoas trabalharem em par, e rotacionarem os pares, mais auto-organizadas e auto-gerenciadas as equipes serão.
     
  9. União do time: as pessoas se conhecem melhor quando trabalham em par e ficam mais unidas, criando entrosamento e sinergia no trabalho.
     
  10. Menos interrupções: as pessoas são mais relutantes em interromper um par do que interromper alguém sozinho.

 

Concordo com todas elas, que tal você testar a programação em par em algum projeto / tarefa? Conte como foi nos comentários!

27 maneiras de ser um melhor programador

Hoje o @chrisbenseler twittou sobre uma apresentação chamado  27 maneiras de ser um melhor programador PHP. São apenas tópicos específicos que servem para qualquer desenvolvedor – e algumas se aplicam para outras profissões.

Vale a pena ler até o final (em inglês) e rever alguns conceitos e atitudes que temos no dia a dia e que podemos mudar a fim de melhorar nossa carreira.

Ps: se você está pensnado em comentar reclamando que está em inglês e pedindo uma tradução eu tenho uma dica que vai te ajudar em qualquer carreira: estude inglês, recomendo o Live Mocha para isso. 🙂

Do ASP ao PHP, vim para o lado negro da força!

Buenas povo! Faz tempo que não dedico meu tempo a escrever aqui no O Desenvolvedor, mas pretendo voltar ao ritmo anterior e com algumas mudanças (acompanhando as novidades na minha vida profissional).

Este é um post para apresentar algumas novidades que, de certa forma, guiarão minhas publicações por aqui. A primeira é que não vou dar continuidade aos meus estudos com .NET, e estou reduzindo meu trabalho com o ASP clássico. Isso não quer dizer que encerrarei meus posts sobre a linguagem, mas como estou me dedicando a estudar outras, possívelmente me focarei nelas.

Ah, preciso agradecer ao Leo Caseiro, que me disponibilizou um material excelente sobre .NET quando comecei a estudar!

Espero que este artigo ajude a orientar de alguma forma as pessoas que procuram pela manjada questão: "que linguagem é melhor estudar?"

Vamos aos motivos das minhas mudanças…

 

Porque "desistir" o ASP clássico?

Já fazia algum tempo que eu procurava evoluir, trocar de linguagem de programação, e por isso iniciei meus estudos em .NET. Vamos aos 3 4 motivos que me levaram a "pular fora":

Para aprender alguma coisa nova. E não estou dizendo que sei tudo do ASP, não mesmo. Mas mudar é bom, gosto de mudanças, aprender uma linguagem de programação nova é como começar a estudar um novo idioma, estimula o cérebro, tira noites de sono de uma forma positiva, anima!

Queria mudar porque o ASP está se tornando obsoleto (para muitos, já é) devido a migração para o .NET, que apresenta mais possibilidades e melhor desempenho (dizem, nunca testei realmente).

Comunidade de desenvolvedores muito pequena. Tudo bem que existe o Google, existem fóruns e até uma documentação razoável, mas nada comparado a PHP, por exemplo. Muitas vezes eu quebrava a cabeça para desenvolver determinada funcionalidade, sabendo que em outras linguagens uma centena de desenvolvedores já haviam desenvolvido isso e disponibilizado o código para uso, estudo e alterações.

Dinheiro. Grana. Eu pago licença para utilizar o Windows Server no meu servidor. Eu não consigo bons dll´s gratuitos para manipulação de imagem ou arquivos (pdf´s, planilhas, etc…). Quase tudo é pago, seguindo o "padrão" da tecnologia ASP.

 

Porque não o .NET?

Alguns dos motivos que me fizeram querer mudar do ASP continuam presentes na linguagem .NET, como por exemplo o custo.

A comunidade de desenvolvedores não ser muito grande (ou não gostar de colaborar com o mundo, indo contra a poderosa e adorada "interwebs").

Motivos pessoais: como eu comentei, estou de emprego novo, e por aqui o .Net não é utilizado (pelo menos até onde eu sei).

 

Porque escolhi o PHP?

Pra ser cool.

O primeiro motivo, obviamente, a linguagem aberta, gratuita. Vou economizar um dinheiro considerável por mês pelo simples fato de não precisar pagar licença do Windows no servidor. Isso será a longo prazo, somente depois que eu migrar meu sistema todo de Intranet para o PHP, que vai levar possivelmente mais do que seis meses…

Darth Vader

Para ficar do lado negro da força!*

 

Comunidade gigantesca de desenvovledores e melhor, que adoram compartilhar conhecimentos. A documentação é maravilhosa.

Linguagem ainda em desenvolvimento (agora o PHP 5, estou certo?), sem a necessidade de "extensões" como os dll´s que já me perturbaram no ASP.

Já tinha um conhecimento superficial sobre a linguagem, foi com ela me inseri no mundo do desenvolvimento criando meu primeiro blog e CMS, lá no meu tempo de guri…

Comecei a estudar loucamente MVC, nunca vi um framework gratuito e funcional para ASP, já me indicaram diversos (e aparentemente muito bons) para o PHP!

 

 

É isso… a partir de agora não se assustem se surgir por aqui alguns posts "PHP for dummies", e aceito sugestões de artigos também, viu?

 

 

* o título deste artigo é graças ao tweet do @cleiverrr, quando anunciei meus estudos com o PHP: "lol @gserrano está vindo pro lado negro da força! =D"

Plágio: a desgraça da internet

Estava eu circulando pelas comunidades do Orkut sobre design (e web) garimpando tópicos diferentes de "avaliem" "ajuda urgente!" e encontrei um tópico do Thiago Canudo sobre o plágio na web, em que ele apresentou uma cópia do seu portfólio.

Não conheço o Thiago nem seu trabalho, mas sou totalmente contra o plágio. Pera lá, se inspirar é uma coisa e acho isso ótimo em qualquer profissão. Indústrias, empresas, comércio e pessoas se inspiram na concorrência que deu certo, mas roubar projetos é um pouco diferente de inspiração.

Sei que na web é "comum" essa inspiração demasiada em sites alheios, mas o que me deixou realmente puto apavorado chateado foi o comentário de alguns colegas de profissão que, de certa forma, defenderam o plágio como uma necessidade do mercado.

Necessidade do mercado são bons profissionais, isso sim!

Não sei se eu que sou chato e idealista demais, mas qualquer projeto de criação é protegido por direitos sobre propiedade intelectual. Eu dediquei meu tempo, meu estudo, conhecimento, computador, meus livros e revistas, minha saúde (coluna e visão agradecem quando saio do computador…) e talvez meu final de semana para projetar um layout, para montar um html semântico, para reduzir a folha de estilo e conseguir fazer tudo sem Flash ou Javascript.

E aí, em dois dias um mané que pensa ser profissional (mas não é e culpa o mercado) copia todo o meu trabalho porque um cliente manda?

Sinceramente eu não tenho grande preocupação com isso, então não pensem que estou surtando ou achando que vou perder mercado, que o mundo vai acabar por isso. Tenho paixão pelo mercado, pelo trabalho e argumento suficiente para não plagiar.

Fábrica de layouts

Essa é nossa agência de dezaim!

Quem bloga certamente (aí estão só 3 exemplos…) já sofreu com algum tipo de plágio. É layout, é nome, texto, imagens, tudo… e os blogueiros profissionais lutam contra isso. Agora um cara que trabalha com internet também é plagiado… por um "colega"?

Os clientes que buscam preço apenas… estes que procurem alguém que saiba o preço do seu plágio trabalho. Eu trabalho com projetos pequenos, com raríssimas excessões, mas um cliente que exige um plágio não é um bom cliente. Você que está no mercado sabe disso, evite este tipo de cliente. Corra, jogue o preço (várias vezes) acima do que ele pode pagar, diga que não pode fazer, escape.

Você pode até perder o cliente, mas ele não valeria a pena. No tópico em questão eu entrei em um conflito de um debate que foi produtivo com o Fulano de Tal*, que comentou o seguinte:

No entanto, é o velho confronto: conta$ no final do mês VS. ética…
Tento seguir teu pensamento, no entanto…
O cliente tem $empre razão… Me$mo q não tenha! 😉
Infelizmente não cheguei nesse patamar de poder dispensar trabalho… :((
Cobro mais caro, mas não dispenso…
E, é isso, se te clonaram é pq vc é bom! Encare como um ´elogio´, tb…

Já comentei aqui sobre o meu pensamento do cliente tem sempre razão, discordo. O cliente nem sempre tem razão e é você que deve dizer isso para ele! Da forma certa, claro, mas deve dizer o que é certo ou errado.

A resposta veio irônica e decepcionada da minha parte:

"E, é isso, se te clonaram é pq vc é bom! Encare como um ´elogio´, tb.."

Putz, vai parecer implicância, mas não é mesmo… hehe
Cara, encarar como um elogio? Deve ser por isso que a Adobe e Microsoft adoram ter seus programas pirateados.

"É bom, por isso eles pirateiam. Consideramos isso um elogio."

Já é desanimador ver as "pessoas normais" plagiando, agora os profissionais (hã?) achando isso normal é o cúmulo. Se a gente não reclamar, ofender, processar, ninguém vai…

O Fulano disse que é contra o plágio, mas o faz por exigência de clientes. Ser profissional não é executar tudo o que o cliente manda, nunca vai ser. Aprenda isso o quanto antes.

– Doutor, eu gostaria de ter uma cicatriz na cara, igual o Scarface.
– Mas Guilherme, uma cicatr…
– Pega o bisturi e corta.

Contas a pagar, filhos para criar, tudo bem que a realidade é bem diferente da minha, mas nem por isso desvalorizo o trabalho alheio. Não consegue se encaixar no mercado? Estude, faça cursos, melhore seus projetos, se especialize, evolua! Ou procure outros mercados.

Mais um scrap meu, entre as respostas.

Copiar o trabalho de alguém é assinar que tu não valoriza m* do teu trabalho – e isso tudo bem, é teu. Mas menosprezar o trabalho DO CARA QUE TU TA COPIANDO é uma puta pilantragem.

Te desejo sorte neste mercado que tu diz ser horrível, eu afirmo que ele é muito bom.

Me lembrou o comentário que o Thiago deixou neste post sobre carreira,

"O engraçado é que: quem entra no mercado só fala bem dele. Quem não entra só fala mal rs."

Thiago R.

Isso não é pessoal com o Fulano, mas o exemplo foi tão bom que serviu para a criação deste artigo.

A minha pergunta é, você não está ganhando o suficiente com seus projetos, as contas estão atrasando, conta entrando no vermelho… você roubaria um carro por isso?

Eu iria me especializar ou procurar um segundo trabalho.

* Fulano de Tal – nome fictício para manter o anonimato do macaco sujeito que acha que se o cliente manda, tem que copiar.