English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5

Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5

MetaTrader 5Sistemas comerciales | 7 septiembre 2021, 12:38
811 0
Omega J Msigwa
Omega J Msigwa

Introducción


En esta serie de artículos, utilizo mucho la palabra novato para referirme a alguien con menos experiencia en programación en MQL5 (no se ofenda por ese detalle), esto hace que resulte más fácil identificarse con ello. Sin embargo, esto no significa que este artículo sea solo para novatos. ¡En absoluto! Independientemente de la experiencia que cada uno tenga en programación, este es un texto para todos, porque lo que convierte a uno en un novato o no son sus hábitos y comportamientos de codificación, no los años dedicados a esta tarea.

codificador novato_vs_profesional 


Para aquellos que no lo hayan leído, el primer artículo se encuentra aquí, por lo tanto, permítanme continuar con la tarea de convertir a los novatos en profesionales.

01 — Deje de pensar que es mejor que los demás


Vale, ha estado usted codificando durante un tiempo y ha logrado crear varios EA e indicadores excelentes para usted y sus clientes en Freelance, CodeBase o algo semejante, ¡así que ahora está bien!, vale. Es positivo que usted sea consiciente de su progreso y lo use para aumentar su confianza y enfrentar grandes desafíos para seguir mejorando, y que no utilice sus capacidades de forma arrogante. Mantenga esto en mente:

"Una persona arrogante se considera perfecta. Este es el principal perjuicio de la ignorancia, que interfiere con la tarea principal de una persona en la vida: convertirse en mejor persona".

— León Tolstói

Es muy fácil sentirse súper inteligente y criticar el código de otra persona sin comprenderlo al 100%, o responder rápidamente a sus preguntas en el foro de manera ofensiva para mostrar que eres un codificador brutal y que esa persona que acaba de hacer la pregunta en el foro no tiene ni idea de codificación. He visto muchas veces cómo la gente formula una pregunta en el foro y publica su código, describiendo lo que han intentado antes sin éxito. Entonces, de repente, aparece un novato asegurando que esta persona está terriblemente equivocada, sin ofrecer una solución o dar una solución (código, en este caso) más precisa que el código proporcionado por el tráder que ha iniciado el tema. ¡Dios mío!


respuesta del novato


En lugar de decir directamente que el iniciador del tema está terriblemente equivocado y luego proporcionar un código que ni siquiera está en el formato correcto, podríamos empezar explicando por qué hay un problema y luego exponer lo que debemos hacer de una forma clara y detallada.

Encontrarse en los temas de inicio del foro no es algo divertido. Estoy seguro de que cualquiera que inicie un tema en el foro ya sabe que está equivocado de alguna forma, y que por eso no obteniene los resultados deseados. Hay muchas probabilidades de que el iniciador de un tema sea un novato y lleve luchando con el problema durante horas, si no días, (sé cómo se siente).

Incluso decisiones como saltar y arrastrar directamente hacia abajo un código sin explicar o poco claro no solucionarán el problema a largo plazo. Es como darle un analgésico a alguien que necesita cirugía. Haciendo esto, inculcará a los novatos el peor de los hábitos descritos por primera vez en el artículo anterior de esta serie, a saber, la mala costumbre de copiar y pegar, haciéndoles pensar algo como: "así funcionan las cosas por aquí, si tengo un problema, publico mi código en el foro, y los miembros me darán el código necesario para reemplazar el malo… ¡esto es genial!" 

Asegúrese siempre de explicar la solución de forma clara, detallada y accesible para los principiantes, porque una gran parte de los miembros del foro lo son. Tenga también en cuenta que hay muchos novatos que se encontrarán con el mismo problema en el futuro, por lo que probablemente necesitarán una solución para ese tema. 

Aparte del ejemplo expuesto, pensar que somos mejores que otros conllevará la aparición de respuestas incorrectas en el foro, además de reseñas falsas en CodeBase. Pensando que somos mejores que el autor de ese sistema en particular solo porque vemos que el código no es muy complicado de la manera que creemos que debería ser o de la forma que nos gustaría y con la que estamos familiarizados, nos negamos a entender al 100% cómo y por qué el código ha sido escrito en primer lugar, condenándonos a la ignorancia.

02 — Evite tener una mentalidad rígida 


