O Hacker
Um hacker, segundo a RFC 1392, é uma pessoa que possui grande conhecimento sobre o funcionamento de sistemas de computadores. Em outras palavras, é aquele (ou aquela) que sabe o que está fazendo quando o assunto é programação.
O termo foi cunhado em 1960, quando aqueles que desenvolviam sistemas passavam dias trancafiados em laboratórios sem comunicação alguma com o mundo externo ou com outros colegas. Em algumas semanas, ou meses, concluiam sozinhos o desenvolvimento de alguma ferramenta sensacional ou inútil.
Os Processos
Apesar de existir um certo nível de comunicação entre a comunidade de hackers (a colaboração em sistemas open-source é um exemplo), sua fama de anti-sociais persistia. A indústria via um grande potencial técnico nos hackers mas, ao mesmo tempo, um grande gap no quesito comunicação e organização perante o mercado.
Inspirados nos processos fabris de linhas de produção, foram criados processos semelhantes de gerenciamento e desenvolvimento de software. Acreditava-se ser a melhor forma de domar os pedreiros de programas de computador.
Com processos meticulosamente definidos e documentados, a idéia era que qualquer pessoa com o mínimo de conhecimento em sua área pudesse seguir um manual e produzir software conforme o esperado. Do ponto de vista dos profundos conhecedores dos processos, os que trabalhavam para fazer o programa funcionar passaram a ser chamados de recursos. Um recurso é, teoricamente, algo altamente previsível, como uma conexão com o banco de dados ou um stream para um arquivo do filesystem e que deveria funcionar exatamente durante o horário comercial - e as vezes até mais.
Epic Fail
Trinta anos e trilhões de dólares depois, conclui-se que a fórmula
hackers + processos
não resulta em software funcionando nem em clientes satisfeitos. Os famosos processos dificilmente são instanciados de forma correta, suportando mudanças do mercado ou a alta rotatividade dos “recursos”.
Tentar domar os hackers através da criação de processos com canais formais de comunicação não funcionou. As barreiras criadas pelos processos entre “quem quer” (stakeholders) e “quem faz” (hackers) provaram-se extremamente prejudiciais a todos os envolvidos.
E se os hackers evoluíssem suas habilidades sociais a ponto de serem os responsáveis pela criação de seus próprios canais de comunicação ?
Nova Fórmula
Quanto mais tempo um programador passar codificando, mais fluência ele terá em sua linguagem de escolha e maior familiaridade com sua API. Interrupções como listas de e-mail, IRC, amigos, prática de esportes, festas e namoradas apenas servem para tirar o tempo que ele poderia estar codificando ou estudando. Isto é fato. Mas vimos que hackers não foram muito bem sucedidos no desenvolvimento de software para o mundo dos negócios, mesmo quando controlados por processos de big vendors.
Alguém que venha a tornar-se um excelente hacker mas sem habilidades sociais será um péssimo desenvolvedor.
hacker + comunicação = developer
Um bom developer, por sua vez, possui não só um conhecimento técnico acima da média, mas também habilidades sociais que possibilitem sua comunicação com as pessoas. Ele precisa comunicar-se com o restante do seu time, com seus clientes e com outras áreas de sua empresa.
“In the old waterfall method, the business experts talk to the analysts, and analysts digest and abstract and pass the result along to the programmers, who code the software. This approach fails because it completely lacks feedback” - Eric Evans (Domain Driven Design)
Os processos - desta vez mais ágeis - utilizados por sua equipe visam facilitar a comunicação. Os conhecedores destes processos não controlam, mas facilitam, e tentam livrar a equipe dos impedimentos que ameaçam o andamento do projeto.
Participação na comunidade, seja ela open-source ou específica de suas plataformas e ferramentas também é vital. Nenhum processo ou ferramenta é “the one to rule them all”. A troca de experiências da comunidade através de eventos, listas de e-mail, workshops e etc, evita que erros sejam repetidos e divulga novos caminhos que foram traçados com sucesso e que podem servir de guia para outros.
A idéia de um hacker que recebe algumas ordens e depois programa, sozinho e incomunicável em uma sala por algums dias até sair com um programa “simplesmente funcionando” já provou ser um fracasso para problemas em domínios que não os já entendidos por ele. Não é assim que se faz software passível a expansão, manutenção e que satisfaça as reais necessidades do cliente.



