Building Software From Scratch

Por John SonmezFevereiro 23, 2017

Muitos desenvolvedores de software gostam de tornar as coisas complicadas. Eles conseguem algo que pode ser simples e fácil e, devido ao que a maioria das pessoas diz na internet, complicam.

Software deve ser simples. Disse isso, é fácil entender porque tantos desenvolvedores têm dificuldade em construir software a partir do zero. Na mente deles, é uma coisa totalmente complexa e difícil e eles ficam completamente presos no meio do processo.

Então, a questão é… Como se constrói software do zero?

Transcript From The Video

John Sonmez:

Hey, o que se passa? John Sonmez do simpleprogrammer.com. Hoje, tenho uma pergunta sobre a construção de software do zero. Esta é uma pergunta que recebi muitas vezes de muitas pessoas diferentes porque isto é algo difícil de fazer quando se é um principiante, para descobrir como se pode fazer isto.

Esta pergunta vem do Akash e ele diz: “Hey John, os teus vídeos são óptimos e eu valorizo muito os teus conselhos. Um problema que enfrento é que quando se trata de construir um grande software, eu não consigo pensar em como projetar tudo do zero. Digamos, como dividir tudo em mini-tarefas e depois implementar cada sub-tarefa e colocá-las todas juntas para que funcione. Seria muito bom se você pudesse me orientar sobre como superar este problema. O que eu diria aqui, Akash, é que o que você quer fazer é pensar – em vez de pensar em pegar um sistema inteiro, esse tipo de abordagem de cima para baixo, quebrá-lo em todas essas peças, montar todas essas peças e ver como elas se encaixam, e construir esse enorme Transformer ou Legos a partir desses Legos enormes. Você quer pensar em desenvolvimento de software mais como evolution.

O que eu quero dizer com isso é que comece com algo realmente simples. Comece com a coisa mais simples que poderia funcionar que não tem muitas funcionalidades e depois evolua isso para onde você quer ir em vez de fazer o que eles chamam de grande design inicial. Isso não significa que você nunca deve pensar sobre a arquitetura geral da coisa e que você não tem os designs e certas coisas adiantadas. Em muitos casos, você não tem que fazer tanto quanto você acha que precisa.

Agora, se você está projetando algum software que vai ser embutido dentro de um dispositivo eletrônico e um engenheiro de hardware vai ter que desenvolver o circuito ou um chip personalizado, ou algo para que isso funcione, você provavelmente vai ter que projetar muitas dessas coisas antecipadamente e você provavelmente vai ter que fazer isso. Você pode até estar limitado lá. Para a maioria dos softwares que estamos construindo hoje, especialmente aplicativos web e coisas assim ou aplicativos móveis, poderíamos construir algo que é muito, muito básico e depois desenvolvê-lo, fazer mudanças para fazê-lo crescer e adicionar complexidade conforme necessário.

Uma das razões pelas quais isso é tão importante é porque a banalidade do desenvolvimento de software, uma das piores coisas no desenvolvimento de software é a complexidade. Este canal chama-se Simple Programmer e o meu negócio é tornar o complexo simples, porque é isso que precisamos de fazer. Como programadores de software uma das suas principais tarefas é combater a complexidade porque a complexidade entra no sistema e dificulta a manutenção e torna difícil a sua compreensão. Torna mais provável que tenha bugs e que falhe. Queremos reduzir a complexidade o máximo possível. Nós queremos simplificar. Precisamos começar o mais simples possível, o que é a coisa mais simples possível que poderia funcionar?

