Archives for posts with tag: desenvolvimento de software

Depois de 18 meses vivendo na terra de Cervantes, estou de partida!

Nesse um ano e meio que passei aqui estive trabalhando no Tuenti, uma rede social espanhola com cerca de 12 milhões de usuários, na maioria adolescentes. E estive em duas equipes diferentes dentro da empresa, nos 6 primeiros meses estive na equipe Core, que cuida das features básicas da rede social (busca, fotos, mensagens, sugestão de amigos, etc) e depois fui para a equipe Tu, que é a equipe responsável pelo desenvolvimento das features relacionadas a operadora de celular do Tuenti (www.tuenti.com/tu). Aprendi muito tanto em termos pessoais quanto profissionais, fiz grandes amigos, conheci excelentes profissionais, aprendi a falar espanhol (não consegui perder o sotaque brasileiro, mas não passo aperto!), mas chegou a hora de partir para um novo desafio.

Acredito que no momento em que você já está na sua zona de conforto e não se sente mais desafiado e motivado a aprender e testar coisas novas no seu trabalho, está na hora de mudar. E foi isso o que me aconteceu.

Durante esse período, recebi alguns contatos de recruiters de outras empresas e nunca rejeitei nada logo de primeira (a não ser que fosse algo realmente desinteressante), sempre falei com as pessoas para saber o que tinham a me oferecer. Neguei algumas propostas porque ainda não tinha encontrado algo que realmente me fizesse sentir animado em abandonar o status quo. Até que chegou a vez do Spotify.

O Spotify provavelmente seja a empresa mais “quente” do momento no mercado europeu (junto com a Rovio, do Angry Birds) principalmente depois da sua entrada no mercado americano e parceria com o Facebook.

O serviço não está disponível no Brasil, mas só para explicar como funciona, o Spotify está para a música assim como o Netflix está para filmes e séries, ou seja, você paga uma mensalidade (existe também um plano limitado grátis) e pode escutar toda a música que quiser em streaming de um catálogo incrível que eles dispõem de forma legal, onde o artista e a gravadora são remunerados por isso.

O Spotify tem sedes em Nova Iorque, Londres e outros lugares com foco mais comercial e a principal sede está em Estocolmo, na Suécia onde está quase todo o departamento de engenharia. E é pra lá que eu vou!

Estarei todo o mês de dezembro na Paraíba com minha família pegando um solzinho e resolvendo o resto dos papéis que faltam para em janeiro embarcar para essa nova aventura fria! :-)

Önska mig lycka till! (me desejem sorte!)

Moro e trabalho em Madrid há quase 1 ano e meio e muitas vezes quando converso com amigos e ex-colegas, me perguntam sobre como é trabalhar por aqui, já que as empresas europeias normalmente oferecem produtos e serviços mais focadas no mercado interno e não são tão conhecidas fora do velho continente.

Aviso de antemão que as opiniões que eu vou mostrar nesse post podem ser incompletas e incorretas, já que são baseadas no ponto de vista míope de alguém que não está aqui há tanto tempo e não conhece tanta gente de outras empresas quanto gostaria.

Vários países da Europa ainda vêm sofrendo com a crise que abalou todo o mundo há alguns anos, esses países são chamados perjorativamente de PIGS (Portugal, Ireland, Italy, Greece e Spain) e essa crise provoca muito desemprego, problemas sociais e políticos mas no meu ponto de vista já não afeta mais o mercado de TI, que está com a demanda sempre crescente, sobrando vagas e faltando profissionais qualificados.

O número de startups que surgem na Europa é bem mais discreto do que nos EUA e acredito que parte disso se deve à força dos direitos trabalhistas que protege muito o trabalhador e dificulta a vida e a dinamicidade necessária para uma startup, que a princípio não pode garantir todos os direitos aos seus empregados. Só como exemplo, a empresa onde trabalho precisou gastar bastante tempo e dinheiro com advogados para conseguir o direito de oferecer stock options para os empregados já que a legislação trabalhista local não está preparada para esse tipo de “bônus” que nas startups normalmente é a principal parte da remuneração dos envolvidos.

Outra coisa que torna a criação de startups mais complicada na Europa é o maior número de restrições que a União Europeia impõe em termos de privacidade e manipulação de dados pessoais na internet. Um exemplo simples disso é que o Facebook mesmo com um grande número de usuários no continente não tem um data center local, pois caso tivesse teria que obedecer a essa legislação, o que não é o caso quando, por exemplo, determina que a idade mínima dos seus usuários é de 13 anos (lei americana) e na Europa a lei diz que a idade mínima deve ser de 14 anos.

