People, not process
Não é a primeira vez que recorro ao cinema para passar a mensagem.
“I never think about the audience. If someone gives me a marketing report, I throw it away.”
Andrew Stanton, criador de Wall-E
Não é a primeira vez que recorro ao cinema para passar a mensagem.
“I never think about the audience. If someone gives me a marketing report, I throw it away.”
Andrew Stanton, criador de Wall-E
Agora que eu estou morando bem longe do eixo São Paulo-Campinas, acho que posso ficar mais à vontade para ser um pouco mais incisivo nos meus comentários. Mesmo que as besteiras que eu fale aqui acabem sendo muito in your face e irritem demais algum dos meus 4 leitores a ponto de deixá-los com vontade de partir pra porrada, me sinto mais seguro.
Por quê? Primeiro, as 9 horas de vôo vão fazer com que o sujeito esfrie um pouco a cabeça. Segundo, ao chegar aqui o sujeito provavelmente vai querer aproveitar pra passar numa loja de eletrônicos e comprar um iPhone 3G baratinho, baratinho. Terceiro e mais importante: nerd bravinho e partindo pra briga é a coisa mais ridícula do mundo, and I can take you all.
Mas vamos deixar de papo-furado e partir pra primeira de uma série de agressões verbais não-solicitadas: a culpa é sua se o Brasil é um lugar tão difícil para fazer novos negócios, imbecil.
É isso que eu estava pensando quando eu vi o post no Pythonologia, sobre a falta de inovação na web do Brasil. Não, a culpa não é do Osvaldo, longe disso. É sua mesmo, leitor, que está sentado no seu cubículo, reclamando da falta de oportunidades e do tanto que a empresa faz você trabalhar para garantir o seu salário “suado” do mês.
Armchair entrepreneur, é isso que você é. Bundão.
Sim, o governo é irresponsável e gasta erradamente as toneladas de recursos que arrecada através dos impostos. Sim, há muita burocracia. Sim, há pouco incentivo para querer trabalhar duro em um negócio próprio num país em que impera a Lei de Gérson. Sim, os custos de infra-estrutura no Brasil são absurdos. Sim, o ensino (básico e superior) no Brasil é uma lástima.
Mas vou te contar uma coisinha: nada disso importa mais, para quem não tem medo de arregaçar as mangas e mostrar sua capacidade para trabalhar e produzir riquezas. Pior de tudo; não é a primeira vez que eu digo isso.
Todas os problemas citados pelo Osvaldo existem realmente, mas podem muito bem ser evitados ou postergados. Na “web 2.0″, podemos deixar a papelada de abertura da empresa pra depois que você tiver um fluxo de caixa significativo. Podemos contratar um datacenter no exterior (é o que nós fizemos) e fugir dos planos ridículos aqui oferecidos.
Dependendo da idade e da situação da pessoa que quer trabalhar em um projeto novo, podemos até reduzir nosso custo de vida para não precisar tirar dinheiro do próprio bolso durante a fase embrionária do projeto. Bastaria chegar para seus pais e falar: “Pai, Mãe, posso pegar o meu quarto de volta e morar com vocês enquanto o projeto que estou desenvolvendo não gera renda?”. Na verdade, já que fazemos parte da geração-canguru, há uma boa chance que você já esteja morando com os velhos mesmo, não é?
Sabe qual é a única coisa que não podemos contornar, o único recurso que nos falta? Pessoas dispostas a correr riscos. Pessoas que entendem que perder algumas batalhas é do jogo. Pessoas que fazem os sacrifícios necessários para alcançar um objetivo maior.
E como você não é esse tipo de pessoa que faz tanta falta no Brasil, podemos concluir que você é parte do problema e não da solução, malandro.
Ah, nem pense em dar a desculpa do “eu tenho família e filhos para sustentar, não posso correr riscos”. Toda pessoa que trabalha com investimento sabe que a exposição ao risco é algo calculado. Nem pense em dar essa desculpa patética, enquanto você fica medindo com seus amigos o quanto de retorno você está tendo na sua carteira de ações.
Mesmo quem não pode largar o seu emprego e montar a sua própria empresa pode assumir uma postura que promova o empreendedorismo e a inovação. Você não precisa largar o seu emprego para financiar um projeto Open Source, ou para se tornar um Angel Investor. Ou para juntar-se com um grupo de outros colegas da sua empresa e investir dinheiro em pessoas mais novas que tenham projetos ousados. Risco e recompensa são sempre proporcionais; você pode pensar em diminuir um pouco a sua quantidade de papéis da Petrobrás (que não precisa do seu dinheiro, anyway) e passe a investir em algo muito mais arriscado: startups. Quem sabe você não está diante do próximo Google?
Não quer colocar dinheiro? Torne-se mentor de um garoto na faculdade onde você estudou. Compartilhe com ele a sua experiência, a sua visão do mercado, a sua opinião a respeito das mudanças na sociedade que a tecnologia traz, etc. Em um mundo onde o custo operacional é nulo, essa ação pode ser ainda mais valiosa do que hard cash.
Pra encerrar, deixo as palavras do grande filósofo Ben Parker: “com grande poder, vem grande responsabilidade”. Qualquer pessoa que tenha conhecimento e técnica em mãos tem grande poder. Esse é o nosso caso. Cabe a nós, agora, saber usar esse poder de forma correta e responsável.
Aos que estão morrendo de saudades das bobagens escrivinhadas por mim, peço paciência. Estou apenas no meio do processo de minha mudança para a Terra do Tio Sam. Já vim, Já vi, mas ainda não fiz a parte mais importante: arrumar o meu ambiente de desenvolvimento e trabalho no meu computador novo.
N.A: Esse texto já tinha sido escrito para a página de traduções. Mas acho que o raciocínio ficou muito grande e além do escopo para aquela seção. Por isso estou publicando como um post regular.
É verdade que a língua dominante na Internet é o Inglês. Isso não se dá só pelo domínio cultural norte-americano, mas também por uma necessidade que surgiu com a globalização e com o avanço de tecnologia de telecomunicações: pessoas de pontos extremos do mundo precisam de uma linguagem comum se quiserem se comunicar e colaborar de forma eficiente. Alemães, indianos, chilenos, russos… não importando o idioma local, o inglês é necessário.
Mas isso não significa, entretanto, que é razoável abandonar a nossa língua-materna e passar a usar um idioma estrangeiro como forma exclusiva de produção de conteúdo. Nem por nacionalismo irracional e cego, como o dos franceses que não aceitam termos estrangeiros, mas por uma questão mais básica: a Ciência mostra que nossa capacidade de expressão está ligada ao domínio da linguagem que usamos para transmitir nossas idéias, sentimentos e conceitos abstratos; ao usarmos uma língua que não temos pleno domínio, a nossa capacidade de comunicação e expressão fica prejudicada. Tente imaginar um esquimó tendo que explicar a um morador do sertão nordestino as diferenças entre os (mais de 30) tipos de neve, usando inglês. Difícil, né?
É verdade que o propósito de blogs e microblogs é o de dar voz-própria para cada indivíduo, sem que dependam de canais previamente estabelecidos que atuem como editores do conteúdo produzido. Também é verdade que o fluxo aparentemente caótico de informação que corre nos blogs podem produzir ferramentas interessantes. Por exemplo, podemos analisar a massa de blogs de muitos usuários da internet que escrevem sobre as suas impressões sobre os produtos ou serviços que são lançados, para ter um feedback coletivo e usar como um termômetro para medir a repercussão e aceitação de uma campanha de marketing.
Sendo assim, falar em “formas adequadas para se escrever” parece uma coisa antiga, retrógrada. Na maior parte do tempo, atuamos mais como filtros e repetidores de sinal do que produtores de novas unidades de informação. Mas, se atuamos como filtros, é porque há muito ruído no rio de informação que passa por nós todos os dias. E se há muito ruído, poderíamos muito bem fazer um pouco de auto-análise e vermos se nossa atuação é sinal (conteúdo que dá novas informações, claro, preciso, eficaz) ou se é ruído (repetição, inócuo, redundante, que apenas toma tempo do receptor).
O idioma escolhido acaba sendo parte dessa auto-análise. Os blogueiros brasileiros que buscam acabam escrevendo em Inglês podem muito bem perguntar: “Será que aquilo que eu quero falar é relevante para essas pessoas que já fazem parte da conversa global, ou estou apenas usando um idioma com maior número de receptores para ter a sensação de que terei maior alcance?”
Ao passar por essa auto-análise, podemos muito bem perceber que a maior parte do conteúdo não teria razão para ser escrito em inglês. Muito do que discutimos ou apresentamos no blog são informações que já são conhecidas, ou podem ser facilmente encontradas, entre pessoas que trabalham com tecnologia e falam em inglês. E querer ficar falando ou escrevendo para quem já tem meios de ouvir a informação da fonte original é uma ação, no fundo, vaidosa e sem propósito. É apenas uma forma moderna e high-tech de querer ouvir a si mesmo. O produtor do conteúdo não se beneficia (além da auto-massagem no ego) e os consumidores potenciais não se beneficiam, pois já possuem a informação - de melhor qualidade - em outro lugar.
É por conta de tudo isso que fazemos questão de escrever em Português. Há muita gente por aí que até gostaria de buscar formação e informação para trabalhar com tecnologia mas que esbarra no problema de falta de material que não seja em inglês. Espero que, ao fornecer um pilar de material na língua nativa, o caminho para essa formação seja mais fácil e menos desencorajador.
Se eu quisesse transformar as minhas asneiras em meu ganha-pão, e dependesse do grande salário e extensos benefícios oferecidos pelo editor-chefe, eu teria morrido de inanição antes que eu conseguisse logar no Wordpress e apertar Write Post. Então, entre uma asneira que escrevo e uma resposta impensada que dou para “the-one-who-can’t-be-named”, eu sou obrigado a, tipassim, trabalhar um pouco e garantir a canjica-com-Guaraná-Dolly nossa de cada dia.
Aqueles que estão mais próximos de mim (i.e, aqueles que têm o meu handle do Gtalk) sabem que, quando eu deixei o cubículo no qual trabalhava, eu tinha como objetivo levar adiante um projeto meu: criar um produto que pudesse ter seu valor quantificado, buscar investidores, fazer a idéia crescer, aumentar a base de consumidores, passar meses a fio vivendo debaixo da mesa do computador comendo apenas pizzas amanhecidas e tomando coca-cola sem gás… enfim, fazer todas essas atividades associadas a um ser esquisito chamado empreendedor. Esse era meu trabalho até o fim do ano passado.
Mas, por razões que serão exploradas em momento mais oportuno, esse trabalho acabou sendo substituído por outro. Graças ao conhecimento acumulado e produzido durante a minha fase empreendedor-romântico, pude aceitar um trabalho como consultor em uma startup americana que já tinha uma versão do seu produto, mas precisava de outras pessoas que tivessem conhecimento em web.py e tivessem um bom conhecimento de todos os elementos de uma stack LLPP (Linux, Lighttpd, Python e PostgreSQL). Flexível e ansioso para receber em dólares que sou, aceitei a proposta.
Essa empresa é a UpGuppy. A idéia do site é simples e direta: permitir que as pessoas possam dar sua opinião e recomendação através da criação de listas (rankings) sobre assuntos diversos. Melhores livros, piores novelas mexicanas, cervejas, baladas para curtir em Boston depois das 3 da manhã, academias de ginásticas… qualquer coisa que possa ser listada pode virar um ranking. O propósito final do sistema é permitir que as pessoas possam obter recomendações a partir das listas de diversos usuários. Caso de uso: uma pessoa gostaria de saber os pontos turísticos mais interessantes em Nova Iorque, para passear com os seus pais que a estão visitando. Essa pessoa pode ter recomendações interessantes procurando no site por rankings sobre os pontos turísticos da Big Apple, e filtrar para visualizar apenas os rankings feitos por pessoas de mais de 50 anos.
Esse é o ideal do serviço que será oferecido. Mas o pessoal ainda está no começo, e o pessoal de lá andou fazendo tanta modificação nos requisitos e de posicionamento de produto, que boa parte do código anterior acabou sendo descartado. Então, o que estou fazendo por lá tem sido um trabalho de ver o que ainda pode ser aproveitado, desenvolver os componentes que faltam, atualizar o design, melhorar a parte de front-end e quetais. A parte mais significante do meu trabalho tem sido fazer aplicativo UpGuppy para o Facebook, que está sendo lançado agora. Obviamente, você precisa ser usuário do Facebook para ter acesso à aplicação e poder brincar com o site. Nem preciso dizer que o feedback dos usuários é muito bem-vindo e que essa é uma aplicação que ainda deve possuir alguns bugs (eu sei de pelo menos uma meia-dúzia, mas tenho vergonha de contar
) e que será constantemente melhorado e incrementado com as funcionalidades que estão sendo desenvolvidas para o site principal.
Para quem gastar tempo de uma forma divertida, é uma aplicação interessante. E para quem quer desenvolver aplicações para o Facebook, é um exemplo de todas as coisas que podem ser feitas usando a plataforma do Facebook. Espero que em posts futuros eu possa vir a apresentar alguns dos macetes que eu tive que aprender para essa integração.
Perdoe pelo crime que eu cometi à língua de Göethe no título do post. Foi apenas a forma que eu encontrei para mostrar que eu atualizei um pouco a nossa seção de artigos traduzidos. Aproveitei também para expor um pouco do raciocínio e dos motivos que nos levam a querer produzir um site em português - ou algo parecido - num mundo que parece estar acostumado a só falar inglês - ou algo parecido.
Aproveitando o embalo, os assinantes do RSS já devem ter percebido que estão recebendo uma coleção de links diariamente. Cortesia do Feedburner, agora todos os links que forem enviados ao nosso usuário do del.icio.us são adicionados ao nosso feed de RSS. A gente aqui acha que é melhor te passar os ponteiros dos textos originais do que ficar pautando toda a blogosfera. E isso também serve como via de mão-dupla: se você tiver links interessantes que gostaria de divulgar, é só fazer a recomendação do link (adicionando a tag for:log4dev na hora de salvar) do delicious, que teremos grande prazer em ler e colocar no nosso rol.
E lá, o link pode ser em qualquer língua, capisce?
O tráfego, o cabo de rede, as paredes do rack do computador… tudo foi parar nas alturas!
Infelizmente, não estou falando em sentido figurado. Houve uma explosão no datacenter do ThePlanet, por azar o datacenter que é usado pelo webfaction, que por azar é o serviço de hosting onde esse blog se encontra.
O esquisito da coisa é que os nossos outros sites (o Job4Dev e o Books4Dev) estão funcionando bem. Talvez seja um problema de propagação do DNS por parte das máquinas de redundância deles.
A ver.
O editor-chefe adoooooora usar ditos populares como títulos de seus textos. Se eu adotasse esse estilo como forma de puxa-saquismo (imitation is the most sincere form of flattery, after all), o título desse post seria “Quem procura, acha.”
Aproveitei que as coisas deram uma acalmada pra tentar responder eu mesmo à minha última provocação. Há sim gente boa escrevendo no Brasil e buscando a comunidade dentro do próprio país. Nas minhas andanças, já encontrei e foram parar no meu RSS os seguintes:
Google Reader é seu amigo. Adicionem esse pessoal, participem, troquem idéias. E se encontraram mais gente interessante, dêem o toque.
Há dias que eu fico impressionado com a minha capacidade de perder tempo na internet. Dê-me um domingo de chuva e uma boa conexão, eu sou capaz de alcançar o fim da internet umas duas vezes.
Infelizmente, em minhas andanças, eu encontro pouquíssimos:
Talvez eu esteja sendo exigente demais em relação aos vídeos da Jennifer Connely. Há vídeos por aí, é verdade. É que, como direi?, you just can’t get enough of her blue eyes.
Mas eu acho que não estou pedindo muito em relação aos blogueiros brasileiros. Quer queira, quer não, nosso país tem uma presença online muito forte. Mas essa presença não se traduz em números correspondentes em material online em português. E a assombrosa maioria do que está por aí são blogs que estão muito mais preocupados em armar arapucas para levantar alguma grana com anúncios do que oferecer material relevante.
Um dos problemas dos blogs (na verdade, de qualquer serviço que mede seu sucesso baseado na audiência) é que é eles acabam se importando mais em conseguir a sua atenção do que a sua edificação. Produzir qualquer peça de informação relevante é difícil e dá muito mais trabalho do que pegar meia dúzia de links e fazer uma colagem. Logo, teremos mais blogs fazendo reciclagem de material alheio do que blogs produzindo material genuinamente novo.
Deixa eu ser direto: o que eu gostaria de ver é gente escrevendo material que seja mais do que uma simples câmara de eco dos anúncios e opiniões emitidos pelos grandes players do mercado. Gente que seja capaz de observar o que se passa e fazer uma análise própria. Mas quanto mais eu procurava, mais eu ficava com a sensação que o Log4Dev estava isolado. Pra ser sincero, esse tipo de idéia me deixa até assustado - não é possível que um grupo de quatro (Cinco agora, né, Bart?) computeiros ainda jovens fossem tão bons a ponto de conseguir fazer algo tão diferente, inédito.
Surgiram algumas hipóteses para tentar explicar isso:
Acho que só a hipótese (1) é válida. Tem muita gente boa por aí, sim. Mas ou é gente que está em projetos open source (Marcelo Tosatti, anyone? Os caras que desenvolveram o Windowmaker?) ou é gente muito mais experiente com anos de estrada em mercados como o de eletrônica embarcada, redes de telefonia, VLSI… mercados que não estão tão próximos da internet, por exemplo.
A hipótese (2) é furada. Ainda que o inglês seja a língua franca da internet, os blogs de brasileiros que eu encontro por aí não são muito melhores que os escritos em português.
A hipótese (3) também me parece falha. Não pela nossa megalomania e imodéstia, que certamente existem. Acho que essa hipótese é falha por que estamos vendo nosso tráfego crescer constantemente, e estamos até começando a fazer escola. Não somos os únicos buscando fomentar um grupo aberto para criar novas coisas e tentar trazer um pouco de personalidade para um campo tão “quadrado” como o de tecnologia e computação.
Enfim, esse post é só pra tentar saber por onde estão os profissionais de computação que tem talento, competência e que conseguem expor algumas idéias e opiniões relacionados ao mercado de TI no Brasil. Gente, por exemplo, como o Bruno Pereira, que foi uma grata surpresa que encontrei na semana passada. Tenho certeza que não é o único exemplo, mas pergunto: onde eles estão?
Há meses eu tenho discutido com o editor-chefe a respeito de criarmos um site que servisse como um ponto de referência para qualquer pessoa que estivesse buscando informações mais detalhadas sobre questões e dúvidas em programação. Muita coisa pode ser encontrada em blogs, mas as informações encontradas acabam por vezes sendo incompletas ou desatualizadas. O oráculo responde por muita coisa, mas não é infalível.
Os livros técnicos também têm problemas: são caros para estudantes novos, também ficam obsoletos, são muitas vezes terrivelmente traduzidos e nem sempre contém tudo que o usuário busca.
Eu realmente gosto de sistemas como o Safari Bookshelf, da O’Reilly. Paga-se uma mensalidade e em troca o usuário tem acesso a toda a biblioteca da O’Reilly em formato eletrônico. Há busca, indexação e todas as comodidades de um meio eletrônico.
Timing é fogo. Ontem mesmo eu estava falando do Google Doctype. Ou seja, essa necessidade de um ponto atualizado de informação é não só minha, mas de muitos outros. Mas como eu não sou O’Reilly, nem Larry nem Sergei, não tenho como contratar especialistas de determinadas áreas para escrever os tais livros, não posso me aventurar a criar uma concorrente para o Safari.
Entretanto, eu posso oferecer um espaço online para que as pessoas adicionem material livremente e tentem compilar uma biblioteca, e mantenham-na atualizada. É com esse princípio que nós estamos colocando no ar o Books4Dev. O nome é terrível, mas a intenção é das melhores. Não há quase nada de material lá, e começamos oficialmente ontem a escrever e editar algumas páginas.
Em termos de tecnologia: eu já falei do Infogami. É um wiki turbinado por algumas poucas outras features. Algo um pouco mais simples e direto do que um CMS completo. Acho que pode nos atender bem para esse projeto. Tempos atrás, chegamos a colocar o Plone para isso, mas a curva de aprendizado pareceu tão grande que se tornou um obstáculo para alguém que quer algo simples, para um projeto paralelo.
Esse é um projeto que vai precisar contar com a ajuda e o interesse de muita gente. Se você tiver trabalhando com alguma tecnologia que lhe seja nova, sinta-se livre para criar uma página e usar o wiki como um caderno de anotações. Outros usuários poderão ver, aprimorar, clarificar algumas passagens, melhorando ainda mais a biblioteca.
Passe a idéia adiante. Qualquer contribuição é válida e bem-vinda. Vou até pedir para que o “the-one-who-can’t-be-named” escreva sobre Java…
Ok. Tem coisas que a gente tem que tirar o chapéu: o Google lançou um site que contém material de referência para todas as tecnologias usadas por desenvolvedores web. Tudo que você pode vir a precisar saber sobre (X)HTML, CSS e Javascript foi juntado no Google Doctype, lavado, passado, engomado e posto em uma bela forma de apresentação e navegação. Não basta isso, eles liberaram o próprio código de Javascript que eles usam para sites como Gmail e Google Maps. Pouca coisa, né?
Mas, por favor, não seja um geek-cheerleader da empresa que aparenta ser boa-moça. Você vai ver por aí um monte de gente falando sobre o quanto eles são legais, dão coisas de graça, entregam presentes no Natal… Não caia nessa. Uma jogada assim não é altruísta. É estratégia.
Há um artigo de Joel Spolsky que ele mostra brilhantemente o porquê do interesse das grandes empresas pelo Open Source. Não é por benevolência ou por caridade. É estratégia, pura e simples. Consiste em fazer com que você torne produtos complementares ao seu em commodities, para que o custo de aquisição dele seja baixo, o menor possível. Quando o custo de um produto complementar ao seu é baixo, você está indiretamente tornando mais fácil a aquisição do seu produto principal.
É uma explicação para termos empresas que colocam pesadas somas em investimento em software aberto. Tomando um exemplo do artigo: a IBM é - atualmente - uma empresa que vende serviços de consultoria e desenvolvimento em TI, certo? Se você quiser contratar alguém para desenvolver uma aplicação para você, você vai ter que custear parte da infraestrutura: pessoal, máquinas, servidores, licenças de software/pacotes de desenvolvimento… tudo que seria necessário para que o produto se torne uma realidade.
Pergunta: se um cliente potencial tem um orçamento X para esse contrato, e que você sabe que esse valor terá que ser dividido entre pessoal, máquinas, servidores, IDE’s e estoque de café Pilão para os programadores, não seria melhor que o grosso desse dinheiro fosse gasto onde você tenha a maior margem de lucro possível?
Acontece que pó de café, máquinas e servidores já são commodities. Um cliente pode trocar de fornecedor sem ter grande prejuízo. Não há muito que pode ser feito aqui.
Também podemos comoditizar pessoal, sabia? Muitas das empresas de consultoria estão apenas buscando profissionais certificados justamente para que possam pensar nos desenvolvedores como peças intercambiáveis. Ao oferecer e buscar pessoas que possuam cursos e certificações, elas estão comoditizando o mercado de profissionais.
O que restaria? Diminuir o custo de aquisição de licenças de software. Ao investir em soluções Open Source, uma empresa que presta serviços de consultoria está comoditizando um produto complementar. Dessa forma, seus clientes passam a alocar mais de seus recursos naquilo que lhes interessa. Genial, não é mesmo?
Tudo que o pessoal do Google deseja é dominar a web como plataforma de desenvolvimento. Para isso, o que eles precisam é de mindshare. Quanto mais gente desenvolvido aplicações para web, mais o Google fica próximo do seu sonho do Cloud Computing. Quanto mais desenvolvedores trabalhando com web, mais barato fica o custo de desenvolvimento de aplicações web. Quanto mais baratos os serviços oferecidos pela web, mais o Google pode obter de faturamento em produtos como o AdWords e AdSense.
Uma empresa como a Google oferecer de graça informação que facilita o desenvolvimento de aplicações web é a mesma coisa que uma empresa como a IBM investir no Linux e oferecer ferramentas gratuitas como o Eclipse.
Mas tá frio hoje, né?
E o Timão, hein? Vocês viram?
Essa vida de blogueiro “4Dev” é dura. Os planos de dominação mundial do editor-chefe dão dor de cabeça para os tais “colaboradores”. Ter que trabalhar de ghost-writer é pouco. Agora a gente tem que bancar o ghost-developer. Já não basta ter a cara de pau de pedir pra gente escrever 32 artigos por semana, ele ainda me pediu na semana passada para que eu fizesse um site que fosse um banco de banco de dados de várias empresas de tecnologia. Parece que ele está querendo expandir os recursos e funcionalidades de certo site de empregos, e um recurso que pode ser interessante para o usuário é ter um link que contenha informações relevantes a respeito da empresa.
Enquanto eu limpava as feridas causadas pelas chicotadas recebidas durante tal singelo pedido, perguntei de onde viriam os dados sobre as empresas. A resposta não poderia ter sido mais brilhante:
Seu imbecil! Todo mundo sabe que a onda do web2.0 é o crowdsourcing. Deixe que os próprios usuários do sistema coloquem os dados sobre as empresas que já conhecem. Pra que pagar por algo quando alguém pode fazer por você, de graça?
Foi aí que eu percebi que o editor-chefe não queria um banco de dados, mas ele queria um sistema parecido com um wiki, onde os usuários pudessem criar novas entradas e editá-las posteriormente. Deu certo com a Wikipedia, pode dar certo para uma compilação de informações sobre empresas, não é mesmo?
Sistemas “wiki” existem aos milhares. Permitem que você crie novos documentos livremente, que edite e mantenha um histórico de alterações, protegem contra usuários maliciosos que vandalizam o site, etc, etc, etc. É uma proposta simples e eficiente para facilitar a captação de dados vindos de vários usuários.
Por outro lado, um simples wiki serve apenas como repositório de documentos. Arquivos simples de texto. Não há forma de estruturar a informação de maneira consistente, a não ser que você obrigue cada usuário a seguir um padrão de documento que possa ser processado por um programa.
A alternativa seria um sistema que usasse os princípios do wiki, mas que pudesse ser aplicado a outros “tipos” de dados além de blocos de texto. Para alegria do editor-chefe e salvação de meu lombo, tal alternativa existe: Infogami.
O Infogami permite que você defina tipos estruturados. Depois, pode-se indicar qual é o tipo de cada recurso (uma URL pode ser a representação de um tipo “documento”, outro pode ser do tipo “usuário”, outra pode ser do tipo “Foto com legenda”, etc), e esses recursos podem ser adicionados, editados e removidos livremente, como num wiki.
Existe também a possibilidade de alterar a representação visual para cada tipo: a página que mostra um documento pode ser totalmente diferente da página que mostra os dados de um usuário, por exemplo. E também podemos estender o sistema com plugins e macros para automatizar ações e operadores que atuam nos tais tipos.
Se você quiser ter uma idéia do potencial desse sistema dê uma olhada na OpenLibrary, que é um site que é “Powered By Infogami”, além do Jottit, que é o sistema mais simples que eu conheço para colocar uma página online.
É praticamente certo que eu vá usar o Infogami como plataforma para o desenvolvimento dessa base de dados de empresas. Só não está pronto pelo fato do editor-chefe, em Sua Infinita Benevolência, ter permitido que eu me dedique a outro trabalho nos últimos dias… tipo assim, um que seja capaz de pagar as minhas contas…
Um comentário interessante sobre o meu texto falando do sistemas distribuídos de versão foi do Bruno, que falou que tal arranjo não funcionaria em uma empresa estruturada de forma mais tradicional, onde as responsabilidades são (em teoria) divididas pela hierarquia, experiência anterior, etc.
De certa forma, ele está certo. Tecnicamente, até podemos utilizar uma ferramenta que tem uma arquitetura distribuída e usá-la de uma forma degenerada: bastaria deixar um dos repositórios como o repositório “oficial”, e passaríamos a ter um esquema mais parecido com a organização atual.
Mas uma mudança dessa natureza levaria justamente à perda do que eu considero como a feature mais importante do DVCS, que é permitir a troca de trabalho entre os indivíduos livremente, sem termos que passar pelo crivo de algum processo. O trabalho deixaria de ocorrer exclusivamente nas folhas e teria que passar por alguns nós acima. Acho que é isso que ele quis dizer quando comentou que “claramente não funcionaria em uma empresa tradicional”.
O que me deixa pensando, entretanto, é o seguinte: não seria a hora das empresas começarem a perceber que o esquema delas pode estar errado? Toda a noção de hierarquia e experiência anterior como parâmetro de confiança em um profissional é uma medida indireta, no melhor caso. No pior caso, é apenas uma desculpa para termos uma instituição regida não pelos mais competentes, mas pelos que são melhores em política corporativa.
O problema, creio eu, está na crescente obsolescência das Instituições. E as empresas serão as primeiras a sofrer com isso.
Instituições surgiram justamente para dar as pessoas confiança em relações entre as pessoas que não se conhecem. Eu posso apresentar o meu RG para um total estranho em um bar, e ele vai aceitar o documento como prova de que eu tenho permissão para beber. Eu posso pegar o meu diploma de engenheiro, passar no CREA, e de uma hora para a outra as pessoas aceitam a idéia de que eu sou apto a construir uma casa. Se eu chegar em um restaurante sem dinheiro e falar que vou pagar depois, rirão da minha cara. Entretanto, um cartão de crédito funciona da mesma forma: é uma instituição que está garantindo que eu vou, sim, pagar depois.
Se fosse esse o único papel das Instituições, não teríamos problema. O problema é que, ao deixarmos que uma Instituição defina o limite inferior de confiança que podemos ter em desconhecidos, ela acaba implicitamente estabelecendo os termos de um contrato e remove a opção de um dos indivíduos usar o seu bom senso. Por exemplo, um dono de bar pode vetar a venda de bebida para um menor de idade - por mais responsável que o menor possa vir a ser - mas não pode vetar a venda de bebida para um alcoólatra ou para alguém que parece ter passado da conta e pode provocar uma briga. Se eu for um bom falsificador de dinheiro, eu poderia comer de graça em qualquer lugar do país.
A Internet mudou esse jogo de uma forma extraordinária. Quando as pessoas passam a ter um meio de comunicar outras formas diretamente, sem precisar passar por intermediários que digam qual é a forma que o relacionamento entre as pessoas deve se dar, elas mesmas passam a criar o seu círculo de confiança. E com isso elas podem, elas mesmas, definirem com quem e de que forma se dará o seu relacionamento profissional, afetivo, pessoal, comercial… as Instituições ficam obsoletas.
Romper com a tradição é difícil. As empresas não vão passar a adotar de uma hora pra outra uma técnica nova. Ainda mais quando uma mudança de técnica implica numa mudança do seu próprio sistema de valores. Elas só tomarão consciência que essa mudança é necessária quando alguém menor, que não tenha nada a perder em adotar essa nova técnica, superá-las no seu próprio jogo.
É assim que se dá a evolução. Muitos mantêm a idéia de que é possível uma entidade já desenvolvida “evoluir”, mudando a sua forma e sua natureza. Essa é uma idéia errada, baseada nos conceitos de Lamarck. A evolução nos moldes de Darwin fala em variabilidade de atributos e “sobrevivência dos mais aptos” ao ambiente. E hoje, parece-me que o ambiente está cada vez mais favorável àqueles que estão largando sua dependência das Instituições e buscando estabelecer seus canais de relacionamento diretamente com as partes envolvidas.
De uma forma ou de outra, são as pessoas que importam. Não a Corporação. Se a Corporação não entender isso, azar o dela.
Dizem que o código do editor-chefe é tão rápido e eficiente que ele executa loop infinito em dois segundos. Talvez seja verdade, talvez seja uma lenda. Mas o que importa é que nós, pobres mortais que não alcançamos o nível Jedi dele, precisamos muitas vezes ter um mecanismo que nos permita verificar quanto tempo uma função está gastando para ser executada.
A maneira óbvia de se fazer isso é adicionando timestamps antes e depois de cada ponto do caminho crítico da sua aplicação. Como você não quer ser visto como um mero Padwan pelo nosso editor-chefe, você vai arrumar outra forma de fazer isso. Como?
Uma sugestão: fazer uma função “cronômetro” que aceitasse uma função como parâmetro. Essa função cronômetro pegaria timestamps antes e depois de executar a função que foi passada como argumento, e retornaria a diferença dos tempos. Isso ainda ficaria feio. Você teria que mexer no código do mesmo jeito em todos os pontos que precisa verificar a sua função, sem contar que você está deixando o fluxo do seu código confuso, substituindo a função que realmente faz o que você quer que faça por uma outra, que faz o que você deseja indiretamente. O seu código deixaria de expressar qual é a sua verdadeira intenção de execução.
Se você fizer isso, você dá espaço para “The-one-who-can’t-be-named” entrar com uma homérica defesa de sua linguagem/plataforma, enviando 32 links de sistemas enterprise que fazem profiling direto na VM, com um singelo acréscimo de 98MB de RAM na execução do processo. Nada demais para alguém que precisa ter um computador com 2GB de RAM apenas para rodar a IDE de forma satisfatória, não é mesmo?
Mas não é o caso. Podemos fazer um profiler de forma rápida e digna, e ainda aproveitar para fazer piadinha dos programadores que usam linguagens de programação que não possuem funções como first-class citizens. Elegante que é, Python tem uma solução para isso: decorators.
Pense em decorators quando você quiser que alterar uma função sem que você deixe de expressar o real objetivo da função ou método. A nossa função cronômetro é um exemplo óbvio. Nós não queremos interferir na funcionalidade da função que vai entrar como parâmetro, mas precisamos alterar o seu comportamento de alguma forma. Assim, definimos uma função cronomêtro:
def timeit():
'''Poor man's profiler'''
def decorator(func):
def proxyfunc(self, *args, **kw):
import datetime
before = datetime.datetime.now()
res = func(self, *args, **kw)
print('%s took %s' % (func.__name__, (datetime.datetime.now() - before)))
return res
return proxyfunc
return decorator
Agora, temos uma função que executa uma outra função e imprimindo o seu nome e tempo que levou para a execução.
E, caso você esteja desconfiado que a função “foo” esteja levando tempo demais na execução, você não precisa mais alterar todos os pontos de código. Basta adicionar o decorator na declaração:
@timeit()
def foo(a, b, c):
'''Função Demoraaaaaada'''
# código
Claro que esse é um exemplo simples. Mas já pode ser usado para resolver muitos problemas. Enfim, o recurso é poderoso, mas não abuse. Há quem aprenda decorators e queira transformar todas as suas funções em decorators, o que acaba prejudicando mais do que ajudando. E procure explicações melhores do que a minha, como essa aqui. Eu só escrevi esse post para o editor-chefe ver que eu falo de programação de vez em quando…