Contents

10 princípios básicos de programação que todos os programadores devem conhecer

Principais lições

Em essência, o princípio KISS defende a escrita de código conciso e direto. O objetivo é minimizar a complexidade, evitando soluções elaboradas ou complicadas em favor de uma abordagem mais simplificada. Isto inclui a utilização de convenções de nomenclatura não ambíguas para variáveis e a eliminação de construções desnecessariamente complexas.

Evite replicar a lógica em várias partes do seu programa, utilizando componentes reutilizáveis, como funções, loops e estruturas algorítmicas. Esta abordagem não só simplifica os esforços de manutenção e depuração, como também melhora a legibilidade e a eficiência gerais.

Optimize o seu código para extensibilidade enquanto preserva a sua integridade, aderindo a um princípio conhecido como “Princípio Aberto/Fechado”. Isso envolve a criação de um design de software que permita adições contínuas sem comprometer a estrutura original, garantindo estabilidade e facilidade de manutenção. Ao estabelecer este equilíbrio, é possível expandir a funcionalidade, mantendo o controlo sobre potenciais modificações.

A composição de um código informático eficaz pode ser simples, mas a criação de um código excecional exige perícia e dedicação. A adesão aos princípios fundamentais da programação garante a criação de código de primeira qualidade que apresenta um desempenho, legibilidade, fiabilidade, segurança e manutenção óptimos, independentemente da escala ou complexidade do projeto de software.

Uma codificação eficaz requer disciplina e determinação. Para o conseguir, é necessário aderir a certos princípios fundamentais de programação que promovem melhores práticas de codificação. Ao incorporar estes princípios, pode melhorar a sua proficiência como programador.

Keep It Simple, Stupid (KISS)

À primeira vista, este princípio pode parecer um pouco abrasivo, mas é indiscutivelmente um dos princípios fundamentais que devem ser adoptados quando se compõe código informático. O que significa exatamente “KISS” neste contexto?

Essencialmente, é prudente compor código que seja tão simples e descomplicado quanto possível. Entre os princípios fundamentais da codificação proficiente, é aconselhável não se preocupar com a tentativa de exibir engenhosidade excessiva ou ostentação através de um intrincado emaranhado de sintaxe avançada. Sempre que possível, esforce-se por ser breve, empregando comandos concisos.

Aqui está uma função simples:

 function addNumbers(num1, num2) {
    return num1 \\+ num2;
} 

O conteúdo apresenta-se de uma forma direta que permite uma compreensão clara da mensagem, sem ambiguidade ou confusão quanto ao significado pretendido.

Uma orientação de programação valiosa que incorpora a simplicidade é a utilização de nomenclatura explícita de variáveis.Aproveite as bibliotecas e os recursos de codificação estabelecidos, simplificando o seu fluxo de trabalho com ferramentas pré-existentes. Ao conceber uma abordagem que facilita a retoma, mesmo após um hiato prolongado, é possível atenuar a frustração considerável e acelerar a produtividade. O adágio “Keep It Simple, Stupid” (KISS) tem um mérito significativo quando aplicado ao desenvolvimento de software, uma vez que a manutenção de uma base de código simples pode aliviar o agravamento substancial e a ineficiência a longo prazo.

Escrever código DRY

O princípio DRY (Don’t Repeat Yourself) na programação de computadores defende a eliminação de código duplicado. Este é um princípio essencial para evitar a repetição de dados e lógica, o que ocorre frequentemente quando os programadores copiam e colam involuntariamente fragmentos de código nos seus programas. A adoção deste princípio pode melhorar significativamente a capacidade de manutenção e a escalabilidade dos sistemas de software, reduzindo a redundância e promovendo a modularidade.

Dê uma olhada neste script:

 function addNumberSequence(number) {
    number = number \\+ 1;
    number = number \\+ 2;
    number = number \\+ 3;
    number = number \\+ 4;
    number = number \\+ 5;
    return number;
} 

