Новички, с какими трудностями в программировании на MQL вы сталкиваетесь в 2025 году? - страница 15

 

Главная ошибка в изучении программирования, это упор на документацию. Что такое документация? Документация это сборник спецификаций языка: какие функции у него есть, какие данные предоставляет среда, какие специфические для конкретного языка синтаксические конструкции можно использовать. К программированию это не имеет ни чего общего. В этом легко убедится. Если Вы хорошо изучите документацию MQL5 сможете ли Вы например начать программировать на Питоне или на C#? Конечно нет. Знания полученные из документации MQL4/5 не применимы ни к чему другому. Тоже можно сказать про документацию к любому другому языку программирования. Более того, если Вы не знаете основ программирования, изучив документацию, скорее всего Вы не сможете ничего запрограммировать и на MQL. Ну допустим изучили Вы что есть некая функция которая выбирает позиции, есть другая которая запрашивает какое-то свойство выбранной позиции - и что дальше? Как компоновать эти функции, как обрабатывать их результаты и что с ними делать дальше - ничего этого документация не рассказывает. Подчеркну, что если Вы уже знаете как работать с результатами функций, умеете писать обработчики их результатов, то документация для Вас становится робастой, т.е. с ее помощью Вы начинаете решать свои задачи. Но делаете Вы это не благодаря документации, а благодаря ранее полученным знаниям о программировании. В этом легко убедится посмотрев на опыт освоения MQL опытными программистами. Если человек уже хорошо знает C, C++, C# - то разобраться в MQL для него вообще не проблема. Достаточно пару вечеров в ненапряженном стиле почитать документацию и все сразу становится понятным.

И казалось бы, раз с документацией все понятно, почему-бы не написать статью, которая учит программированию, а не синтаксическим особенностям конкретного языка. Но нет. Таких статей и учебников нет. Все статьи для новичков, это очередная попытка пересказа документации, более понятным разжеванным языком. Но при написании статьи для новичков очень легко скатится к документации. Ведь как объяснить элементарные вещи без синтаксиса, который в этой документации и описан? Как можно объяснить что такое переменная и не сказать о том, какие типы данных бывают в MQL. А дальше по наклонной мы начинаем погружаться в эту самую документацию, изучаем особые случаи, еще больше документации с ними связанной и по новому кругу. А где здесь программирование? Его снова нет.

Новички должны изучить универсальную базу, которая поможет им в любом языке программирования. Я убежден, такой базой для новичков является глубокое понимание функции в программировании. Заучить формальное определение недостаточно. Важно научится писать собственные функции и понять, почему функции именно такие. Важно научится работать с функциями, научится их композиции и выстраиванию их в алгоритм. После этого, откроется дорога на изучение ООП. ООП невозможно понять, если не понимать основ по работе с функциями, принципов по их композиции. Т.е. ООП является логическим продолжением профессиональной работы с функциями. 

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

На мой взгляд, что бы стать крутым программистом на MQL достаточно знать 5-7% его возможностей. Остальное из 95% можно изучать ситуативно, по мере надобности. Аналогия в изучении иностранного языка полная. Можно годами сидеть и зубрить слова из словаря Оксфорда (их там 90 000 кажется). А можно выучить 200-300 самых важных и начать шпарить на этом запасе, как без проблем делают дети. Вот странно же, они не синтаксиса ни грамматики не знают, а говорят лучше чем взрослые, этот  язык изучающие.

 
Vasiliy Sokolov #:

Главная ошибка в изучении программирования, это упор на документацию. Что такое документация? Документация это сборник спецификаций языка: какие функции у него есть, какие данные предоставляет среда, какие специфические для конкретного языка синтаксические конструкции можно использовать. К программированию это не имеет ни чего общего. В этом легко убедится. Если Вы хорошо изучите документацию MQL5 сможете ли Вы например начать программировать на Питоне или на C#? Конечно нет. Знания полученные из документации MQL4/5 не применимы ни к чему другому. Тоже можно сказать про документацию к любому другому языку программирования. Более того, если Вы не знаете основ программирования, изучив документацию, скорее всего Вы не сможете ничего запрограммировать и на MQL. Ну допустим изучили Вы что есть некая функция которая выбирает позиции, есть другая которая запрашивает какое-то свойство выбранной позиции - и что дальше? Как компоновать эти функции, как обрабатывать их результаты и что с ними делать дальше - ничего этого документация не рассказывает. Подчеркну, что если Вы уже знаете как работать с результатами функций, умеете писать обработчики их результатов, то документация для Вас становится робастой, т.е. с ее помощью Вы начинаете решать свои задачи. Но делаете Вы это не благодаря документации, а благодаря ранее полученным знаниям о программировании. В этом легко убедится посмотрев на опыт освоения MQL опытными программистами. Если человек уже хорошо знает C, C++, C# - то разобраться в MQL для него вообще не проблема. Достаточно пару вечеров в ненапряженном стиле почитать документацию и все сразу становится понятным.

