본문 바로가기
프로그래밍

챗GPT로 코딩한다 (실제 수업 후기 & 무료 교육 자료)

by Good.PhD 2024. 10. 2.

개인적으로 프로그래밍하면 고통스러운 기억이 많은데, 지금은 챗GPT나 다른 언어모델들이 코딩을 도와주기 때문에 프로그래밍 입문이 많이 쉬워졌다는 생각이 든다. 요즘 SNS에서는 프로그래밍 비전공자인데 앱을 출시했다는 포스팅도 눈에 띈다. 그만큼 프로그래밍 진입 장벽도 낮아지고, 나만의 앱이나 웹 서비스를 출시하는데 활용할 수 있는 다양한 서비스도 많아 진 것 같다. 프로그래밍 배워보려는 사람도 많아지고 있는데, 실제 수업하면서 느꼈던 내용을 공유해본다. 무료 수업 자료는 이번 글 마지막 부분에서 소개하고 있다.

 

챗GPT를 이용해서 프로그래밍 수업을 해보고 싶었는데, 블로그와 유튜브를 이용해서 한번 해봐야겠다는 생각을 했다. 블로그에는 작성한 코드를 설명하는 내용으로 올리고, 유튜브에는 코딩하는 과정을 통으로 녹화해서 올리고 있다. 녹화를 통째로 하면 그 과정에서 내가 에러를 내는 모습도 녹화되고, 에러가 발생했을 때 어떤 식으로 대처하는지도 녹화가 되어서 보면서 따라하기 용이하지 않나 생각이 든다. 유튜브에 찾아보면 코딩과정을 녹화해서 올리는 컨텐츠들도 좀 있는 편이다. 코딩을 하다가 막혔을 때 누구나 참고할 수 있는 영상을 만들어보면 어떨까하는 생각에 정리해보게 되었다. 이 블로그에서도 프로그래밍 부분에 open AI API를 이용해서 이것저것 만드는 글들을 몇개 올려봤었는데, 코딩을 전혀 못하는 사람이 보기엔 도움이 안 되는 자료라고 생각이 들어서,, 코딩을 전혀 못하지만, 한번 시간 날때 조금씩 도전해보고 싶은 사람에게 유용할만한 자료를 만들어보려고 한다. 댓글에 구현해보고 싶은 기능들을 달아주시면 그런 내용을 주제로 한번 해보려고 한다. 일단 현재 들어왔던 문의에서는 한글 문서 내용 취합하기가 있었는데 파이썬에서 한번 자료 취합하는 걸 해보려고 한다. (한번도 안해본 작업이라 아마 개인적으로 엄청 헤매게 될 것 같긴 하다)

 

학부시절 생물학을 전공했는데, 복수전공으로 컴퓨터공학을 했다. 지금은 다들 주전공 상관없이 컴퓨터공학을 많이들 복수전공으로 선택하는 편인 것 같은데, 내가 대학교 다닐 적에는 이런 선택하는 사람들이 많지 않았다. 실제로 학부때 컴퓨터공학 전공 수업을 들으러 가면 혼자서 타전공인 경우가 많았다. 수업 내용도 따라가기 너무 버거웠고, 컴퓨터공학 전공자들 중에서도 전공을 포기할까 생각하는 사람도 꽤 많았다. 그래서 프로그래밍은 내 길이 아닌가보다 생각을 했었다. 

친구 아버지께서 교수님이신데 앞으로 생물정보학이 각광을 받을거라고 해서 그냥 무턱대고 복수전공을 신청했는데, 컴퓨터공학 전공과목은 거의 다 C가 나왔던 기억이 난다. 마지막 학기에는 프로그래밍 수업 성적이 조금 오르긴 했지만 여전히 버거웠다. 대학원에 진학 한에는 졸업을 위해서 어쩔수 없이 프로그래밍을 해야 했고, 그렇게 하다보니 필요한 작업은 조금씩 할 수 있게 되었다. 그래서 현재 프로그래밍을 어설프게 조금씩 하고 있다. 

나 같은 사람도 하는데, 프로그래밍 누구나 할 수 있지 않을까? 라고 생각하고 어설프게 교육을 했다가 실패도 여러차례 했는데 챗GPT가 출시된 이후에는 누구나 프로그래밍 배울 수 있겠다는 생각이 들었다. 좀 더 과장해서 표현하면 키보드 타자 칠 수 있는 사람은 다 코딩하는 시대가 올 수도 있겠다는 생각이 들었다. 그래서 거대언어모델을 이용해서 프로그래밍하는 수업을 해보고 있다.

 