Deje de pensar que no hay forma de lograr ser bueno en un área en particular.

"La locura es hacer lo mismo una y otra vez y esperar resultados diferentes".
—Albert Einstein


No se autolimite a hacer una y otra vez el mismo tipo de asesores expertos, indicadores, scripts o cualquier otra cosa. Esto destruirá tu creatividad y la mantendrá estancada en el mismo lugar. Pensar que no nació para ser bueno en un área de programación en particular solo porque resulte demasiado compleja o difícil supone ponerse grilletes a uno mismo. Solo debe saber que su cerebro es flexible. Está diseñado para adaptarse y reaccionar a nuevos estímulos. Cuanto más lo desafíe, más mejorará en ese tema en particular. Puede llegar a ser bueno en:

y todo lo que usted pueda pensar. Pero tendrá que esforzarse lo suficiente para que esto suceda.

Sí, obviamente, en estos momentos, no existe ningún EA o indicador que sea el Santo Grial (al menos, no lo he visto con mis propios ojos), pero eso no debería impedirle mejorar sus sistemas al máximo modificando sus enfoques.

En mis primeros días de programación MQL5, me asustaba terriblemente al descargar algo como la media móvil simple de CodeBase y descubrir que el código tenía más de 1000 líneas o más,  porque eso era lo primero que busqué en el código. Pensaba que era algo demasiado complejo. Creo que es el mismo problema que se encuentran los novatos.

Ahora, tengo un poco de experiencia. Todo lo que puedo decir es que, sí, a veces resulta difícil, pero todo va bien. Todo en la vida cuesta al principio, pero luego resulta fácil: solo el tiempo y el esfuerzo nos lo enseñan.

03 — Deje de escribir código que se usará algún día


Entonces, usted ha estado creando EA(s) o indicador(es) en su proyecto, y ahora tiene demasiadas líneas de código. Si no ha puesto demasiada atención en releer minuciosamente su código, existe una alta probabilidad de que algunas partes del mismo no le sean necesarias o directamente ni se usen.


"Quienes tienen conocimiento, no predicen. Quienes predicen, no tienen conocimiento".
— Lao Tse

Menos código, siempre implica 

  • Menos errores
  • Menor tiempo de lectura 
  • Facilidad de compilación 
  • Rapidez de revisión 
  • Envío rápido
  • Facilidad de mantenimiento 
  • Facilidad de depuración
No gaste demasiado tiempo escribiendo código que no sea necesario en ese momento.

Espero que al menos una vez en la programación de MQL5 haya visto algo como esto, procedente del código de otra persona.

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);
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

La imagen del ejemplo es demasiado pequeña; he visto unas 200 líneas de código que ha sido comentado (oculto) y que se encontraba innecesariamente dentro del programa.

El MetaEditor detecta variables innecesarias a nivel de funciones, advirtiéndonos de las variables no usadas para que podamos elegir al mismo tiempo entre mantenerlas y su advertencia, si está de acuerdo con ello, o deshacernos de ellas.

Sin embargo, para el resto del código, tenemos que verificarlo por nosotros mismos para asegurarnos de que no existe este código no deseado.

Si no lo usamos, no lo necesitamos; elimínelo.

El código no utilizado provoca confusión, por no mencionar que aumenta el tiempo de desplazamiento hasta el código necesario cuando nos encontramos en mitad del código de nuestro programa.

04 — No siempre tiene que tener razón.

"Un hombre que ha cometido un error y no lo corrige, está cometiendo otro error". 
— Confucio

La principal razón por la que los novatos recurren inmediatamente al Foro para arrastrar su código y ofrecer menos descripciones turbias sobre qué y por qué estaban codificando de esa forma y lo que querían con ello, es porque tienen demasiado miedo de exponerse a más problemas. ¡Y esto no es prudente, mis queridos novatos!

La carrera de codificación está llena de problemas y desafíos interminables, y no hay mejor manera de alcanzar la excelencia que resolviendo todos los problemas a los que podamos exponernos. No quiero decir que no debamos publicar en el foro nuestros problemas (no me malinterprete). Pero antes debemos asegurarnos de haber intentado resolverlo un poco por nuestra cuenta, por eso, antes de iniciar un tema, es una buena práctica describir las cosas que hemos intentado hacer. ¿Por qué? Para enfocar nuestra mente en la tarea y desafiarnos a nosotros mismos con diferentes métodos: no solo podemos resolver el rompecabezas, sino también descubrir cosas que no notamos la primera vez, y así aprender más.

