
Cómo ser un mejor programador (parte 04): Aprendiendo a desarrollar más rápido
Introducción
Un desarrollo más rápido es el sueño de cualquier desarrollador. Nadie quiere desarrollar un programa o un fragmento de código durante toda la semana, o pasar horas, si no días, tratando de resolver las cosas cuando nos atascamos en el proceso de codificación.
Todo programador quiere ser más rápido
- Tal vez haya usted visto en YouTube algún vídeo de codificación en MQL5 que no pudiera seguir porque su velocidad es muy inferior a la del instructor, y desee llegar a ese nivel por sí mismo.
- Tal vez haya visto a algunos desarrolladores con una velocidad de codificación fabulosa en el teclado, que pueden escribir en pocos minutos un algoritmo complejo que a usted le llevaría codificar horas, si no días.
- O tal vez le gustaría poder codificar de forma más rápida y eficaz para entregar antes sus encargos en Freelance, y tomar así la delantera a sus competidores.
- O tal vez desee impresionar a su esposa/pareja con sus habilidades de superman del teclado, codificando un algoritmo complejo en un muy poco tiempo y con pocos errores o ninguno en absoluto.
- A veces, quizá usted desee entregar actualizaciones rápidas de los productos en el mercado y corregir los bugs y errores sobre los que sus clientes le han estado enviando spam a su correo electrónico o bandeja de entrada de mensajes MQL5.
Preste atención: tome papel y lápiz y prepárese, porque estoy a punto de lanzar algunas bombas de conocimiento que le ayudarán a aumentar su velocidad de codificación y producir un trabajo de alta calidad para usted y su cliente.
No necesita nada de esto para alcanzar su máximo potencial en cuanto a velocidad de codificación
- Amplia experiencia en codificación.
- El mejor teclado mecánico.
- Ser bueno escribiendo con el teclado con memoria muscular.
- Muchos gigabytes de RAM, muchos núcleos, una GPU potente en su computadora personal (PC).
Desarrollador rápido vs codificador rápido
Antes de comenzar a detallar esas claves, creo que sería mejor explicar la diferencia entre un desarrollador y un codificador.
Desarrollador | Codificador |
---|---|
Los desarrolladores son escritores de código con más experiencia. Son responsables de prácticamente todo en el proyecto, como: El diseño, la planificación del trabajo, la codificación y todo lo relacionado con el proyecto. | Cualquiera que pueda escribir algún código es menudo denominado "codificador" por la gente ajena a la industria de la tecnología. Pero, por lo general, los codificadores se consideran el nivel de programadores (desarrolladores) menos capacitado o experimentado. Estas personas no tienen el mismo conocimiento algorítmico que un programador o desarrollador, ya que a menudo son principiantes en el campo, expertos en un solo lenguaje de codificación. En general, a los programadores se les asigna el trabajo de escribir piezas de código directas que los desarrolladores pueden delegar fácilmente. Siendo un codificador, no necesitas saber todo dentro del proyecto. Por ejemplo, un cliente autónomo podría querer añadir una función de Trailing Stop dentro de su EA. Un codificador puede ir directamente y codificarlo, llamarlo dentro de la función Ontick, luego probarlo una o dos veces en MetaTrader 5 para asegurarse de que funciona, y si lo hace, devolverlo al cliente |
En este artículo, discutiremos un término más amplio de desarrollador: cómo puede usted acelerar el desarrollo de sus sistemas. Para ello, estudiaremos de todo: diseño, ética laboral, herramientas a utilizar, codificación, depuración, etc.
CÓMO CONVERTIRSE EN UN DESARROLLADOR MÁS RÁPIDO
01 — Evite errores y mala arquitectura
Muchos desarrolladores piensan que pasan mucho tiempo escribiendo código, pero, en realidad, pasamos la mayor parte del tiempo leyendo código, depurando y averiguando qué hacer.
Es posible que nos lleve tres horas depurar un fragmento de código que codificamos durante 30 minutos, por lo que, cuantos más errores tenga, más tiempo nos llevará terminar de codificar el proyecto. Ahora ya sabemos que los errores ralentizan nuestro proceso de desarrollo. Entonces, lo mejor que podemos hacer es evitar dichos errores lo antes posible.
Mala arquitectura + Bugs = al fin del mundo (es broma)
Tener errores en el proyecto es malo, pero no poder depurarlos o detectarlos fácilmente debido solo a una mala arquitectura, resulta mucho peor. Echemos un vistazo a este fragmento de código tomado de un EA que alguien me dio para corregir los errores.
ouble NPB=ND(m_account.Balance()*PortionPC,2); if(CbT==0||PortChange<0||(PortChange>0&&NPB>PortionBalance))PortionBalance=NPB; if(Pb+Ph<0)DrawDownPC=-(Pb+Ph)/PortionBalance; if(!FirstRun&&DrawDownPC>=MaxDDPercent/100) { ET(A,displayColorLoss,"Equity Stop Loss Reached"); if(PlaySounds)PlaySound(AlertSound); return(0); } if(-(Pb+Ph)>MaxDD)MaxDD=-(Pb+Ph); MaxDDPer=MathMax(MaxDDPer,DrawDownPC*100); if(SaveStats)Stats(false,TimeCurrent()<NextStats,PortionBalance,Pb+Ph); //+-----------------------------------------------------------------+ //| | //+-----------------------------------------------------------------+ double StepAB=InitialAB*(1+StopTradePercent),StepSTB=m_accout.Balance()*(1-StopTradePercent), NextISTB=StepAB*(1-StopTradePercent); if(StepSTB>NextISTB){ InitialAB=StepAB; StopTradeBalance=StepSTB; } double InitPortion=StopTradeBalance*PortionPC; if(PortionBalance<InitPortion) { if(CbT==0) { AllowTrading=false; if(PlaySounds)PlaySound(AlertSound); Print("Portion Balance dropped below stop trade percent"); MessageBox("Reset EA, account balance dropped below stop trade percent on "+Symbol()+Period()," Warning",48); return(0); } else if(!ShutDown&&!RecoupClosedLoss) { ShutDown=true; if(PlaySounds)PlaySound(AlertSound); Print("Portion Balance dropped below stop trade percent"); return(0); } }
Fíjese en lo mala que es la arquitectura. Obviamente, tiene que haber errores en el código. Como puede ver, el código resulta difícil de entender con facilidad a simple vista, incluso si ha sido usted el que escribió el código en primer lugar.
Tendrá muy mala suerte (como yo), si alguien le contrata como freelance para corregir errores, pues tendrá que ver más de 10000 líneas de código, todas ellas como el código anterior (han pasado más de 3 semanas ahora y todavía no he terminado).
Eso es a lo que me refiero aquí. Sea siempre coherente con sus patrones de codificación, la forma en que nombra las funciones, crea variables, etcétera: elija los elementos que le resulten más cómodos y asegúrese de que sean fáciles de usar para usted y los demás.
02 — Aprenda a depurar rápidamente
Hemos visto en el primer punto que los errores ralentizan nuestro trabajo y se alimentan de nuestro tiempo. La depuración es un tema demasiado extenso como para cubrirlo en este artículo. Recomiendo a todos que lean el artículo Depuración de programas en MQL5 para obtener más información sobre la depuración.
Para ser rápidos, deberemos aprender a depurar igualmente rápido. Aquí hay algunos consejos breves.
01: Use en el MetaEditor el CodeStyler .
Esto son pequeños pasos hacia la depuración: esta increíble herramienta no puede depurar por sí misma, pero puede ayudar a cambiar el aspecto de nuestro código y hacer que el código sea claro y fácil de leer.
Para saber qué es lo que no funciona, necesitaremos imprimir y comentar más código en áreas sospechosas.
Busque siempre errores en las áreas donde no se puedan encontrar.
03: No intente cambiar nada antes de comprender claramente cómo funciona.
Estoy seguro de que esto le habrá sucedido antes, al eliminar un fragmento de código para lograr que su sistema funcione: después acabamos por darnos cuenta de que el código que hemos eliminado no tiene nada que ver con los errores de nuestro sistema, y ahora debemos gastar tiempo haciéndolo de nuevo, sin garantías de proteger nuestro sistema contra otros errores a lo largo del proceso.
Antes de eliminar algo, lea en la documentación si se trata de una función incorporada o un método. Si no está seguro, pregunte en el foro. En mi caso, cuando no estoy seguro de que lo que hago es lo correcto, copio el código completo en un archivo de texto; de esa manera, puedo ser flexible a la hora de cambiar el código y probar cosas nuevas, y también hacer referencia al código principal cuando descubro cuál es el error.
03 — Las bibliotecas se crean para un uso específico
Cuando trabajamos con una biblioteca, es esencial usar las clases proporcionadas para su propósito previsto: tratar de abrirnos paso a la fuerza porque somos demasiado vagos para implementar algo limpio es un camino seguro al desastre.
Si está utilizando la Biblioteca Estándar, siempre será una buena práctica crear instancias y hacer referencia a los miembros de la biblioteca de la mejor manera, es decir, de forma fácil y consistente, como probablemente le recomendarían los desarrolladores de bibliotecas profesionales.
Por ejemplo, en lugar de hacer referencia a las Clases comerciales de la biblioteca de forma perezosa y con nombres poco claros, que ni siquiera son consistentes como este,
#include <Trade\AccountInfo.mqh> //Class for working with trade account properties #include <Trade\SymbolInfo.mqh> //Class for working with trade instrument properties #include <Trade\OrderInfo.mqh> //Class for working with pending order properties #include <Trade\OrderHistoryInfo.mqh> //Class for working with history order properties #include <Trade\PositionInfo.mqh> //Class for working with open position properties #include <Trade\DealInfo.mqh> //Class for working with history deal properties #include <Trade\Trade.mqh> //Class for trade operations execution #include <Trade\TerminalInfo.mqh> //Class for getting the properties of the terminal environment //--- CAccountInfo ac; CSymbolInfo symb; COrderInfo orders; CHistoryOrderInfo hist_orders; CPositionInfo pos; CDealInfo _clos; CTrade my_trade; CTerminalInfo info;
podemos hacer referencia a todas las librerías de una manera consistente y fácil de comprender. La mejor forma de hacerlo es en el formato de miembro de clase para la referencia: m_*** es para los miembros de una cierta clase
justo así,
#include <Trade\AccountInfo.mqh> //Class for working with trade account properties #include <Trade\SymbolInfo.mqh> //Class for working with trade instrument properties #include <Trade\OrderInfo.mqh> //Class for working with pending order properties #include <Trade\OrderHistoryInfo.mqh> //Class for working with history order properties #include <Trade\PositionInfo.mqh> //Class for working with open position properties #include <Trade\DealInfo.mqh> //Class for working with history deal properties #include <Trade\Trade.mqh> //Class for trade operations execution #include <Trade\TerminalInfo.mqh> //Class for getting the properties of the terminal environment //--- CAccountInfo m_account; //members of account info CSymbolInfo m_symbol; //members of symbolInfo COrderInfo m_order; //mambers of OrderInfo CHistoryOrderInfo m_orderhistory; //members of Orderhistory info CPositionInfo m_position; //members of position info CDealInfo m_deal; //members of deal info CTrade m_trade; //members of trade info CTerminalInfo m_terminal; //members of terminal info
Además, no olvide poner comentarios al final de la referencia de la biblioteca para recordar sobre qué trata esta la próxima vez que intente acceder a ella al codificar.
Además, para acelerar nuestra capacidad de codificación, resulta coveniente usar bibliotecas estándar ya listas para manejar nuestras tareas, en lugar de intentar implementar todo desde cero. Estas bibliotecas han sido creadas por programadores profesionales para hacer que nuestro código MQL5 sea SUCINTO (no lo repitas) y para acelerar el proceso de desarrollo. Animo a todos a usarlas, sin mencionar otras buenas bibliotecas en Code Base y algunas en el Mercado.
¿Quién crees que codifica más rápido entre estos dos?
Un codificador que comienza desde cero (probablemente un NOVATO) | Un codificador que utiliza la Biblioteca Estándar |
---|---|
double SymbolAsk(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_ASK); } double SymbolBid(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_BID); } int SymbolDigits(string symbol) { if (symbol == "") symbol = Symbol(); return (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS); } double SymbolLotSize(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE); } double SymbolLotStep(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP); } double SymbolMaxLot(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX); } double SymbolMinLot(string symbol) { if (symbol == "") symbol = Symbol(); return SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN); } | #include <Trade\SymbolInfo.mqh> CSymbolInfo m_symbol; input string Input_symbol = "EURUSD"; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- string symbol = Input_symbol=="" ? Symbol() : Input_symbol; m_symbol.Name(symbol); //Sets symbol name for our CSymbolInfo class object //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- m_symbol.RefreshRates(); //Refresh to Get the Last quote double SymbolAsk = m_symbol.Ask(); double SymbolBid = m_symbol.Bid(); double SymbolDigits = m_symbol.Digits(); double SymbolLotSize = m_symbol.ContractSize(); double SymbolLotStep = m_symbol.LotsStep(); double SymbolMaxLot = m_symbol.LotsMax(); double SymbolMinLot = m_symbol.LotsMin(); } |
Los usuarios de bibliotecas estándar son 3 veces más productivos que los que no las usan, sin mencionar que tienen menos código en sus programas, lo cual conlleva menos errores.
04 — Evite el código intrincado
Espero que en su carrera de codificación haya visto algo semejante al siguiente código en el asesor experto de alguien
if(LbT>0) { BEb=ND(BEb/LbT,Digits()); if(BCa<0)BEb-=ND(BCa/PipVal2/(LbB-LbS),Digits()); if(Pb>PbMax||PbMax==0)PbMax=Pb; if(Pb<PbMin||PbMin==0)PbMin=Pb; if(!TradesOpen) { FileHandle=FileOpen(FileName,FILE_BIN|FILE_WRITE); if(FileHandle>-1) { FileWriteInteger(FileHandle,TbF); FileClose(FileHandle); TradesOpen=true; if(Debug)Print(FileName+" File Written: "+TbF); } } }
Podría resultar sencillo al escribir este bloque de código, pero no será fácil de leer cuando quiera depurarlo: es muy probable que olvide algunas de las variables, si no todas, por lo que tendrá que empezar a referirse a ellas nuevamente. ¡Piense en lo desperdicio de tiempo que supone esa actividad!
Escribir algoritmos complejos hará que la gente lo deteste, y también le confundirá.
Hacer que la lógica completa aparezca forzosamente en un solo lugar resulta desagradable: intentar incluir demasiadas operaciones en una sola función ralentizará nuestro proceso de desarrollo, ya que tendremos que organizar cuidadosamente nuestro código y asegurarnos de que todo funcione también.
Si necesita realizar ciertos tipos de operaciones, deberá considerar la posibilidad de crear funciones independientes que solo hagan esto; así le resultá fácil terminar una cosa y luego pasar a la siguiente.
05 — Evite distracciones.
— Beverly R. Imes
Mantenga su teléfono en silencio (si es que no lo apaga) y no lo saque para comprobar sus likes y compartir sus fotos en las redes sociales. Su eficacia caerá en picado si actúa así. Si se encuentra en una casa ruidosa y llena de actividad, busque un lugar para sentarse y terminar su proyecto.
Si es lo suficientemente importante para usted, eliminará todas las posibles distracciones: cierre la puerta, apague el teléfono y desconecte las redes sociales; concéntrese y haga su trabajo.
Creo que este es el mayor desafío que debemos superar como desarrolladores en el mundo moderno, donde solo un clic nos separa de hermosas modelos en Instagram y vídeos de gatos lindos en Snapchat.
Cuando las cosas se ponen difíciles en nuestro proyecto, cuando no podemos encontrar el código correcto a implementar, resulta tentador tomarse un descanso y ver qué ocurre en las redes sociales, o simplemente salir y relajarse.
No es que esté en contra de los descansos o de relajarme con amigos, no, no me malinterprete: no codifico las 24 horas del día y los 7 días de la semana, aunque tengo demasiados proyectos de desarrollo web y MQL5 esperándome. Pero creo que todos deberíamos ceñirnos a un horario que nos funcione. Si no es el momento de revisar las redes sociales, no lo haga. Si es el momento de codificar, cíñase solo a eso hasta el final de la sesión (no importa cuán confusas o difíciles se pongan las cosas). Sería incluso preferible ampliar las sesiones de codificación si no tiene nada importante que hacer después de eso.
Los programadores distraídos pueden codificar en 5 horas o más algo que los programadores concentrados pueden codificar en 45 minutos.
06 — Leyendo la documentación y aprendiendo
Después de encontrar la solución a su problema en el foro, no se apresure a copiarlo y pegarlo pensando que terminará su proyecto más rápido de esa forma (ya hablé de esto en mi primer artículo). Asegúrese de comprender cómo codificar la solución por sí mismo. Resulta difícil trabajar con código copiado cuando algo sale mal, especialmente cuando tiene errores, ya que usted no lo comprende personalmente.
Animo a todos los codificadores a leer la documentación con frecuencia, especialmente las cosas que aún no conocen o con las que aún no se sienten cómodos.
¿Cómo puede aumentar esto nuestra velocidad de desarrollo?
Cuanto más sepamos sobre el lenguaje MQL5, más cómodo se volverá el trabajo con este, y más rápido operaremos como programadores en él. Siempre supone una lucha encontrar el código correcto para implementar nuestra idea de forma efectiva (covertirlo en un programa): aquí es donde perdemos la mayor parte de nuestro tiempo. Espero que se dé cuenta de lo difícil que resulta codificar incluso las cosas más simples si no tenemos los conocimientos suficientes sobre una actividad en particular, como por ejemplo la codificación de indicadores, scripts, asesores expertos, etc. Aquí es donde la experiencia entra en acción.
Entonces, ¿cómo conseguimos experiencia? Mi respuesta siempre es simple: aprenda y pruebe cosas diferentes
Quienes saben mucho sobre el lenguaje MQL5 disponen de infinitas opciones para convertir su idea en un código efectivo y significativo. Ellos saben dónde usar
- Matrices
- Para ciclos / While
- Archivos para almacenar/Leer datos
- Solicitar y leer los datos de un servidor web
- y muchas más cosas interesantes que no tenemos espacio para abordar en este artículo.
07 — Repetición espaciada
— Hermann Ebbinghaus
Así es como hemos aprendido todo lo que sabemos: haciéndolo una y otra vez lentamente hasta que se convierte en una segunda naturaleza. La memoria en nuestro cerebro es limitada, y solo retendrá lo que usamos regularmente. Por eso, si queremos mantener algo en nuestra mente, deberemos hacer ese algo con regularidad. Deberíamos aprender a usar esto en nuestro beneficio.
¿Cómo?
Dado que una de las razones que nos hace ser lentos es nuestra ignorancia sobre ese tema en particular, siempre debemos buscar áreas que necesitamos mejorar ( algunas de ellas se discuten en este artículo) una vez que encontremos esas áreas, debemos esforzarnos continuamente por mejorar en esas áreas hasta que seamos excepcionalmente buenos. Esto funciona bien cuando intentamos aprender y dominar una habilidad en particular, como el aprendizaje de máquinas, los algoritmos autoadaptativos, etc.
08 — Atajos de teclado y configuración del MetaEditor
Los atajos de teclado son divertidos, y pueden ahorrarnos mucho tiempo al escribir código con el teclado. Soy un profesional en la materia, así que me gusta enseñar a otros programadores mis atajos de teclado más productivos en el MetaEditor.
A la hora de escribir código, aprender los atajos de teclado le cambia a uno la vida, y creo que todos los desarrolladores deberían adoptar el teclado en lugar del ratón, ya que pasamos la mayor parte del tiempo trabajando con nuestro teclado, por lo que debemos mostrar bastante dominio de esta herramienta.
Estos son algunos de mis atajos favoritos en un PC con Windows (para Mac y Linux). No estoy seguro del todo, pero los usuarios de Mac pueden reemplazar CTRL con COMMAND;
ATAJO | USO |
---|---|
F4 | Alternar entre MT5 y el Metaeditor |
F7 | Compilar el código |
CTRL+F7 | Compilar todos los documentos abiertos |
CTRL+C | Copiar el código seleccionado |
CTRL+V | Pegar el código seleccionado |
CTRL+X | Cortar el código seleccionado |
CTRL+Z | Deshacer los cambios en el código |
CTRL+Y | Rehacer los cambios en el código |
CTRL+A | Seleccionar todo el código |
CTRL+END | mover el cursor a la última línea de código en su documento |
CTRL+HOME | mover el cursor a la primera línea de código en su documento |
SHIFT + Direcciones(IZQUIERDA,DERECHA,ARRIBA,ABAJO) | Seleccionar el código hacia esa dirección |
TAB | Aumentar la sangría del código seleccionado |
SHIFT+TAB | Reducir la sangría del código seleccionado |
CTRL+ Backspace | Borrar una palabra completa en una línea |
HOME | mover el cursor al inicio de una línea |
END | mover el cursor al final de una línea |
CTRL+ ? | //--- Put a code separator to the next line |
CTRL+> | //+------------------------------------------------------------------+ //| Add this to the current line and the next two | //+------------------------------------------------------------------+ |
CTRL+" | // adds two forward slashes to the beginning of a line |
CTRL+, | Aplica el estilizador a su documento actual |
CTRL+F4 | Cerrar el documento actual |
CRL +F5 | Iniciar/Finalizar la depuración con los datos históricos |
CTRL+T | Abrir / Ocultar la caja de herramientas |
CTRL+D | Abrir / Ocultar el navegador |
ALT+G | Ir a una variable/declaración de función |
WINDOWS+T | Para navegar en aplicaciones en la barra de tareas en caso de que quiera abrir el navegador de internet(CHROME) y buscar información sobre un problema |
CTRL+F | Abrir la barra de búsqueda |
CTRL+S | Guardar el documento actual |
CTRL + Direcciones | Saltar a los espacios de código (palabra por palabra) en esa dirección |
CTR + + | Navegar hacia delante |
CTRL+ - | Navegar hacia atrás |
CTRL+SHIFT+U | poner el código seleccionado en mayúsculas |
CTRL+U | poner el código seleccionado en minúsculas |
Configuración del MetaEditor
También es importante tener la mejor configuración del MetaEditor, que favorezca una escritura más rápida del código. Vamos a ver algunas de las configuraciones que recomiendo utilizar a todos.
Estas casillas deben estar marcadas
- Insertar () y cerrar}]" 'Esto ayudará a evitar esos errores (fin inesperado del programa, paréntesis desequilibrados) que pueden resultar difíciles, y que también pueden acaparar demasiadas líneas de código.
- Resalte los corchetes coincidentes (esto le recordará en qué función o en qué bloque se encuentra)
- Resalte la línea actual (puede resultar confuso llegar a donde estaba codificando la última vez; configurar esta opción lo ayudará a llegar rápidamente de un vistazo: lo que tiene que hacer es seguir desplazando el código y la línea actual se resaltará)
- Historia del portapapeles (para ver su historial de copia-pega; podrá copiar diferentes líneas de código y acceder a ellas fácilmente)
Otras configuraciones incluirían la elección del tamaño de fuente correcto para sus ojos y la distancia entre estos y el PC, sin necesidad de establecer un tamaño de fuente pequeño que apenas pueda ver.
Para jugar con la configuración y encontrar más ajustes, y además conseguir todo ello más rápido, entre en Herramientas>Opciones.
08 — Aprenda a googlear
Aprender a realizar la búsqueda correcta en Google es una actividad que ahorra tiempo y puede acelerar la codificación. Es muy probable que se encuentre con muchos problemas mientras codifica, así que necesitará una solución inmediata. No obstante, no basta con saber dónde encontrar las soluciones, también necesitará saber cómo buscar la solución de forma efectiva.
Hacer una búsqueda en Google es suficiente para obtener respuestas rápidas y correctas a sus preguntas, ¿verdad? FALSO
Veamos un ejemplo de un usuario medio de Google que se atasca en la lectura de una matriz de un archivo binario y usa Google para buscar la solución.
Lo primero que haría la mayor parte de la gente es entrar en Google y poner algo así: como leer una matriz en un archivo binario, esto es lo que obtendrían
Nota: el número total de resultados es de 98 millones (en inglés).
Fíjese en que la web está llena de basura y sitios que, si no tiene cuidado, le harán perder el tiempo, además de poner sus datos privados en manos de piratas informáticos. El término "búsqueda" es demasiado vago para obtener el resultado inmediato específico que necesitamos. Para lograr obtener los resultados deseados, deberemos ser claros y específicos.
Para quienes deseen profundizar en este tema, los consejos de búsqueda pueden resultar demasiado numerosos. Les recomiendo ver este breve vídeo. Aquí, voy a mencionar solo dos consejos.
01: Encuentre un sitio web específico para realizar la búsqueda
No hay mejor lugar para obtener soluciones relativas a MQL5 que MQL5.com. Siempre que haga una búsqueda en Google, considere MQL5.com como el sitio web en el que desea que Google busque sus respuestas.
Añada el sitio web: MQL5.comal final de sus términos de búsqueda, y estos resultados de la búsqueda
Esta vez solo se han retornado 568 resultados, todos ellos procedentes de MQL5.com (El sitio web: URL ordena a Google que busque solo en el sitio web especificado).
02: Sea más específico
MQL5.com sigue siendo de por sí un sitio amplio para realizar una búsqueda, incluso si tenemos muy claro lo que queremos: hay una forma que siempre uso para mí (aunque no está recomendada por Google), y que funciona. La he estado usando desde hace mucho, pero la clave aquí es que deberá saber en qué parte de MQL5 desea que se prioricen sus resultados, por ejemplo, artículos, foros, Code Base, etcétera. Es posible que prefiera los resultados de:
- La sección de artículos, si desea conocer en profundidad un tema.
- Del Foro, si desea una solución rápida
- De Codebase, si desea ver lo que otros han codificado hasta el momento.
Busque en el siguiente formato: MQl5 + sección deseada + término de búsqueda, ejemplo en este caso
Foro MQL5 cómo leer una matriz en un archivo binario: aquí está el resultado
Este método es específico, pero aún así, no hemos enviado a Google a un sitio específico (solo el sitio web en el que usted se encuentra actualmente). Lo mejor sería añadir el sitio: MQL5.com. El término de búsqueda final ahora es foro cómo leer una matriz en un archivo binario sitio web: MQL5.com En esta ocasión, Google retornará 399 resultados.
Conclusión
Ya es suficiente por este artículo: todavía estoy trabajando en otros consejos para aumentar nuestra velocidad de programación y nuestra productividad. Encontrará más consejos en los próximos artículos; habrá muchos de ellos. Recomiendo a todos los programadores que practiquen a diario estos hábitos y métodos
Gracias por su atención. Me gustaría escuchar algunos de sus consejos en la sección de comentarios de este artículo.
Saludos.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/9752





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso