Essa incompetência nunca teria escapado com outras disciplinas de engenharia. Sob nenhuma circunstância aceitaremos bridges com tantos bugs quanto um sistema de software comum. Por que a situação do projeto de software é tão terrível? Por que existem tantos programas de fig no mundo?
Para entender o motivo disso, primeiro precisamos entender como a habilidade de um desenvolvedor se relaciona com a utilidade do software que ele cria para resolver um problema específico.
Na primeira categoria, vemos "desenvolvedores" que são essencialmente incompetentes. Há uma ampla gama de proficiência de habilidade a ser encontrada nesta categoria, mas todos nela são semelhantes no sentido de que seu produto final é funcionalmente inútil. Os computadores são implacáveis nesse aspecto - se você não sabe como fazer seu aplicativo compilar, é melhor não escrevê-lo. Se você não sabe como criar a funcionalidade básica de seu aplicativo, absolutamente ninguém a usará. Abaixo de um certo limite de habilidade, você não pode criar nenhum software utilizável. A maioria dos "desenvolvedores" nesta categoria experimenta código em seu tempo livre e raramente cria software profissional.
No entanto, assim que cruzamos o limiar, a situação muda drasticamente. Na parte inferior do gráfico estão os desenvolvedores que são capazes de criar sistemas de software viáveis mínimos. E se esses desenvolvedores melhorarem, a utilidade de seu software também aumentará rapidamente. Um aplicativo que "funcionava", mas era lento, com erros, inseguro e confuso, está gradualmente se tornando menos problemático, com mais desempenho, mais seguro e mais fácil de entender. Ao contrário das outras duas categorias, à medida que os desenvolvedores desta categoria desenvolvem habilidades, o software que eles criam se torna significativamente melhor.
Finalmente, quando os desenvolvedores alcançam um certo limite de habilidade, eles o ultrapassam.
e caem na terceira categoria. Em uma categoria onde todos atingiram um nível tão alto de competência (em relação à tarefa que estão resolvendo) que o crescimento pessoal posterior terá um efeito mínimo no produto final. Por exemplo, qualquer engenheiro do Google selecionado aleatoriamente pode criar um aplicativo CRUD, assim como Jeff Dean .
Em um mundo ideal, os únicos desenvolvedores na primeira e segunda categorias seriam estudantes ou jovens profissionais. E todos os sistemas de software profissionais seriam criados principalmente por desenvolvedores da terceira categoria. Desenvolvedores que dominam perfeitamente todas as habilidades necessárias para resolver seus problemas e criar soluções muito próximas do ideal teórico. Em um mundo tão incrível, todo o software ao nosso redor teria aproximadamente o mesmo alto nível de qualidade, funcionaria exatamente como esperado, com desempenho ideal e sem falhas de segurança. Neste mundo, a sociedade reagiria a todos os softwares com alegria, não aborrecimento.
No entanto, existem dois problemas entre nós e esta utopia.
Primeiro, o número de desenvolvedores na terceira categoria é extremamente pequeno em comparação com a segunda categoria. A programação é "fácil de aprender, mas difícil de dominar". Milhões de pessoas podem escrever um script funcional, mas muito poucas dominam a arte do design de software. Além disso, não há obstáculos para entrar na indústria de desenvolvimento de software - não há analogia para programadores da American Medical Association ou da International Bar Association. Não é surpreendente que haja muito mais pessoas com competência inicial e intermediária, em comparação com o número de especialistas competentes.
Em segundo lugar, a demanda por desenvolvedores é incrível. Os desenvolvedores de software têm a oportunidade de fazer contribuições tremendas para praticamente qualquer setor. Em comparação com profissões de nicho, como astronomia, onde as oportunidades são severamente limitadas, o desenvolvimento de software é uma área que carece de talento. Ou seja, o principal problema é encontrar desenvolvedores de software talentosos, não encontrar empregos adequados para eles.
Se você combinar esses dois problemas, a maioria das empresas que deseja contratar desenvolvedores especializados não tem a oportunidade de fazê-lo. Não há gente boa o suficiente para contratar, e as que estão no mercado geralmente recebem negócios incomparavelmente melhores de empresas do nível FANG ou startups em ascensão.
Portanto, todas as outras empresas fazem a escolha ideal em tal situação. Eles contratam desenvolvedores da segunda categoria. Desenvolvedores que geralmente podem ser chamados de "bons o suficiente". Seus aplicativos têm bugs, vulnerabilidades de segurança e não conseguem lidar com cargas elevadas. Mas pelo menos essas pessoas são capazes de criar algo "funcionando". Algo mais útil do que o status quo. Algo que pode ser implementado em produção com o mínimo de análise crítica.
Pode-se enganar que essa situação seja natural para todo o mundo e para todos os profissionais. Mas na verdade não é.
Existem muitas posições que exigem treinamento sério, mas se enquadram na categoria de "fácil de aprender". São profissões como motorista de táxi, operário de construção ou bartender. Nessas profissões, há uma grande proporção de trabalhadores que alcançaram a categoria de alta competência, e o aprimoramento posterior das habilidades praticamente não traz nenhum benefício.
Existem também muitas profissões em que as oportunidades são tão limitadas que os empregadores preferem contratar apenas especialistas excelentes. Por exemplo, isso se aplica a pianistas. Pianistas amadores podem ser encontrados em muitas famílias, mas nunca tocarão em uma sala de concertos, pois o número de pianistas talentosos excede em muito o número de concertos planejados.
Finalmente, existem profissões que são difíceis de dominar e com muitas oportunidades, mas têm barreiras regulatórias para o ingresso. Por exemplo, prática médica. Havia muitas pessoas no mundo pré-Obamacare que não podiam pagar seguro saúde e escolheriam alegremente "pelo menos alguns" serviços de saúde em vez de nenhum (vale a pena fazer isso é outra questão difícil)... No entanto, devido a regras rígidas, apenas aqueles que comprovaram sua alta competência podem prestar serviços médicos. A situação é semelhante em muitas disciplinas de engenharia que estão sujeitas a um forte escrutínio regulatório, como a construção de pontes e arranha-céus e a fabricação de equipamentos médicos.
O desenvolvimento de software se tornou uma interseção curiosa de todos os itens acima. É fácil de aprender, portanto, existem legiões de desenvolvedores “bons o suficiente” em todo o mundo. Desenvolvedores que criam soluções de software bastante úteis, mas cheias de bugs e vulnerabilidades de segurança. Ao mesmo tempo, essa profissão é difícil de dominar em alto nível, por isso é muito mais difícil encontrar desenvolvedores que possam evitar essas armadilhas.
A indústria de software é tão rica em oportunidades que a maioria das empresas acha quase impossível contratar bons profissionais. É tão rico em oportunidades que, embora haja legiões de desenvolvedores novatos em todo o mundo, há trabalho para cada um deles.
Finalmente, no desenvolvimento de software, não há controle de entrada. Qualquer pessoa pode fazer um programa de treinamento de codificação, fazer alguns cursos de codificação online e começar a oferecer seus serviços no Upwork no dia seguinte. E o produto de seu trabalho pode ser imediatamente colocado em produção sem nenhum controle regulatório.
Juntando tudo isso, você pode entender por que existe tanto software coxo no mundo. O software está devorando o mundo, acompanhado de bugs e falhas de segurança.
: , , . , .
, , . CEO, «» — , .