Trata-se de leitura, escrita, e compartilhamento de código

Tratase de leitura escrita e compartilhamento de cdigo e quanto mais eu blogo, envio mensagens falsas, e procrastino, penso que o código me trouxe a fortuna maior. O maior retorno sobre o investimento com o menor risco.

Depois que saí da faculdade, eu trabalhava com PHP em uma loja fazendo aplicações de logísticas de entrega. Éramos os intermediários entre transportadores independentes e as grandes empresas como a Kmart.

Os transportadores deveriam se registrar no nosso site, dizer que iam estar em Delaware no dia 3 de maio, e que eles estão a caminho de Denver, em seguida, eles obtiam informações sobre transferências ao longo do percurso escolhido. Eles poderiam, em seguida pedir um preço maior no trasporte ou aceitar o valor estipulado, tudo através de nós.

Foi uma aplicação bastante complexa e duas coisas que estavam faltando: controle de versão e constantes. Não havia controle de versão, de modo que você tem coisas como main 2 espalhados ao redor. Junto com as versões de 0 a 6 desse mesmo arquivo, no mesmo diretório. Verdadeiramente doloroso.

Não havia constantes e nenhuma configuração, de modo que o código-fonte estava preenchido com números mágicos. Se quiser fazer um ajuste em qualquer um dos nossos algoritmos, você tinha que encontrar o código que fez o processamento e alterar alguns números de forma manual. Esperávamos esperançosamente que os números estivessem corretos.

Naturalmente, a primeira coisa que fiz foi institucionalizar o Subversion. Rei dos sistemas de controle de versão.

A segunda coisa que fiz foi extrair os números mágicos e colocá-los em arquivos de configuração. Na época, nós faziamos códigos em PHP que acessavam arquivos de configuração .ini. A maior parte do que se precisava era suportado, e eu estava encantado porque o PHP vem com uma biblioteca que acessa e entende arquivos .ini.

Este sistema funcionou bem, mas quando eu comecei mexer com Rails Eu fiquei encantado com o YAML. Tão limpo, tão poderoso. Havia o Syck, uma extensão em C escrita por _why, mas era apenas isso: uma extensão C. Eu não sabia muito sobre carregamento de código C em PHP, e ainda menos sobre como fazer isso em nossos servidores de produção.

Então eu comecei a escrever um parser YAML em PHP, no meu próprio tempo. Como uma homenagem a Syck, eu a chamei de Spyc – SPYC – uma Simples Php Yaml Classe. Foi meu primeiro parser, era stateful (mantinha o estado no decorrer da utilização). Não dei suporte a tudo do YAML, mas ele suportava as principais funcionalidades – dumping e o load. As partes boas.

Me debrucei nele e em pouco tempo estávamos utilizando YAML com grande sucesso na minha empresa. Naturalmente, eu fiz o upload do código para o SourceForge. Rei dos hosts de código-fonte. Meu amigo designer fez uma página e no primeiro mês Spyc foi um enorme sucesso. Eu juro que tinha, pelo menos, 70 downloads. SETENTA!

Isso foi um grande negócio.

Avançou rápido cerca de nove meses: o meu teletrabalho de telecomunicações virou um trabalho de verdade, e eu concordei em ir para Nova Jersey. Eu embalei meu carro, disse adeus, conduzi onze horas para Hackensack, trabalhei um dia no escritório, percebi que todos os meus colegas de trabalho eram completos puxa-sacos, entrei no meu carro e dirigi onze horas de volta para Ohio.

E é isso, eu era um desempregado que abandonou a faculdade sem terminar os estudos.

Não foi tão ruim – Passei muito tempo na piscina naquele verão. E eu passei muito tempo aprendendo Ruby e Rails.

Eu até comecei freelancer novamente. Afinal, eu estava totalmente qualificado. Eu tinha 8 anos de experiência de programação – Fiz algumas QBasic, quando eu tinha 12 anos. Eu estava certo que aquilo contava.

Mas o verão acabou e eu precisava descobrir o que eu ia fazer com minha vida.

Como tinha sorte, no meio desse tempo, o web site de vídeo game GameSpot estavam contratando. E eu precisava de um emprego.