Mas nem tudo é mais difícil! Muitas empresas, fundações e projetos importantes para o desenvolvimento da internet e tecnologia em geral são europeus, como Opera (Noruega), Nokia e Linux (Finlândia), Instituto Fraunhofer (criador da MP3) (Alemanha), Skype (criada por suecos mas sediada em Luxemburgo)  sem contar com figuras como Dijkstra (Holanda) e Turing (Inglaterra), etc… e de fato existem startups europeias de sucesso atualmente, sendo a Rovio (Finlândia), criadora do jogo Angry Birds, a que está mais na crista da onda agora e também a sueca Spotify, dona de um serviço de música sob-demanda de muito sucesso na Europa e que chegou há cerca de dois meses aos EUA. Além disso, também existem umas sedes fantásticas do Google (destaco Zurique e Londres) e uma da Mozilla (Paris), fora várias sedes de outras empresas americanas que estão se instalando em Dublin.

Especificamente na Espanha, a Tuenti é a maior empresa da “geração 2.0″, com cerca de 230 empregados, mas existem também outras empresas de sucesso e startups que prometem bastante, e entre elas eu destacaria:

  • Socialpoint - Uma startup de Barcelona que em julho recebeu um investimento de 2.5 milhões de euros e que faz jogos para Facebook, entre eles o mais famoso é o Social Empires.
  • Youzee – Ainda não está com seu serviço aberto ao público, mas basicamente é um servicio de V.O.D. a la Netflix, melhorado, que está sendo desenvolvido principalmente por ex-empregados do Tuenti.
  • Vizzuality – Eu sou fã do trabalho desses caras, é uma empresa pequena de Madrid que trabalha desenvolvendo interfaces bonitas para visualização de dados científicos e recentemente fizeram um projeto com o Google para um infográfico sobre a evolução da Web
  • 11870.com – Um Yelp! a la espanhola
  • idealista – Site de anúncios imobiliários espanhol que tem sede também na Itália e Portugal
  • E obviamente não poderia deixar de falar da Tuenti, que em números gerais de usuários já foi superada pelo Facebook, mas continua sendo a #1 entre os adolescentes e está mais focada nesse nicho de mercado mais jovem, além de que com a aquisição da Telefónica também tem focado muito no mercado mobile oferecendo uma operadora de celular, chamada Tu, para seus usuários com várias vantagens. (que é o projeto em que eu trabalho já a quase um ano)

Salários
Comparar salários entre países é bastante complicado. Custo de vida, imposto de renda e serviços oferecidos “gratuitamente” pelo governo variam muito e normalmente a relação salário/custo de vida nas principais capitais e grandes cidades do mundo são equivalentes, então comparar os números friamente nem sempre te dá uma sensação real de como se vive em determinado local, mas vou citar uma faixa salarial que tenho visto ser tendência por aqui.

Os salários base de Software Engineer em empresas decentes na maioria dos países europeus variam de ~30 mil € anuais para programadores Jr./Associate a cerca de 50 mil € para Sênior (é uma estimativa feita com um pequeno espaço amostral onde, na realidade, certamente há muitos pontos fora da curva). Em alguns países existe uma espécie de décimo-terceiro que seria mais 8% desse valor por fora e em outros casos algumas empresas oferecem pagamentos variáveis de acordo com a performance do empregado que pode render até uns 20% a mais se o cara for um top-performer. Além disso, também existem as stock options que já mencionei e algumas empresas oferecem uma “home leave policy” se te contratam enquanto você mora em outro país e te dão pelo menos uma passagem por ano para ir ao seu país.

Com a crise que está assolando o continente está cada vez mais difícil conseguir visto de trabalho, mas se você pensa em tentar, eu creio que a experiência vale muito a pena!

“/^Sou programador (java|c|php|python|ruby|perl|cobol)$/”

Essa frase é coisa do passado, a moda agora é saber programar pelado independente de linguagem.

Esse “novo conceito” se deve a diversos motivos e o principal deles, na minha opinião, é o fato dos sistemas serem cada dia mais distribuídos e componentizados, permitindo assim que cada um desses componentes use a linguagem que melhor soluciona o problema. Ou seja, não é raro hoje em dia ver numa mesma aplicação: o back-end feito em uma linguagem como Scala, front-end em uma linguagem de script como PHP, Python ou Ruby e um cliente mobile em Objective-C ou Java, tudo conversando entre si usando JSON, Thrift, XML ou whatever.

Além disso, com os conceitos do Agile cada vez mais difundidos, fazendo com que se trabalhe em equipes pequenas e com o código pertencendo a todos, é importante estar preparado para codificar em algo que não seja sua “língua nativa”.

E o que isso significa na prática? Tenho que saber programar em todas as linguagens que possivelmente irei tocar em algum momento da minha vida? Não! Mas é importante ter em mente os principais conceitos, paradigmas e conhecer um pouco algumas das linguagens mais “raízes” que influenciaram as outras.

