Joel Spolsky: nível de abstração para desenvolvedores

imagem

11 de abril de 2006

Um jovem chega à cidade. Ele parece bem e tem algum dinheiro no bolso, é fácil encontrar uma linguagem comum com as mulheres.

Ele fala pouco de seu passado, mas é óbvio que ele passou muito tempo em uma grande companhia sem alma.

Ele é certamente amigável e sociável, calmo e confiante, não arrogante. Portanto, pode ser necessário um pouco de trabalho do quadro de avisos no Cafe local para programadores. Mas rapidamente perdendo o interesse em projetos de banco de dados de seguros, páginas da web para donas de casa e mecanismos de liquidação financeira.

Um ano depois, ele calculou que havia acumulado dinheiro suficiente para pagar suas modestas despesas durante o ano. Portanto, depois de consultar seu fiel pastor alemão, ele coloca o computador em uma sala ensolarada, em um apartamento alugado e instala ferramentas cuidadosamente selecionadas para o trabalho.

E ele se senta para escrever o código.

E que código é esse? Impecável, artístico, elegante, sem bugs. A interface do usuário imita o processo de pensamento de uma pessoa tão bem que as pessoas a quem ele mostra o código no programa para café dificilmente percebem a interface do usuário. Este é um trabalho brilhante.

Inspirado pelo feedback de seus colegas, ele começa a se envolver nos negócios e se prepara para receber pedidos. Sua modéstia descarta qualquer reclamação e, após um mês, a situação em sua conta bancária não parece tão animadora. Até agora, apenas três pedidos foram aceitos: um da mãe, um do benfeitor anônimo no Cafe of Programmers e um enviado por ele para testar o sistema de comércio.

No segundo mês, os pedidos não chegam mais.

O surpreende e o perturba. Em uma grande empresa, novos produtos eram criados regularmente e, mesmo sendo rudes e discretos, ainda eram vendidos em quantidades razoáveis. Um produto em que ele trabalhou foi um grande sucesso.

Depois de vários meses, sua situação financeira começa a parecer um pouco instável. O cachorro olha para ele com tristeza. Não entendendo direito o que estava acontecendo, mas vendo que seu rosto parece pior que o normal e ele parece incapaz de ganhar força para sair com os amigos, fazer compras para reabastecer suprimentos ou até nadar.

Certa manhã, um vendedor local se recusou a estender sua dívida e seu banqueiro não atendia o telefone havia muito tempo.

Uma grande empresa não é vingativa. Eles reconhecem um funcionário talentoso e ficam felizes em contratá-lo de volta com um salário mais alto. Ele parece melhor, veste roupas novas e recuperou sua antiga autoconfiança. Mas algo está faltando. Uma faísca em seus olhos. A esperança de que ele pudesse se tornar o mestre de seu destino se foi.

Por que ele não conseguiu? Ele com certeza sabe. "Marketing", diz ele. Como muitos jovens especialistas técnicos, ele costuma dizer coisas como: "A Microsoft tem produtos piores, mas melhor marketing".

O termo "marketing", pronunciado por um desenvolvedor de software, significa simplesmente todos esses problemas de negócios: tudo o que eles realmente não entendem ao criar e vender um software.

De fato, não é exatamente isso que significa marketing. A Microsoft tem um marketing terrível. Você pode imaginar que, após esse anúncio de dinossauro, alguém realmente queira comprar o Microsoft Office?

Software é uma conversa entre um desenvolvedor de software e um usuário. Mas, para que essa conversa ocorra, é preciso muito trabalho que vai além do desenvolvimento de software. Isso requer não apenas marketing, mas também vendas, relações públicas, escritório, rede e infraestrutura, e ar condicionado no escritório, atendimento ao cliente, contabilidade e várias outras tarefas de suporte.

Mas o que os desenvolvedores de software fazem? Eles projetam e escrevem código, zombam de telas, depuram, integram e testam coisas no repositório de controle de origem.

