English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Стать хорошим программистом (Часть 2): избавляемся еще от пяти привычек на пути к лучшему программированию на MQL5

Стать хорошим программистом (Часть 2): избавляемся еще от пяти привычек на пути к лучшему программированию на MQL5

MetaTrader 5Торговые системы | 29 сентября 2021, 14:03
2 701 7
Omega J Msigwa
Omega J Msigwa

Введение


Я часто использую термин "нуб" (от английского noob) в этой серии статей. Им я для простоты называю всех, у кого не очень большой опыт программирования на MQL5 (пожалуйста, не обижайтесь). Просто так удобнее. Это не означает, что статьи предназначены именно для нубов или новичков. Конечно нет! Этот материал предназначен абсолютно для всех, независимо от опыта в программировании, потому что человека делают нубом определенные программерские привычки и поведение, а не количество лет в разработке.

Нуб vs профессиональный программист 


Предыдущая статья опубликована здесь, если вы еще не читали ее. Здесь же я продолжаю свою миссию - помочь нубам стать профессиональнее.

1. Перестаньте думать, что вы лучше других


Вероятно, вы занимаетесь программированием уже какое-то время и успели создать несколько отличных советников и индикаторов для себя, для публикации в библиотеке Code Base или для заказчиков во Фрилансе. Хорошо, если вы замечаете свой прогресс и становитесь более уверенным, что помогает вам решать более серьезные задачи и дальше развиваться. Плохо, если вами овладевает высокомерие и гордыня. Не забывайте, что:

«Гордый человек считает себя всегда вполне хорошим. От этого-то гордость особенно вредна. Она мешает человеку в главном деле жизни людей, в том, чтобы становиться лучше» (Лев Толстой).

Так легко чувствовать себя умным и критиковать чужой код, при этом даже не пытаясь до конца разобраться в нем. Или еще хуже — показывать, какой ты крутой программист, оскорбительными ответами на форуме, чтобы автор вопроса понял, насколько он плох по сравнению с тобой. Сколько раз я видел, как люди приходят на форум с вопросом, публикуют код, описывают проблему и то, как они пытались ее решить, какие действия не сработали. А потом неожиданно появляется "опытный нуб" и объясняет, что этот человек глубоко неправ, при этом не предлагая никакого решения или же предлагая еще менее адекватное решение (кусок код), чем изначальный код автора вопроса.


Ответ нуба


Вместо того, чтобы сразу кидаться на топик-стартера и разъяснять ему, что он жутко неправ, да еще и кидая ему в ответ якобы правильный код, почему бы не начать с объяснения причин проблемы, почему бы не написать подробно и четко, что можно сделать в конкретной ситуации?

Не так уж приятно быть топик-стартером, поверьте. Наверняка любой, кто создает тему на форуме, прекрасно понимает, что он где-то ошибся и именно поэтому не может получить желаемый результат. Скорее всего, автор темы — сам новичок. Возможно, он потратил часы или даже дни, пытаясь решить проблему. Уж я точно знаю каково это.

Логично, что если вы просто кинете в ответ пусть даже работающий кусок кода, в долгосрочной перспективе это не решит проблем. То же самое, что дать обезболивающее тому, кому нужна операция. Наоборот, так вы научите начинающих практически самой плохой привычке, которая стояла первой в списке в первой статье цикла — копипаст. А новичок может сделать такой вывод: "Раз это работает именно так на форуме, то я буду постить тут свой проблемный код, а мне в ответ будут давать работающий. Класс!"

Старайтесь всегда четко, подробно и доступно объяснять решения, которые будут максимально понятными и полезными для начинающих. Помните, что в мире есть и будет много начинающих, которые могут столкнуться с той же проблемой, поэтому им, вероятно, тоже понадобится ваше решение. 

Примером еще одного негативного последствия, когда мы думаем, что лучше других, может служить появление неправильных ответов на форуме и неадекватных отзывов к кодам в библиотеке. Раз мы лучше, код другого может казаться недостаточно сложным, или мы уверены, что код конечно же нужно было написать совершенно по-другому. При этом мы забываем или вовсе не задумываемся, какая цель стояла перед автором, какую задачу он решал. Так появляются неоправданные негативные отзывы только потому, что мы бы сделали по-другому.

2. Будьте гибче 


Перестаньте думать, что вы не сможете стать хорошим в определенной области.

«Безумие — делать одно и то же, и каждый раз ожидать иного результата» (Альберт Эйнштейн).