Um bom programador não é o cara que conhece todos os glitches e detalhes de uma linguagem, mas acima de tudo é como o Mr. Wolf de Pulp Fiction, um cara que resolve problemas:

E quando se fala de programação, para resolver problemas é preciso ter em mente mais coisas do que apenas a linguagem em si; é importante entender bem o seu problema, elaborar uma boa estratégia para atacá-lo e entender como o computador vai agir com essa sua estratégia (i.e.: estruturas de dados necessárias, complexidade do algoritmo, é possível paralelizar? etc) e é aí que o programador poliglota faz a diferença.

O “programador de uma linguagem só”  tem o mindset de alguém que só sabe usar um martelo e vê todos os problemas como pregos, ou seja, vai sempre tentar dar um jeitinho de resolver com a linguagem que já sabe, mesmo que isso implique em uma solução ineficiente, trabalhosa e deselegante. Como por exemplo: Usar PHP em aplicações desktop com PHP-GTK :D

Já um “programador poliglota” que tem a noção de outras linguagens/paradigmas e percebe, por exemplo, que em determinado caso uma linguagem funcional serviria de uma maneira mais eficiente e evitaria todo o overkill de uma linguagem OO, vai poder aprender até sob-demanda alguma linguagem específica que implemente o paradigma e resolver melhor o problema. E a cada nova linguagem que se aprende, se aprende também uma nova forma de pensar.

Fazendo um paralelo tosco, um programador com boa base teórica de programação e paradigmas é como alguém que sabe Latim e vai ter muito mais facilidade de aprender Português, Espanhol, Italiano, Francês, Romeno, etc…

Esse argumento é bem suportado no livro “The Pragmatic Programmer” que prega que um programador deve aprender pelo menos uma linguagem diferente por ano e também no livro “Seven Languages in Seven Weeks“, que apresenta superficialmente sete linguagens usando paradigmas distintos.

Vou terminando esse post com as dicas valiosas do Larry Wall (criador do Perl) sobre quais linguagens todo programador deveria conhecer:

Opa!

Postando rapidamente, só para publicar o link para meus slides apresentados no V Ensol, em João Pessoa agora no mês de Julho, onde falei sobre Software Livre em Aplicações Web de larga escala.

Eles estão disponíveis aqui: http://feliperibeiro.com/slides/ensol2011

E agora em agosto devo dar uma ajeitada no blog e voltar a ativa! Tá prometido.

Cof, Cof… Quanta poeira por aqui, hein?

Estou voltando a postar aqui no blog para dar seguimento ao meme criado pelo @duodraco e que fui “convocado” pelo @brgomes, para descrever meu ambiente de trabalho em 7 itens, então aí vai:

  1. Mac OS X: Desde que comecei a trabalhar com desenvolvimento, nunca gostei do Windows. Usei o Linux por anos até que em 2007 me converti ao mundo Mac e desde então tenho nele tudo que preciso. Um Unix que não me faz trabalhar *para* ele, como eu fazia nos meus tempos de Slackware e Gentoo.
  2. IDEs Eclipse/Netbeans/Vim: Em um mesmo dia de trabalho chego a utilizar esses três ambientes de desenvolvimento em momentos distintos. O Eclipse é o que tenho mais familiaridade e é o que uso normalmente com PHP, o Netbeans, pra mim, é imbatível para JavaScript e um Vim bem configurado, usando CTAGS e tudo mais, para mim é melhor que o TextMate, então uso ele para projetos pessoais que normalmente não são muito grandes e também para editar coisas diretamente no cluster usado como ambiente de desenvolvimento no trabalho.
  3. VCS – SVN/Git/Hg: No trabalho estamos passando por uma migração de SVN para Mercurial (hg) e nos meus pet-projects que sempre faço para colocar em prática algo novo que estou aprendendo (algoritmos/técnicas/tecnologias) tenho usado o Git.
  4. Terminal (shell): Gosto do “poder” que o Terminal dá e ainda faço muitas coisas por ele, como usar o Vim, executar scripts de build/deploy, usar svn/mercurial/git, etc. Tenho ele sempre aberto.
  5. Browsers: Chrome é o meu browser principal, antes era só para uso pessoal mas agora também uso bastante na hora de desenvolver. O Developer tools dele ainda não é tão completo como o Firebug mas já resolve maioria das coisas. Ele também tem a extensão SpeedTracer que me é muito útil. Mas continuo usando o Firefox de vez em quando pelas coisas que sou mais familiarizado no Firebug.
  6. Spotify: Spotify é uma mistura de GrooveShark com Last.fm, é uma rede social onde você escolhe o que quer ouvir e tem os seus amigos com quem você pode criar e compartilhar playlists. É bem bacana, tem uma qualidade de som boa (principalmente se você paga a conta Premium) e lhe dá uma sensação de estar escutando música “legalmente” :) . Passo todo o dia conectado e ouvindo música por ele.
  7. Headphones: Já que se falou em música, não posso deixar de comentar que sou meio maníaco por headphones, estou sempre buscando o som perfeito e atualmente não largo dos meus Bowers & Wilkins P5 que são os headphones com melhor qualidade de som que já vi, superando inclusive os BOSE. O único problema dele é que esquenta bastante as orelhas! :D

