優(yōu)秀程序員(第 01 部分):您必須停止做這 5 件事才能成為一名成功的交易程序員
概述
"人的思想,一旦被一個(gè)新的念頭所拉伸,就永遠(yuǎn)不會(huì)再恢復(fù)到原來的維度。"
— Oliver Wendell Holmes(奧利弗·溫德爾·福爾摩斯)
為了我們能夠成為更優(yōu)秀的程序員,我們不僅需要?24/7?學(xué)習(xí)編程,而且我們還需要了解如何最佳實(shí)踐,甚至根本不需要學(xué)習(xí)如何編碼。 學(xué)習(xí)如何編碼及其應(yīng)用的最佳實(shí)踐對(duì)于夢(mèng)想在編程事業(yè)里有所建樹的每個(gè)人都非常重要。 通過了解方法和原因,我們會(huì)意識(shí)到我們?cè)谧鍪裁?— 這會(huì)提高我們的記憶能力,并幫助我們改進(jìn)我們的代碼。
以下途徑提供了行之有效的方法,如果您潛心應(yīng)用本文中所閱讀的所有內(nèi)容,它們幾乎可以在一夜之間做到改變您的編程經(jīng)驗(yàn)。
01: 杜絕盲目復(fù)制粘貼的習(xí)慣
"最高貴的快樂是理解的快樂。"?
— Leonardo Da Vinci(列奧納多·達(dá)·芬奇)
這是萌新最大的習(xí)慣,甚至有時(shí)經(jīng)驗(yàn)豐富的程序員也會(huì)這樣做。 我記得當(dāng)我在 2019 年初次開始編程時(shí),我大部分時(shí)間都在論壇上尋找“能用的代碼”。 每當(dāng)我針對(duì)某個(gè)問題而進(jìn)行搜索時(shí),我都不太注重解釋為何如此;我只尋找有人在評(píng)論區(qū)回復(fù)“謝謝你,它現(xiàn)在能用”,或任何其他人們認(rèn)為有幫助的評(píng)論(尤其是在論壇中最先提出問題的人)… 一旦我發(fā)現(xiàn)那段代碼能用,就不需要再告訴我其中做了什么?。?!
而當(dāng)我意識(shí)到我曾經(jīng)聲稱標(biāo)準(zhǔn)庫圖表不能工作時(shí),現(xiàn)在很尷尬

現(xiàn)在我知道在那段時(shí)間里為何有些東西不起作用 — 在于我,因?yàn)榧幢愦a本身,都是我從不記得的地方復(fù)制來的。 我的觀點(diǎn)如下:
確保您明白自己在做什么。 不要單純?yōu)榱送瓿晒ぷ骱涂焖傩迯?fù)問題而盲目地從論壇復(fù)制并粘貼代碼
大多數(shù)情況下,對(duì)于有這種習(xí)慣的人來說,很多經(jīng)驗(yàn)豐富的開發(fā)人員在論壇上回答人們的方式難以追隨,因?yàn)樗麄冴P(guān)于某個(gè)主題的回答只是提供指向 MQL5 文檔的鏈接,更談不上針對(duì)特定問題自動(dòng)指向本網(wǎng)站內(nèi)相關(guān)鏈接的功能了。 這背后的原因是,大多數(shù)問題都是由于不了解基本原理和基礎(chǔ)知識(shí)引起的。
始終:?尋找理解而不是解決方案!
一旦您理解了基本原理,編程就會(huì)變得自然而然。
復(fù)制并粘貼習(xí)慣不僅會(huì)損害您的聲譽(yù),且比之簡(jiǎn)單修復(fù),這會(huì)給您帶來復(fù)更多的問題。
02: 摒棄繞過問題
在您打算修復(fù)代碼中的問題之前,確保您尋求了解為什么會(huì)遇到這些問題。 了解這一點(diǎn)有助于您在論壇里更好的提問,而不是在您尚未完全明白您正在編程的內(nèi)容,以及引發(fā)漏洞的原因時(shí),被動(dòng)等待他人貼出代碼來替換您的代碼。 例如,在上圖中我的所作所為:首先,我將代碼復(fù)制到某些地方,希望借此修改圖表模板,但我并不完全明白和理解標(biāo)準(zhǔn)庫圖表 — 這就是為什么我最終說該函數(shù)庫不能用。
一旦您偶然發(fā)現(xiàn)一個(gè)問題或錯(cuò)誤,請(qǐng)確保您完全了解函數(shù)庫及您所擁有的不能用的代碼。 在 MQL5 上有幾種方法可以做到這一點(diǎn),其中兩個(gè)主要方面是
MQL5 文檔
論壇
MQL5 文檔:
幸運(yùn)的是,我們手邊擁有完整文檔,無需通過搜索引擎在線查找。 專業(yè)程序員都知道這一點(diǎn),但對(duì)于萌新來說,這里是快速訪問它的位置和方法:打開?MetaEditor,然后轉(zhuǎn)到?幫助?板塊并單擊下拉選項(xiàng)?MQl5 參考就可以了。
MQL5 論壇:
這是學(xué)習(xí)的最佳場(chǎng)所,通過與其他開發(fā)人員分享您遇到的麻煩,聆聽您自己在編程過程中沒注意到的內(nèi)容。 但不要犯和我一樣的錯(cuò)誤,不要單純復(fù)制!
?“這是通往真正理解和掌握技藝的捷徑?!?/p>
處于這個(gè)階段的菜鳥我稱之為菜鳥螺旋