Em vez de replicar linhas, seria mais eficiente empregar um mecanismo de looping numa estrutura algorítmica.

O código DRY (Don’t Repeat Yourself), caracterizado pelo seu minimalismo e simplicidade, não só é eficiente em termos de utilização de recursos, como também oferece uma vantagem significativa no que diz respeito à manutenção e depuração. Ao consolidar elementos ou lógica repetidos em componentes únicos e reutilizáveis, os programadores podem evitar a duplicação de código em vários locais do programa, reduzindo assim os potenciais erros e simplificando o processo de identificação e resolução de problemas. Essencialmente, trabalhar com código DRY permite uma gestão mais eficaz da complexidade da base de código, ao mesmo tempo que promove a modularidade e a escalabilidade.

Aberto/Fechado

/pt/images/basi-programming-principles.jpg

O conceito de “princípio aberto-fechado” no desenvolvimento de software dita que se deve procurar criar código que possa ser facilmente alargado, mas que permaneça imutável após modificações. Ao aderir a este princípio, os programadores podem garantir que a sua base de código permanece funcional e adaptável, mesmo quando as necessidades do projeto evoluem ao longo do tempo. O princípio aberto-fechado tem um significado especial na conceção de bibliotecas ou estruturas destinadas a serem utilizadas por outros programadores.

Considere um cenário em que alguém está a supervisionar uma plataforma de interface gráfica do utilizador (GUI). É concebível distribuir uma edição que permita aos programadores alterar e incorporar o código fonte fornecido sem problemas. No entanto, o que acontece quando uma atualização substancial é emitida após um período de quatro meses?

É expetável que a implementação do seu código de programação falhe, o que levaria à insatisfação dos seus associados. Consequentemente, é pouco provável que estes colaboradores continuem a utilizar o seu pacote de software, mesmo que este tenha sido altamente benéfico num período anterior.

Em vez de modificar o código diretamente, é preferível criar uma versão que restrinja quaisquer alterações e promova adições ou melhorias. A adesão a princípios fundamentais de programação como esses permite a separação da funcionalidade primária de um programa de seus recursos personalizados. Esta abordagem resulta num sistema mais robusto e gerível, tornando os esforços de manutenção mais simples e eficientes.

Composição sobre Herança

Ao empregar uma abordagem orientada a objectos no desenvolvimento de software, o Princípio da Composição sobre Herança (COIP) pode revelar-se altamente vantajoso. O COIP postula que, em vez de herdar uma classe e subsequentemente adicionar comportamentos adicionais, devem ser obtidos comportamentos mais complexos através da incorporação de objectos separados que exibam comportamentos singulares.

A utilização da herança conduz frequentemente a dois problemas significativos. Inicialmente, a estrutura hierárquica da herança pode tornar-se bastante complicada muito rapidamente. Além disso, existe uma margem limitada para delinear comportamentos excepcionais no âmbito da herança. Por exemplo, suponhamos que se deseja estabelecer comportamentos que são partilhados entre várias entidades; isto torna-se mais difícil quando se confia apenas na herança.

/pt/images/principle-of-programming.png

A programação por composição apresenta uma abordagem mais simplificada à escrita de código, tornando-o mais simples de preservar e atualizar, ao mesmo tempo que oferece a possibilidade de definir condutas adaptáveis através da criação de classes específicas para cada comportamento único. A agregação destes comportamentos individuais permite o desenvolvimento de comportamentos complexos com maior versatilidade.

Responsabilidade Única

/pt/images/principle-of-programming-language.jpg

De acordo com o Princípio da Responsabilidade Única, cada classe ou módulo de um sistema de software deve ser dedicado exclusivamente ao cumprimento de uma função singular. Tal como Robert C. Martin explicou, uma classe deve ter “apenas uma razão para mudar”.

À medida que os sistemas complexos evoluem, é crucial ter cuidado ao adicionar novas funcionalidades ou responsabilidades a classes e módulos. À medida que estas entidades crescem em complexidade, pode tornar-se necessário refactorizar e decompô-las em subclasses e módulos mais pequenos para uma melhor organização e manutenção.