수업 때 여러가지 실수를 하면서 알게된 교훈이 몇 가지 있다.

 

교훈 1) 챗GPT가 작성해준 코드를 대략적으로라도 이해할 수 있어야 AI를 이용한 코딩이 가능하다

챗GPT를 이용해서 코딩하는 수업을 처음 했을 때 했던 실수는 학생들의 코딩 실력을 과대평가 했던 점이다. 학생들이 그럴듯한 코드를 누구나 작성해내서 수업이 성공적이라고 생각했다. 그런데 중간고사를 진행하고 보니 내가 크게 착각했다는 것을 알았다. 문제를 조금만 비틀어도 학생들이 코드를 제대로 작성하지 못하는 사태가 속출했다. 그래서 수업때 상황이랑 너무 달라서 이게 왜 이렇게 됐지.. 하는 의문점을 갖고 학생들에게 꾸준히 물어본 결과.. 학생들이 챗GPT에서 제공하는 코드를 이해하지도 않고 그냥 복붙해서 사용하고 있었고, 수업 중에는 명확한 목표를 '내'가 제시해줬기 때문에 그 문제에 대해서는 작동하는 코드를 만들었지만, 같은 원리로 접근해야 되는 다른 문제에 대해서는 문제 자체도 이해하지 못하면서 막연하게 프롬프트를 작성해서 챗GPT에게 코드를 요구하면서 작동하지 않는 코드를 만들어내는 경우가 속출했다.

그래서 이때 얻은 깨달음은... 챗GPT로 코딩을 하더라도 기본적인 프로그래밍 문법은 숙지해야 한다는 점이다. 파이썬으로 프로그래밍을 하고 있는데, 파이썬에서 기본이 되는 내용들은 알아야 한다는 것이다.

 

기본적으로 알아야 하는 내용은 다음과 같다.

1) 변수 (variable)

2) 반복문 (for)

3) 조건문 (if)

4) 자료형 (list, dictionary 등)

이 정도 알면 일단은 기본적으로 진행되는 코드를 이해할 수 있는 기초 중의 기초는 알고 있는 상태라고 생각이 든다.

 

변수 개념을 몰라서 하는 질문들 때문에 상당히 당황했던 기억이 난다. 사실 코드를 작성해 달라고 요구를 하면, 챗GPT든 코파일럿이든 작성한 코드에 대해서 자세한 설명을 다 해준다. 문제는 사람들이 코드 복붙하느라 바빠서 그 설명은 대충대충 넘어간다는 점이다. 처음에 챗GPT를 이용해서 프로그래밍을 공부해도 꽤 빠르게 배울 수 있다고 생각하는데, 이는 코드에 대한 모든 설명을 해주기 때문이다. 전공 수업 때 배우면 조교나 교수님은 답변하기 귀찮아하는 사소한 지점까지도 집요하게 불어볼 수 있으니, 학습하기 너무 편하다는 생각이 든다.

 

교훈 2) 프로그래밍 에러 메세지는 이해할 수 있어야 한다

챗GPT의 도움을 받아가면서 코드를 작성은 하지만, 내 상황을 정확히 전달하지 않고 프롬프트를 작성하는 경우도 빈번하기 때문에 챗GPT가 준 코드를 바로 사용하기는 어렵다. 여기서 약간의 수정을 가해야 하는데, 수정이 필요한 부분에 대한 힌트는 사실 에러메세지 속에서 찾을 수 있다. 그런데 사람들이 에러가 발생하면 당황해서 어쩔 줄을 몰라 한다.

프로그래밍에서 에러가 발생하는 것은 굉장히 자연스러운 현상이다. 내가 작성한 코드가 단 한번의 에러도 없이 실행이 된다면... 사실 굉장히 의심스러운 상황이라고 할 수 있다. (내가 자주 사용하는 기능이 아니라면!) 그런데 에러메세지가 나오면 다들 문제가 생겼다고 느끼고, 에러메세지를 들여다 볼 생각조차 하지 않는다. 에러메세지는 코드에서 오류가 난 부분을 알려주는 굉장히 소중한 정보다. 이 정보가 없으면 에러를 찾기가 더 어려울 수 있다.

프로그래밍 문법적인 오류에 의해서 발생하는 에러는 이러한 에러메시지의 도움으로 쉽게 오류를 잡아낼 수 있지만, 오류 메세지는 없는데 프로그래밍의 결과물이 내가 의도한 것과 다른 에러도 있다. 전자를 syntax 에러라고 하고, 후자는 sementics 에러라고 한다. 문법적으로 틀린 것과 코드의 로직(logic)이 잘못된 오류로 분류해서 구분한다. sementics 에러는 찾아내기가 훨씬 고통스러운데, 이러한 문제는 에러메시지로 알려주는 것이 아니고 프로그래밍 중간 중간을 모두 검토해보면서 어디서 의도와 다르게 진행되었는지를 일일이 확인해봐야 하기 때문이다.

 

