Existe uma maneira de melhorar minhas habilidades 10 vezes? Existe algum segredo mágico que - se você soubesse disso - abriria para você um novo mundo de habilidade e produtividade no desenvolvimento de software?
É aqui que os céticos pensam: “Você não pode cortar custos aqui! Todo mundo tem que praticar para se tornar bom! " E isso é verdade, mas o que os especialistas praticam para acelerar o desenvolvimento de software? Existe uma coisa importante que pode fazer uma enorme diferença?
Sim! Há sim!
Mas mesmo que eu o compartilhe com você - mesmo que eu o detalhe detalhadamente - pode levar 10 anos para você crescer e apreciar completamente sua simplicidade.
Pelo menos foi o que aconteceu comigo. Isso me foi ensinado em inglês simples pelo meu professor de programação do ensino médio. Andei passo a passo pelo processo de aplicação usando alguns exemplos de código. E isso realmente aconteceu apenas 10 anos depois. Mas agora, graças à minha experiência, aprecio profundamente esta lição e, embora saiba que você não pode realmente apreciá-la à primeira vista, vou compartilhar com você.
Esse segredo é a principal diferença entre desempenho médio e desempenho 10x. Ao alavancar esse segredo, você pode ter ordens de magnitude mais eficazes.
Você pode escrever um código mais reutilizável e com menor probabilidade de quebra quando novos requisitos são introduzidos e as alterações ocorrem no código.
O segredo para ser 10 vezes mais produtivo é dominar a abstração. Muitos desenvolvedores tratam "abstração" como uma palavra suja. Você pode ouvir conselhos, por exemplo, "não abstraia cedo demais" ou o famoso Zen Python "explícito é melhor que implícito", o que significa que o concreto é melhor que o abstrato. Este é um bom conselho, dependendo do contexto.
Mas os aplicativos modernos usam uma quantidade enorme de código. Se você imprimir o código fonte dos 10 principais aplicativos modernos, essas pilhas de papel competirão com a altura dos arranha-céus, e a manutenção do software custará muito dinheiro. Quanto mais código você cria, mais ele custa.
Abstração é a chave para um código simples
As abstrações corretas podem tornar seu código mais legível, adaptável e sustentável, ocultando detalhes que não são importantes para o contexto atual e reduzindo a quantidade de código necessária para realizar o mesmo trabalho - geralmente várias vezes.
"A simplicidade está subtraindo o óbvio e agregando significado."
- John Maeda: As Leis da Simplicidade
Abstração não é uma via de mão única. É formado por dois conceitos adicionais:
- Generalização - removendo partes duplicadas (óbvias) e escondendo-as atrás de uma abstração.
- Especialização - o uso da abstração para um caso de uso específico, adicionando apenas o que deve ser diferente (significativo).
Considere o seguinte código:
const doubleList = list => {
const newList = [];
for (var i = 0; i < list.length; i++) {
newList[i] = list[i] * 2;
}
return newList;
};
Não há nada errado com o código, mas ele contém muitos detalhes que podem não ser relevantes para esse aplicativo em particular.
- Ele inclui detalhes sobre a estrutura de dados do contêiner (matriz) que está sendo usada, o que significa que funcionará apenas com matrizes. Ele contém a dependência do formulário de estado .
- Inclui lógica de iteração, o que significa que, se você precisar de outras operações que também precisem visitar cada item na estrutura de dados, também precisará repetir uma lógica de iteração muito semelhante nesse código. Isso induz repetição , o que pode violar o princípio DRY (não se repita) .
- Inclui uma atribuição explícita em vez de uma descrição declarativa da operação a ser executada. É prolixo .
Nada disso é necessário. Tudo isso pode estar escondido atrás da abstração. Nesse caso, uma abstração tão versátil que mudou a maneira como criamos aplicativos modernos e reduziu o número de loops explícitos para os quais precisamos escrever.
"Se você toca em uma coisa com profunda consciência, toca em tudo."
- Thih Nhat Han
Usando a operação de mapa, podemos reduzir o código para uma linha, removendo o óbvio (as partes que provavelmente repetiremos em código semelhante) e focando no significativo (exatamente o que deve ser diferente para o nosso uso). Exemplo:
const doubleList = list => list.map(x => x * 2);
Os desenvolvedores juniores pensam que precisam escrever muito código para obter grande valor.
Os desenvolvedores seniores entendem o valor do código que ninguém precisa escrever.
Imagine-se um programador que popularizou o uso da operação de mapa em linguagens de programação como JavaScript. Um mapa é abstraído de detalhes como o tipo de dados que você está mapeando, o tipo de estrutura de dados que os contém e a lógica de iteração necessária para listar cada nó de dados na estrutura de dados. Isso aumentou o desempenho de todos os aplicativos que eu criei na última década.
Jeremy Ashkenaspopularizou várias dessas operações em JavaScript e abriu o caminho para muitos atalhos de sintaxe excelentes que agora assumimos como garantidos em JavaScript, primeiro usando-os no CoffeeScript. Ele criou o Underscore, que gerou o Lodash (ainda a ferramenta de programação funcional mais popular em JavaScript) e o Backbone, que popularizou a arquitetura MVC em JavaScript e lançou as bases para Angular e React.
John Resigcriou o jQuery, que era tão popular e influente que formou a maior coleção de módulos JavaScript encapsulados novamente (plugins jQuery) até que os módulos Node padrão e ES6 apareceram alguns anos depois. A API do seletor do jQuery era tão poderosa que se tornou a base da moderna API do DOM. Eu me beneficio dessa API quase diariamente ao testar os componentes do React .
Abstrações adequadas são alavancas poderosas que podem afetar significativamente o desempenho. Abstração não é uma palavra suja. Módulos, funções, variáveis, classes são todas formas de abstração, e toda a razão pela qual elas existem é simplificar a abstração e compor abstrações.
Você não pode escrever programas complexos sem abstrações. Até a linguagem assembly usa abstrações - nomes para instruções, variáveis para endereços de memória, pontos de código para pular para sub-rotinas (como chamadas de função) etc. O software moderno é uma camada de abstrações úteis, e essas camadas oferecem a você a vantagem.
"Dê-me uma alavanca por tempo suficiente e um ponto de apoio em que eu possa me apoiar, e eu moverei o mundo inteiro."
- Arquimedes
Chave para a simplicidade: o segredo que procuramos é como reduzir a quantidade de código que criamos - como fazer muito mais com muito menos. Quando você domina isso, você se tornará programador 10 vezes melhor. Eu garanto.
Descubra os detalhes de como obter uma profissão de alto nível do zero ou subir de nível em habilidades e salário fazendo os cursos on-line pagos do SkillFactory:
- Curso de Machine Learning (12 semanas)
- Treinamento da profissão em Data Science (12 meses)
- Profissão analítica com qualquer nível inicial (9 meses)
- Curso Python para Desenvolvimento Web (9 meses)