A sobrecarga de classes pode levar a várias consequências adversas.Um desses efeitos diz respeito à complexidade na identificação e resolução de problemas num determinado módulo durante o processo de depuração. Outro resultado prejudicial envolve o impedimento do desenvolvimento de outras funcionalidades nesse mesmo módulo. A adesão a boas práticas de programação ajuda a mitigar estes potenciais desafios antes da sua ocorrência.

Separação de preocupações

A noção de separação de preocupações é uma interpretação de alto nível do objetivo singular conhecido como Princípio da Responsabilidade Única. De acordo com este princípio, é aconselhável construir sistemas de software dividindo-os em componentes distintos, em que cada componente opera independentemente e não tem conhecimento ou interação com outros.

o modelo de dados, que gere a informação; o controlador, responsável pelo processamento das entradas do utilizador e pela atualização do modelo em conformidade; e a vista, que representa a interface do utilizador que apresenta o estado atual do modelo ao utilizador final. Este padrão de conceção pode ser observado em várias estruturas de desenvolvimento Web contemporâneas, com ligeiras modificações para acomodar requisitos ou preferências específicos.

Por outras palavras, o programa responsável pela gestão da base de dados não necessita de qualquer conhecimento sobre o processo de apresentação da informação no ecrã. Pelo contrário, é outro conjunto de instruções que se encarrega dessa tarefa. Estes dois conjuntos de códigos são entidades totalmente separadas e distintas.

A vantagem desta metodologia reside na sua capacidade de facilitar o processo de depuração. Se for necessário efetuar alterações ao sistema de visualização em qualquer altura, pode fazê-lo com total confiança de que as suas modificações não irão interferir com o armazenamento e processamento de dados.

You Aren’t Going to Need It (YAGNI)

/pt/images/computer-programming-principle.jpg

Um princípio fundamental do desenvolvimento de software dita que a implementação de características e funcionalidades não deve ser efectuada de forma especulativa, com a expetativa de potenciais requisitos futuros. Entre as directrizes críticas para uma programação proficiente, é essencial reconhecer a importância de não abordar problemas inexistentes.

Ao esforçarem-se por implementar os princípios da programação seca, não é invulgar os programadores comprometerem a adesão a este princípio. Os programadores principiantes tentam frequentemente criar código altamente generalizado e abstrato, o que pode resultar em programas demasiado complexos e difíceis de gerir devido a uma abstração excessiva.

Quando for considerado necessário, deve ser considerada a implementação do princípio DRY (Don’t Repeat Yourself) na programação.A presença de segmentos de código repetidos exige a criação de uma camada abstrata para melhorar a eficiência. No entanto, é preciso evitar concentrar-se demasiado no desenvolvimento futuro à custa da qualidade imediata do código.

Documentar o seu código

É importante não esquecer a importância de ter em conta as pessoas que irão interagir e navegar no seu código. No meio da discussão dos fundamentos da programação, é crucial ter em mente que há seres humanos envolvidos, que podem precisar de mergulhar no código em algum momento.

Na opinião de programadores experientes, a importância de aderir a uma documentação completa através de comentários meticulosos no código fonte não pode ser exagerada. Cada linguagem de programação fornece essa funcionalidade, portanto, é imperativo que escrever tais comentários se torne uma prática arraigada. O objetivo destas anotações vai para além da mera clarificação de objectos ou do aumento das explicações de variáveis; servem também para iluminar os meandros das funções, tornando assim a sua compreensão mais acessível.

Certamente, aqui está uma função JavaScript que foi comentada para fornecer uma explicação de sua funcionalidade:

 // This function will add 5 to the input if odd, or return the number if even
function evenOrOdd(number) {
    // Determine if the number is even
    if (number % 2 == 0) {
        return number;
    }
    // If the number is odd, this will add 5 and return
     else {
        return number \\+ 5;
    }
} 