Не зацикливайтесь на создании одних и тех же советников, индикаторов, скриптов или чего-то еще. Это убивает творчество и креативность, а вы застреваете на одном месте. Вы сами ограничиваете свои возможности, когда думаете, что просто не были рождены, чтобы достигнуть успехов в какой-то сложной области программирования. Ваш мозг — это гибка система. Он адаптируется и меняется при поступлении новых стимулов. Чем сложнее вы ставите перед собой задачи, тем сильнее вы станете в этой конкретной теме. Вы можете стать хорошим специалистом в любой области:

И вообще в любой другой сфере. Естественно, для этого нужно приложить усилия, нужно работать.

Не существует святого грааля, волшебного советника (по крайней мере, я сам не встречал) или универсального индикатора. Но это не должно вас останавливать — работайте над своими системами, совершенствуйте их, развивайте и развивайтесь сами.

Я помню, как в начале моего пути в программировании я так испугался, когда скачал из Code Base простейший индикатор, типа простого скользящего среднего, и обнаружил, что в коде более 1000 строк (а именно на длину кода я обращал внимание в первую очередь). И это для меня было слишком сложно. Думаю, многие новички сталкиваются с таким.

Сейчас у меня уже больше опыта. Сейчас я уже понимаю: да, какие-то вещи все еще могут быть сложными, но это нормально. И в жизни всегда так — трудно в начале, а со временем, со вложенными усилиями, все становится на свои места.

3. Не надо писать код просто на будущее


Вы много работали, создавали советники и индикаторы. И у вас накопилось очень много строчек кода. Если потом внимательно не перечитать получившийся код, велика вероятность, что в нем останутся ненужные и неиспользуемые куски.


«Те, у кого есть знания, не предсказывают. Те, кто предсказывают, не обладают знаниями» (Лао-Цзы).

Чем меньше кода, тем 

  • Меньше ошибок
  • Меньше времени на чтение 
  • Легче компилировать 
  • Быстрее отредактировать 
  • Быстрее получить готовое решение
  • Проще сопровождать 
  • Легче проводить отладку
Не тратьте время на написание кода, который не нужен сейчас.

Вероятно, вы тоже встречали подобный код:

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

И этот пример не самый длинный — я встречал более 200 закомментированных строчек когда, которые почему-то хранились в программе.

MetaEditor распознает неиспользуемые переменные на уровне функций и предупреждает о наличии таких переменных. Так что вы можете выбирать — оставить их и наблюдать каждый раз подобные уведомления или удалить.

Но что касается остального кода, дальше надо проверять самим, искать и удалять неиспользуемый код.

Не используете - не нуждаетесь - удаляйте.

Неиспользуемый код только путает, делает весь код длиннее, становится труднее найти и добраться до нужных частей программы.

4. Не обязательно всегда быть правым

«Человек, который совершил ошибку и не исправил ее, совершил еще одну ошибку» (Конфуций).

Одна из основных причин, по которой нубы сразу бегут на Форум, постят код и минимальные описания того, что они хотят получить, что они сделали и что получили, в том, что они боятся слишком сильно углубляться в свои проблемы. Так делать не стоит.

Жизнь программиста полна проблем и постоянно возникающих задач. Единственный способ добиться успеха — это решать максимальное количество проблем и задач, которые вы встречаете на своем пути. Я не имею в виду, что вообще никогда не стоит писать о своих проблемах на форуме. Но постарайтесь решить проблему самостоятельно, и даже если не получится, вам будет с чем идти на форум — вы сможете понятнее описать проблему и шаги, которые вы уже испробовали. Когда вы концентрируетесь на проблеме, ищите различные способы ее решения, вы можете не только решить эту самую задачу, но и открыть для себя что-то новое.

Исправляя ошибку, убедитесь, что вы ее поняли, чтобы в следующий раз ее не допустить.


5. Не гонитесь за мгновенным успехом

«Если вы действительно присмотритесь, то большинство мгновенных успехов занимает много времени» (Стив Джобс).

Может быть такое, что вы занимаетесь программированием уже какое-то время, но постоянно возникает ощущение, что вы не куда не движетесь, что нет никакого прогресса ?

Особенно часто такое чувство может возникать у новичков, потому что большинство из них ждут мгновенных результатов. Но мир устроен по-другому.

Устройтесь поудобнее, расслабьтесь и наслаждайтесь процессом. Прогресс несомненно есть, а все сомнения — лишь часть пути, они не должны вас останавливать. Я бы посоветовал поработать над самыми любимыми проектами, от которых вы получите удовольствие и при этом будете продолжать учиться и развиваться. Будьте открыты новым идеям и возможностям (то, о чем я говорил во втором пункте).

Вложите усилия, а прогресс и развитие придут как конечный результат вашей работы.

  • Читайте исходники, изучайте код, работайте с готовыми кодами из библиотеки Code Base.
  • Читайте как можно больше статей на mql5.com.
  • Посидите на Форуме, помогая другим участникам.
  • Пробуйте разные подходы, экспериментируйте, чтобы понять, что работает именно для вас.

