English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
より優れたプログラマー(第01部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと

より優れたプログラマー(第01部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと

MetaTrader 5 | 8 10月 2021, 08:27
965 0
Omega J Msigwa
Omega J Msigwa

はじめに

人間の心は、一度新しいアイデアによって引き伸ばされると、元の次元に戻ることはない。
—オリバー・ウェンデル・ホームズ

私たちがより良いプログラマーになるためには、コードを常に学ぶ必要があるだけでありません。コーディングを学ぶ方法をまったく学ばなくても、ベストプラクティスについては学ぶ必要があります。コードを学ぶ方法と適用するベストプラクティスを学ぶことは、コーディングのキャリアを成功させる必要があるすべての人にとって非常に重要です。方法と理由を知ることで、自分が何をしているのかがわかるようになります。これにより、記憶力が高まり、コード全般の改善に役立ちます。

次の方法は、プログラミング体験を変えることができる実証済みの方法です。この記事でこれから読むすべてのことを注意深く適用すれば、ほぼ一晩でそれを行うことができます。


01: やみくもにコピー&ペーストする習慣をやめる

最も崇高な喜びは理解の喜びです。
- レオナルド・ダ・ヴィンチ

これは初心者の最大の習慣であり、経験豊富なプログラマーでさえも行うことがあります。2019年に初めてプログラミングを始めたとき、私はほとんどの場合、フォーラムでその「機能するコード」を探していました。特定の問題を検索するたびに説明の内容にはあまり注意を払いませんでした。私が探していたのは、誰かが「ありがとうございます。うまくいきました。」のように返信したコメントや他の人が役に立ったと言ったコメント(特に、フォーラムで最初に質問した人)だけでした。…機能するコードを見つけたら、何をしたかがわかる必要はありません。

標準ライブラリのチャートが機能しないと断言したこともあります。今考えると恥ずかしいです。

  


今はその時何が機能していなかったのかがわかっています。それは私です。コード自体も覚えてもいない場所からコピーしたからです。ここでの私のポイントは次のとおりです。

自分がしていることを理解してください。すばやく作業を完了して問題を修正したいからといって、フォーラムからコードをやみくもにコピー&ペーストしてはいけません。

多くの場合、経験豊富な開発者は特定のトピックに関するMQL5ドキュメントへのリンクを提供するだけでフォーラムの質問に答えるので、この習慣を持つ人が追いつくのは難しいです。特定の問題への関連リンクを提供するこのWebサイトの自動機能は言うまでもありません。この背後にある理由は、問題のほとんどが基礎や基本を理解していないことが原因であるためです。

常に解決策ではなく理解を求めてください。

基礎を理解すれば、コーディングは自然で自動的になります。

コピー&ペーストの習慣はあなたの評判を傷つけるだけでなく、修正するよりも多くの問題を引き起こします。

02: ハッキングの問題をあきらめる

コードの問題を修正する前に、問題が発生した理由を確認してください。問題が発生した理由がわかれば、コーディングの内容と理由が完全にわからないために発生した問題を修正するために、コードをコピペして代わりのコードを待つのではなく、フォーラムでより良い質問をするのに役立ちます。たとえば、上の画像の私は、まず、標準ライブラリのチャートを完全に理解していないため、チャートテンプレートを変更するためにコードを別の場所にコピーしました。そのため、ライブラリが機能していないと言ってしまいました。

問題やエラーに遭遇したら、ライブラリと機能していないコードを完全に理解していることを確認してください。MQL5でこれを行うには、いくつかの方法があります。

  • MQL5ドキュメント
  • フォーラム

MQL5ドキュメント:

幸運なことに、すべてのドキュメントは、ネットに接続したり検索エンジンを使用したりせずにすぐに利用できます。経験のあるプログラマーの方はご存じでしょうが、初心者の方向けに、非常にすばやくアクセスする場所と方法を示します。MetaEditorを開き、ヘルプセクションに移動して、ドロップダウンオプションMQl5レフェレンスをクリックすることです。

ドキュメントへのアクセス

MQL5フォーラム:

これは、他の開発者と問題を共有することで、自分のコードで見えなかったことを学び、聞くのに最適な場所です。しかし、私が犯したのと同じ間違いを犯さないでください。コピーしないでください。

 「それは真の理解と習得につながる職人技の道です。」

初心者は私が「初心者サイクル」と呼ぶものにはまっています

初心者サイクル

03:完璧主義をあきらめる

完了は完璧よりも優れている
— シリコンバレーで人気のあるアイデア

これがどれだけ、そしてどれだけ長く、私が共有するのを妨げたのかはわかりません。このWebサイトで他のユーザーと共有できるように、私は常に聖杯を探していました。共有するものがあれば、自分の考えにとらわれずに共有すべきだと気付くのに時間がかかりました。

どちらが良いのでしょうか。

今後数年間で1つのインジケータ、エキスパートアドバイザー、ライブラリ、コードを作成するのか、それとも多作で1年に何百もの不完全な結果を出すのか。

自分にとって完璧なコードではなく、仲間の開発者や顧客のために十分なコードを書いてください。改善が必要なコードを改善する時間と機会は常にあります。そうでなくても、コードをより早く配信することで時間を節約できます。

これは、プログラマーが日常考えることができるほとんどすべてに当てはまることがわかります。

  • モバイルアプリは更新されます 
  • コンピュータや携帯のオペレーティングシステムとソフトウェアは更新されます
  • MQL5、Pythonなどのプログラミング言語でさえ、日々改善されています 

プログラミング言語とフレームワークでさえ更新されているのなら、時間の経過とともに改善することは悪いことではないことがおそらくお分かりでしょう。

MQL5.comでは、これはほぼすべての場所に当てはまります。マーケットでプログラムを更新することを考えてみてください。

バージョンの更新

フォーラムでは、フォーラムの投稿を変更したり、返信を削除したり、単に更新したり、自分のコメントを更新したりすることができます(笑)。

04: スマートなコードを書くのをやめる

デバッグは、そもそもコードを書くよりも2倍難しいです。したがって、コードをできるだけ賢明に記述した場合、定義上、あなたはコードをデバッグするのに十分なほど賢明でありません。」
— ブライアン・カーニハン

ドキュメントから学んだベストプラクティスに従ったコードは、すでに賢い仲間です。 

読みやすく、理解しやすい、優れた、クリーンでシンプルなコードを記述します。3か月後の自分を含め、そのスマートなコードの恩恵を受ける人は誰もいません。多くの初心者がいわゆるスマートなコードと作業することは非常に困難です(フリーランスの開発者ならわかります)。EA修正ジョブからのコード、またはよくわからない理由で非常に複雑なコードベースからのコードに出会ったことがないですか。誤解しないでください。私は誰かをディすっているわけでも、複雑なタスクのための簡単なコードを奨励しているわけでもありません。 私が言っているのは、複雑なコードでも簡単に作業できるようにする方法があるということだけです(それが創造性のすべてだと思います)。クリーンなコードが役立ちます。

クリーンなコードを作成するためのヒントを次に示します。

  • スタイルを設定する 
  • 一貫性を持たせる
  • コメントする
  • DRYに保つ 

スタイルを設定する:

例として、タイプごとにポイントを数える関数を使用します。

int CountPosByType(ENUM_POSITION_TYPE type){
 int counter = 0; 
  for (int i=PositionsTotal(); i>=0; i--)
     if (m_position.SelectByIndex(i))
     if (m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
      { counter++; }
  return counter;
}

この関数は非常に理解しやすいですが、上記のクリーンなコードのヒントに従わないため、最初にスタイルを設定します。これを行うのは簡単です。MetaEditorで櫛のように見える青いボタンをクリックするだけです。

mql5コードスタイラー

スタイルを設定した後のコードは次のようになります。

int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

スタイリングを適用するだけで、コードが読みにくいものから読みやすいものに変わりました。コードは変更されていません。クリーンなコードを書くための最初のステップを踏む必要があるからです。つまり、読めるようにすることです。一度読めるになると変更できるからです。それだけです。

一貫性を持たせる:

異なる関数レベルでほぼ同じ作業を行うために、どれだけ多くの変数を作成することになったのかわかりません。グローバル変数を作成してみませんか。また、操作しやすく、覚えやすく、関数の内容を明確に説明する一貫性のある関数名を使用して、6か月後でも覚えられるようにすることをお勧めします。これにより、以前のEAにすでに存在する関数を最初から作成する必要がなくなり、以前の作品からコピーするだけで、作業の配信時間が以前の三分の一に短縮されます。

関数の名前については、次のようにします。

int CountPositionsByType(ENUM_POSITION_TYPE type)

コードに一貫性があるため、検索に移動して[ファイル内で検索]オプションを設定できます。       findinFiles


そこから、すべてのEAとインジケーター内で関数を検索できるので、作業が簡素化されます。次に関数を作成するときは、関数をコピーして、他のEAで再利用できます。

一貫性のあるコードを作成する最良の方法は、OOP(オブジェクト指向プログラミング)を使用することです。

一貫性のあるコードは使いやすく、デバッグは1か所で実行できます。

コメントする:

コードにコメントを書くなど、初心者が「小さなこと」だと思うことでさえ、生産性に大きな違いをもたらす可能性があります。コメントはコードを読みやすくするだけでなく、たとえば変数が何であるかのヒントになります。

説明するコメントを使用して、カウンターを再度定義しましょう。

int counter = 0; //Variable to store the number of positions

次回カウンターにアクセスしたいときは、次のようになります。

mql5コードのインテリセンス

MetaEditorでコードにコメントを付けることの素晴らしい点は、コメントが変数またはコードの一部が何であるかを思い出させるものとして機能することです。これは、変数が多すぎて何であるかを簡単に忘れてしまうような場合に非常に役立ちます。

DRYに保つ:

OOPは、コードをDRY(Don't Repeat Yourself)に保つのに非常に役立ちます。また、ほぼ同じ作業を実行できるさまざまな関数があることに注意してください。たとえば、ポジションをタイプ別に数える関数がすでにある場合は、ポジションがそのタイプで存在するかどうかを確認する関数は必要ありません。

05: 可能な限り短いコードを書くのをあきらめる

「最初に読みやすさ、次に他のすべて。」

可能な限り少ない行または1行で最も少ない文字を使用することが優れたコードを記述することだと開発者が考えていることがわかります。これも賢明ではありません。

書かれたコードは数百回とまではいかなくても数十回読まれるので、長さに関係なく、読めるコードを書くように努めてください。

これは開発者が時々怠惰である(自分がそうでした)ことに関連付けることができます。フリーランスか何らかの仕事を成し遂げるためだけに何かを実装するのだと感じることがあります。

EAで使いやすい入力を提供することを検討してください。すべての例外を処理し、一部の入力がゼロに設定されていてEAが正しく機能しない可能性がある場合にユーザーに警告するなど、ユーザーに問題を警告するコードを記述します。

私がお伝えしたいことはこれです。

   システム内のエラーコード、取引リターンコード、コンパイルエラー、例外は、自分ではなくユーザーが知るためのものです。したがって、アラートやチャートへのコメントなどを提供するコードを作成することを検討してください。 ただし、ユーザーが自分が何をすべきか、そして物事を正しくするためにどのような行動を取る必要があるかだけを見ることができるようにしてください。

すべて最初から実装するのは退屈だと思いますが、それを見つけるためのより良い方法は常にあります。インクルードファイルのどこかに保存して、インクルードしたりコピー&ペーストで使用したりできます。方法は見つかります。


終わりに

良い習慣の良いところは、従って開発するのが難しいが、一度開発されると、キャリアの最後まであなたに従うということです。

 ご精読ありがとうございました。


MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/9643

DoEasyライブラリのグラフィックス(第80部): 「幾何学的アニメーションフレーム」オブジェクトクラス DoEasyライブラリのグラフィックス(第80部): 「幾何学的アニメーションフレーム」オブジェクトクラス
本稿では、前の記事のクラスのコードを最適化し、指定された数の頂点を持つ正多角形を描画するための幾何学的アニメーションフレームオブジェクトクラスを作成します。
DoEasyライブラリのグラフィックス(第79部): 「アニメーションフレーム」オブジェクトクラスとその子孫オブジェクト DoEasyライブラリのグラフィックス(第79部): 「アニメーションフレーム」オブジェクトクラスとその子孫オブジェクト
本稿では、単一のアニメーションフレームとその子孫のクラスを開発します。このクラスでは、形状の下の背景を維持および復元しながら、形状を描画できるようにします。
より優れたプログラマー(第02部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと より優れたプログラマー(第02部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと
この記事は、プログラミングのキャリアを向上させたい人にとって必読です。本連載は、どんなに経験が豊富な読者でも最高のプログラマーになれることを目的としています。議論されたアイデアは、MQL5プログラミングの初心者だけでなくプロにも役立ちます。
DoEasyライブラリのグラフィックス(第78部): ライブラリのアニメーションの原則イメージスライス DoEasyライブラリのグラフィックス(第78部): ライブラリのアニメーションの原則イメージスライス
この記事では、ライブラリの一部で使用されるアニメーションの原則を定義します。また、画像の一部をコピーして指定したフォームオブジェクトの場所に貼り付け、画像が重ねられるフォームの背景の一部を保存して復元するクラスを開発します。