수업하면서 가장 많이 나온 프로그래밍 에러는 다음과 같다.

1) 단순 오타 (빈칸을 임의로 넣거나, 대소문자를 틀리거나, 점(.)이나 쉽표(,)를 잘못 입력하는 경우 등)

2) 상단에 있는 코드를 수정하는 바람에 하단에서 오류가 발생하는 경우 (일부 변수 혹은 함수가 삭제되서 오류 발생: 작성한 코드를 실행하면 첫줄부터 한줄한줄 읽어가면서 실행이된다. 그렇기 때문에 위에서 정보가 삭제되면, 그 변경사항이 아랫부분에도 반영이 되어 있어야 한다)

 

에러메세지가 복잡해 보이면, 에러메세지를 복사해서 챗GPT에게 물어보면 어떤 에러인지 답변을 잘 해준다. 작성한 코드도 같이 전달하면서 에러메세지까지 같이 전달하면 더 좋다. 그러면 상당히 정리된 답변이 나온다. 이렇게 해서 문제를 다 해결하면 제일 좋지만,,, 챗GPT도 계속 헤맬때도 있다. 그러면 다른 언어 모델에 질문을 던지면서 해결책을 찾는 것도 방법이다.

언어모델이 해준 답변이 얼토당토하지 않은 경우는 보통 기본적인 프로그래밍 지식이 있다면 해결할 수 있는 문제인 경우가 많았다. 그리고 답변이 산으로 갈 수록 작성해주는 코드도 점점 길어지는 경향이 있었다.

내가 수업을 하는 방식은 해야 되는 일들만 정리해주고, 나머지는 직접 언어모델의 도움을 받아서 작성하는 식인데, 이 방식으로 학습하는게 잘 맞는 사람도 있지만 그렇지 않은 사람도 있어서 호불호가 많이 갈리는 수업 방식이라고 생각이 든다. 다. 개인적으로 직접 실험해보고 실패하면서 학습하는 걸 선호해서 나는 이렇게 공부하는게 좋다고 생각하지만, 정말 프로그래밍을 처음 접하는 사람들은 쉽지 않은 것 같다.

그래서 수업을 할 때 한달 동안 거의 비슷한 작업을 반복하는 식으로 수업을 진행했다. 프로그래밍도 나름 언어다. 익숙해지면 익숙해지는 만큼 코드가 눈에 잘 들어온다. 외국어를 처음 배우면 막막한 느낌이 있다. 아는 단어도 없고, 무슨 말인지도 모르겠고, 아주아주 단순한 표현인데도 파악이 안된다. 그러나 비슷한 문장을 계속 접하다 보면 점점 익숙해진다. 그러면서 단어도 이해가 되고, 문장도 이해가 된다. 조금씩 이해할 수 있는 문장이 늘어난다. 외국어를 이렇게 배워가는 것 처럼 프로그래밍도 비슷한 과정을 통해 배워가게 되는 것 같다.

 

프로그래밍의 핵심은 다른 사람이 작성한 코드를 가져와서 잘 활용하는 것!

프로그래밍을 한다고 할 때 개인이 처음부터 모든 것을 만들어야 된다고 생각하는 경우가 있는데, 현실은 그렇지 않다. 정말 많은 사람들이 프로그래밍을 하고 있고 자신이 작성한 코드를 누구나 쓸 수 있게 공개하고 있다. 코딩을 한다는 것은 그렇게 공개되어 있는 남의 코드를 가져와서 잘 활용하는 것이다. 이렇게 남이 작성한 코드들을 라이브러리라고 부른다. 어떠한 라이브러리가 있는지 찾아보고, 내가 하려는 일에 적합한 라이브러리를 잘 가져와서 사용하면 좋은 코드가 된다.

예를 들어서 엑셀파일 자료를 내가 파이썬으로 취합한다고 하면 pandas라고 하는 라이브러리를 가져와서 사용하면 된다. 예전에는 코딩할 때 이러한 라이브러리가 뭐가 있는지 몰라서 헤매기도 하고, 남이 작성해 놓은 라이브러리를 내가 공부해서 사용하려니 남이 작성한 코드 이해하는데 상당한 시간이 들어서 어려움이 많았다.

