[아두이노] 코딩의 잘못된 습관

IOT/아두이노|2019. 5. 10. 09:00

[아두이노] 코딩의 잘못된 습관



초보분들이 대개 코딩을 할 때 잘못된 습관이 있는데 간단히 살펴보도록 하겠습니다.

1. 코딩의 잘못된 습관


초보분들은 대체적으로 코딩을 할 때 한번에 전체 코딩을 하고 전체 코딩한 것을 한번에 컴파일하여 실행 시킵니다. 그러다 에러가 발생하면 어디서 에러가 발생하는지 찾지 못하는 경우가 많습니다.


위 그림처럼 초보분들은 한번에 A코딩하고 B코딩하고 C코딩하고 이렇게 자신이 표현하고 싶은 코딩을 쭉 써내려 갑니다. 그러다가 실제 컴파일을 하게 되면 에러가 발생할 때 A에서 에러가 발생하는지 B에서 에러가 발생하는지 C에서 에러가 발생하는지 잘 모르는 경우가 종종 발생합니다. 본인이 코딩한 로직에 대해 본인이 해독하지 못하는 경우는 대부분 이런식으로 코딩하기 때문에 발생합니다.

코딩을 한번에 전체 코딩을 하려고 하는 습관 버려야 합니다. 코딩을 수집줄 이상 코딩을 하고 그 코딩을 컴파일해서 결과를 확인하는 것은 가장 마지막 단계에서 수행하는 작업입니다. 그런데 초보분들은 코딩을 시작하는 단계에서 부터 현재 코딩한 전체 단위로 한번에 컴파일하여 실행 시키려고 하고 새로운 로직을 만들어 삽입 할 때도 바로 전체 코딩한 곳에다 넣고 무조건 컴파일을 시킵니다. 그러다 보면 코딩량은 늘어나고 실행 시 에러가 발생할 가능성이 높아집니다. 에러가 발생할 때 초보분들은 쉽게 에러의 위치를 찾지 못하는 이유가 바로 이런 이유 때문입니다. 전체 코딩을 했는데 어디서 잘못되었는지 몰라서 대부분 인터넷 프로그램언어 관련 카페에 가서 소스를 전체 올려놓고 에러를 찾아주세요 라고 질문을 던지게 됩니다. 문제가 발생한 에러의 상당 부분들은 본인이 직접 코딩한 로직을 부분 단위로 나눠서 컴파일하여 체크하면 쉽게 해답을 찾을 수 있는 경우가 많은데 전체를 한번에 컴파일하고 발생한 에러를 찾을려고 하니 사소한 에러도 어렵게 느껴지게 됩니다. 이렇게 잘못된 코딩습관 때문에 프로그램언어를 처음 배우는분들이 언어를 어렵게 생각하는 주된 이유입니다.

해결책은 다음과 같습니다.

부분컴파일 하기

코딩하는 방법은 전체 코딩 할 곳에다 코딩을 하기전에 먼저 할 일은 전체 코딩 할 곳에 코딩할 바로 삽입해서 테스트 하지 말고 따로 여러분들이 해당 코딩만 컴파일을 해보고 나서 전체 소스에 삽입해야 합니다. 그래야 자신이 코딩한 소스에 대해 어디서 에러가 발생하는지 쉽게 알 수 있게 됩니다. 적상적으로 해당 명령문 코딩이 문제가 없을 때 전체 소스에 삽입하시면 전체소스는 에러가 발생을 하지 않습니다.


위 그림처럼 A, B 코딩이 전체 소스에 삽입되어 정상적으로 A, B까지 실행이 될 때 C코딩을 바로 전체 소스에 코딩해서 컴파일 하지 말고 C코딩을 먼저 컴파일 해보고 나서 정상적으로 아무 문제가 없으면 그 때 전체 소스에 삽입하셔야 합니다.

위에 A, B, C 코딩이 큰틀에서 각 코딩 부분을 컴파일도 해야 하지만 좀 더 세부적으로 명령문 단위로 컴파일을 하셔야 합니다. 구지 컴파일 까지 필요 없는 명령문들은 넘어갈 수 있지만 명령문이 정상적인 명령문인지는 새로운 코딩창에서 가상 데이터을 명령문에 대입하고 print문에 그 결과를 출력해 보면서 정상적으로 명령문이 수행되는지를 체크하시고 나서 실제 코딩하는 곳에 삽입하셔야 합니다.


이런식으로 컴파일을 해보고 나서 정상적으로 작동 했을 때 C 코딩 소스에 삽입하고 다시 C코딩을 컴파일 한 뒤에 실행 하셔서 문제가 없다면 전체 소스에 삽입하시면 됩니다. 그렇게 코딩을 하셔야 소스에 에러가 발생해도 어떤 에러인지 쉽게 찾을 수 있고 그 문제에 대한 해답을 인터넷에서 충분히 본인 스스로 답을 찾을 수 있습니다. 아니면 인터넷 프로그램 언어 관련 카페에 가셔서 질문을 하더라도 정확한 질문을 할 수 있고 필요한 답변을 얻을 수 있게 됩니다.

2. 잘못된 질문 습관


