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

Стать хорошим программистом (Часть 5): повышаем скорость программирования

MetaTrader 5Примеры | 12 ноября 2021, 10:55
2 716 5
Omega J Msigwa
Omega J Msigwa

Введение

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

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

         Ка писать код быстрее


Содержание:

  1. Планируйте работу
  2. Не изобретайте велосипед
  3. Делать нужно только то, что нужно
  4. Беритесь за сложные задачи
  5. Ведите здоровый образ жизни
  6. Здесь и сейчас
  7. Не перерабатывайте
  8. Качество непостоянно
  9. Ставьте сроки на выполнение
  10. Определите для себя время максимальной работоспособности
  11. Оглянитесь назад
  12. Будьте объективны
  13. Узнавайте новое
  14. Как тестировать быстрее


1. Планируйте работу

«Если вы не планируете ничего, вы планируете неудачу» (Бенджамин Франклин).

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


Почему же так важно уметь составлять план работы?

  1. План работы помогает сконцентрироваться. Если элементарно не сосредоточиться на работе, то даже на завершение простых проектов может уйти очень много времени. Чем больше вы сосредоточены на своем проекте, тем быстрее вы его закончите.
  2. Планирование придает ясность пути. Составление плана помогает лучше понять, что же необходимо сделать и в какие строки.
  3. План сводит к минимум хаос и путаницу в голове. Поскольку мы с вами пишем программы для одной из наиболее сложных для прогнозирования сфер — для рынка форекс — в голове постоянно появляются новые идеи, особенно если изначальная идея покажется не самой удачной. Но чтобы закончить проект быстрее, нужно придерживаться одного выбранного и хорошо спланированного пути.

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


2. Не изобретайте велосипед

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

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

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

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

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

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

Допустим, вам нужно создать индикатор, который строит линии на основе скользящей средней и каких-то еще расчетов. В этом случае можно скачать индикатор скользящих средних из библиотеки CodeBase, отредактировать код и добавить необходимые буферы.

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


3. Делать нужно только то, что нужно

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

Поскольку объекты создаются во встроенном методе ObjectCreate(), написание таких объектов может занять довольно много времени, не говоря уже о правильном их построении и отображении на графиках. Так что такие дополнительные фичи могут отнимать очень много времени.

Я искренне не рекомендую использовать в советниках объекты графика или милую анимацию (если все-таки хотите закончить проект быстрее), если только не создаете торгового помощника.

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

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

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

«Научитесь разделять важное и незначительное. Многие люди ничего не добиваются просто потому, что придают огромное значение незначительным вещам» (Джим Рон).

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


4. Беритесь за сложные задачи

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

Но как?

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

Это отличный принцип, и работает он не только в видеоиграх, но и в программировании.

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

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

«Беритесь за самые сложные задачи, и остальные станут легкими» (Стив Чандлер).

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


5. Ведите здоровый образ жизни

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

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

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

Я не специалист в области здоровья. Но если вас заинтересовал этот пункт и вы хотите узнать больше, оставлю здесь ссылку на пост.

Здесь же приведу некоторые советы относительно здоровья. Мне они помогают сохранять высокую работоспособность.

Иногда стоит отвлечься от кода.

Если сидеть и писать код 24/7, можно не заметить, как падают творческие способности и концентрация внимания.

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

Специалисты в области здоровья рекомендуют не превышать эти 90-минутные сессии в работе.

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

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

Нужно спать не менее 7 часов в сутки.

Следите за питанием и занимайтесь спортом.

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

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


6. Здесь и сейчас

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

Надо делать здесь и сейчас. А "позже" порой может означать "никогда".

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

«Время идет. Поэтому, что бы ты ни собирался сделать, сделай это» (Роберт де Ниро).

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


7. Не перерабатывайте

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

Важно понять и принять тот факт, что вы не сможете преуспевать во всем. И поэтому абсолютно нормально не пытаться все делать самому. Я затрагивал этот момент в третьей статье, в разделе 5 мы говорили о том, чтобы сделать проект открытым — так разные пользователи смогут обмениваться идеями относительно проекта.

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

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

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

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

Это затратный метод, но оно того стоит. Мне кажется, что этот способ самый быстрый. Именно поэтому технологические и инновационные компании никогда не нанимают одного единственного программиста (а иногда их не менее 1000).


8. Качество непостоянно

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

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

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

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

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

  • Разработан по плану
  • Не содержит ошибок
  • Хорошо продуман, структурирован и объясним
  • Легок в использовании для вас и других

Я абсолютно согласен с Робертом Мартином, который сказал

«Единственный способ идти быстро — это идти хорошо. Каждый раз, поддаваясь искушению променять качество на скорость, вы замедляетесь. Каждый раз».


9. Ставьте сроки на выполнение

Если бы футбольный матч длился бесконечно, как бы вели себя футболисты?

У них не было бы энтузиазма, они не прилагали бы усилий, игра не приносила бы удовольствия, и вообще не было бы никакой игры!

У всего должны быть рамки, окончание, чтобы это что-то значило.

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

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

Во Фрилансе сроки выполнения (хоть и не строгие) устанавливаются для каждой работы. Точно так же сроки устанавливать надо при работе над собственными проектами.

Запомните:

у проекта без сроков может не быть окончания.


10. Определите для себя время максимальной работоспособности

У всех есть свое время максимальной работоспособности — моменты, когда ваша продуктивность и способность обучаться находятся на высоком уровне. У кого-то это определенные часы, у кого-то — дни недели. Например, для меня самым продуктивным временем является период с 4:00 до 7:00-8:00 утра. Именно тогда я изучаю что-то новое или работаю над сложными задачами.

