더 나은 프로그래머(파트 02): 성공적인 MQL5 프로그래머가 되기 위해서는 다음의 5가지를 하지 말아야 합니다.
소개
저는 이 글에서 초짜라는 단어를 많이 사용합니다. 이는 MQL5 프로그래밍에 대한 경험이 적은 사람을 가리키기 위해서 입니다(나쁘게 받아 들이지 마시기 바랍니다) 그저 글을 좀더 잘 전달하기 위해서 입니다. 또한 이 글이 초보자들만을 위한 글이 아니기도 하기 때문입니다. 모두를 위한 것입니다! 이 글은 여러분의 프로그래밍 경험이 어느정도 인지에 관계없이 모든 사람을 위한 것입니다. 여러분을 초짜이게 만드는 것은 코딩 습관이나 방식...혹은 코딩을 한 기간이 아니기 때문입니다.
첫 번째 글을 읽어보지 않은 분들은 여기에서 읽어 보시기 바랍니다, 저는 이글에서 계속해서 초짜를 전문가로 만드는 임무를 이어가겠습니다.
01: 자신이 다른 사람 보다 낫다는 생각을 하지 마십시오
여러분은 코딩을 해봤고 프리랜서, 코드베이스 또는 기타 분야에서 당신 자신과 고객을 위한 몇 가지 훌륭한 EA와 지표를 만들 수 있었고 이제 꽤 잘합니다. 이제 자신이 성장하고 있음을 알고 더 많이 개선하기 위해 더 큰 도전을 하고 문제를 해결하고 오만하지 않으면서 자신감을 키워 간다면 좋은 것입니다. 명심하십시오:
"거만한 사람은 자신이 완벽하다고 생각합니다. 이는 무시의 주요 해악입니다. 그것은 사람의 삶에 있어 중요한 더 나은 사람이 되는 것을 방해합니다."
— 레오 톨스토이자신이 매우 똑똑하다고 느끼고는 다른 사람의 코드를 다 이해하지 못한 채 비판하거나 포럼에 방금 질문을 한 사람에게 당신이 얼마나 터프한지 보여주기 위해 공격적인 방식으로 서두르며 그들의 질문에 응답하는 것은 너무 쉽습니다. 나는 사람들이 포럼에서 질문을 하고 코드를 게시하고 무엇이 작동하지 않았는지 쓴 글을 많이 보았습니다. 그런 다음 갑자기 초짜가 튀어나와 해결책을 제시하거나 해결책도 제시하지 않고 질문자가 끔찍하도록 잘못되었다고 지적합니다(이 경우의 코드)는 질문자가 제공한 코드보다 덜 정확합니다. 오 마이 갓!
질문자가 잘못한 부분을 끔찍하게 비난을 하면서도 올바른 형식도 아닌 코드조차도 되지 않는 것을 제공하지 않으면서 대체 왜 어느 부분이 어떤 이유로 잘못되었는지 설명하고 무엇이 고쳐져야 하는지에 대해 간결하고 명확하게 설명하지 않는건가요?
포럼에서 글을 올리며 어떤 토의 주제를 시작하는 것은 쉬운 일이 아닙니다. 포럼에서 토의 주제를 올리는 사람은 누구나 자신이 어떤 면에서 잘못되었다는 것을 이미 알고 있는 상태로 작업 내용이 생각했던 대로 작동하지 않은 것도 잫못된 무언가 때문이었던 것입니다. 글을 올린 사람은 초보이고 며칠은 아니더라도 몇 시간 동안 문제와 씨름하고 있었을 가능성이 높습니다.(저는 그것이 얼마나 짜증 나는 일인지 잘 압니다) .
설명되지 않거나 불분명한 코드를 없에 버려도 장기적으로는 문제가 해결되지 않습니다. 이는 수술이 필요한 사람에게 진통제를 주는 것이나 마찬가지입니다. 이렇게 함으로써 여러분은 초보자들에게 설명했던 최악의 습관 -이 시리즈의 첫 번째 글 -복사하여 붙여넣기 습관을 가르치게 되는 것입니다. 그들은 "여기에서는 이 방법으로 작동합니다. 그런데 문제가 있습니다. 포럼에 코드를 게시하면 잘못된 부분을 대체할 코드를 구할 수 있겠지요 .... 안타깝습니다!"
항상 명확하고 상세하며 초보자에게 친숙한 방식으로 솔루션을 설명해야 합니다. 또한 앞으로도 같은 문제에 부딪힐 초짜들이 많다는 것을 명심하십시오. 아마도 그들도 같은 문제에 대한 해결책이 필요할 것입니다.
이 예와는 별개로 우리가 다른 사람보다 우월하다고 생각하게 되면 포럼에서 오답을 달거나 코드베이스에서 잘못된 리뷰를 쓰게 되기도 합니다. 당신의 코드가 당신이 생각하는 방식이나 당신이 좋아하고 친숙한 방식으로 쓰여져서 당신에게는 복잡하지 않다고 해서 당신이 다른 저자들보다 낫다고 생각하며 어떻게 그리고 왜 다른 사람의 코드가 쓰여진 것인지를 이해하기를 거부하는 경향이 생깁니다. 그리고 이는 결국 무지로 이어집니다.
02: 고정된 사고방식을 피하십시오
특정 분야에서 성공할 수 있는 방법이 없다고 생각하지 마세요.
"광기는 같은 일을 계속 반복하면서 다른 결과를 기대하는 것입니다."
—알버트 아인슈타인
같은 유형의 Expert Advisors, 지표, 스크립트 등을 만드는 데 집착하지 마십시오. 이는 당신의 창의성을 파괴하고 같은 문제에 계속 갇히게 됩니다. 특정 프로그래밍 영역이 너무 복잡하거나 어렵다는 이유만으로 그 영역을 잘 하기 위해 태어난 것이 아니라고 생각하는 것은 스스로를 제한하는 것입니다. 당신의 두뇌가 유연하다는 것을 잊지 마세요 두뇌는 새로운 자극에 적응하고 변화하도록 설계되어 있습니다. 더 많이 도전할수록 그 특정 주제에서 더 잘 알게 될 것입니다. 당신은 다음의 것들을 잘할 수 있습니다:
- 수학
- 복잡한 Expert Advisors와 지표
- 머신러닝과 스스로 알고리즘을 적용하는 기술
그리고 이외 당신이 생각 할 수 있는 모든것도 포함됩니다. 하지만 그렇게 하려면 충분한 노력을 기울여야 합니다.
물론 완전한 EA나 지표는 없습니다(나는 그것을 직접 본 적이 없습니다) 그러나 접근 방식을 변경하면서 시스템을 최상의 상태로 개선하는 것을 중단해서는 안 됩니다.
저는 MQL5 프로그래밍 초기에 CodeBase에서 단순 이동 평균과 같은 것을 다운로드했을 때 상당히 질리곤 했습니다. 코드가 1000줄 이상이었고 그것이 내가 코드에서 가장 먼저 본 것이었기 때문입니다. 저는 그것이 너무 복잡할 것이라 생각했습니다. 나는 초짜들도 같은식으로 봐라 볼 것이라고 생각합니다.
저는 이제 조금은 경험 있는 개발자가 되었습니다. 지금은 힘들겠지만 괜찮다는 말을 하고 싶습니다. 인생의 모든 것이 처음에는 그렇겠지만 결국은 시간과 노력만이 말해줄 것입니다.
03: 언젠가 사용할 코드를 미리 작성하지 마십시오
"지식이 있는 자는 예측하지 않는다. 예측하는 자는 지식이 없다."
— Lao Tzu
적은 코드는 항상 다음을 의미합니다
- 더 적은 버그
- 더 적은 시간으로 해독할 가능성
- 컴파일 하기 쉬움
- 빠른 리뷰
- 빠른 완성
- 쉬운 유지 보수
- 디버그의 용이성
MQL5 프로그래밍에서 적어도 한 번쯤은 다른 사람의 코드에서 이와 같은 것을 본 적이 있기를 바랍니다.
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줄 이상의 코드를 본 적이 있습니다.
메타에디터는 사용하지 않는 변수에 대해 함수 수준에서 감지하고 경고함으로써 귀하가 원하는 경우에는 변수를 유지할 수 있고 필요 없을 경우에는 제거할 수 있습니다.
그러나 나머지 코드에 대해서는 이러한 원치 않는 코드가 있는지 확인하려면은 직접 다 확인해야 합니다.
사용하지 않는 경우 - 필요하지 않은 경우 - 삭제하십시오.
사용하지 않는 코드는 혼란을 일으키고 프로그램 코드 중간에서 필요한 코드로 가고자 할때 스크롤하는 시간을 증가시킵니다.
04: 항상 옳을 필요는 없습니다.
"실수를 저질렀는데도 그것을 고치지 않는 사람은 또 다른 실수를 저지르고 있는 것이다."
— 공자
초짜들이 포럼으로 바로 달려 가는 주된 이유는 그들이 올린 코드를 삭제하거나 그들이 무엇을, 왜 그런 식으로 코딩하고 무엇을 원했는지에 대해 명확하지 않은 설명을 적게 제공하면서 더 많은 문제에 자신을 노출시키는 것을 두려워하기 때문입니다. 이것은 현명하지 않습니다, 친애하는 초짜님들!
코딩 경력은 문제와 끝없는 도전의 연속입니다. 그 많은 문제를 해결하지 않고는 훌륭한 코더가 되는 방법은 없습니다. 포럼에 문제를 게시하지 말아야 한다는 의미는 아닙니다(오해하지 마시기 바랍니다). 그러나 당신이 그것을 스스로 해결하려고 시도했는지 확인하십시오. 그래서 글을 올리기 전에 귀하가 시도한 것을 설명하는 것이 좋은 연습입니다. 그 이유는 스스로 집중할수 있고 다른 방법에 도전함으로써 퍼즐을 풀 수 있을 뿐만 아니라 처음에는 몰랐던 것을 발견하고 더 많이 배울 수 있기 때문입니다.
일단 실수가 수정되면 그것을 이해하고 다음에는 같은 문제를 피하는 방법을 확인하십시오.
05: 하룻밤 사이에 성공한다는 생각을 버리십시오
"곰곰히 생각해 보니 하룻밤 사이에 성공하는 데는 오랜 시간이 걸렸다."
— 스티브 잡스
좋습니다 나는 당신이 지금 잠시 동안 코딩을 하고 있다는 것을 압니다 또한 당신이 어떤 진전도 하지 않고 있는 것처럼 스스로 느껴지고 가고 있는 방향이 어디인지도 잘 모르겠다고 느낀다는 것을 이해합니다. 맞나요?
이러한 느낌은 초짜들이 많이 느끼는 감정입니다. 대부분의 사람들이 결과가 즉시 나타날 거라고 예상했지만 세상은 그런 식으로 작동하지 않기 때문입니다.
편히 앉아 긴장을 풀고 과정을 즐기십시오. 당신은 실제로 발전하고 있습니다; 당신의 의문은 긴 여행의 일부일 뿐이지 그것이 당신을 멈추게 해서는 안됩니다. 나는 당신이 배우는 동안 재미를 느끼며 배울수 있도록 당신이 좋아하는 프로젝트를 작업하는 것을 권장합니다. 그렇지만 거기에 갇히지 말아야 합니다. 내가 두 번째 요점에서 설명한 것처럼 새로운 아이디어와 가능성에 열려 있어야 합니다.
작업을 시작하면 그 경과는 최종 제품으로 자동으로 나게 마련입니다.
- 코드베이스에서 눈에 띄는 소스 코드를 최대한 많이 읽으십시오.
- 기사에서 가능한 한 많은 글을 읽으십시오.
- 포럼에서 다른 사람들을 돕는 것에 더 많은 시간을 할애하십시오.
- 당신에게 가장 잘 맞는 것을 찾기 위해 많은 것을 실험해보세요.
명심하세요
성공은 가끔 하는 일에서 오는 것이 아닙니다. 꾸준히 하는 것에서 오는 것입니다.
결론
솔직히 말해서 저는 MQL5 프로그래밍이나 웹 개발 경력에서 완벽하지도 않고 그렇게 훌륭하지도 않습니다. 저는 여전히 이 코딩에는 학생이나 마찬가지이고 배우는 데에는 끝이 없습니다. 나는 항상 개선하기 위해 노력하고 더 나아지기 위해 매일같이 노력합니다. 제가 이글을 당신과 공유 할 용기가 있는 이유(배우는 입장일때 알려 드리고자)는 나와 같은 열정을 가진 사람들을 돕기 위해서입니다. 더 나은 프로그래머가 되십시오.
이 여정을 같이 합시다!
MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/9711