O nível em que um programador trabalha (por exemplo, Emacs) é muito abstrato para apoiar um negócio. Os desenvolvedores que trabalham no nível de abstração precisam de uma camada de implementação - uma organização que pega seu código e o transforma em produtos. Dolly Parton, trabalhando no nível “cantando uma boa música”, também precisa de uma enorme camada de implementação para gravar e reservar salas de concerto, pegar ingressos e instalar equipamentos de áudio, além de promover gravações e cobrar taxas.

Qualquer empresa de software bem-sucedida consistirá em uma fina camada de desenvolvedores de software distribuídos na parte superior de uma grande estrutura administrativa abstrata.

A abstração existe apenas para criar a ilusão de que as atividades diárias de um programador (projetar e escrever código, verificar código, depuração etc.) são tudo o que é necessário para criar produtos de software e trazê-los ao mercado. O que me leva ao ponto mais importante deste ensaio:
Seu primeiro passo como gerente da equipe de desenvolvimento de software é criar uma camada de desenvolvimento abstrata.

A maioria dos novos gerentes de software ignora esse ponto. Eles continuam pensando no modelo tradicional de gerenciamento de comando e conquista que aprenderam nos filmes de Hollywood.

De acordo com o Comando-e-Conquista (Estado Maior), os executivos descobrem para onde os negócios irão e depois dão ordens apropriadas aos seus tenentes para mover os negócios nessa direção. Seus tenentes, por sua vez, dividem as tarefas em pedaços menores e dão ordens para sua implementação. Isso continua no organograma até que, no final, alguém abaixo faça algum trabalho. Nesse modelo, o programador é um dente no carro: o motorista que executa uma parte das ordens do manual.

Algumas empresas realmente seguem esse caminho. Você sempre pode descobrir quando está lidando com um negócio desses, porque a pessoa com quem está conversando está fazendo algo sem sentido e ele sabe disso, ele pode até se preocupar com isso, mas eles não podem fazer nada a respeito. É uma companhia aérea que perde um milhão de quilômetros de um cliente para sempre, porque eles se recusam a trocar seu bilhete irrevogável, porque ele não pode voar para longe devido às circunstâncias da família. Este é um provedor de Internet cujo serviço funciona cada vez pior e, quando você cancela sua conta, eles continuam cobrando, quando você liga para reclamar, precisa ligar para um número pago e esperar uma hora, e eles ainda se recusam a devolvê-lo dinheiro até você começar um blog sobre o quanto eles sugam. Esta é uma montadora de Detroit que há muito esquece,como criar carros que as pessoas possam querer comprar e, em vez disso, mudaram de uma estratégia de mercado para uma estratégia de publicidade, como se a única razão pela qual não comprássemos seus carros ruins é porque o desconto não é grande o suficiente.

Basta

esquecer isso. Um sistema hierárquico de comando e controle foi testado e funcionou por algum tempo na década de 1920, competindo com carrinhos de empurrar, mas não é bom o suficiente para o século XXI. Os fabricantes de software devem usar um modelo diferente.

Em uma empresa de software, a primeira prioridade do gerenciamento deve ser criar essa abstração para programadores.

Se em algum lugar um programador está preocupado com uma cadeira quebrada ou está esperando uma resposta da Dell para pedir um novo computador, a abstração vazou.

Pense na camada abstrata do seu desenvolvimento como um iate grande e bonito, com motores incrivelmente poderosos. É impecavelmente mantido. Pratos gourmet são sempre servidos como um relógio. Criadas trabalham duas vezes por dia em cabines. As cartas de navegação estão sempre atualizadas. GPS e radar sempre funcionam, e se eles quebrarem, há um sobressalente abaixo do convés. De pé na ponte, você tem programadores que realmente pensam apenas em velocidade, direção e o que acontecerá no almoço: atum ou salmão? Enquanto isso, uma grande equipe de profissionais em uma ponta branca engomada e uniforme girando sob o convés, mantendo tudo em ordem, enchendo cilindros de gás, raspando conchas do mar, guardando guardanapos sobre a mesa. A equipe de suporte sabe o que fazer, mas recebe os sinais do velho salgado,que assente levemente em certas direções para coordenar toda a sinfonia, para que os programadores possam abstrair tudo o que diz respeito ao iate, exceto velocidade, direção e o que eles querem para o almoço.