챗GPT는 내가 하려는 일에 적합한 라이브러리가 뭐가 있는지, 그리고 그 라이브러리를 어떻게 사용할 수 있는지 꽤 잘 찾아준다. 그래서 코딩하는데 드는 시간이 획기적으로 감소할 수 있다. 개인적으로도 다른 라이브러리를 사용할 때면 2주는 시간이 걸렸었는데, 이제는 몇시간 챗GPT와 주거니 받거니 하면서 코드를 다듬어가다 보면 금새 라이브러리 사용 방법을 숙지할 수 있게 되었다. 이런 점이 너무 혁신적인 부분이다.

다만 라이브러리도계속 업데이트가 되기 때문에 요즘엔 코파일럿으로 코딩 작업을 많이 하는 편이다. 최근에 나온 라이브러리도 잘 찾아준다. 예를 들어서 한글 문서에서 자료 취합할 때 파이썬으로 작업을 하겠다고 하면, 이러한 내용을 코파일럿에 물어보면서 사용할만한 라이브러리를 찾아보고, 어떤 방식으로 접근할 수 있는지 물어보면서 코딩을 시작할 수 있다.

한글 파일 처리하는 방법에 대한 질문

 

코파일럿에 한번 물어봤는데, 한국어를 처리하는데 필요한 라이브러리를 알려줬다. 그래서 내가 원하는 것은 그냥 한글이 아니라 한글 (.hwp)파일 이라고 다시 물어봤고, 라이브러리를 하나 추천해줬다.

 

pyhwp 라이브러리

 

파이썬에서 한글 파일을 읽어올 때 사용할 수 있는 라이브러리를 소개해줬다. 정말 쓸만한지는 직접 테스트해봐야 알겠지만 그래도 시작 점을 금방 찾을 수 있는 것도 큰 도움이라고 본다.

 

한글 파일에서 표 추출하기

 

한글 파일에서 표를 추출하려면 이렇게 코드를 만들어야 된다고 알려준다. 이렇게 기본 틀을 알려주면 여기서부터 간단하게 시작해볼 수 있다. 

 

코딩 공부 자료

처음 코딩을 하려면 어디서 시작해야할지 막막한데, 재미있게 시도해볼 수 있는 웹서비스나 앱들도 개발이 되어 있다.

개인적으로 듀오링고 팬이어서 굉장히 오랜기간 사용해왔는데, 이렇게 학습 과정을 게임화한 프로그램들을 좋아한다.

 

처음 파이썬 배울 때 강의를 듣긴 했다. 무료로 제공되고 실습도 꽤 간단하다. 영어긴 하지만... 할만하다고 본다.

https://www.py4e.com/  

 

PY4E - Python for Everybody

Python for Everybody This web site is building a set of free materials, lectures, book and assignments to help students learn how to program in Python. You can take this course and receive a certificate at: If you log in to this site you have joined a free

www.py4e.com

Coursera에서 Duke university 수업을 들었었는데, 그 강의는 현재 코세라에서는 제공하지 않고 있다. 그 강의가 참 신선한 충격이었는데, 강의가 안 보여서 아쉽다. 프로그래밍을 전혀 못하는 사람도 8주만에 게임을 만들 수 있게 해주겠다는 컨셉이었다.

1주차는 가위바위보 게임

2주차는 핑퐁 (공을 튀겨서 상대방 골대로 집어넣는 게임. 골대는 왼쪽, 오른쪽)

3주차는 타이머 게임 (30초에 가장 근접하게 타이머를 멈춘 사람이 이기는 게임)

4주차는 카드 게임 (여기서부터 시간이 없어서 못 했다)

...

마지막 8주차에는 비행기 게임을 만들었었다.

 

수업을 듣는건 너무 지루하고 바로바로 코딩을 하면서 익혀보고 싶다면..

Learn to Code - for Free | Codecademy

 

Learn to Code - for Free | Codecademy

Learn the technical skills to get the job you want. Join over 50 million people choosing Codecademy to start a new career (or advance in their current one).

www.codecademy.com

코드 아카데미를 추천한다. 초창기에 사용했었는데 지금은 프로그래밍 과정이 엄청 많아졌다. 유료 강의도 좀 많아진 것 같긴 한데 그래도 기초 수업 정도는 무료로 들을 수 있었던 것 같다.

 

게임을 하듯이 공부하는 것을 선호한다면..아래 플랫폼을 추천한다. 여기는 그냥 문제가 잔뜩 올라와 있다. 여기서 문제를 풀면서 조금씩 배우는 식이다. 여기에 있는 문제들을 코파일럿으로 해결해가면서 공부하는 것도 괜찮은 방법이라고 본다.