Os comentários podem ser considerados uma tarefa adicional ao escrever código, pois exigem investimento de tempo e foco mental. Embora uma pessoa possa ter uma forte compreensão do seu próprio código, é importante reconhecer o valor de uma comunicação clara para outros que possam interagir com o programa. A noção de descartabilidade não se deve aplicar à tecnologia, uma vez que a comunicação efectiva é crucial para uma colaboração bem sucedida e para a usabilidade a longo prazo.

Quando se trabalha em colaboração com outros indivíduos, é altamente recomendável dar um passo adicional e fornecer observações esclarecedoras sempre que exista a possibilidade de ambiguidade ou confusão. Esta medida proactiva evita eventuais mal-entendidos resultantes de uma má interpretação do código ou de falta de transparência. Ao fazê-lo, evita-se sobrecarregar indevidamente os colegas que possam ter de desvendar uma sintaxe complexa, fomentando assim um trabalho de equipa eficaz e promovendo uma comunicação clara no processo de desenvolvimento.

Após um longo período de dormência, revisitar um projeto de software pode muitas vezes provocar sentimentos de apreensão devido à potencial complexidade que surge com a passagem do tempo. No entanto, é possível mitigar esta incerteza aderindo a uma prática conhecida como “documentação baseada no tempo”. Esta abordagem implica o registo de informações pertinentes sobre a base de código de uma forma que facilite a compreensão, mesmo após um hiato considerável.Ao fazê-lo, o programador dá-se ao luxo de não ser obrigado a examinar meticulosamente cada função para se lembrar da sua funcionalidade, poupando assim tempo e recursos valiosos.

Refactor

/pt/images/what-is-computer-programming-principle.jpg

O refinamento da arte de um programador requer frequentemente um refinamento iterativo através do processo de refactorização. Ao examinar e avaliar meticulosamente a base de código existente, podem ser feitas melhorias em termos de eficiência e legibilidade, resultando em resultados optimizados sem sacrificar a precisão ou a funcionalidade. O objetivo final é produzir um código de alta qualidade e bem estruturado que responda eficazmente ao fim a que se destina.

A evolução constante das bases de código é uma ocorrência natural no domínio da programação. É importante reconhecer e aceitar que revisitar, reescrever ou mesmo redesenhar porções de código é uma parte integrante do processo de desenvolvimento.

À medida que uma pessoa se habitua a trabalhar num determinado projeto de programação, ganha naturalmente uma maior perceção e compreensão das suas complexidades. Aproveitar esta sabedoria acumulada pode levar a melhorias significativas no software que está a ser desenvolvido. Ao aceitar estes avanços, os programadores podem melhorar as suas competências e adaptar a sua abordagem em conformidade.

Código limpo a todo o custo

Para enfrentar eficazmente os desafios técnicos, é crucial pôr de lado o orgulho pessoal e evitar criar código complexo com o objetivo de mostrar as suas capacidades. O foco deve estar na conceção de soluções práticas em vez de criar código ofuscado que se assemelhe a um puzzle. É importante lembrar que o principal objetivo da programação é resolver problemas, em vez de procurar o reconhecimento dos outros.

É aconselhável não sobrecarregar uma única linha com uma quantidade excessiva de operações lógicas. É crucial fornecer orientações claras e concisas através de comentários e documentação. Além disso, quando o código é facilmente legível, torna-se geralmente mais fácil de gerir para futuras manutenções.

Os programadores experientes são frequentemente acompanhados por um código fonte legível. É importante incluir comentários quando apropriado, seguir convenções estilísticas estabelecidas e considerar frequentemente a perspetiva de futuros programadores ao escrever código.

Aprender os princípios da programação informática para ser um bom programador

Adquirir proficiência como programador de software exige uma dedicação e um esforço consideráveis. Os princípios fundamentais da programação servem como um modelo essencial para alcançar o domínio neste domínio.A adesão a estas directrizes estabelecidas abrirá, sem dúvida, o caminho para o sucesso na sua carreira de programador de computadores.