У других эти часы могут быть утром, днем или вечером. Определите наиболее продуктивное время для себя и используйте его с максимальной эффективностью.

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


11. Оглянитесь назад

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

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


12. Будьте объективны

Проведите самоанализ, посмотрите на свою работу, проанализируйте свою деятельность и спросите себя: куда уходит мое время?

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


13. Узнавайте новое

Это можно сравнить с разминкой спортсменов. Программисты тоже могут разминаться.

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

Вы можете работать над Open Source-проектами, которые близки к тому, что вы делаете, и могут дать полезный опыт.

Знания и практика готовят вас к реальным проектам. Работая сегодня, вы совершенствуетесь и делаете вклад в будущее, а результат будет заметен уже в следующем проекте.


14. Как тестировать быстрее

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

Помимо написания и чтения кода, тестирование — это та область, где большая часть времени тратится впустую.

Тестирование программ может зависеть от возможностей вашего компьютера и программных настроек. Например, при определенных настройках тестирование на 5-ядерной процессоре будет медленнее, чем на компьютере с 7 или 9 ядрами. Кроме того, на скорость влияет память, настройки тестера стратегий, конфигурации агентов и сама тестируемая программа.

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

Вот несколько полезных советов, которые помогут тестировать быстрее.

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

 Внимание: отключение этой опции скрывает все операции, поэтому на графике ничего не будет. Если вам важна визуализация на графике, не отключайте ее.

Используйте режим моделирования Только по ценам открытия

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

Выберите опцию прибыли в пунктах для ускорения расчетов

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

Вот как это выглядит:

Ускоряем тестирование в MetaTrader 5

И все же самый быстрый способ тестирования/оптимизации стратегий, дающий доступ к мощным компьютерам и не требующий дополнительных настроек, — это использовать сеть MQL5 Cloud Network 


Заключение

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

Спасибо за внимание!


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

Последние комментарии | Перейти к обсуждению на форуме трейдеров (5)
Sergey Pavlov
Sergey Pavlov | 12 нояб. 2021 в 11:10
Сначала хотел написать, что это очередная мыльная опера, но потом... оценил подачу материала и предлагаю автору брать с каждого читателя по 100500$ за прочтение. Это похоже на семинары "Как стать успешным".
Aliaksandr Hryshyn
Aliaksandr Hryshyn | 12 нояб. 2021 в 23:40
Sergey Pavlov #:
Сначала хотел написать, что это очередная мыльная опера, но потом... оценил подачу материала и предлагаю автору брать с каждого читателя по 100500$ за прочтение. Это похоже на семинары "Как стать успешным".
Тут пустота, ценной информации около нуля. Печально, что качество материала в статьях никак не модерируется.
Roman Shiredchenko
Roman Shiredchenko | 16 нояб. 2021 в 10:22
Aliaksandr Hryshyn #:
Тут пустота, ценной информации около нуля. Печально, что качество материала в статьях никак не модерируется.

... абсолютно верно, кроме этого такие ляпы:

8. Качество непостоянно

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

----------

мнение, что тупо болт бьют и все - никто ничего не проверяет и ни за что не отвечает, чисто удалено

удалено
Rashid Umarov
Rashid Umarov | 16 нояб. 2021 в 10:52
Roman Shiredchenko #:

... абсолютно верно, кроме этого такие ляпы:

8. Качество непостоянно

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


Исправлено

Rashid Umarov
Rashid Umarov | 16 нояб. 2021 в 10:53
Roman Shiredchenko #:

мнение, что тупо болт бьют и все - никто ничего не проверяет и ни за что не отвечает, чисто удалено

удалено

За это бан на месяц. В другом месте хейтерстов проявляйте

Комбинаторика и теория вероятностей для трейдинга (Часть IV): Логика Бернулли Комбинаторика и теория вероятностей для трейдинга (Часть IV): Логика Бернулли
В данной статье я решил осветить всем известную схему Бернулли и показать как можно ее использовать в рамках описания массивов данных связанных с торговлей, для дальнейшего использования на пути создания самостоятельно адаптирующейся торговой системы. Также будем искать более общий алгоритм, частным случаем которой является формула Бернулли и найдем ему применение.
Разработка торговых роботов при помощи визуального программирования Разработка торговых роботов при помощи визуального программирования
В статье демонстрируется возможности редактора botbrains.app — no-code платформы для разработки торговых роботов. Чтобы создать торгового робота не нужно программировать — просто перетащите нужные блоки на схему, задайте их параметры и установите связи между ними.
Графика в библиотеке DoEasy (Часть 88): Коллекция графических объектов — двумерный динамический массив для хранения динамически изменяемых свойств объектов Графика в библиотеке DoEasy (Часть 88): Коллекция графических объектов — двумерный динамический массив для хранения динамически изменяемых свойств объектов
В статье создадим класс динамического многомерного массива с возможностью изменения количества данных в любом измерении. На основе созданного класса создадим двумерный динамический массив для хранения динамически изменяемых некоторых свойств графических объектов.
Графика в библиотеке DoEasy (Часть 87): Коллекция графических объектов - контроль модификации свойств объектов на всех открытых графиках Графика в библиотеке DoEasy (Часть 87): Коллекция графических объектов - контроль модификации свойств объектов на всех открытых графиках
В статье продолжим работу над отслеживанием событий стандартных графических объектов и создадим функционал, позволяющий контролировать изменение свойств графических объектов, расположенных на любых открытых в терминале графиках.