Codewars - Achieve mastery through coding practice and developer mentorship

 

Codewars - Achieve mastery through coding practice and developer mentorship

A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!

www.codewars.com

 

앱에서 출퇴근 시간에 10분~20분 정도만 투자해서 배워보고 싶다면.. Sololearn 아니면 mimo를 추천한다.

Sololearn: Learn to Code

 

https://www.sololearn.com/en/

 

www.sololearn.com

꽤 다양한 언어에 대해서 공부해볼 수 있다. 객관식 문제도 있고, 코딩 문제도 섞여 있다. 듀오링고와 유사한데, 강의가 너무 지루하면 그냥 시험보고 건너뛰는 것도 가능하다.

 

Learn to Code with Mimo: Python, JavaScript, HTML, CSS, and More

 

Learn to Code with Mimo: Python, JavaScript, HTML, CSS, and More

“My goal is to learn how to code so that when I re-enter the workforce, I'll be a more competitive job candidate.” Stephanie Tyers 🇺🇸 USA

mimo.org

Mimo는 건너뛰기 기능은 없었던 것 같다. 이것도 듀오링고랑 비슷하고 한단계 한단계 클리어하면서 가다보면 조금씩 프로그래밍에 익숙해질 수 있다.

프로그래밍의 기초 개념을 매일매일 조금씩 시간들여서 배우고 싶다면 앱을 쓰는 것도 좋은 방법이라고 본다.

 

아이들에게 교육하기에는 조금 어려울 수 있는데, 아이들 대상으로는 entry, scratch를 사용해볼 수 있다. 요즘 아들이랑 같이 entry에서 게임을 만들어 보고 있다. 스트레스 받지 않으면서 매일매일 조금씩 같이 공부할 수 있는 좋은 프로그램이라고 생각된다. 같이 게임도 하고, 게임을 만들어 보기도 하고, 그 와중에 프로그래밍 기본 개념도 익힐 수 있는 게임화 교육 플랫폼이라고 본다.

 

엔트리는 국내에서 제작했다. 네이버와 카이스트... 였던 것 같은데 기억은 잘 안난다. 아무튼 해보면 매우 만족도가 높다. 블록을 차곡차곡 쌓아가면서 프로그래밍을 하느 방식이다.  어른도 프로그래밍 처음 배울 때는 사용해볼만하다고 생각하는데, 유치하다고 생각해서 안 하는 분도 있을 것 같다.

https://playentry.org/

 

엔트리 - 우리는 무엇이든 될 수 있어요

소프트웨어를 통해 미래를 꿈꾸고 함께 성장합니다.

playentry.org

 

스크래치는 엔트리와 비슷하게 블록을 합쳐가는 방식이다. 엔트리만 해봤고 스크래치는 안 써보긴 했지만,, 나중에 시간되면 사용해볼 계획이다. MIT에서 만들어서 주소에 mit가 들어가 있는 것으로 알고 있다.

https://scratch.mit.edu/

 

Scratch - Imagine, Program, Share

Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations.

scratch.mit.edu

 

칸 아카데미도 프로그래밍 교육이 있는데, 최근에 파이썬 강의가 생겼다. 칸 아카데미는 초등학교부터 고등학교까지의 교육을 지원하는 플랫폼이다. 무료여서 재단 후원금과 기부금으로 운영되는데, 상단에 보면 기부금 요청 페이지가 나온다. 너무 좋은 프로그램이라고 생각이 된다. 프로그래밍 교육에서 파이썬도 생겼다. 며칠전만 해도 없었던 것 같은데.. 

https://www.khanacademy.org/computing/intro-to-python-fundamentals

 

Khan Academy

 

www.khanacademy.org

 

유튜브도 자료가 넘쳐나고.... 사실 시간만 낸다면 얼마든지 프로그래밍을 배울 수 있는 세상이 왔다. 아이들에게도 꼭 가르쳐야 될 것중 하나로 프로그래밍 & 인공지능을 생각하고 있다. 사실 허접하게 만들어진 웹페이지 사용하면서 기분 나쁠 때가 한두번이 아니다. 외주를 주고 웹사이트를 개발해보면 값이 굉장히 비싸다. 너무 터무니 없이 비싸다고 생각이 되는데, 인건비가 비싼 것이 주요 원인 중 하나 아닐까 싶다. 키보드 타이핑 할 수 있는 사람은 누구나 코딩할 수 있는 세상이 온다면 IT 서비스들 개발 비용도 낮아지고 퀄리티도 더 높아지지 않을까 생각한다.