Caike,
Belo post!
O que algum tempo “idle” não faz?
Rsrsrsrsrsr
Abraço
Fala meu herói! Interessante essa visão!
*Acho* que compreendi sua idéia, mas no fim fiquei com uma impressão incômoda com a sugestão de que “developer > hacker”.
Ao meu ver, developer/hacker/analista/vendedor/designer/etc são só classes diferentes que se balanceiam, como em um bom RPG!
Então acho que a equação “hacker + comunicação = developer” não se aplica, pois hacker não é skill, mas classe.
Logo, comparando um hacker e um developer com mesmo XP, definitivamente o skill de _problem solving_ do hacker superaria o developer, como o skill de comunicação do developer superaria o do hacker, já que seus interesses individuais potencializam estas virtudes.
Agora é só continuarmos no próximo #horaextra!
Grande abraço.
Fala, Henrique!
Gostei da analogia com RPG e faz total sentido. Não acho que um seja melhor do que o outro. Como você mesmo falou, seus interesses individuais potencializam suas virtudes.
Um hacker com a skill de comunicação bem desenvolvida terá mais facilidade em compreender os problemas de outros domínios e em resolvê-los conforme o esperado por seus clientes (os reais conhecedores do domínio).
Atualizei o último parágrafo para deixar isto claro.
Valeu pela observação!
Abraçø
Valeu, Marcelo!
Maneiro essa visão que você descreve, o que fiquei pensando, existe também developer sem comunicação ou esse seria o hacker?
Será que realmente o problema é do hacker, por que o hacker que chegou a tal conhecimento com tanta dificuldade tem que se adaptar a quem precisa desse conhecimento, e por que não aprender a se comunicar com a hacker? talvez tenha um problema na comunicação que “exclui” esse hacker da sociedade.
Ou afinal de conta vamos viver nessa realidade, o cara é o sinistro mas não faz, melhor as vezes faz?
Belo post, continue assim.
Peace
Fala, Rui!
Ao meu ver, uma característica essencial para um developer é a comunicação. Sem comunicação, não há developer. Talvez um hacker competente dentro de seu próprio domínio, ou então um programador medíocre. Um programador sem a capacidade de comunicar-se terá muita dificuldade em compreender novos domínios e resolver os problemas de seus clientes.
Quanto ao cliente ser o responsável por aprender o domínio de um hacker, acho que seria inviável. Normalmente os clientes não-técnicos não querem saber sobre Kernel do Linux, SMTP, JVM, REST vs WS-*, etc. Mas isto renderia um outro post!
Valeu pelo comentário,
Abraçø!
Fala Caike,
Muito bom o poste, fazia tempo que não lia um tão bom. Gostei da parte que você fala sobre processos. Bem de fato a comunicação no mercado de trabalho de desenvolvimento de software é essencial. E sendo hacker ou não, sem ela as coisas não fluem muito bem. Mas creio que há espaço para todos, pois apesar de o cliente ter total dominio sobre o negócio, tem coisas que só um hacker sabe fazer (exemplifico isso em alguns sistemas web em que há desenvolvedores mais familiaridos com a arquitetura do sistema e outros mais familiarizados com as regras do sistema, e a diferença nisso tudo, pelo menos vejo assim, é a comunicação necessária para compreender algumas regras de negócios). Mas nem só de comunicação pode viver o desenvolvedor e isso me faz crer que o desenvolvedor passa ser um pouco de tudo, e em algumas partes mais pontecializado, o que dependerá de seu perfil +hacker ou +desenvolvedor.
Abraço Caike, até mais.
É isso mesmo, Glauber. Existe espaço para todos!
Valeu pelo comentário,
Abraçø!
[...] você está desenvolvendo software profissionalmente para a indústria e ainda utiliza a maneira hacker, nenhuma plataforma será produtiva o suficiente para você. Caso não haja comunicação envolvida [...]
[...] for the enterprise (and by that I don’t mean enterprisey) and you’re still doing it the hacker way, then no platform will look good enough for you. If there is no communication involved in your [...]
Muito bom…passei para os meus alunos de programação!
Realmente, processos não deveriam servir para domar pessoas.
As coisas que realmente importam não costumam estar sob tanto controle…
Acho algo como uma “árvore de software” bem mais interessante que uma “fábrica de software”!
Post interessante.
Comentários interessantes.
Ótima colocação!
Uma pena não poder mandar o texto pra um hacker que não consegue se comunicar. Pelo menos não sem receber de volta um olhar de desprezo heheh