![더 잘하는 프로그래머(파트 01): 성공적인 MQL5 프로그래머가 되기 위해서는 다음의 5가지를 하지 말아야 합니다.](https://c.mql5.com/i/articles/overlay.png)
더 잘하는 프로그래머(파트 01): 성공적인 MQL5 프로그래머가 되기 위해서는 다음의 5가지를 하지 말아야 합니다.
소개
— 올리버 웬델 홈즈
우리가 더 나은 프로그래머가 되려면 24/7 내내 코드를 공부해야 할 뿐만 아니라 모범 사례에 대해서도 공부해야 할 필요가 있습니다, 코딩을 배워볼 생각이 아예 없는 경우라면 그럴 필요가 없겠지만 말입니다. 성공적인 코딩 경력이 필요한 모든 사람이라면 코딩을 어떻게 하는 것인지를 배우는 것과 적용할 모범 사례를 공부하는 것은 매우 중요합니다. 어떻게 하는 것인지 그리고 왜 그렇게 해야 하는지 그 방법과 이유를 알게 됨으로써 우리는 우리가 하고 있는 것에 대해 더욱 알게 됩니다. - 이는 기억력을 높이고 일반적으로 코드를 개선하는 데 도움이 됩니다.
만약 이 글에 있는 모든 내용을 주의 깊게 읽고 적용한다면 아래의 방법은 귀하의 프로그래밍 방식을 변경할 수 있는 입증된 방법이며 그것은 하룻밤 사이에 가능 합니다.
01: 복사 붙여 넣기 습관을 중지하십시오
"가장 고귀한 기쁨은 이해하는 기쁨이다."
— 레오나르도 다 빈치Leonardo Da Vinci
이것은 초보자들이 하는 가장 일반적인 습관이며 때로는 숙련된 프로그래머도 그렇게 하기는 합니다. 2019년에 처음 프로그래밍을 시작했을 때 나는 대부분의 시간을 포럼에 있었고 "작동하는 코드"를 찾고 있었습니다. 어떤 특정 이슈에 대해 검색할 때마다 누군가 설명한 내용에는 그다지 주의를 기울이지 않았습니다; 내가 찾던 것은 누군가가 "감사합니다 이제 작동합니다"라고 했거나 혹은 도움이 되었다고 한 글(특히 포럼에서 질문을 한 사람이 도움이 되었다고 쓴 글)과 같은 글들이었습니다...... 작동하는 코드가 있을 경우에는 내가 어떻게 글을 읽었을지는 다 예상 가능 하실겁니다!!!
지금은 창피하기도 하지만 한 번은 표준 라이브러리 차트가 작동하지 않는다고 한적도 있었다는 것을 깨달었을 때도 있었습니다.
이제 나는 그때 작동하지 않은 것이 무엇인지 압니다 - 제가 제대로 하지 않은 것입니다. 때로는 찾은 코드가 어디에서 복사한 것인지조차 기억하지 못했습니다 내 요점은 다음과 같습니다:
당신이 작업하고 있는 것이 무엇인지 이해를 하며 하고 있는 것인지를 확실히 하십시오. 작업을 완료하기 위해 혹은 빠르게 수정하기 위해 그저 포럼에서 맹목적으로 코드를 복사하여 붙여넣기 하지 마십시오.
대부분의 경우 경험 많은 개발자가 포럼에서 사람들에게 답변하는 방식은 이러한 습관을 가진 사람들이 따라가기 어렵습니다. 왜냐하면 웹사이트의 자동 기능은 특정 문제에 대한 관련 링크를 제공하기도 하며 경험 많은 개발자들은 대부분은 특정 주제에 대한 MQL5 문서의 링크만 제공하는 방식으로 답변하기 때문입니다. 그 이유는 대부분의 문제가 기초와 기본을 이해하지 못해서 발생하는 것이기 때문입니다.
항상: 해결책을 검색하지 말고 이해를 하기 위한 검색을 하십시오!
일단 기본을 이해하면 코딩이 자연스럽게 되고 자동으로 됩니다.
복사 붙여넣기 습관은 평판을 손상시킬 뿐만 아니라 수정할 수록 더 많은 문제를 야기합니다.
02: 단편적으로 해결책만 찾는 것을 포기하십시오
코드의 문제를 수정하기 전에 문제가 발생한 이유를 파악하도록 해야 합니다. 이렇게 하면 무엇을 왜 코딩하는지 완전히 알지 못해서 귀하의 의해 발생한 문제를 해결하기 위해서 포럼에서 코드를 기다리기 보다는 포럼에 더 나은 질문을 하게 될 것입니다. 예를 들어 위 이미지의 저와 같은 것입니다. 먼저 표준 라이브러리 차트를 완전히 알고 이해하지 못한 채 차트 템플릿을 변경하기 위해 다른 곳에 코드를 복사했습니다 - 그러고는 라이브러리가 작동하지 않는다는 말을 했습니다.
문제나 오류를 발견하면 라이브러리를 다 이해하고 있는 것인지와 작동하지 않는 코드에 대해 완전히 알고 있는지 확인하십시오. MQL5에서 이를 수행하는 몇 가지 방법이 있으며 그 중 두 가지 주요 방법은 다음과 같습니다.
- MQL5 documentation
- 포럼
운 좋게도 우리는 전체 문서를 가지고 있으며 검색 엔진에서 온라인 상태가 될 필요가 없습니다. 좋은 프로그래머는 이미 알고 있지만 게으른 사람들을 위해 여기에 매우 빠르게 액세스하는 위치와 방법이 있습니다: MetaEditor를 열고 도움말 섹션으로 이동하십시오 그리고 드롭다운 옵션에서 MQl5 참고자료를 클릭합니다.
자신의 코드에서 찾지 못한 것을 배우고 알 수 있는 가장 좋은 방법은 다른 개발자들과 어떤 문제가 있는지에 관해 공유하는 것입니다. 하지만 저와 같은 실수를 하지 마세요. 복사하지 마세요!
"진정한 이해와 마스터의 경지로 이어지는 것은 장인 정신의 길입니다."
초짜들은 내가 초짜 사이클이라 부르는 곳에 있습니다.
03: 완전함을 포기하십시오
"완전한 것보다는 완성하는 것이 더 낮다."
— 실리콘 밸리에서 통용되는 말입니다
내가 얼마나 많이 그리고 얼마나 오랫동안 공유를 하지 않았는지 말하기 쉽지 않습니다. 나는 항상 성배를 찾고 있고 이 웹사이트의 다른 사용자와 공유할 수 있습니다. 나에게 공유할 것이 있으면 공유를 해야지 그저 나 혼자만의 생각안에 멈춰서는 안된다는 것을 깨닫는 데 시간이 걸렸습니다.
무엇이 더 좋은 것일까요?
향후 몇 년 안에 하나의 지표, Expert Advisor, 라이브러리 또는 코드 조각을 만들 것인지 아니면 연간 다산하고 수백 개의 불완전한 결과를 만들 것인지?
자신을 위한 완벽한 코드가 아니라 동료 개발자나 고객을 대상으로 충분히 좋은 코드를 작성하십시오. 개선이 필요한 할 코드를 개선할 시간과 기회는 항상 있습니다; 코드를 더 빨리 만들어서 시간을 절약할 수 있습니다.
이것은 프로그래머가 생각할 수 있는 거의 모든 것에 매일 적용된다는 것을 아실 겁니다.
- 모바일 앱이 업데이트됩니다.
- 컴퓨터와 휴대폰 운영 체제와 소프트웨어가 업데이트됩니다.
- MQL5, Python 등과 같은 프로그래밍 언어도 나날이 향상됩니다.
우리의 프로그래밍 언어와 프레임워크도 업데이트되고 있으므로 이에 따라 개선해 나아가는 것이 나쁜 것이 아니라는 것을 알고 계실 것입니다.
MQL5.com에서 이것은 거의 모든 곳에 적용됩니다. 마켓에서 프로그램을 업데이트하는 것도 마찬가지입니다.
포럼에서 포럼 게시물을 변경하거나 답장이나 자신의 의견을 삭제하거나 업데이트할 수 있습니다. 얼마나 멋진 일입니까 !! , 하하하
04: 스마트 코드 작성 피하기
"디버깅 하는 것은 처음에 코드를 작성하는 것보다 두 배나 어렵습니다. 따라서 코드를 아무리 영리하게 작성하더라도 당신은 그것을 디버그할 만큼 똑똑하지 않습니다.."
— Brian Kernighan
문서를 통해 알게 된 모범 사례를 따르는 코드는 이미 스마트 한 것입니다 !!
읽고 이해하기 쉬운 깨끗하며 간단한 코드를 작성하십시오. 3개월 후 당신을 포함해 그 누구도 그러한 스마트 코드의 혜택을 받지 못할 것입니다. 많은 초보들이 요구하는 소위 말하는 스마트 코드로 작업을 하는 것은 매우 어렵습니다.(프리랜스 개발자들은 알 겁니다). EA 수정 작업이나 코드베이스에서 당신이 이해하기 어려운 매우 복잡한 코드를 본적이 있나요? 오해하지 마시기 바랍니다 누군가를 비방하는 것도 아니고 복잡한 작업에 대해 쉬운 코드를 권장하지도 않습니다; 내가 말하고자 하는 것은 복잡한 코드도 쉽게 작업할 수 있는 방법이 있다는 것입니다(창의력이란 바로 이런 것입니다). 명확한 코드는 도움이 됩니다.
다음은 명확한 코드를 작성하기 위한 몇 가지 팁입니다.
- 스타일을 지정합니다
- 일관성 있도록 만듭니다
- 코멘트를 작성합니다
- 간결하게 합니다
스타일을 따릅니다 :
일례로 타입별로 포지션을 카운트하는 함수를 사용해 보겠습니다
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; }
이 함수는 꽤 이해하기 쉽지만 위에서 말한 깔끔한 코드를 작성하는 팁을 따르지 않았으므로 먼저 스타일을 지정하도록 하겠습니다. 이 작업은 간단합니다 - 메타에디터에서 헤어빗처럼 생긴 파란색 버튼을 클릭하기만 하면 됩니다
스타일을 지정한 후 코드는 다음과 같아집니다:
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에 이미 있는 기능과 작업을 복사할 수 있기 때문에 작업 시간이 이전보다 3배 빨라집니다.
함수 이름과 관련해서는 다음과 같이 해 보겠습니다:
int CountPositionsByType(ENUM_POSITION_TYPE type)
우리는 일관성 있는 코드를 가지고 있기 때문에 검색으로 이동하여 파일에서 찾기 옵션을 설정할 수 있습니다.
거기에서 모든 EA 및 지표에서 함수를 검색할 수 있으며 이는 작업을 쉽게 합니다. 이후 함수를 생성하고 싶을 때 이를 복사하여 다른 EA에서 다시 사용할 수 있습니다.
일관성 있는 코드를 작성하는 가장 좋은 방법은OOP(객체 지향 프로그래밍)을 사용하는 것입니다.
일관성 있는 코드는 사용하기 쉽지만 디버깅은 한 곳에서만 수행해야 합니다.
주석을 달으세요:
초보들은 코드에 주석을 작성하는 것을 중요하게 생각하지 않습니다. 그러나 주석은 생산성에 큰 차이를 가져 옵니다. 주석은 코드를 해석 할 수 있게 만들 뿐만 아니라 예를 들어 변수가 무엇인지에 대해 잊어 버리지 않게도 합니다.
이제 카운터가 무엇인지 설명하는 Comment를 사용하여 카운터를 다시 정의해 보기로 하겠습니다.
int counter =0;//위치의 개수를 저장하는 변수
다음에 카운터에 액세스하려면 다음과 같습니다:
MetaEditor에서 코드에 주석을 달 때 가장 큰 장점은 주석을 통해 변수나 코드의 특정 부분에 대해 알려주는 역할을 한다는 것입니다. 이것은 변수가 너무 많아서 각각의 변수가 무엇에 대한 것인지 쉽게 잊어버릴 때 매우 유용합니다.
드라이 하게 유지하세요:
OOP는 코드를 드라이 하게 유지하는 데 많은 도움이 될 수 있습니다.(반복하지 마세요) 또한 비슷한 작업을 수행할 수 있는 여러개의 함수를 생성하는 것을 피하세요 예를 들어 유형별 포지션의 개수 함수가 있을 경우 유형별로 존재하는 포지션 함수를 만들 필요가 없습니다
05: 가능한 한 짧은 코드를 작성하는 노력을 포기하십시오
"가독성이 무엇보다 먼저입니다."
이제 개발자가 가능한 한 줄 또는 한 줄에 가장 적은 문자를 사용하는 경우 좋은 코드를 작성하고 있다고 생각하는 것을 볼 수 있습니다. 이것도 현명한 방법이 아닙니다.
작성된 코드는 수백 번은 아닐지라도 수십 번은 읽게 되므로 코드의 길이를 중요시 하지 말고 읽을 수 있는 코드를 작성하도록 노력하십시오.
나는 이것이 개발자가 때때로 게으르다는 것과 관련이 있다고 봅니다(제가 그랬습니다) 우리는 프리랜스 일이나 그밖에 다른 일에서 작업을 완성하기 위해 몇 가지를 구현하려고 합니다.
EA에서 사용하기 쉬운 입력값을 제공하는 것에 대해 생각해 보십시오. 일부 입력이 0으로 설정된 경우 사용자에게 경고하는 것과 같이 이것이 잘못되면 EA가 제대로 작동하지 않는 모든 예외를 처리하고 사용자에게 잘못된 부분을 경고하는 코드를 작성하십시오.
내가 여러분께 말씀드리는 것입니다,
시스템의 오류 코드, 거래 반환 코드, 컴파일 오류 및 예외는 사용자가 알아야 하는 것이 아니라 개발자가가 알아야 하는 것입니다. 따라서 경고나 차트에 대한 설명과 같은 것들을 제공하는 코드를 작성하십시오. 그러나 사용자는 자신들이 하는 작업과 에러시 바로잡기 위해 취해야 할 조치만 볼 수 있도록 하십시오.
처음부터 이 모든 것을 따르는 것이 지루하다는 것을 압니다. 그러나 항상 더 나은 방법을 찾을 수 있습니다! 헤더 파일에 포함하거나 복사하여 붙여넣기를 위한 헤더 파일의 어딘가에 보관할 수 있습니다. 방법을 찾을 수 있을 것입니다.
결론
좋은 실례들의 좋은 점은 따르기가 어렵지만 일단 따라가면 나머지 경력 동안 당신과 함께 할 것입니다.
글을 읽어 주셔서 감사합니다!
MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/9643
![더 나은 프로그래머(파트 02): 성공적인 MQL5 프로그래머가 되기 위해서는 다음의 5가지를 하지 말아야 합니다.](https://c.mql5.com/2/43/Article_image.png)
![MQL5. 커뮤니티 채널과 그룹 챗을 사용하세요](https://c.mql5.com/2/43/chats.png)
![더 나은 프로그래머 (Part 03): 성공적인 MQL5 프로그래머가 되고자 한다면 이 5가지를 하지 마세요](https://c.mql5.com/2/43/Article_image__1.png)
![시장에서 제품을 구매하기 위한 팁. 단계별 가이드](https://c.mql5.com/2/18/metatrader-market.png)