O senhor se lembra do Stack Overflow em que estamos trabalhando? Alguns comentaristas em um recente artigo do Hacker News questionou o preço do Stack Exchange — essencialmente, um Stack Overflow hospedado:
Parece muito caro para um software relativamente simples como esse. Alguém escreveu uma alternativa de código aberto? Parece algo que pode ser montado em um fim de semana.
Ah, sim, a resposta estereotipada do programador à maioria dos projetos: é trivial! Eu poderia escrever isso em uma semana!
É ainda mais fácil do que isso. Alternativas de código aberto ao Stack Overflow já existemportanto, o senhor já tem uma vantagem. Senhores, iniciem seus compiladores! Er, quero dizer, intérpretes!
Não, não levo essa afirmação a sério. Não o suficiente para escrever uma resposta. E, felizmente para mim, agora não preciso, porque o senhor Benjamin Pollack — uma das poucas pessoas fora de nossa equipe principal que tem acesso ao código-fonte do Stack Overflow – já escreveu uma resposta. Mesmo que eu tivesse escrito uma resposta, duvido que ela tivesse sido tão bem escrita quanto a de Benjamin.
Os desenvolvedores acham que clonar um site como o StackOverflow é fácil pelo mesmo motivo que o software de código aberto continua sendo uma dor de cabeça tão horrível de usar. Quando o senhor coloca um desenvolvedor na frente do StackOverflow, ele não vê realmente o StackOverflow. O que ele realmente vê é isso:
create table QUESTION (ID identity primary key, TITLE varchar(255), BODY text, UPVOTES integer not null default 0, DOWNVOTES integer not null default 0, USER integer references USER(ID)); create table RESPONSE (ID identity primary key, BODY text, UPVOTES integer not null default 0, DOWNVOTES integer not null default 0, QUESTION integer references QUESTION(ID))Se o senhor disser a um desenvolvedor para replicar o StackOverflow, o que entra na cabeça dele são as duas tabelas SQL acima e HTML suficiente para exibi-las sem formatação, e isso realmente é completamente factível em um fim de semana. Os mais inteligentes perceberão que precisam implementar login e logout e comentários, e que os votos precisam estar vinculados a um usuário, mas isso ainda é totalmente possível em um fim de semana; são apenas mais algumas tabelas em um back-end SQL e o HTML para mostrar seu conteúdo. Use uma estrutura como Django e o senhor terá até mesmo usuários e comentários básicos gratuitamente.
Mas isso é não é o objetivo do StackOverflow. Independentemente do que o senhor pensa sobre o StackOverflow em geral, a maioria dos visitantes parece concordar que a experiência do usuário é tranquila, do início ao fim. Eles sentem que estão interagindo com um produto sofisticado. Mesmo que eu não soubesse, eu diria que muito pouco do que realmente faz do StackOverflow um sucesso contínuo tem a ver com o esquema do banco de dados – e tendo tido a chance de ler o código-fonte do StackOverflow, sei que muito pouco realmente tem. Existe um tremendo quantidade de cuspe e polimento necessários para tornar um site importante altamente utilizável. Um desenvolvedor, ao ser questionado sobre a dificuldade de clonar algo, simplesmente não pensa no polimento, porque o polimento é incidental à implementação.
Não tenho nenhuma dúvida de que o senhor com tempo suficiente, os clones de código aberto começarão a se aproximar do que criamos com o Stack Overflow. Isso é tão inevitável quanto a própria evolução. Bem, dependendo da escala de tempo que o senhor estiver disposto a analisar. Com uma equipe inteligente e motivada de dinossauros de código fechado, é realmente possível superar esses minúsculos mamíferos de código aberto. Por enquanto, pelo menos. Digamos que sejamos esses velozes e inteligentes Velociraptor tipos de dinossauros — esses são legais, certo?
Apesar dos protestos bem fundamentados de Benjamin, o código-fonte do Stack Overflow é, na verdade, meio… bem, trivial. Embora esteja começando a haver uma grande quantidade dele, já que estamos trabalhando nesse material há quase um ano. Isso não significa que nosso código-fonte seja bom, de forma alguma; como sempre, fazemos software de baixa qualidade, com bugs. Mas todos os dias, nossa pequena equipe de três pessoas de velociraptores velozes, mas condenados, começa com o mesmo objetivo. Não é escrever o melhor Stack Overflow código possível, mas para criar o melhor Stack Overflow experiência possível. Essa é a nossa missão: tornar o Stack Overflow melhor, de alguma forma, do que era no dia anterior. Nem sempre conseguimos, mas o nos esforçamos muito, muito mesmo para não sermos ruins — e, mais importante, continuamos nos empenhando nisso, dia após dia.
Criar uma experiência melhor no Stack Overflow envolve escrever código e criar recursos interessantes. Mas, na maioria das vezes, é tudo menos isso:
- sintetizando uma marcação HTML mais limpa e mais pura
- otimizar nossas páginas para aumentar a velocidade e a eficiência do tempo de carregamento
- simplificar ou melhorar o layout, o CSS e os gráficos de nosso site
- responder a e-mails de suporte e feedback
- escrevendo um blog post explicando algum aspecto do mecanismo ou da filosofia do site
- sendo clientes de nossos próprios sites, perguntando aos nossos perguntas sobre programação e perguntas para administradores de sistemas
- interagindo com a comunidade em nosso site de meta-discussão dedicado para ajudar a avaliar no que deveríamos estar trabalhando e onde estão as arestas que precisam ser polidas
- eleição de moderadores da comunidade e criação de ferramentas de moderação para que a comunidade possa se policiar e se regular à medida que se expande
- produzindo Creative Commons dumps de nossas perguntas e respostas contribuídas por usuários
- criação de esquemas para publicidade responsável para que todos nós possamos ganhar a vida
- produzindo o Podcast do Stack Overflow com Joel
- ajudando a preparar a logística para o DevDays do Stack Overflow conferências
- configuração o próximo site da trilogiae descobrir para onde vamos em seguida
Como programadores, por mais que queiramos acreditar que o
lots_of_awesome_code = success;
Não há nada particularmente mágico na produção do código-fonte. De fato, escrever código é uma pequena proporção do que torna a maioria das empresas bem-sucedidas.
O código não tem sentido se ninguém conhece seu produto. O código não tem sentido se a Receita Federal vier e jogá-lo na cadeia porque o senhor não pagou seus impostos. O código não tem sentido se o senhor for processado porque não se preocupou em ter uma licença de software criada por um advogado.
Escrevendo código é trivial. E divertido. E algo que continuo adorando fazer. Mas se o senhor realmente quiser que seu código seja bem-sucedido, o senhor parar de codificar por tempo suficiente para fazer todas essas outras coisas, até mesmo mais coisas triviais em torno do código que são necessárias para criar seja bem-sucedido.
* Embora, para ser justo, eu realmente poderia escrever sobre o Twitter em uma semana. É tão ridiculamente simples! Vamos lá!