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

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

MetaTrader 5Sistemas de negociação | 11 outubro 2021, 08:47
933 0
Omega J Msigwa
Omega J Msigwa

Introdução


Costumo usar o termo "noob" (do inglês novato) nesta série de artigos. Para simplificar, me refiro a eles como aqueles que têm pouca experiência em programação MQL5 (por favor, não se ofenda). É apenas para facilitar as coisas. Isso não significa que o conteúdo da série se destina especificamente a novatos. Claro que não! Este material é absolutamente para todos, independentemente da experiência em programação. Digo isto porque uma pessoa pode se tornar "noob" por certos hábitos e comportamentos na hora de programar, e não pelo número de anos a desenvolver programas.

Noob vs programador profissional 


Você pode ler o artigo anterior aqui. Por enquanto, eu continuo minha missão de ajudar os novatos a se tornarem mais profissionais.

1. Pare de pensar que você é melhor do que os outros


Você provavelmente já programa há algum tempo e conseguiu criar vários EAs e indicadores excelentes para você mesmo, para a biblioteca do Code Base ou para clientes no Freelance. É bom notar seu progresso e ficar mais confiante, o que ajuda a resolver problemas maiores e se desenvolver mais. É ruim se você estiver possuído pela arrogância e pelo orgulho. Não esqueça isto:

“O homem orgulhoso sempre se considera muito bom. Por isso o orgulho é especialmente prejudicial. Tal atitude impede o fim mais importante na vida das pessoas, atrapalha o crescimento interior”, - Liev Tolstói.

É tão fácil sentir-se inteligente e criticar o código de outra pessoa sem nem sequer tentar entendê-lo. Ou pior ainda é mostrar que você é um programador durão por meio de respostas ofensivas no fórum, para que quem levantou a pergunta entenda o quão ruim ele é em comparação a você. Quantas vezes já vi pessoas chegarem ao fórum com uma pergunta, postarem código, descreverem o problema e contarem como tentaram resolvê-lo. E então, de repente, um "novato experiente" aparece e explica que o outro está bastante errado, embora não ofereça nenhuma solução.


Resposta de um "noob"


Em vez de ver imediatamente o tópico de partida, explicar-lhe que está terrivelmente errado ou até mesmo mandar por mensagem o código supostamente correto, por que não começar explicando as causas do problema, por que não escrever de forma detalhada e clara o que pode ser feito em dada situação?

Não é tão bom ser quem inicia um tópico, acredite em mim. Certamente qualquer um que tenha feito isso no fórum entende perfeitamente que se enganou em algum lugar e por isso não consegue o resultado desejado. Provavelmente, o seu autor é um iniciante. Ele pode ter passado horas ou mesmo dias tentando resolver o problema. Eu sei exatamente como é.

Faz sentido que, se você apenas manda para ele mesmo um trecho de código funcional, isso não resolverá o problema a longo prazo. O mesmo que dar analgésico a alguém que precisa de cirurgia. Na realidade, desta forma você vai ensinar aos iniciantes praticamente o pior hábito que estava em primeiro lugar na lista do primeiro artigo deste ciclo - copiar e colar. Assim, um novato pode tirar a conclusão de que como o fórum funciona dessa maneira, então postará seu código ruim e alguém lhe mandará um funcional em resposta. Maravilha!

Procure sempre explicar as soluções de forma detalhada e acessível, que seja o mais clara e útil possível para os iniciantes. Lembre-se de que há e haverá muitos iniciantes no mundo que podem enfrentar o mesmo problema, e provavelmente também precisarão da sua solução. 

Um exemplo de outra consequência negativa quando pensamos que somos melhores que os outros é o aparecimento de respostas incorretas no fórum e revisões de código mal feitas dentro da biblioteca. Já que somos melhores, o código do outro pode não parecer complexo o suficiente e que tem que ser escrito de uma maneira completamente diferente. Além disso, esquecemos ou não pensamos em absoluto qual era o objetivo do autor, que problema ele estava resolvendo. Isso faz com que apareçam avaliações negativas injustificadas, e só porque teríamos resolvido o problema de forma diferente.

2. Seja flexível 


Pare de pensar que você não pode se tornar bom numa determinada área.

“Não há maior sinal de loucura do que fazer uma coisa repetidamente e esperar a cada vez um resultado diferente”, - Albert Einstein.


Não se preocupe em criar os mesmos EAs, indicadores, scripts ou qualquer outra coisa. Isso mata a criatividade, e você fica preso nesse ciclo vicioso. Você limita suas capacidades quando pensa que simplesmente não nasceu para ter sucesso em alguma área complexa da programação. Seu cérebro é um sistema flexível. Ele se adapta e muda quando novos estímulos surgem. Quanto mais difícil você definir tarefas para si mesmo, mais forte se tornará naquele tópico específico. Você pode se tornar um bom especialista em qualquer área:

E, praticamente, em qualquer outra área. Naturalmente, para isso você precisa fazer um esforço, você precisa trabalhar.