Запомните, успех приходит не там, где вы появляетесь время от времени. Успех будет там, куда вы вкладываетесь постоянно.

 

Заключение

Я и сам далеко не совершенен ни как MQL5-программист, ни как веб-разработчик. Я так же продолжаю учиться и понимаю, что процесс обучения никогда не остановится. Я всегда стремлюсь совершенствоваться и становиться лучше. А причина, по которой у меня хватило смелости поделиться идеями (то есть учить будучи студентом), заключается в том, что я хочу помогать таким же программистам, как я, стать чуточку лучше.

Давайте совершенствоваться вместе!

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/9711

Последние комментарии | Перейти к обсуждению на форуме трейдеров (7)
Aliaksandr Hryshyn
Aliaksandr Hryshyn | 29 сент. 2021 в 17:04
Sergey Pavlov #:

Переводчикам респект.

После первой статьи сомневался, а теперь уверен - автор хочет объяснить программистам-дебилам, что они дебилы. Автор, не обижайтесь, но статья написана для Вас. Кроме того, то высокомерие с которым Вы обращаетесь к читателям обнуляет вашу работу.

Согласен. 

Daniil Kurmyshev
Daniil Kurmyshev | 30 сент. 2021 в 02:45
Sergey Pavlov #:

Переводчикам респект.

После первой статьи сомневался, а теперь уверен - автор хочет объяснить программистам-дебилам, что они дебилы. Автор, не обижайтесь, но статья написана для Вас. Кроме того, то высокомерие с которым Вы обращаетесь к читателям обнуляет вашу работу.

+++ 

Высокомерие очень чувствуется...

Следующие статьи этого автора читать нет желания, хотя смысл, который он пытается рассказать и не может, очень важен...

Статьи на хабр по этой тематике красочнее и интереснее!
Alexey Viktorov
Alexey Viktorov | 30 сент. 2021 в 07:40
Ах какие мы все нежные… Правда глаза колет?
Aliaksandr Hryshyn
Aliaksandr Hryshyn | 30 сент. 2021 в 08:36
"«Гордый человек считает себя всегда вполне хорошим. От этого-то гордость особенно вредна. Она мешает человеку в главном деле жизни людей, в том, чтобы становиться лучше» (Лев Толстой)." — не обижайте Толстого, он вам ничего не сделал, надо с оригинала брать текст а не через третие руки. Потеря стиля, с ошибками, ужас
Andrei Novichkov
Andrei Novichkov | 5 окт. 2021 в 12:24
В любом случае то, о чем пишет автор, важно. Может на хабре все и красочнее. Может здесь и стиль не тот. И ошибки, о ужас. Не стоит зацикливаться на собственном субъективном мнении и посмотреть на себя повнимательнее. Вдруг и у нам присущи и нетерпимость к другому мнению, и гордыня, и самомнение. Вот где ужос то на самом деле.
Графика в библиотеке DoEasy (Часть 84): Классы-наследники абстрактного стандартного графического объекта Графика в библиотеке DoEasy (Часть 84): Классы-наследники абстрактного стандартного графического объекта
В статье рассмотрим создание классов-наследников объекта абстрактного стандартного графического объекта терминала. Объект этого класса описывает общие для всех графических объектов свойства. Т.е. это просто некий графический объект. Для уточнения его принадлежности к реальному графическому объекту нам необходимо унаследоваться от него, и в классе объекта-наследника прописать свойства, присущие этому конкретному графическому объекту.
Графика в библиотеке DoEasy (Часть 83): Класс абстрактного стандартного графического объекта Графика в библиотеке DoEasy (Часть 83): Класс абстрактного стандартного графического объекта
В статье создадим класс абстрактного графического объекта. Этот объект будет основой для создания классов стандартных графических объектов. Свойств у графических объектов много, и сегодня, прежде чем создать класс абстрактного графического объекта, нам необходимо будет сделать объёмную подготовительную работу — прописать эти свойства в перечислениях библиотеки.
Стать хорошим программистом (Часть 3): 5 советов, чтобы лучше программировать на MQL5 Стать хорошим программистом (Часть 3): 5 советов, чтобы лучше программировать на MQL5
Статья обязательна к прочтению для всех, кто хочет улучшить свою карьеру программиста. Цель этой серии статей — помочь любому читателю, даже опытному, улучшить навыки программирования. Описанные в статье идеи работают как для начинающих MQL5-программистов, так и для профессионалов.
Почти конструктор для создания советника Почти конструктор для создания советника
Предлагаю свой набор торговых функций в виде готового советника. Представленный способ позволяет получать множество торговых стратегий простым добавлением индикаторов и изменением входных параметров.