03: 拋棄完美主義
"完成比追求完美強(qiáng)。"
— 硅谷流行的觀點(diǎn)
我無法告訴您這在多大程度上阻止我分享素材。 我一直在尋求圣杯,從而令我可與本網(wǎng)站上的其他用戶分享。 我花了一些時(shí)間才意識(shí)到,如果我有什么東西要分享,那么我就應(yīng)分享它,而不是被我自己的想法所阻止。
哪一個(gè)更好?
在未來幾年內(nèi)制作一個(gè)指標(biāo)、智能交易系統(tǒng)、函數(shù)庫或代碼片段,亦或在一年內(nèi)制作數(shù)百個(gè)結(jié)果并不完美的東西?
對(duì)于開發(fā)人員同伴或客戶,您只需編寫足夠好的代碼即可,而不是為自己編寫完美的代碼。 您將始終有時(shí)間和機(jī)會(huì)改進(jìn)需要改進(jìn)的代碼;在其它情況下,您可以通過更快地提交代碼來節(jié)省時(shí)間。
您能看到,這一條幾乎適用于程序員每天能想到的所有事情:
我們的移動(dòng)應(yīng)用程序得到更新?
我們的電腦和手機(jī)操作系統(tǒng)以及軟件得到更新
甚至 MQL5、Python 等編程語言也日復(fù)一日地得到改進(jìn)?
看,甚至我們的編程語言和框架也在更新,那么您可能知道,隨時(shí)間推移不斷改進(jìn)并不是一件壞事。
在 MQL5.com 上,這幾乎適用于所有地方 — 您能想到的市場(chǎng)中的程序更新。

在論壇上,您可以更改論壇帖子、刪除或僅更新您的回復(fù),甚至是您的自己的評(píng)論,這太瘋狂了??! ,哈哈
04: 避免編寫炫耀智商代碼
"調(diào)試的難度是初次編寫代碼的兩倍。 因此,如果您編寫代碼時(shí)竭力炫耀智商,那么您對(duì)于調(diào)試肯定不夠明智。"?
— Brian Kernighan(布賴恩·克尼漢)
編程的最佳實(shí)踐是遵循自文檔學(xué)到的內(nèi)容,這些兄弟就已很明智了??!?
編寫良好、干凈和簡(jiǎn)單的代碼,以便易于閱讀和理解。 三個(gè)月后,包括您在內(nèi)的任何人都不會(huì)從炫耀智商的代碼中受益。 許多菜鳥(可以說大多自由職業(yè)開發(fā)人員)使用所謂的炫耀智商代碼是極其困難的。 您是否曾經(jīng)遇到過修改 EA 代碼的任務(wù),或者來自?代碼庫?的代碼,因您不太清楚其意圖,故顯得極其復(fù)雜??不要誤會(huì)我的意思,我既不貶低任何人,也不鼓勵(lì)針對(duì)復(fù)雜任務(wù)編寫簡(jiǎn)單代碼; 我要說的是,有一種方式可以確保即便是復(fù)雜代碼也可輕松使用(我認(rèn)為這就是創(chuàng)造力的全部意義所在)。?干凈的代碼可以提供幫助。
以下是編寫干凈代碼的一些技巧:
樣式化?
保持一致
注釋
保持簡(jiǎn)潔不摻水?
樣式化:
我用一個(gè)按其類型計(jì)算倉位的函數(shù)作為示例
該函數(shù)很容易理解,但它沒有遵循上述干凈代碼的提示,因此,我將首先對(duì)其進(jìn)行樣式化設(shè)置。 做法很簡(jiǎn)單 — 只需單擊?MetaEditor?中看起來像發(fā)梳的藍(lán)色按鈕