O gerenciamento de uma empresa de software é o principal responsável pela criação de abstrações para programadores. Construímos um iate, servimos um iate, somos um iate, mas não operamos um iate. Tudo o que fazemos é fornecer abstração aos programadores, para que eles possam criar um código excelente e para que esse código caia nas mãos dos clientes para quem ele se beneficia.

Programadores precisam de um repositório Subversion. Obter um repositório Subversion significa que você precisa de uma rede e um servidor que devam ser adquiridos, instalados, reservados e fornecidos com energia ininterrupta, e que o servidor gera muito calor e deve estar em uma sala com ar condicionado adicional e que o ar condicionado deve ter acesso à parte externa edifícios, o que significa instalar uma unidade de ventilador de 80 libras na parede do lado de fora do prédio, o que deixa os proprietários do prédio nervosos, de modo que eles precisam levar o construtor a concordar com o local onde o aparelho de ar condicionado será instalado (solução): (na parede externa, aqui, às 18 andar, no lugar mais desconfortável), e os proprietários ligam para o advogado, porque temos que assinar para poder fazer isso e, em seguida, aparecem os funcionários da instalação de ar condicionado com aparelhamento,o que não é conveniente, o que deixa o capataz nervoso e não permite que eles saiam da janela do 18º andar em um cinto Mattel feito de plástico rosa de 1/2 ″, eu juro por Deus, poderia ser um cinto da Barbie Disco, e alguém deveria ligar para o trabalhador da construção novamente agente e descubra o que diabos eles perceberam de repente, depois de 12 semanas no projeto de construção, que precisariam de outra emenda ao contrato para esse maldito ar condicionado, que eles conheciam antes do Natal, e só imaginaram que, se seus programadores passarem pelo menos um minuto pensando sobre isso, então isso já é demais.por que diabos eles perceberam repentinamente, após 12 semanas no projeto de construção, que precisariam de outra emenda ao contrato para esse maldito ar condicionado, que eles conheciam antes do Natal, e só imaginaram que se seus programadores passassem pelo menos um minuto pensando nisso, então isso já é demais.o que diabos eles perceberam de repente, após 12 semanas no projeto de construção, que precisariam de outra alteração no contrato para esse maldito ar condicionado, sobre o qual sabiam antes do Natal, e só imaginaram que, se seus programadores passarem pelo menos um minuto pensando nisso, então isso já é demais.

Para os desenvolvedores de software da sua equipe, tudo isso deve ser abstraído, como digitar svn commit na linha de comando.

É por isso que você precisa ter gerenciamento.

Isso é para aquelas coisas que nenhuma empresa pode evitar, mas se você tem programadores preocupados com isso, o gerenciamento falhou, assim como um iate de 100 pés falhará se o proprietário milionário precisar ir à casa das máquinas e conserte o motor.

Sua empresa típica foi fundada por antigos fornecedores de software, onde tudo é vendas, e todos nós existimos para aumentar as vendas. Essas empresas não podem assumir o controle por conta própria porque criam a versão 1.0 do software (de uma maneira ou de outra) e perdem completamente o interesse no desenvolvimento de um novo software. Sua equipe de desenvolvimento está morrendo de fome ou não existe, porque nunca ocorreu a ninguém criar a versão 2.0 ... tudo o que a gerência pode fazer é aumentar as vendas.