Una vez que se solucione el error, asegúrese de comprender su esencia, así como la manera de evitarlo la próxima vez.


05 — Olvídese de triunfar de la noche a la mañana

"Si miramos de cerca, veremos que la mayor parte del éxito repentino ha requerido mucho tiempo."
— Steve Jobs

Ok, entiendo que ha estado usted codificando por un tiempo, pero si bien puede sentir que no está progresando, no debería sentir que no va a ninguna parte. ¿Verdad?

Con frecuencia, los novatos se sienten así, porque la mayoría de ellos esperaban que los resultados fueran inmediatos: pero el mundo no funciona de esa forma.

Siéntese, relájese y disfrute del proceso. Realmente está progresando; sus dudas son solo una parte del viaje, pero no deberían detenerle. Le recomendaría trabajar en sus proyectos favoritos para que pueda divertirse mucho mientras sigue aprendiendo, pero sin quedarse atascado allí. Asegúrese de estar abierto a nuevas ideas y posibilidades, como he explicado en el segundo punto.

Trabaje duro, y el progreso llegará automáticamente como un producto final.

  • Lea todos los códigos fuente que pueda ver en Codebase.
  • Lea todos los artículos que le sea posible en la sección Artículos.
  • Pase más horas en el Foro ayudando a los demás.
  • Experimente con todas las cosas que pueda, para encontrar así la que mejor se adapte a sus necesidades.

Recorde

El éxito no proviene de lo que hacemos de vez en cuando. Viene de lo que hacemos constantemente.

 

Conclusión

Para ser honesto, yo no soy tan magnífico, y mi carrera en programación de MQL5 o de desarrollo web no ha sido perfecta. Aún soy un aprendiz en el mundo de la codificación, y su aprendizaje no tiene fin, porque nunca deja de enseñarnos. Siempre me esfuerzo por mejorar en ello todos los días. El motivo por el que tengo las agallas de compartir esto con ustedes (de enseñar siendo un aprendiz) es porque quiero ayudar a la gente que comparte mi pasión por convertirse en un mejor codificador.

¡Hagamos este viaje juntos!

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/9711

Gráficos en la biblioteca DoEasy (Parte 80): Clase de objeto "Fotograma de animación geométrica" Gráficos en la biblioteca DoEasy (Parte 80): Clase de objeto "Fotograma de animación geométrica"
En este artículo, optimizaremos el código de las clases de los artículos anteriores y crearemos una clase de objeto de fotograma de animación geométrica que nos permitará dibujar polígonos regulares con un número determinado de vértices.
Gráficos en la biblioteca DoEasy (Parte 79): Clase de objeto "Fotograma de animación" y sus objetos herederos Gráficos en la biblioteca DoEasy (Parte 79): Clase de objeto "Fotograma de animación" y sus objetos herederos
En el presente artículo, desarrollaremos la clase de fotograma de animación y sus clases herederas. La clase permitirá dibujar figuras, con el posterior almacenamiento y restauración del fondo según la figura dibujada.
Cómo ser un mejor programador (parte 03): 5 cosas que evitar para convertirse en un programador exitoso de MQL5 Cómo ser un mejor programador (parte 03): 5 cosas que evitar para convertirse en un programador exitoso de MQL5
Este es un artículo de lectura obligada para todo aquel que quiera mejorar su carrera como programador. Esta serie de artículos tiene como objetivo hacer de usted el mejor programador posible, sin importar la experiencia que tenga. Las ideas debatidas funcionan tanto para principiantes como para profesionales de la programación en MQL5.
Cómo ser un mejor programador (parte 01): 5 cosas que evitar para convertirse en un programador exitoso de MQL5 Cómo ser un mejor programador (parte 01): 5 cosas que evitar para convertirse en un programador exitoso de MQL5
Hay muchos malos hábitos que impiden a los programadores principiantes e incluso avanzados sacar el cien por cien de rendimiento a su carrera de codificación. En este artículo, discutiremos y abordaremos dichos hábitos. El presente material es una lectura obligada para todos aquellos que quieran convertirse en desarrolladores exitosos en MQL5.