И казалось бы, раз с документацией все понятно, почему-бы не написать статью, которая учит программированию, а не синтаксическим особенностям конкретного языка. Но нет. Таких статей и учебников нет. Все статьи для новичков, это очередная попытка пересказа документации, более понятным разжеванным языком. Но при написании статьи для новичков очень легко скатится к документации. Ведь как объяснить элементарные вещи без синтаксиса, который в этой документации и описан? Как можно объяснить что такое переменная и не сказать о том, какие типы данных бывают в MQL. А дальше по наклонной мы начинаем погружаться в эту самую документацию, изучаем особые случаи, еще больше документации с ними связанной и по новому кругу. А где здесь программирование? Его снова нет.

Новички должны изучить универсальную базу, которая поможет им в любом языке программирования. Я убежден, такой базой для новичков является глубокое понимание функции в программировании. Заучить формальное определение недостаточно. Важно научится писать собственные функции и понять, почему функции именно такие. Важно научится работать с функциями, научится их композиции и выстраиванию их в алгоритм. После этого, откроется дорога на изучение ООП. ООП невозможно понять, если не понимать основ по работе с функциями, принципов по их композиции. Т.е. ООП является логическим продолжением профессиональной работы с функциями. 

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

На мой взгляд, что бы стать крутым программистом на MQL достаточно знать 5-7% его возможностей. Остальное из 95% можно изучать ситуативно, по мере надобности. Аналогия в изучении иностранного языка полная. Можно годами сидеть и зубрить слова из словаря Оксфорда (их там 90 000 кажется). А можно выучить 200-300 самых важных и начать шпарить на этом запасе, как без проблем делают дети. Вот странно же, они не синтаксиса ни грамматики не знают, а говорят лучше чем взрослые, этот  язык изучающие.

Браво, Василий! БРАВО! Нечего добавить и нечего отнять!!! Всё так оно и есть. Только благодаря Вашему развёрнутому объяснению назначения функции в теме самообучения, мне тогда получилось сложить пазл, в котором надолго застрял.))

Спасибо Вам!!!

С уважением, Владимир.

 

Если кому-то будет интересно про роль функции в программе, то ещё раз опубликую ссылки на те сообщения Василия, которые помогли мне в самообучении:

  1. https://www.mql5.com/ru/forum/352460/page28#comment_18636493
  2. https://www.mql5.com/ru/forum/352460/page28#comment_18637800
  3. https://www.mql5.com/ru/forum/352460/page29#comment_18641729
  4. https://www.mql5.com/ru/forum/352460/page52#comment_18694985

С уважением, Владимир.

 
MrBrooklin #:

Если кому-то будет интересно про роль функции в программе, то ещё раз опубликую ссылки на те сообщения Василия, которые помогли мне в самообучении:

  1. https://www.mql5.com/ru/forum/352460/page28#comment_18636493
  2. https://www.mql5.com/ru/forum/352460/page28#comment_18637800
  3. https://www.mql5.com/ru/forum/352460/page29#comment_18641729
  4. https://www.mql5.com/ru/forum/352460/page52#comment_18694985

С уважением, Владимир.

Спасибо за ссылки. Не думал что кто-то коллекционирует мои посты:)

Не хватает заметки про ООП. Те посты уже вплотную к нему подходят.

 

Всем доброго утра и хорошего настроения!

Моё сообщение будет полностью посвящено Соколову Василию.

Уважаемый Василий! Снова обращаюсь к Вам, как и много лет назад - напишите, пожалуйста!, небольшую книгу для новичков с нулевым уровнем подготовки в программировании. У Вас очень хорошо получается на простых примерах объяснять и показывать, что в первую очередь нужно понять новичку в программировании. На мой взгляд, Вы способны взглянуть на написанный текст глазами читающего новичка. А это дорогого стоит! Если нет желание писать книгу, то цикл статей тоже был бы большим подспорьем. Главное, чтобы информация была буквально "разжевана", как для младенца. Книгу или цикл статей можно было бы назвать, например, "Введение в программирование".

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