Muitas vezes no mundo empresarial, chamam a isto um MVP ou produto minimamente viável. O que você pode fazer quando está tentando construir um grande sistema de software ou o que você pode fazer é que você pode começar realmente pequeno. Comece com uma coisa muito, muito pequena. Eu estou tentando pensar no livro, mas eu li este livro realmente bom sobre algo, eu acho que foi um desenvolvimento passo a passo de teste ou algo assim. No livro, ele estava desenhando como um aplicativo Notepad ou algo parecido. Ele começou com muito, muito incremental – ele fez isso de uma forma muito incremental e ele começou com, eu acho, sua aplicação precisava de uma base de dados, mas ele começou com não ter uma base de dados. Em vez disso, tal como armazenar os dados em ficheiros de texto que ele lia a partir dos ficheiros de texto. Então ele chegou ao ponto em que ele precisava realmente colocá-lo em um banco de dados, e então ele modificou o programa e o fez ler os mesmos dados, exceto que ele criou uma abstração para ler do banco de dados.

Essa é a evolução natural das coisas e é assim que você pode construir esse software complexo. Garanto-lhe que a maior parte do software complexo que realmente é construído hoje é construído desta forma. Muito dele não é projetado de forma totalmente antecipada e então construir todas essas peças e esperar e rezar para que elas funcionem. Caso contrário, ele acaba superando o orçamento e o cronograma. Infelizmente, isso acontece. Se você quer ter sucesso, se você quer ser capaz de fazer isso, basta começar com algo pequeno. Não há nada que seja difícil neste mundo. Não há nada que seja complexo. É apenas que é composto de um monte de coisas simples que o fazem parecer complexo.

Você pode construir a arquitetura mais complexa. Você pode construir uma coisa enorme, mas você tem que começar com o simples. É tudo composto pelo simples. Então, em vez de tentar pegar todas essas peças, é só começar. Evolua a coisa. Comece. Constrói alguma coisa. Qual é a coisa mais simples que você pode colocar para fora que faz em qualquer lugar perto da funcionalidade? Então, comece a adicionar funcionalidades. À medida que você adiciona as funcionalidades, então você adiciona a arquitetura para apoiá-las e cria abstrações.

Um livro que eu recomendarei que provavelmente o ajude a fazer isso é chamado de Código Limpo. É um dos meus livros favoritos de Robert Martin. Eu definitivamente recomendo esse livro, mas você quer evoluir sua arquitetura. Então a outra coisa que eu diria sobre isso é que à medida que você evolui as coisas, você vai criando abstrações para mantê-lo simples, para que você nunca tenha essa enorme, enorme complexidade. Às vezes pode até estar reescrevendo a coisa toda ou reescrevendo partes dela, mas tudo bem. É assim que funciona a evolução do software. É melhor do que acrescentar complexidade.

Muitas vezes os programadores de software querem optimizar prematuramente. Eles querem tornar as coisas extremamente flexíveis. Eles estão fazendo uma otimização prematura no software porque estão tentando construir este sistema muito, muito robusto. Isso muitas vezes falha porque nós não sabemos o que não sabemos. Não sabemos o que vamos precisar, então é melhor não tentar antecipá-lo, mas apenas dizer: “Certo. Agora, eu preciso adicionar esta nova funcionalidade ou fazer isto funcionar desta maneira. Como posso desenvolvê-la?”

Remember, o desenvolvimento de software não é como uma ponte. Não é como se você tivesse uma postura concreta e agora você vai mudar a arquitetura da casa. O software é maleável. É como o barro. Podes mudá-lo por aí. Não tem um custo alto, alto para você modificar isso e mudá-lo. Você precisa usar a vantagem desse meio tanto quanto possível, o que se presta a um processo evolutivo de desenvolvimento de software, ao contrário de um grande design inicial.

Eu espero que isso ajude Akash. Grande pergunta. Eu acho que muitas pessoas já perguntaram sobre isso no passado. Se você tem uma pergunta para mim, você pode mandar um e-mail para [email protected]. Se você gostou deste vídeo, vá em frente e clique no grande botão Assinar abaixo se você ainda não se inscreveu. Se você já assinou, eu te agradeço. Fique atento até a próxima vez. Fique atento.

Deixe uma resposta

O seu endereço de email não será publicado.