Não há Santo Graal, EA mágico (pelo menos eu nunca vi) ou um indicador universal. Mas isso não deve impedi-lo, trabalhe em seus sistemas, aprimore-os, desenvolva-os e desenvolva-se você mesmo.

Lembro-me de como, no início do meu caminho na programação, fiquei com tanto medo quando baixei do Code Base o indicador mais simples, uma média móvel, e descobri que tinha mais de 1000 linhas de código (ou seja, em primeiro lugar prestei atenção ao comprimento do código). E ele era muito complexo para mim. Acho que muitos novatos se deparam com isso.

Agora tenho mais experiência. Agora eu entendo que algumas coisas ainda podem ser difíceis, mas tudo bem, isso é normal. E na vida é sempre assim, é difícil no início, e com o tempo, com o esforço feito, tudo se compõe.

3. Não há necessidade de escrever código apenas para o futuro


Você trabalhou muito, criou EAs e indicadores. E você acumulou muitas linhas de código. Se você não reler cuidadosamente o código resultante posteriormente, há uma grande probabilidade de que partes desnecessárias e não utilizadas permanecerão nele.


"Homens sábios não precisam provar suas crenças, homens que precisam provar suas crenças não são sábios”, - Lao Tzu.

Quanto menos código, 

  • menos erros
  • menos tempo de leitura 
  • mais fácil de compilar 
  • mais rápido de modificar 
  • mais rápido é obter uma solução pronta
  • mais fácil de acompanhar 
  • mais fácil de depurar
Não perca tempo escrevendo código que você não precisa agora.

Você provavelmente também já viu um código semelhante:

