코딩의 잘못된 습관(아두이노)

in #kr-arduino6 years ago

코딩의 잘못된 습관(아두이노)



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

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문으로 출력해서 체크를 하고 정상적인 원하는 결과가 나왔을 때에 메인코딩창에 명령문을 삽입해주는 습관을 가져줬으면 하네요. 그리고 코딩을 해놓고 나서 새로운 명령문들이 떠오를 때 중간에 삽입할 경우에는 바로 삽입하지 말고 해당 구간의 일부 코드를 복사 해와서 새로운 코딩과 합쳐도 에러가 발생하지 않는지 체크한 뒤에 합쳐주시기 바랍니다.

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

Sort:  

pairplay 가 kr-dev 컨텐츠를 응원합니다! :)

응원에 감사합니다.

개발할때 생각해야 할 부분이군요 잘 읽었어요~

개발 하시는 분들은 코딩을 하실 줄 아는 분들이라 참고할 만한 내용은 아니고요. 처음 코딩 입문하시는 분들이 코딩하다 삽질하는 경우가 대체적으로 잘못된 코딩 습관 때문에 발생하기 때문에 조금이라도 도움드리고자 써보았어요. ^^

저는 아예 할 줄 몰라, 실수를 할 수가 없어요 ^^

이참에 아두이노나 Steem.js에 입문을 해보세요. 재미있어요.
자바스크립트가 어렵지 않으니깐 한번 입문해보셨으면 해요. 진짜 신세계를 경험하실 꺼에요.

steem.js 로 대충 어떤 일들을 할 수 있나요?

우선은 스팀 블록체인을 읽고 쓰는 두가지로 크게 분류할 수 있어요.
읽는다는 것은 나의 스티미언 활동과 다른 사람의 스티미언 활동의 기록을 전부 조회가 가능합니다.
블록체인 정보로 통계를 낼 수 있게 됩니다.
예를 들면 자신의 게시물이 있으면 그 게시물에 보팅한 사람들의 내역을 전부 가져올 수 있고요. 보상받을 스팀달러를 계산 할 수 있어요. 그리고 보팅한사람들이 어떻게 나에게 보팅했는지 보팅 스타일을 계산해 낼 수 있어요. 이사람이 그냥 나에게 보팅을 받기위해 보팅한건지 보팅 낚시를 한 건지 또는 관심을 갖고 찾아왔는지도 분석이 가능하고요.
그리고 steem.js함수로 자신에게 보팅한 사람들이 최근 쓴 게시물도 조회가 가능합니다. 그걸 자신이 보기 편한 상황판으로 만들 수 있고요.
그리고 교류하는 상대를 찾아갔는지 안찾아갔는지 나의 보팅내역도 조회가 가능하기 때문에 관심을 둔 스티미언의 누락도 막을 수 있고요.
상대의 보팅 내역을 조회해서 상대가 어느 시간대 활동하는지도 계산 할 수 있어요.
읽는 것은 통계를 내고 분석을 해서 자신이 원하는 데이터로 재가공할 수 있다고 생각하시면 돼요.

쓰는것은요 실제 스팀잇, 스팀kr, busy등의 해당 사이트에게 로그인해서 게시물을 등록하고 활동을 할 수 있잖아요. 그걸 steem.js를 통해서 쓰기 함수로 통해서 직접 글 등록을 할 수 있어요.
자동봇들있잖아요 그런식으로 자신이 매크로식으로 짜놓은 프로그램에 의해서 자동으로 등록하는 자동봇있잖아요. 대충 그런 것들을 할 수 있아요.
쓰는 것은 자동봇에 가깝다고 생각하시면 돼요.

그리고 댓글같은 것 있죠. 주사위나 그런거 어떤 멘트를 치면 자동으로 댓글이 달아지는 거요. 그걸 자동봇으로 만들 수 도 있어요.
해당 프로그램이 steem.js을 통해서 게시물에 달린 댓글 post를 따로 검색하고 검색 내용에서 특정 문구가 있으면 자동으로 그 post에 댓글이 달리도록 하는 것들요.

자동 post 경우는 외국 게시물들 중에 내용없고 사진이나 동영상을 링크 걸어놓은 post를 보셨을꺼에요. 웹클로링으로 검색해서 특정 이미지나 동영상을 찾아내고 그 내용을 post에 자동으로 글쓰게 하여 올리는 것들요. 대충, 사진말 딸랑, 동영상만 딸랑 붙은 post는 그런 post들이라고 생각하시면 돼요.

쓰는것은요 자신이 활동 안해도 자동으로 찾아온 사람 찾아가서 보팅을 할 수 있으며 자신이 원하는 시간대 자신이 직접 post 안해도 자동으로 post를 하도록 만들 수도 있고요. 자동으로 댓글을 달 수 도 있고요.
그런데 쓰는 함수들을 공부하시면 나중에 스티미언 활동이 비정상적인 활동으로 변질 될 가능성이 커요.
읽는 걸로 자신의 원하는 통계 자료를 만드는 것으 스티미언 활동에 큰 도움이 되지만 쓰는 것은 자동봇쪽으로 가버리니깐 비정상적인 스티미언 활동이 되어 버려서 공부하시면 안돼요.