Por outro lado, você tem empresas criadas por ex-programadores. Essas empresas são mais difíceis de encontrar, porque na maioria dos casos elas se comportam silenciosamente, escrevem código em algum lugar no porão que ninguém nunca encontra e, portanto, desaparecem silenciosamente imediatamente após a Grande Reescrita do Ruby.

Ambos os exemplos podem ser facilmente destruídos por uma empresa que é gerenciada por programadores e organizada para colocar os programadores no banco do motorista, mas com excelente abstração, fazendo todo o trabalho duro de converter código em produtos.

O programador é mais produtivo com uma conta pessoal silenciosa, um excelente computador, um número ilimitado de bebidas, uma temperatura ambiente de 20 a 23 graus Celsius, sem brilho na tela, uma cadeira que é tão confortável que você não sente, um administrador que traz manuais de correspondência e pedidos e livros, por um administrador de sistema que torna a Internet tão acessível quanto o oxigênio, um testador para encontrar erros que eles simplesmente não podem ver, um designer gráfico para deixar suas telas bonitas, uma equipe de profissionais de marketing, para que as massas desejem obter seus produtos, uma equipe de vendedores para garantir que as massas possam obter esses produtos, suporte técnico, o que ajuda os clientes a fazer o produto funcionar e ajuda os programadores a entender quais problemas chamam de suporte técnico,e cerca de uma dúzia de outras funções de suporte e administração, que em uma empresa típica somam cerca de 80% do salário. Não é por acaso que o exército romano teve uma proporção de quatro servos por soldado. Isso não foi decadência. Os exércitos modernos provavelmente operam na proporção de 7: 1. (Foi isso que a Pradeep Singh me ensinou hoje: se apenas 20% de sua equipe são programadores, você pode economizar 50% em salários terceirizando-os para a Índia, quanta vantagem competitiva você realmente obtém com essa economia de 10%? )(Foi isso que a Pradeep Singh me ensinou hoje: se apenas 20% de sua equipe são programadores, você pode economizar 50% em salários terceirizando-os para a Índia, quanta vantagem competitiva você realmente obtém com essa economia de 10%? )(Foi isso que a Pradeep Singh me ensinou hoje: se apenas 20% de sua equipe são programadores, você pode economizar 50% em salários terceirizando-os para a Índia, quanta vantagem competitiva você realmente obtém com essa economia de 10%? )

A principal responsabilidade do gerenciamento é criar a ilusão de que uma empresa que lida com software pode ser iniciada escrevendo código, porque é isso que os programadores fazem. E embora seja ótimo ter programadores que também sejam versados ​​em vendas, design gráfico, administração de sistemas e culinária - isso não é realista. Como ensinar um porco a cantar, leva tempo e irrita o porco.

A Microsoft está fazendo um trabalho tão bom na criação dessa abstração que os graduados da Microsoft são notoriamente difíceis de criar empresas. Eles simplesmente não conseguem acreditar quanto passou sem o seu conhecimento e não têm ideia de como recriá-lo.

Ninguém espera que Dolly Parton saiba como conectar um microfone. Atrás dela está uma incrível rede de gerentes, músicos, técnicos de gravação, gravadoras, artistas visitantes, cabeleireiros e publicitários que existem para criar uma abstração que, quando ela canta, é tudo o que milhões de pessoas precisam para ouvir sua música . Toda a equipe de suporte e gerenciamento que tornam possível o trabalho de Dolly Parton pode fazer seu trabalho da melhor maneira, fornecendo a abstração mais perfeita: a ilusão mais perfeita que Dolly canta para nós. Essa é a música dela. Quando você o ouve no iPod, existe uma enorme infraestrutura que torna isso possível, mas a melhor coisa que a infraestrutura pode fazer é desaparecer completamente. Forneça a abstração que Dolly Parton usa para nós pessoalmente.




imagem
Aprenda os detalhes de como obter uma profissão procurada desde o início ou suba de nível em habilidades e salário fazendo cursos on-line SkillFactory:




All Articles