E pra terminar, passo adiante esse meme com:

@marcosjr
@yogarine
@italosatiro
@herval

Mais uma excelente tirinha do Geek and Poke:

6a00d8341d3df553ef011168ca571b970cjpg

Muitas outras estão disponíveis em: http://geekandpoke.typepad.com

No último fim de semana (18 e 19 de outubro) houve em São Paulo o CONAPHP (www.conaphp.com.br), um evento feito pela comunidade PHP e que rolou dentro do CONISLI na FIAP.

O evento em geral foi bom, com bom nível de palestras mas o público foi um pouco abaixo do que eu esperava.

Para mim, o ponto alto foi quando estava assistindo a palestra do Elton Minetto (slides aqui) e “reconheci” um slide sobre o compilador JIT e o cache do opcode do PHP, um slide que fazia parte da apresentação que fiz em Recife no Encontro Pernambucano de SL, e para confirmar vi lá meu link nas referências, e isso me deixou bastante honrado por ter um material meu usado como referência por um ícone como o Elton.

A minha palestra foi a última e falei sobre PHP RESTful Web Services, por ser a última, o título não ser apelativo para o pessoal mais iniciante e eu ser um ilustre desconhecido da comunidade PHP de São Paulo, tive apenas metade da sala cheia, mas o feedback das pessoas que assitiram a palestra foi bastante positivo e fiquei muito satisfeito.

Os slides da palestra seguem abaixo, e o código apresentado está disponível aqui.

PHP RESTful Web Services

View SlideShare presentation or Upload your own. (tags: php rest)

Quem tiver interesse sobre o assunto, deixo algumas referências:

O nome soa estranho, mas computação em nuvem é a tradução do termo “Cloud Computing” que vem rondando o vale do Silício há algum tempo e é um conceito que assusta gigantes do mundo do PC como a Microsoft e abre espaço para milhões de pequenas empresas na Web – as startups.

A idéia da computação em nuvem apresenta uma nova maneira de organização do mundo digital, que deixa de ser “PCcêntrico” e passa a ser “WEBcêntrico”, já que a tal nuvem é a própria Web, com os softwares deixando de ser produtos e se tornando serviços.

Dessa maneira, seus dados, documentos e ferramentas estariam hospedados em grandes servidores na Web e você acessaria tudo através do navegador, que seria uma espécie de cliente universal e assim você teria acesso aos seus arquivos a partir de qualquer computador no mundo e também exigiria menos dos PCs o que possibilitaria a produção de máquinas ainda mais baratas.

E o software como serviço abole de vez com as licenças e softwares de prateleira, pois você não precisa mais instalar nada, apenas paga-se uma taxa para usar um serviço online por um determinado tempo e no caso de serviços gratuitos, alguém está pagando para você: OS ANUNCIANTES.

Isso já vem acontecendo aos poucos com a oferta de serviços na Web de suítes de escritório e ferramentas de edição de imagem, entre outros e a tendência é que nas máquinas só estejam instalados softwares básicos.

Mas por quê a Microsoft deve se preocupar?

A política da Microsoft de vender software na caixinha fica obsoleta com essa novidade, e os usuários costumavam optar pelos MS Windows pelo enorme leque de opções de softwares compatível com ele. Porém se a idéia da computação em nuvem se concretizar, as aplicações se tornam independentes de plataforma e qualquer pessoa em qualquer sistema operacional que tenha um browser que implemente razoavelmente os padrões web W3C, como o excelente Mozilla Firefox, poderá ter acesso às tais aplicações, e essa é mais uma chance que o Linux tem de decolar.

E o que ainda falta?

Na minha humilde opinião ainda existe um gap que precisa ser considerado: o gargalo da rede. As aplicações Web estão conseguindo um nível de responsividade muito alto, mas para se equiparar aos potentes computadores modernos rodando aplicações stand-alone ainda há um caminho árduo a ser percorrido e não acho que seja algo que é feito da noite para o dia, mas sim algo gradual e relativamente lento, como realmente vem acontecendo.

“Quem cola não sai da escola”, é o ditado que a gente escuta no colégio, mas Cheat sheets e guias de bolso realmente são muito úteis quando você quer o nome daquela funçãozinha que faz exatamente o que você quer e você não lembra no momento, para consultas rápidas e não pra quem quer realmente aprender algo.
Achei algumas bem interessantes e vou compartilhar aqui até para facilitar de me lembrar depois (uma Cheat sheet de cheat sheets :D ):