int MathRandInt(int mini, int maxi)
  {
   double f   = (MathRand() / 32768.0);
   return mini + (int)(f * (maxi - mini));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void chart_random()
 {
//---
  string background[]={"clrBlack"};
  string bulls[]={"clrGreen","clrDeepPink","clrYellow","clrCrimson","clrMediumBlue","clrKhaki","clrYellow"};
  string bears[]={"clrDarkViolet","clrDarkOrange","clrIndigo","clrWhite","clrSilver","clrMediumPurple","clrBlue"};
//---
   ChartSetInteger(ChartID(), CHART_MODE, CHART_CANDLES);
   ChartSetInteger(ChartID(), CHART_SHOW_GRID, false);
   ChartSetInteger(ChartID(), CHART_AUTOSCROLL, true);
   ChartSetInteger(ChartID(), CHART_SHOW_PERIOD_SEP, true);
   ChartSetInteger(ChartID(), CHART_SHIFT, true);
   ChartSetInteger(ChartID(), CHART_SHOW_ASK_LINE, true);
   ChartSetInteger(ChartID(), CHART_SHOW_BID_LINE, true);
   ChartSetInteger(ChartID(), CHART_COLOR_ASK, clrBlue);
   ChartSetInteger(ChartID(), CHART_COLOR_BID, clrCrimson);
   ChartSetInteger(ChartID(), CHART_SCALE, 2);
   ChartSetInteger(ChartID(), CHART_FOREGROUND, true);
   ChartSetInteger(ChartID(), CHART_COLOR_FOREGROUND,clrWhite);
//---
/*
 for (int i=0; i<ArraySize(background); i++){
     int maxi=ArraySize(background);
     int random_=MathRandInt(0,maxi);
    ChartSetInteger(0,CHART_COLOR_BACKGROUND,StringToColor(background[random_]));
    }
  for (int i=0; i<ArraySize(bulls); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
    ChartSetInteger(0,CHART_COLOR_CHART_UP,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
   }
  for (int i=0; i<ArraySize(bears); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
    ChartSetInteger(0,CHART_COLOR_CHART_DOWN,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
   } */
//---
   int y_distance=70;
   int font_size=30; 
   int width=(int)ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS);
   int padding=70;
   int x=width/3;
//---
    string label_name= MQLInfoString(MQL_PROGRAM_NAME);
    ObjectCreate(0, "name", OBJ_LABEL, 0, 0, 0);
    ObjectSetString(0,"name",OBJPROP_TEXT,label_name); 
    ObjectSetString(0,"name",OBJPROP_FONT,"Lucida Console"); 
    ObjectSetInteger(0,"name",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
    ObjectSetInteger(0,"name",OBJPROP_XDISTANCE,x+padding); 
    ObjectSetInteger(0,"name",OBJPROP_YDISTANCE,y_distance); 
    ObjectSetInteger(0,"name",OBJPROP_FONTSIZE,font_size); 
    ObjectSetInteger(0,"name", OBJPROP_SELECTABLE, false);
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

Este exemplo não é o mais longo - encontrei mais de 200 linhas comentadas quando, por algum motivo, elas estavam armazenadas no programa.

MetaEditor reconhece variáveis não utilizadas a nível de função e avisa sobre isso. Assim, você pode escolher se quer deixá-los e assistir a essas notificações sempre ou excluí-los.

Mas, quanto ao resto do código, você mesmo precisa verificar, pesquisar e excluir o que não é utilizado.

Se não usa ou não precisa, apague.

O código não utilizado apenas confunde, torna o código inteiro mais longo e torna mais difícil encontrar e obter as partes certas do programa.

4. Você não tem que estar sempre certo

“Não corrigir nossas falhas é o mesmo que cometer novos erros”, - Confúcio.

Uma das principais razões pelas quais os "noobs" visitam o Fórum, postam código e descrições mínimas do que desejam obter, do que fizeram e do que obtiveram é porque têm medo de se aprofundar demais em seus problemas. Não vale a pena fazer isso.

A vida de um programador é cheia de problemas e tarefas que surgem constantemente. A única maneira de ter sucesso é enfrentar o máximo de problemas e desafios que você encontrar ao longo do caminho. Não quero dizer que você nunca deve escrever sobre seus problemas no fórum. Mas tente resolver o problema sozinho e, mesmo que não funcione, você terá algo valioso que compartilhar no fórum - você pode descrever mais claramente o problema com as etapas que já tentou. Quando você se concentra num problema, procura várias maneiras de resolvê-lo, e descobrir algo novo por si mesmo.

Ao corrigir um erro, certifique-se de entendê-lo para que possa evitá-lo na próxima vez.


5. Não persiga o sucesso instantâneo

“Se você realmente olhar de perto, a maioria dos sucessos da noite para o dia demorou muito”, - Steve Jobs.

Talvez você já esteja programando há algum tempo, mas sempre tem a sensação de que não está indo para lugar nenhum, de que não há progresso?

Essa sensação é especialmente comum para iniciantes, porque a maioria deles espera resultados instantâneos. Mas o mundo funciona de forma diferente.

Sente-se, relaxe e aproveite o processo. Sem dúvida, você tem progressado, e todas as dúvidas são apenas parte do caminho, elas não devem impedi-lo. Aconselho você a trabalhar em seus projetos favoritos que trazer-lhe-ão prazer enquanto continua a aprender e desenvolver. Esteja aberto a novas ideias e oportunidades (que é o que falei no segundo ponto).

Faça um esforço para que o progresso e o desenvolvimento sejam o resultado final do seu trabalho.

  • Leia e estude o código fonte, bem como o código em si, trabalhe com códigos prontos da Bibliotecas Code Base.
  • Leia artigos em mql5.com o máximo possível.
  • Passe tempo no Fórum ajudando outros membros.
  • Experimente abordagens diferentes, veja o que funciona para você.

Lembre-se de que o sucesso não acontece na ausência de persistência. O sucesso desabrocha nos lugares onde você se entrega de forma consistente.

 

Conclusão

Eu mesmo estou longe de ser perfeito como programador MQL5 ou como desenvolvedor web. Também continuo a estudar e a compreender que o processo de aprendizagem nunca para. Sempre me esforço para melhorar e me tornar melhor. E a razão pela qual tive a coragem de compartilhar ideias (isto é, ensinar como aluno) é que quero ajudar programadores que, como eu, desejam ser um pouco melhores.

Vamos melhorar juntos!

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

Como se tornar um bom programador (Parte 3): cinco dicas para programar melhor em MQL5 Como se tornar um bom programador (Parte 3): cinco dicas para programar melhor em MQL5
Este artigo é uma leitura obrigatória destinada a todos que desejam melhorar sua carreira como programadores. O objetivo desta série de artigos é ajudar o leitor, incluindo experientes, a melhorar suas habilidades de programação. As ideias descritas são aplicáveis tanto a programadores iniciantes em MQL5 quanto a profissionais.
Combinatória e teoria da probabilidade para negociação (Parte III): primeiro modelo matemático Combinatória e teoria da probabilidade para negociação (Parte III): primeiro modelo matemático
Para dar continuação lógica ao tópico, hoje abordaremos o desenvolvimento de modelos matemáticos multifuncionais para tarefas de negociação. Assim sendo, descreverei todo o processo de desenvolvimento do primeiro modelo matemático para descrever fractais a partir do zero. Este modelo deve se tornar um importante alicerce, ser multifuncional e universal, inclusive para construir a base teórica para o futuro desenvolvimento do ramo.
Gráficos na biblioteca DoEasy (Parte 82): refatoração dos objetos da biblioteca e da coleção de objetos gráficos Gráficos na biblioteca DoEasy (Parte 82): refatoração dos objetos da biblioteca e da coleção de objetos gráficos
Neste artigo modificaremos todos os objetos da biblioteca. Para isso, atribuiremos um tipo único a cada objeto e continuaremos desenvolvendo a classe-coleção de objetos gráficos da biblioteca.
Combinatória e teoria da probabilidade para negociação (Parte II): fractal universal Combinatória e teoria da probabilidade para negociação (Parte II): fractal universal
Neste artigo, continuaremos a estudar fractais e prestaremos muita atenção a resumir todo o material. Tentarei apresentar todos os projetos da maneira mais compacta e compreensível para serem aplicados ao trading.