English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5

Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5

MetaTrader 5Exemplos | 16 setembro 2021, 08:25
1 862 3
Omega J Msigwa
Omega J Msigwa

Introdução

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original", - Oliver Wendell Holmes.

Para nos tornarmos melhores programadores, precisamos aprender a programar 24/7, abandonar hábitos ruins, desenvolver outros bons, assimilar as práticas recomendadas e, possivelmente, reaprender os princípios fundamentais da programação. Tudo isso é importante para quem deseja construir uma carreira de sucesso como programador. Quando sabemos o como e o porquê, estamos cientes do que estamos fazendo, o que nos ajuda a desenvolver nossa capacidade de reter informações e a obter uma melhor qualidade de código.

Aqui veremos alguns métodos comprovados que podem aprimorar nosso estilo de programação quase que instantaneamente. Para atingir este objetivo, bastará lermos este artigo com atenção e colocarmos as dicas propostas em prática.


1. Evite copiar código a torto e a direito

“O prazer mais nobre é a alegria de entender”, - Leonardo da Vinci.

Este é um hábito, acima de tudo, dos programadores novatos, mas às vezes os experientes também pecam. Quando comecei a programar em 2019, passei a maior parte do meu tempo pesquisando nos fóruns um "código que funcionasse". Eu não prestava atenção aos comentários nem às explicações que acompanhavam exemplos específicos. O único detalhe no qual eu reparava era qualquer comentário do tipo "esse código funciona, valeu!" - buscava qualquer comentário de agradecimento (especialmente se vinha da pessoa que inicialmente havia pedido ajuda no fórum). O que você acha que eu fazia quando encontrava um trecho de código de jeito? É isso mesmo, eu só copiava.

Agora que me apercebi disso, tenho vergonha de admitir que um dia comentei no fórum que a biblioteca padrão não estava funcionando.

  


Agora é que sei por que o código não funcionava. O motivo era eu. Só porque copiava esse código de algum lugar (não me lembro de onde). Eis o que tenho a dizer:

Você deve sempre entender o que está fazendo. Não vale a pena copiar o código do fórum a esmo e colá-lo com o intuito de resolver rapidamente seus problemas só porque esse código já funcionou uma vez.

Na maioria dos casos, as pessoas com o hábito de copiar realmente não gostam das respostas de desenvolvedores experientes, que, em vez de replicar, geralmente dão um link para a documentação do MQL5, para que possam estudar o tópico da pergunta por si mesmas. E certamente elas não clicam nos links que são adicionados automaticamente aos comentários no fórum. Muitos problemas surgem precisamente quando não queremos estudar o assunto em detalhes e não entendemos o básico.

O truque é sempre fazer todo o possível para entender, em vez de simplesmente buscar a solução!

Programar será mais fácil e o próprio processo se tornará mais natural se você entender a própria essência.

O hábito de copiar simplesmente pode não só prejudicar sua reputação, mas também criar mais problemas do que resolverá.

2. Não tente burlar o problema

Antes de procurar soluções para o seu problema, você precisa entender os motivos pelos quais ele ocorre. Depois de entendê-los, você conseguirá fazer as perguntas certas no fórum, e não postar código na esperança de obter como resposta uma solução testada. Afinal, o problema pode estar relacionado com que você simplesmente não entende o que nem o porquê está escrevendo. Novamente, veja apenas o meu exemplo: uma vez copiei um código para alterar o template do meu gráfico sem entender ou saber absolutamente nada sobre como trabalhar com gráficos via biblioteca padrão. Adivinhe como acabou isso. Acabei por escrever no fórum que a biblioteca não estava funcionando.

Sempre que você encontrar um problema ou erro, certifique-se de entender todas as bibliotecas e o código que não está funcionando. Existem diferentes maneiras de encontrar informações úteis em MQL5. As principais são:

  • Documentação MQL5
  • Fórum

Documentação MQL5:

Felizmente, temos uma excelente documentação com todas as informações de que você precisa. Os programadores profissionais a conhecem e a utilizam. Já para iniciantes, vou escrever como encontrá-la rapidamente: abra o MetaEditor, menu Ajuda e selecione Referência MQl5.

Acesso à documentação

Fórum MQL5:

É aqui que você pode encontrar tudo o que não está em seu código. Você pode obter informações valiosas se compartilhar seus problemas com outros desenvolvedores. Mas você não tem que repetir meus erros e copiar o código deles a torto e a direito.

 "É o caminho do artesanato que leva à verdadeira compreensão e maestria."

Os iniciantes estão no que eu chamo de "noob's cycle" (ciclo do novato).

Noob's cycle

3. Desista do perfeccionismo

"Feito é melhor que perfeito" (ideia popular do Vale do Silício).

Quantas vezes não hesitei em postar meus desenvolvimentos justamente por causa do perfeccionismo. Tentava encontrar o Santo Graal para o compartilhar no site com outros usuários. Demorei a perceber que se você tem algo para compartilhar, você tem que compartilhar, e não viver cheio de incertezas.

É melhor escrever um indicador, EA, biblioteca ou trecho de código nos próximos anos ou criar centenas de soluções imperfeitas?