Eu não tinha idéia de onde era São Francisco ou o que os caras do GameSpot estavam procurando, mas eu fiz a requisição. Criei um novo currículo e fiquei a noite toda trabalhando no tema da carta. Até o momento em que eu tinha terminado, era uma página longa e bastante convincente.

Nela eu prometi me mudar para a Califórnia no dia seguinte, levando nada além de meu violão e Xbox comigo. Minha família ia me perder, mas eu estava pronto para sair, e eu estava faminto para mostrar ao mundo o que eu podia fazer. Pronto para aprender com os mestres.

A entrevista por telefone correu bem, eles gostavam que eu estava por dentro do mundo Macs e Ruby, e eu obviamente consegui o trabalho. A primeira vez que pus os pés na Califórnia foi quando eu voei para para procurar um apartamento com meu pai.

Minha experiência profissional não foi o que fez com que eu conseguisse o trabalho. Eu tenho certeza que a minha carta tinha algo a ver com isso, mas a minha curta carreira na logística de transporte foi menos que glamourosa. Eu só tinha uma coisa para mostrar a GameSpot – Spyc.

Meu código foi livremente disponibilizado, tinha sido usado em produção, e funcionou. Eles podem fazer o download e brincar com ela, ou checá-la online. Independentemente de pensarem que era bom ou não, eles poderiam dizer que era limpo e bem organizado. Bom, talvez não, mas eu tinha um site e 70 downloads.

Então isso foi muito legal, e eu achei singular, até que aconteceu de novo. Enquanto eu estava trabalhando na GameSpot, fui fazendo mais e mais Ruby em paralelo. Eu tinha um projeto Rais open souce chamado Ozimodo, péssimo servidor de FTP denominado ftpd.rb (que eu usei como forma de aprender sobre threading), e um DSL parser de linha de comando chamado Choice. Para Choice, eu tinha um suite de testes completa (eu escrevi essa suite para aprender TDD) e uma homepage criada por RDoc no Rubyforge.

Quando CNET, mãe da empresa GameSpot, adquiriu Chowhound, eles decidiram reescrever o site em Rails. A partir do zero. Clássico. Eles trouxeram dois programadores Rails da Wayfaring.com e foram à procura de outro. Então me encontraram.

Mais tarde eu descobri o meu site RDoc, RubyGem, e a suite de testes provou aos caras da Wayfaring que eu era um “verdadeiro” programador Ruby. Eles queriam alguém animado com essas coisas, e eu certamente era.

Aquele foi um grande momento, porque paguei a minha viagem para a RailsConf 2006.

Conversas sobre código.

Se você não tem quaisquer projeto nesse momento, você deve gastar algum tempo aqui começando algo novo. Algo faça sentido para você, mas que ainda não tenha ao seu redor. Uma ideia que tem estado flutuando.

Ou basta encontrar alguém que esteja haqueando e perguntar no que eles estão trabalhando. Talvez seja interessante o suficiente para pular dentro.

Se você deseja criar o seu próprio negócio, o código é a maneira perfeita para encontrar cofundadores e funcionários. Eu sempre me sinto mal por tipos de empresas que postam em fóruns perguntando sobre a melhor forma de encontrar um cofundador ou CTO. Não por causa do tipo de négocios deles – que todos temos de viver com as nossas decisões -, mas porque eu não acho que isso seja um problema.

Conheci todas as outras pessoas do GitHub através de código: PJ através Chowhound, Tom através do seu trabalho open source, Scott por causa de sua quase irritante variedade de bibliotecas Git baseadas Ruby, e Tekkub pelo seu domínio da seção Lua do site.

Na CNET, encontramos pessoas realmente talentosas, tanto através de fonte aberta e projetos locais.

E todos que você conheceu aqui que você não conhecia antes da conferência, tecnicamente, é conhecido através de código.

GitHub não tornou-se popular em virtude do Git. Ele pode ter ajudado, mas não foi o principal catalisador.

GitHub se popularizou porque ele lida com código. Compartilhando, encontrando, e contribuindo com código.

Rubyforge e Sourceforge não são focados no código. Eles nunca foram.

Na verdade, ainda ontem Sourceforge passou por um redesign na sua homepage. Eles tem pesquisa no Twitter e projetos populares ali, frente e centro. Elegante. Então eu cliquei um pouco.