자신이 코딩한 소스에 에러가 발생하여 해결책을 찾지 못하면 대개 프로그램언어 관련 카페 게시판에 질문을 하게 됩니다. 대학 레포트 시즌이 되면 집중적으로 과제 관련 코딩 질문들이 쏟아져 나옵니다. 대부분 소스를 짜집기해서 코딩한 내용으로 코딩 로직 자체를 이해 못하거나 또는 본인이 코딩을 했어도 한번에 전체 코딩을 할 때 어디에서 에러가 발생하는지조차 알지 못하는 경우가 발생합니다. 그리고, 질문게시판에 전체소스를 가져와서 "해독해주세요. 에러를 찾아주세요."라는 질문들이 많습니다. 이런 질문은 진짜 잘못된 질문 입니다.

재밌는 것은 과거에도 그렇고 현재에도 그렇고 내년에도 그렇고 내후년에도 전체 소스를 올려놓고 에러를 찾아주세요라는 질문은 반복됩니다.

이런 잘못된 질문을 하는 경우는 둘 중 하나입니다. 짜집기 소스이거나 또는 부분 컴파일로 테스트 해보지 않고 한번에 전체 로직을 코딩한 경우입니다. 그래서, 에러가 발생해도 에러의 위치를 찾지도 못하고 그냥 막연하게 전체 소스를 올려놓고 에러를 찾아주세요라고 질문을 던지게 됩니다. 그런 질문의 대부분 에러가 발생한 곳을 살펴보면 충분히 본인 스스로 답을 찾을 수 있는 에러의 문제들인 경우가 많습니다. 한번에 전체 코딩을 하다 보면 오타가 났거나 또는 잘못된 변수 표현이나 또는 A로직에서 B로직으로 넘어가는 과정에서 잘못된 값이 넘어거나 아니면 연결이 잘못된 경우가 많습니다. 아니면 A, B, C 코딩중에 특정 코딩에 명령라인 자체가 잘못 처리 되는 경우도 있습니다. 충분히 처음 코딩할 때 부분 컴파일을 해서 테스트 해보고 전체 소스에 삽입 시켰다면 이런 문제는 아예 생기지도 않았겠지요. 그냥 한번에 코딩을 하다보니깐 자신이 짠 코딩에 임에도 소스 로직 자체를 이해 못하는 경우가 초보분들에게 발생합니다.

올바른 질문은 다음과 같습니다.

올바른 질문을 하기 위해서는

코딩을 전체 소스를 본인이 짜거나 짜집기를 했거나 긁어왔을 때 에러에 대한 질문을 하기 전에 먼저 다음과 같은 작업을 수행해 주세요.


전체 소스에서 해당 코딩만 남기고 나머지는 다 주석 처리를 해주세요. 그리고 A라는 코딩을 컴파일 합니다. 그리고 컴파일 한 결과를 print문으로 출력해주시면 됩니다. 그래서 A라는 코딩의 동작을 파악하시면 됩니다. A라는 코딩이 외부로 부터 입력값이 있으면 변수로 임의의 가상값을 선언해주고 A코딩에 넘겨줘서 컴파일을 하셔서 결과를 확인하시면 됩니다. 결과가 원하는 방향으로 안나왔다면 해당 A코딩은 문제가 있는 코딩이겠죠. 그럼 다시 A코딩에서 의심가는 명령문 라인을 제외한 나머지 명령문 라인을 주석처리 해주세요. 그리고 나서 해당 명령문 라인만 방금 했던 방식으로 컴파일을 하시면 됩니다. 아니면 전체 소스에 대해서 주석 처리가 귀찮을 때는 새로운 코딩창에다가 해당 A코딩 부분만 복사해와서 해당 코딩을 컴파일 하시면 됩니다. 이렇게 부분 컴파일로 테스트 하시면 대부분 본인 스스로가 에러의 원인을 찾을 수 있으며 에러의 해결책도 인터넷에서 조금만 검색하시면 찾을 수 있게 됩니다. 그리고, 계산과 같은 처리가 이뤄지는 곳에는 무조건 print명령을 통해서 어떤 값이 찍히는지 정상적인 값인지 꼭 체크하셔야 합니다.

그래도 못찾을 때는 해당 명령문이나 해당 부분 코딩부분을 보여주고 뭘 표현하고 싶었는지 명확하게 질문을 던지시면 됩니다. 그러면 그 질문을 본 사람들이 해당 코딩보다 더 괜찮은 알고리즘을 소개해 줄 수 있고 또는 해당 질문의 해답을 쉽게 알려 줍니다.. 질문자가 질문을 제대로 했을 때 원하는 답을 빠르게 얻을 수 있게 됩니다.

마무리


오늘 post의 목적은 "기승전-부분컴파일" 입니다. 여러분들이 뭔가를 표현하고 로직을 짤 때 한번에 그 로직 전체를 컴파일해서 결과를 보려하지 마시고 어떤 알고리즘을 짜면 그 알고리즘에 코딩되는 명령문 라인을 새로운 창에서 개별적으로 컴파일하는 습관을 가져주세요. 임의의 가상값을 해당 명령문에 대입하고 그결과를 print문으로 출력해서 체크를 하고 정상적인 원하는 결과가 나왔을 때에 메인코딩창에 명령문을 삽입해주는 습관을 가져줬으면 하네요. 그리고 코딩을 해놓고 나서 새로운 명령문들이 떠오를 때 중간에 삽입할 경우에는 바로 삽입하지 말고 해당 구간의 일부 코드를 복사 해와서 새로운 코딩과 합쳐도 에러가 발생하지 않는지 체크한 뒤에 합쳐주시기 바랍니다.

이렇게 하셔야 에러가 발생해도 대부분 본인 스스로가 그 문제에 대한 해답을 쉽게 찾을 수 있게 됩니다.


댓글()