這是我們?cè)O(shè)置樣式化后的代碼樣子:
看,僅僅通過應(yīng)用樣式化,我們的代碼就從難以閱讀變成了易于閱讀。 甚至這并沒有改變我們的代碼,因?yàn)槲覀儽仨氝~出編寫干凈代碼的第一步,這就是令其便于閱讀,因?yàn)橐坏┠梢宰x懂它,您就可以修改它 — Period。
保持一致:
我無法告訴您在不同的函數(shù)級(jí)別,我最終為幾乎相同的工作創(chuàng)建了多少變量,那為什么不創(chuàng)建一個(gè)全局變量呢? 我還鼓勵(lì)您采用易于使用、易于記憶、一致性的函數(shù)名稱,清晰地說明函數(shù)的全部?jī)?nèi)容,從而令您即使在 6 個(gè)月后也能回憶起它。 這將令您的工作交付時(shí)間比原來加快 3 倍,因?yàn)槟槐貜念^開始創(chuàng)建一個(gè)早在您以前的 EA 中存在的函數(shù),您只需從以前的作品中復(fù)制它。
對(duì)于函數(shù)的名稱,我們這樣做:
int CountPositionsByType(ENUM_POSITION_TYPE type)
由于我們要保持代碼一致,我們可去搜索,并設(shè)置在文件里查找? ? ???

您可從該處搜索所有 EA 和指標(biāo)中的函數(shù),這可簡(jiǎn)化操作。 下次我們想要?jiǎng)?chuàng)建函數(shù)時(shí),我們只需復(fù)制它,即可在其它 EA 中再次使用它。
編寫一致性代碼的最佳方式是運(yùn)用?OOP(面向?qū)ο缶幊蹋?/p>
一致性代碼易于使用,而調(diào)試只需在一個(gè)地方即可完成
注釋:
在您的代碼中加上注釋,即便被菜鳥稱之為小事一樁,也會(huì)對(duì)您的生產(chǎn)力產(chǎn)生巨大的影響。 它不僅可令代碼易讀,且注釋還可以提醒人們注意什么,例如,變量是關(guān)于什么的。
現(xiàn)在我們來再次定義計(jì)數(shù)器,這回用注釋來解釋它的全部?jī)?nèi)容:
int?counter =?0;?//Variable to store the number of positions
下次我們要訪問計(jì)數(shù)器時(shí),它應(yīng)是這樣的:

在 MetaEditor 中注釋代碼的好處在于,注釋可為一個(gè)變量或一段代碼提供整體內(nèi)容的提示。 當(dāng)變量太多,可能很容易忘記它們的全部?jī)?nèi)容時(shí),這樣做就非常有用。
保持簡(jiǎn)潔不摻水:
OOP?在保持代碼簡(jiǎn)潔(不要自我重復(fù))方面有很大幫助。 還要注意不同的函數(shù)卻可以完成近乎相同的工作。 例如,當(dāng)您已有一個(gè)按類型計(jì)數(shù)倉位的函數(shù)時(shí),您不會(huì)再需要一個(gè)函數(shù)來檢查按倉位類型是否存在。
05: 摒棄編寫盡可能短的代碼
"首先是可讀性,然后是其它一切。"
現(xiàn)在我們能察覺到開發(fā)人員認(rèn)為,如果他們盡可能減少代碼行數(shù)、或一行中的字符更少,他們就會(huì)編寫出更好的代碼。 這依然是不明智的。
所編寫的代碼將會(huì)被查閱數(shù)十次乃至數(shù)百次,因此無論其長(zhǎng)度如何,都應(yīng)該努力編寫可讀性的代碼。
我可以將其與開發(fā)人員偶爾犯懶聯(lián)系起來(我曾經(jīng)也是這樣),我們覺得實(shí)現(xiàn)更少的事情只是為了應(yīng)付自由職業(yè)上的工作任務(wù)或其他什么。
考慮在您的 EA 上提供易于使用的輸入。 編寫代碼來處理所有異常,并提醒用戶出了什么差錯(cuò),例如提醒用戶在某些輸入里設(shè)置了零值,在沒有正確輸入數(shù)值的情況下,EA 可能無法正常工作。
這就是我要告訴您的,
? ?系統(tǒng)中的錯(cuò)誤代碼、交易返回代碼、編譯錯(cuò)誤和異常是為了讓您知道,而并非為了嚇唬用戶。 因此,請(qǐng)考慮編寫代碼,來提供警報(bào)、圖表注釋或任何內(nèi)容;但要確保用戶只能看到他應(yīng)該做什么,以及需要采取什么行動(dòng)才能讓事情走向正軌。
我知道從頭開始實(shí)現(xiàn)它們會(huì)讓人感覺很無聊,但您總能找到更好的方法! 您可將它們保存在包含文件中的某個(gè)位置,以便包含它、或用于復(fù)制和粘貼 — 您總能找到一種恰當(dāng)?shù)姆绞健?/p>
結(jié)束語
有關(guān)良好實(shí)施的好處多多,但它們難以長(zhǎng)期貫徹,不過一旦發(fā)展起來,它們將在您的職業(yè)生涯中伴隨您。
感謝閱讀!