Olá pessoal,
O post de hoje é mais uma reflexão para que você possa começar a analisar os conhecimentos e direções que tem tomado na sua carreira. Para isso, vou fazer uma analogia com o esporte criado por um brasileiro e que hoje é um dos mais famosos no mundo, o UFC.
Lets go…
Mas qual a relação do UFC com o desenvolvedor de software?
Na verdade, o UFC pode estar relacionado a muitas outras profissões, mas limitei nesse post ao desenvolvedor de software. Sim, mas qual a relação?
Toda.
Vamos lá entender o que e como é o UFC. Não vou contar a história de como tudo nasceu, mas veja aqui: http://estatico.globoesporte.globo.com/2013/20anos-UFC1/ e entenderá todo o restante do post.
Resumindo…
Você já viu algum lutador de UFC saber apenas uma arte marcial? Normalmente não. Lutadores de UFC sabem cada arte marcial e quando juntam tudo se tornam bons competidores, o que eles chamam de “completo”, ou seja, um bom lutador de UFC precisa ser completo e não ter preconceito com outras artes marciais, o que no passado existia muito tanto que se ouvia dizer que boxe era melhor que capoeira, ou que o Karatê era melhor que X, e por ai vai. Isso refletia que um lutador de boxe jamais iria treinar ou querer pelo menos praticar um esporte que não fosse boxe. Ele passava a vida tentando ser o melhor no boxe, mas no final ainda não se tornava o melhor, pois a única habilidade que ele tinha era com os braços, se tivesse que “resolver um problema” no chão ele se desesperava e não sabia o que fazer porque o negócio dele era lutar em cima.
Mas no UFC, com um lutador assim, acredito que a luta não dura muito tempo, pois um verdadeiro lutador de UFC deve estar preparado para qualquer tipo de luta, seja no chão, em pé, usando o braço, a perna, etc. E para isso eles precisam adquirir habilidades de várias artes marciais e saber como usar. Um lutador de UFC não treina para ser o melhor ou perfeito em uma arte marcial, mas ele aprende muito bem, pratica e domina ela. Não fazem o feijão com arroz, mas aprendem de verdade, e quando começam a juntar as artes marcais eles se tornam lutadores completos e preparados para enfrentar qualquer situação. E eles falam: “ser completo” “é preciso ser completo”. Observe sempre a entrevista de um lutador de UFC, todos tem isso no seu DNA. Se não for completo não sobrevive, mas para ser completo exige tempo, disciplina e persistencia. Você não aprende Muay Thai em algumas horas ou praticando alguns golpes (só porque fez um crud na linguagem de programação, não quer dizer que aprendeu). Para aprender, terá que treinar todos os dias, errar, aprender com o erro, melhorar o que já aprendeu, ter disciplina e não desistir quando não consegue aplicar um determinado golpe por falta de habilidade.
Mas qual a relação com o Desenvolvedor de Software ?
Muita. Quantos desenvolvedores você conhece que sabe apenas uma linguagem e fecham os olhos para qualquer outra? Quantos ainda acham que a linguagem que ele sabe é a melhor do mundo? Parece a visão do passado de que o karatê é melhor que o boxe ou o contrário. Eu já tive o prazer de conhecer e entrevistar alguns desenvolvedores assim, e certamente seria um desenvolvedor que não faria parte da minha empresa, projeto ou time, assim como uma academia de UFC não aceita lutadores que não estão dispostos a aprender outras artes marciais e querem apenas melhorar aquela que já sabe.
Um desenvolvedor precisa ser completo, conhecer (e não ter a informação apenas) mais de uma linguagem, tecnologia e aprender usar para resolver problemas específicos (se você tiver no chão dificilmente vai poder usar as técnicas do boxe para sair de lá). Fechar os olhos para outras tecnologias é o mesmo que apenas saber lutar quando a luta está em cima ou quando está no chão, se mudou o cenário você fica desesperado e não sabe o que fazer, tentar usar uma técnica do boxe quando está no chão, além de dificil, o impacto será pouco e a saída daquela situação pode não ser rápida, mas há necessidade é pra ontem.
Cada linguagem de programação (Ruby, Python, Java, Php, .net etc) é uma arte marcial. Você precisa aprendê-las de forma que esteja pronto para ir a um UFC Combate. Se você sabe apenas Java ou Ruby, arriscaria ir para o UFC Combate?
Mas tudo depende do que você quer. Deseja se tornar um UFC Developer Software, ou seja, um desenvolvedor completo? Se sim, vai precisar ter paciência, disciplina, treino e persistência. Mas se seu objetivo é se tornar um bom lutador de boxe, karatê, etc, a história é outra, mas lembre-se que qualquer lutador de UFC tem a capacidade de te ensinar qualquer arte marcial com propriedade, até porque ele precisa garantir que aprendeu bem cada arte. Você precisa aprender bem cada linguagem de programação. Apenas fazer um Hello World ou CRUD não vai te dar conhecimento e experiência suficiente para ir ao combate.
Eu particularmente não conheco tantas linguagens de programação. Comecei a programar com vb 6, em 2003, fiquei por 2 anos, depois fui para php 4 e fiquei por mais 2 anos full time e estou no Java desde 2007. Em termos de números não são tantos comparados com a quantidade de linguagens de programação que temos, mas cada tempo que vivi, em cada linguagem busquei exercitar, praticar, estudar e aprender com os erros.
Algumas exigem mais tempo de aprendizado, prática e perserverança; outras menos tempo. O java e a plataforma, por exemplo, não se aprendem da noite para o dia. Para se tornar um especialista leva-se um certo tempo, não só de estudo, mas passando por projetos que buscam resolver problemas diferentes. Apesar de eu ter me dedicado bastante ao Java (e foi de onde o blog nasceu), não quer dizer que não olho para o Ruby, Python, node.js, etc, e que eu tenho a visão fechada para essas tecnologias, pelo contrário, tenho muita vontade de praticar essas artes marciais, estudar, me envolver, e nunca passou pela minha cabeça que Java é melhor que Ruby ou o contrário. Acredito que cada uma resolve um problema de uma forma melhor ou não, depende se estou lutando em cima ou no chão. Hoje vejo a importância de ter aprendido bem outras linguagens e as ter vivido por um bom tempo. É como um lutador de UFC fala: “quando você junta todas as artes marciais, você se torna completo e se torna imbatível”. Eles tem o hábito de dizer que são imbatíveis e isso é uma forma psicológica de treinar o cérebro de que eles são capazes de ganhar, porque se eles pensam “tenho chances de ganhar”, isso impacta na atuação deles durante a luta, é apenas uma forma de treinar o cérebro. Dificilmente você vai ver um lutador de UFC dizer que ele pode tentar ganhar ou algo do tipo.
Outro ponto que gosto de dizer é que conhecer tecnologias e saber codificar são apenas 50% do que um desenvolvedor de sofware deveria saber fazer bem. Entender de negócio, lidar com comunicação etc. serão distribuidos nos outros 50%. Não há coisa pior que um desenvolvedor de software que não entenda como um mundo dos negócios funciona, pois nem tudo é codificar na vida. Se você é bom tecnicamente, mas você não entende de negócio, você atingiu apenas 50% e não é completo. Um lutador de UFC não faz negócio, normalmente tem empresários, mas ele entende a mecânica do negócio. Você como desenvolvedor não necessariamente precisa saber como fechar negócio, mas entender como funciona.
Ainda quando era novo achava que só o lado técnico era importante dominar. Eu tive 2 empresas e as duas faliram. Perdi dinheiro, mas ganhei experiência e vi a importância que o mundo de negócio tem. Depois dessa experiência amarga que tive, aprendi a viver no mundo dos negócios, seja para fechar um projeto, um salário, discussões estratégias com clientes etc. Aprendi a usar diferentes chapéus de acordo com o contexto, alias aprendi a lutar e buscar resolver o problema dependendo de onde eu estiver, ou seja, se a luta está em cima ou embaixo tenho que buscar resolver com as habilidades que desenvolvi treinando, praticando etc. Tenho a ciência de que alguns negócios vou perder outros vou ganhar, assim como as lutas de UFC são.
Concluindo
Se você é desenvolvedor e ainda acha que sua linguagem de programação é a melhor do mundo e resolve tudo, reflita um pouco e pense se isso é verdade. Ou melhor, veja se você deseja ser um profissional completo ou aquele que sabe apenas uma arte marcial. Mas fique longe de dizer que sabe várias artes marciais porque frequentou apenas 2-3 aulas com programação. Não ache que você conhece a linguagem só porque fez algumas implementações sem se aprofundar. Isso não é conhecimento e não se caracteriza como experiência. Se especialize, aprenda uma e somente parta para outra arte marcial (tecnologia, linguagem) depois que se sentiu seguro em poder ir para um UFC combate. Lembre-se que para aprender qualquer arte vai precisar ter disciplina, perserverança, dedicação e foco. A quantidade de artes marciais que se aprende é importante, mas a qualidade da aprendizagem é mais importante. Não adianta saber 10 artes marciais se não domina nem 5. Certamente se não domina nem 5 dificilmente vai sair com agilidade e inteligência quando estiver preso no chão do combate.
Vou ficando por aqui e espero que tenham gostado dessa analogia que eu fiz. Em muitas partes fiz questão de não referenciar como tratar do lado técnico, assim você consegue pegar o trecho e refletir.
Abracos, see ya!!