Melhor escrever um código de boa qualidade e compartilhá-lo, em vez de escrever um código perfeito para você. Você sempre terá tempo e oportunidade para melhorar seu código se precisar de aprimoramento. É com isso em mente que você simplesmente criará o código mais rápido e economizará muito tempo.

Esta é uma prática normal. Essa abordagem pode ser observada em tudo que encontramos na vida cotidiana:

  • Aplicativos móveis são constantemente atualizados 
  • Atualizações de sistemas operacionais de computadores e telefones são lançadas constantemente
  • Até mesmo linguagens de programação como MQL5, Python e outras são atualizadas periodicamente 

Se as linguagens de programação e estruturas são atualizadas constantemente, é normal continuar trabalhando o produto e melhorá-lo.

O mesmo se aplica ao site MQL5.com. Por exemplo, os produtos vendidos no Mercado também são atualizados periodicamente.

Atualização de versões

No fórum, você pode alterar publicações, excluir ou atualizar respostas e até mesmo excluir comentários.

4. Evite escrever código intelectualoide

"Depurar é duas vezes mais difícil do que escrever o código. Portanto, se você escrever o código da maneira mais intelectual possível, você, por definição, não será inteligente o suficiente para depurá-lo", - Brian Kernighan.

Um código bem escrito com práticas aprendidas na documentação já é bom o suficiente! 

Escreva um código simples, claro e fácil de ler e entender. Ninguém, incluindo você, se beneficiará com seu código intelectualóide após três meses. Às vezes, pode ser muito difícil trabalhar com ele, e aqui os desenvolvedores autônomos concordarão comigo. Já aconteceu alguma vez de você precisar consertar um Expert Advisor com base no código de outra pessoa ou refazer o código da Biblioteca? Ocasionalmente isso será muito difícil, porque será inviável entender o código em si. Não me interpretem mal, nem estou julgando ninguém nem estou encorajando a escrever código simples para resolver problemas complexos. Só quero salientar que sempre podemos facilitar o trabalho, mesmo com códigos complexos (acho que é aí que reside a criatividade). Neste caso, um código claro pode ser capaz de nos ajudar.

Eis algumas dicas sobre como escrever um código claro:

  • Use o estilizador de código 
  • Mantenha o nexo lógico
  • Comente
  • Siga o princípio DRY 

Estilização:

Como exemplo, veja esta função que conta as posições por tipo