С уважением, Владимир.

 
MrBrooklin #:

Всем доброго утра и хорошего настроения!

Моё сообщение будет полностью посвящено Соколову Василию.

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

Добрый день Владимир. Спасибо за теплые слова. Книгу я писать точно не буду, слишком это сложно да и избыточно. А вот написать несколько статей действительно могу, хотя и не могу обещать что дойдут руки и до них. Что касается локализации, то MQL позволяет использовать русские имена в названиях переменных и функций, но все-таки я не советую идти по пути Петра (на сколько знаю, он пишет своим программы именно кириллицей). Есть отраслевые стандарты, привыкнув к которым, будет существенно легче заниматься в разработке.
 
Vasiliy Sokolov #:
Добрый день Владимир. Спасибо за теплые слова. Книгу я писать точно не буду, слишком это сложно да и избыточно. А вот написать несколько статей действительно могу, хотя и не могу обещать что дойдут руки и до них. Что касается локализации, то MQL позволяет использовать русские имена в названиях переменных и функций, но все-таки я не советую идти по пути Петра (на сколько знаю, он пишет своим программы именно кириллицей). Есть отраслевые стандарты, привыкнув к которым, будет существенно легче заниматься в разработке.

Василий, у меня было предложение о том, чтобы в книге или статье были подробно расписаны непонятные значения иностранных слов, используемых в языке программирования, а не заменять их русскими словами. В качестве примера привёл слово хэндл. Если бы в документации где-то было написано, что хэндл - это по сути номер позиции индикатора в списке, применяемых программистом индикаторов (а программист может использовать в своем советнике сколько угодно) и что нумерация начинается с цифры 10, а не как все привыкли с нуля, то тогда бы и не было трудностей с пониманием значения смысла данного слова. )

Очень надеюсь, что у Вас все таки найдётся время и желание для написания статей.

С уважением, Владимир.

 
MrBrooklin #:

... Если бы в документации где-то было написано, что хэндл - это по сути номер позиции индикатора в списке, применяемых программистом индикаторов (а программист может использовать в своем советнике сколько угодно) и что нумерация начинается с цифры 10, а не как все привыкли с нуля, то тогда бы и не было трудностей с пониманием значения смысла данного слова. )

Очень надеюсь, что у Вас все таки найдётся время и желание для написания статей.

С уважением, Владимир.

В том-то и дело, что хендл это не номер позиции индикатора в списке. Хендл - это дискриптор, т.е. это просто число, идентифицирующее какой-либо объект информационной системы (открытый файл, окно, индикатор и т. д.). В некоторых системах, такие дискрипторы выделяются последовательно. Это может создать ощущение упорядоченного списка, но закладываться на упорядоченность и последовательность дискрипторов нельзя. 
[Удален]  
MrBrooklin #:

Василий, у меня было предложение о том, чтобы в книге или статье были подробно расписаны непонятные значения иностранных слов, используемых в языке программирования, а не заменять их русскими словами. В качестве примера привёл слово хэндл. Если бы в документации где-то было написано, что хэндл - это по сути номер позиции индикатора в списке, применяемых программистом индикаторов (а программист может использовать в своем советнике сколько угодно) и что нумерация начинается с цифры 10, а не как все привыкли с нуля, то тогда бы и не было трудностей с пониманием значения смысла данного слова. )

Очень надеюсь, что у Вас все таки найдётся время и желание для написания статей.

С уважением, Владимир.

Хэндл - это просто число, сопоставленное с каким-либо объектом.
Они не обязаны начинаться с 0 или с 10 или с чего-то ещё. Они не обязаны идти по порядку.
Если сейчас они начинаются с 10, это может измениться при очередном обновлении, и не должно привести к неправильной работе.
Единственное что они должны - это быть уникальными.

 
Vasiliy Sokolov #:
В том-то и дело, что хендл это не номер позиции индикатора в списке. Хендл - это дискриптор, т.е. это просто число, идентифицирующее какой-либо объект информационной системы (открытый файл, окно, индикатор и т. д.). В некоторых системах, такие дискрипторы выделяются последовательно. Это может создать ощущение упорядоченного списка, но закладываться на упорядоченность и последовательность дискрипторов нельзя. 

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

И ещё один момент. Чем дескриптор, он же хэндл, тогда отличается от магического номера советника, кроме того, что мэджик задаем вручную? )

С уважением, Владимир.