O primeiro projeto que cliquei, Ares Galaxy, é o número sete na lista top dez. O visualizador CVS disse que não possui quaisquer arquivos. Então eu acho que você pode simplesmente baixar um tarball. O que é bom.

O segundo projeto que eu cliquei era o número cinco da lista, 7-Zip. Ele não tem sequer um link para um visualizador de código fonte.

Sem código.

Eu percebi que fazia muito tempo que não criava um projeto no Sourceforge, então eu decidi fazer isso. Lembro-me que é doloroso, mas este é um novo redesign.

A primeira página é constituída por cinco radio buttons, um campo Nome do Projeto, um campo Nome Unix, um textarea para descrição pública, e um textarea para Notas adicionais. A área de notas é carinhosamente fornecida para que você possa justificar ao pessoal do SourceForge porque deve ser permitida a criação de um projeto. E, claro, você não pode continuar sem dar a eles uma razão que contenha pelo menos 200 caracteres.

Penso que é uma loucura – a maioria dos dias tenho problemas com 140 caracteres.

Além disso, há um aviso na parte superior que diz que você precisa armazenar software open source.

Depois de preenchidos todos os campos e que você clicou em ‘Next’ você é convidado a escolher uma licença open source. Há oito licenças listadas, juntamente com uma opção “outros” e, em seguida, um link para documentação sobre open source e escolher uma licença. Eu escolhi MIT.

Na página três você pode atribuir a seu projeto pelo menos cinco categorias. As opções de categorias são coisas como, “Linguagem de programação Ruby”, “User Interface DirectX”, ou “Desenvolvimento Status Beta”.

Eu escolhi quatro muito facilmente, mas teve problemas com a quinta, finalizava com, “Tema Religião e Filosofia New Age”.

Muito apropriado, se você pensar nisso.

Na última página você é convidado a ler sobre o que significa open source, sobre os termos de serviço do site, em seguida submete o projeto para aprovação.

Após o envio aparece uma tela de agradecimento e um pedido para você esperar de um a três dias úteis.

Eu, obviamente, tenho interesse em desaprovar um site competidor, mas este formulário de inscrição é uma das razões para termos começado o GitHub. Uma vez que você tenha uma conta, criar um repositório GitHub é, penso eu, simples:

Pedimos nome do projeto, uma breve descrição, e a URL do projeto. abaixo desses três campos tem dois radio buttons: esse projeto é público ou privado? A única coisa necessária é o nome do projeto. Você pode mudar qualquer um dos campos mais tarde. Não há nenhum processo de aprovação e você pode imediatamente começar a compartilhar código.

Entre decidir compartilhar o seu código e realmente compartilhar o seu código, SourceForge fornece um formulário de inscrição de quatro páginas e um a três dias de espera.

Mas sua documentação em software open source afirma: “A essência do modelo de desenvolvimento Open Source é a criação rápida de soluções dentro de um processo aberto, ambiente colaborativo”.

Correto.

Aqui está a minha sugestão para SourceForge:

Devem cortar o processo de inscrição para uma única página, remover os 200 caracteres do pedido “por favor hospedem o meu projeto”, serem mais favoráveis com relação a categorização, sugerir uma licença de fonte aberta para você, então permitir que altere qualquer destas coisas depois que seu projeto seja criado.

Eles também devem tornar a criação de projeto instantânea e passa-lo através de um filtro de spam ou ter funcionários remunerados para fazerem vistorias manualmente e aprovarem cada projeto em vez olhar para a lista dos projetos recentemente criados e assinalarem os que parecem suspeitos.

Parece-me que todos os passos necessários e formulários são apenas cerimônia, retardando você e fazendo você perder tempo com algo diferente do que você realmente deseja realizar. Eles agregam valor? Certamente que não.

E se há uma coisa que eu aprendi com Rails, é deixar o inferno fora do caminho e permitir que as pessoas concentrem-se na tarefa em questão.

Reduzir atrito.

Primeira lei de Newton do movimento, faz duas afirmações: um objeto em repouso tende a permanecer em repouso e um objeto em movimento tende a permanecer em movimento. É muitas vezes referida como a lei da inércia.