int CountPosByType(ENUM_POSITION_TYPE type){
 int counter = 0; 
  for (int i=PositionsTotal(); i>=0; i--)
     if (m_position.SelectByIndex(i))
     if (m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
      { counter++; }
  return counter;
}

Ela é bastante simples e fácil de entender. Mas não atende aos requisitos de código claro. Por isso, vamos aplicar o estilizador. Basta clicar no botão azul em forma de pente, no MetaEditor, e "pentear" o código.

Estilizador de código MQL5

Assim fica o código com os estilos certos:

int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

Basta aplicar o estilizador para melhorarmos a legibilidade do código, dispensando alterar o código em si. Este é apenas o primeiro passo para tornar o código mais amigável. E como agora o código é fácil de ler, ele também pode ser alterado, ponto.

Mantenha o nexo lógico:

Você nem consegue imaginar quantas vezes criei inúmeras variáveis para trabalhar com funções em níveis diferentes. Em vez disso, apenas precisamos criar uma variável global. Além disso, para maior comodidade, é bom usarmos nomes de função simples, claros e lógicos, graças aos quais, mesmo após algum tempo, podemos entender facilmente o que a função faz. Isso aumenta significativamente nossa produtividade, já que se já tivermos usado todas as funções em questão nos nossos projetos, não precisaremos recriá-las, bastará simplesmente copiá-las.

Vamos chamar nossa função assim:

int CountPositionsByType(ENUM_POSITION_TYPE type)

Como tentamos manter o nexo lógico, essa função pode ser encontrada por meio de uma pesquisa em arquivos.       findinFiles


A pesquisa permite encontrar funções dentro de seus EAs e Indicadores. Na próxima vez que você precisar da função novamente, basta copiar o código a partir dos arquivos encontrados.

A melhor maneira de escrever um bom código é usar POO (programação orientada a objetos).

Usar funções prontas simplifica e acelera o processo de escrita de código, além disso, elas só precisam ser depuradas uma vez.

Comente:

Para iniciantes, pode parecer que os comentários são irrelevantes. No entanto, eles podem afetar significativamente sua produtividade. Eles não apenas melhoram a legibilidade do código, mas também podem servir como um lembrete de, por exemplo, o que uma função faz.

Vamos definir nosso contador novamente adicionando um comentário:

int counter = 0; // Variável para armazenar o número de posições

Da próxima vez, para usar o contador, você só precisa fazer o seguinte:

mql5 code Intellisense

Outra vantagem de adicionar comentários ao código é que, mesmo depois de um tempo, você pode lembrar facilmente o que uma variável ou mesmo um trecho de código faz. Isso pode ser especialmente útil se você tiver em seu código muitas variáveis com as quais possa ficar confuso.

Siga o princípio DRY

DRY é o acrônimo em inglês para "don't repeat yourself", isto é, não se repita. A POO ajuda muito a seguir esse princípio. Você não precisa criar muitas funções que façam praticamente a mesma coisa. Por exemplo, não faz sentido escrever uma função que verifica a existência de uma posição por tipo se você já tem uma função pronta para contagem de posições por tipo.

5. Não tente escrever o código mais curto possível

"O código deve ser legível antes de tudo. Tudo o resto virá mais tarde."

Alguns desenvolvedores acreditam que um bom código só funciona se contiver o mínimo de linhas possível e o mínimo de caracteres numa linha. Porém, isso não é verdade.

O código escrito será lido dezenas ou centenas de vezes, por isso você deve se esforçar para escrever um código legível e claro, mesmo que se torne mais longo.

Às vezes, a brevidade do código está associada à preguiça (esse era o meu caso). Implementaremos a solução mínima necessária, apenas para concluir, por exemplo, um pedido do Freelance ou qualquer outra tarefa.

O código deve ser amigável. Ocupe-se de que as variáveis de entrada sejam compreensíveis, trate de todas as exceções corretamente, notifique o usuário sobre parâmetros incorretos, como um valor de variável nulo que faria com que o programa funcionasse incorretamente.

Eis o que tenho a dizer:

Códigos de erro, valores de retorno, erros de compilação e exceções do sistema funcionam só para você, mas não para o usuário. Por isso, certifique-se de incluir no código a exibição de notificações aos usuários, comentários no gráfico e outras informações. Ao fazer isso, veja que o usuário receba apenas as informações que se destinam especificamente a ele e que o ajudarão a resolver problemas.

Não há necessidade de implementar todas as funções informativas a partir do zero - existe uma maneira mais conveniente. Você pode armazenar toda essa funcionalidade em arquivos de inclusão separados ou copiar e colar o código necessário no local.


Conclusão

Nem sempre é fácil seguir as regras de uma programação boa e amigável. Mas se você torná-las um hábito, elas estarão com você ao longo de sua carreira de programação.

Obrigado pela atenção!


Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/9643

Últimos Comentários | Ir para discussão (3)
Mateus Tavares
Mateus Tavares | 29 set 2021 em 15:42
Obrigado amigo, tive esses mesmo problemas quando estava começando a programar, ainda sou iniciante contudo. Consegui aprender algumas coisas boas com o seu artigo
Matheus Tavares
Matheus Tavares | 30 set 2021 em 13:30
Mateus Tavares #:
Obrigado amigo, tive esses mesmo problemas quando estava começando a programar, ainda sou iniciante contudo. Consegui aprender algumas coisas boas com o seu artigo

Caracaaa, olhei pro comentario e falei "Ué, eu nem comentei nada" kkkkkkkkkk

Boa sorte na caminhada, xará .
Também tô começando minha trajetória como dev.

Welinton Del Sante Fernandez
Welinton Del Sante Fernandez | 7 out 2021 em 00:21
Ótimo artigo estou buscando  me tornar um programador para desenvolver sistemas próprios seu artigo foi muito esclarecedor 
Parabéns pela abordagem simples e objetiva ao que se propõe.
Gráficos na biblioteca DoEasy (Parte 81): integrando gráficos nos objetos da biblioteca Gráficos na biblioteca DoEasy (Parte 81): integrando gráficos nos objetos da biblioteca
Hoje começaremos a integrar os objetos gráficos já criados nos restantes, o que, em última análise, dotará cada objeto da biblioteca com seu próprio objeto gráfico, permitindo ao usuário interagir com o programa.
Gráficos na biblioteca DoEasy (Parte 80): classe do objeto quadro de animação geométrica Gráficos na biblioteca DoEasy (Parte 80): classe do objeto quadro de animação geométrica
Neste artigo, otimizaremos o código das classes vistas nos artigos anteriores e criaremos uma classe para o objeto do quadro de animação geométrica que nos permite desenhar polígonos regulares com um determinado número de vértices.
Perceptron Multicamadas e o Algoritmo Backpropagation (Parte II): Implementação em Python e Integração com MQL5 Perceptron Multicamadas e o Algoritmo Backpropagation (Parte II): Implementação em Python e Integração com MQL5
Um pacote python foi disponibilizado com o proposito de trazer integração com MQL, com isso abre-se as portas para enumeras possibilidades como, exploração de dados, criação e uso de modelos de machine learning. Com essa integração nativa entre MQL5 e Python, abriu-se as portas para muitas possibilidades de uso, podemos construir de uma simples regressão linear a um modelo de aprendizado profundo. Vamos entender como instalar e preparar o ambiente de desenvolvimento e usar algumas das bibliotecas de aprendizado de maquina.
Gráficos na biblioteca DoEasy (Parte 79): classe para o objeto quadro-de-animação e seus objetos herdeiros Gráficos na biblioteca DoEasy (Parte 79): classe para o objeto quadro-de-animação e seus objetos herdeiros
Neste artigo, desenvolveremos uma classe para um quadro de animação e seus herdeiros. A classe permitirá desenhar formas, bem como salvar e restaurar o plano de fundo.