Loading...

디버깅 습관에 관한 이야기이기도 하네요. 중요한 말씀을 해주셨습니다. 늘 고급진 글 써주셔서 감사합니다.

그쵸. 디버킹 습관이 무척중요한데 사실 코딩을 하면 하나의 창에서 한번에 전체 코딩을 하는는 습관이 초보분들에게 많은 것 같아요.
그리고 어떻게 전체 소스에서 각 부분별 컴파일을 할지 나누지를 잘 못하는 경우도 많고요.
이부분만 잘 이해하시고 코딩하시면 프로그램 입문 코딩이 그렇게 어렵지는 않을텐데 말이죠.

ㅋㅋ 뭐라도 설명을 해줘야.ㅋㅋ

ㅋㅋㅋㅋ이게 진정한 묻지마 보팅ㅋㅋㅋㅋㅋㅋㅋ나는 코딩에 대해 잘모른지만 카우보이님이 아ㅡ주 중요한 포스팅이라고 댓글달았기에 ㅋㅋ같은 개발자아니뮤?

형님은 초보는 아니다.ㅋㅋ

으음...아몰라ㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
어휴
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋ

멍충아 ㅋㅋㅋ 나는 초짜니까 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

왕초짠가ㅋㅋㅋㅋ컄

난 늦깍이로 코딩 공부하고 있음. ^^ 대학 때 좀 만졌는데 하는 일이 달라져서 기억이 안나 ㅋ

갑자기 쪽팔림
난 간다
휘리릭~

ㅋㅋ. 남의 글에 무슨짓ㅋㅋ

주인장님 죄송합니다
스골님 죄송함돠

ㅋㅋ. 나는 아니라는거지..
초보에게는 좋은글임.^^

골드님 지송 ㅋㅋㅋㅋ 저는 한창 아두이노 공부 중임요. 찡이 잘 몰라도 좋은 글인데 보팅이 작은건가 해서 소환했나봐요. 마음은 좋았는데 ㅋㅋㅋ

그러니 3스달 내놔ㅋㅋㅋㅋㅋ

오늘은 이제 4스달 됐나?

하하.상관은 없는데.. 아이디만 던져놔서.ㅋㅋ
무슨이유인지 궁금해서 물어본거예요.ㅋㅋ

이제 막 코딩공부를 하고 있는 초보인데.. 나중에 도움이 많이 될 글일 것 같아 리스팀 해놨습니다. 앞으로도 이런 좋은 꿀팁 많이 부탁드려요 ~~ ; )

코딩하는 스타일만 바꾸면 초보 때 코딩을 쉽게 배울 수 있게 돼요.

좋은글 감사합니다.^^
그냥 코드 돌리고 보자 하는 녀석들은 그냥 확!!.ㅋㅋㅋ

프로그램언어 카페에 가면 대개 질문게시판에 그냥 대충 해놓고 해석해달라는 분들이 많죠.
조금만 신경쓰면 스스로 문제의 답을 해결할 수 있는데도 말이죠

그러니 그들이 초보인거죠.^^
의도치 않게 댓글로 소란을 일으켜 죄송합니다.~

괜찮아요 ^^
두분의 대화가 재미있네요

으음 정말 공감이 갑니다. 저렇게 부분적으로 하지 않으면 여러개가 에러났을땐 한 부분 정도는 찾아서 해결한다고 해도 계속 에러가 나니 "이게 아닌가...?"하고 틀린 코드로 다시 돌아가는 경우가 !! ㅋㅋㅋ 그래서 당연히 부분적으로 해야하는것같아요 ~

그쵸, 처음에는 초보분들은 한번에 하나의 코딩창에서 전부 코딩할려는 습관이 있어요. 별도로 테스트할 코딩창을 열어넣고 원하는 표현을 테스트 한 뒤에 소스를 합치면 에러 발생률이 거의 없어지는데 말이죠.
나중에 결과가 나오더라도 어디서 무엇이 어떻게 잘못되었는지 찾지 못해서 초보분들이 대부분 자신이 짠 소스임에도 전체 소스를 복사해서 카페 질문게시판에 올리는 경우가 많더군요.
조금만 코딩습관을 바꾸면 편해지는 데 말이죠

이런거 진짜 비싼 포스팅인데... ㅠㅠ 스파가 똥파리라 미안합니다. 유용하게 잘 활용할께용 ^^

예전 초보시절에 메인코딩창 부분코딩창으로 두개 띄워넣고 코딩을 했었는데 꽤 도움이 되었던 기억이 나서 post에 써보았어요. 초보분들은 한방에 전체를 코딩할려는 습관 때문에 에러 발생시 꽤 삽질을 많이 하시는 것 같더군요.

짱짱맨 호출에 출동했습니다!!

짱짱맨 출동에 감사합니다.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.030
BTC 58478.70
ETH 3158.37
USDT 1.00
SBD 2.43