E inércia, para quem não se lembra ou não teve aula de física, é a tendência do objeto resistir a mudanças no seu estado de movimento.

Se você chutar uma bola, ela vai diminuindo a velocidade até parar. Mas ela não quer parar. O Atrito criado pelo movimento ao longo do solo e do ar reage contra a bola, conspirando para pará-la a todo o custo.

Quanto mais você remover atrito, o avanço da bola vai continuar e vai demorar muito mais tempo para parar.

Esta ideia de atrito, é muito parecida com o inverso da produtividade. Ser produtivo significa obter coisas feitas de forma eficiente e eficaz. Atrito impede de você fazer essas coisas, atrasa você, conspira contra você, é uma perda de energia.

E muitas vezes, o atrito custa seu dinheiro.

Poucos meses antes da segunda RailsConf Deixei Chowhound e a CNET para iniciar uma empresa de consultoria com Hyett PJ. Sabíamos como codificar, pensávamos que sabiamos como blogar, mas não sabíamos nada sobre como iniciar um negócio.

Então, fizemos algumas pesquisas. Aparentemente, existem empresas que você pode pagar para criar um negócio para você. Muito oficialmente. Eles até mesmo enviam-lhe uma pasta para documentos de couro com o nome da sua empresa bordado sobre ela.

E existem pessoas que você pode pagar para fazer a sua contabilidade. Nós vamos chamá-los “contadores”.

Estes são dois dos mais importantes investimentos que você pode fazer quando se inicia um novo negócio: profissionais que lidam com a papelada e que manipulam os números.

E não só porque eles sabem o que estão fazendo.

Você ia querer pagar 100 dólares por hora para um contador inexperiente? Porque se seu preço de consultoria é 100 dólares por hora e você faz sua própria contabilidade é exatamente o que está acontecendo.

Mesma coisa para a criação de um negócio. Todo o tempo que você gasta pesquisando, preenchendo papelada, formulários, dirigindo para Sacramento para encontrar um tabelião – é acrescentado e torna-se caro se você fizer tudo sozinho.

A menos, claro, que seu tempo seja sem importância. Mas você está aqui, portanto, isso não é verdade.

Como seu tempo não é inútil, isso significa repetição, trabalho entediante e duro, e todos os custos excessivos de configuração custam seu dinheiro. Bem, e custam seu tempo. O tempo é muito importante, também.

Acho que uma parte essencial de ser um bom programador é a capacidade de identificar estes pontos negativos e removê-los, para agilizar o processo.

Rack, por exemplo, é ótimo porque ele torna a interface com os servidores web tão fácil.

Git branching(ramificação) e merging(mesclar) são sempre apontados como a razão da escolha.

Nós todos amamos Rails porque faz a maior parte das coisas tediosas irem embora.

E testar é famoso porque, bem, bugs e designs ruins são horríveis.

Portanto, vamos seguir esses exemplos. Vamos criar mais projetos que cocem uma coceira ou aliviem alguma dor. Vamos parar a obsessão sobre qual framework de teste usar e começar a obsessão por constuir sites que resolvam problemas. Vamos parar de discutir sobre linguagens e continuar aprimorando a nossa favorita. Vamos parar de criar longos tutoriais para obter assinantes RSS e começar a contribuir para a documentação oficial.

Vamos nos concentrar mais no código e menos nas conversas. Mais nas informações sobre a comunidade e menos sobre nós mesmos.

Na verdade, acho que já estamos no caminho certo. O Ruby Heroes Awards é uma grande ideia e são dadas para as as pessoas certas. Sites como o Rubyflow e até mesmo o Twitter torna mais fácil do que nunca encontrar projetos novos e interessantes. Calendar About Nothing torna simples encontrar programadores apaixonados e dar uma olhada no que estão trabalhando, enquanto RailsCasts e DocRails são alguns dos melhores esforços de documentação em qualquer comunidade.

Então, sim. Queremos mais disso.

Afinal, nós queremos realmente ser estrelas de rock como Kid Rock ou Axl Rose? Pessoas que são famosamente irresponsáveis – que têm reputações degradante para os seus fans e notoriedade para o seu planeta que é do tamanho do próprio ego?

Acho que eu prefiro trabalhar com e ser um bom desenvolvedor.