지난 달에 저희 집 초등학교 3학년 아이가 학교에서 엔트리로 코딩 수업을 했다고 합니다.
언제나 꼬맹이인가 싶은데 벌써 그런 것을 가르칠 나이가 되었나 싶었습니다.
나름 프로그래밍으로 돈을 벌고 있는 사람인데, 언젠가 각을 잡고 이야기를 해 줘야 하나 싶은 생각도 들었습니다.
엔트리는 기능에 맞도록 구성된 블록을 가져다 로직에 맞게 구성해서 자신이 의도한 플로우를 만드는 플랫폼입니다.
MIT에서 교육용으로 만든 스크래치(Scratch)에서 영감을 얻어서 네이버에서 만든 녀석이죠.
사용법이 비슷해서 누가 보면 베꼈다 라고 할 법도 하지만, 나름의 특색을 잘 살려서 만든 녀석입니다.
우리나라에서는 이걸 정식 교육 툴로 지정해서 학교에서 사용하기도 하고,
실제로 사이트(https://playentry.org)에 들어가보시면 학교용 교육 과정도 있습니다.
튜토리얼도 아기자기하게 만들어놨으니 한 번 구경해보시는 것도 좋겠습니다.
그런데 갑자기 잊고 있던 한 가지 의문이 고개를 들었습니다.
우리가 평소에 아무런 거부감 없이 엔트리를 가지고 "코딩 수업"을 한다고 이야기하고 있는 것입니다.
실제 엔트리 자신도 "블록 코딩 툴" 이라고 부르고 있고요.
하지만 이전부터 늘 의문이 들었습니다. 엔트리가 코딩을 위한 툴인가?
엔트리가 뭔가 "코딩"을 할 수 있는 건덕지가 있기는 한가?
자, 여기서 오래 이 바닥에 계셨던 분들이나, 눈치가 좀 있으신 분들은 무엇에 대해 말하고자 하는지 눈치채셨을 겁니다.
바로 "코딩"과 "프로그래밍" 이야기를 하려고 합니다.
예전부터 있던 얘기죠.
"개발자라고 하면 프로그래밍을 해야지, 단순 코딩을 하면 안 된다."
요즘처럼 너도나도 코딩 교육 아카데미를 열어서 웹 마스터에 자바 과정에 배우는 시점에,
이런 구분이 무슨 의미가 있는 얘기인가 싶죠? 다 똑같이 코드를 이용해서 애플리케이션 만들고 하는데 말이죠.
조선 시대 예송 논쟁마냥 코딩과 프로그래밍을 구분하고,
프로그래머를 우월하게 얘기하고 상대적으로 코더를 열등하게 얘기하는 건 뭔가 소모적인 이야기처럼 들리기도 합니다.
하지만, 인공지능이 모든 생산하는 직업의 생산성을 올리는 것을 넘어 그 직업의 파이를 줄이는 지경에 이르르고,
그 흐름에서 안전하다고 여겼던 프로그래밍의 영역조차 적극적으로 침범하고 있는 지경에 이르른 지금.
저는 이 이야기를 다시 한 번 진지하게(?) 고민해봐야 한다고 생각합니다.
국립국어원 표준국어대사전(https://stdict.korean.go.kr/)에서는 “코딩”을 다음과 같이 정의하고 있습니다.
「1」 어떤 일의 자료나 대상에 대하여 기호를 부여하는 일. <- 이건 다른 내용이네요.
「2」 『정보·통신』 작업의 흐름에 따라 프로그램 언어의 명령문을 써서 프로그램을 작성하는 일.
「3」 『정보·통신』 프로그램의 코드를 작성하는 일.
그렇다면 "프로그래밍"은 어떨까요?
『정보·통신』 컴퓨터 프로그램을 작성하는 일. 일반적으로는 프로그램 작성 방법의 결정, 코딩(coding), 에러 수정 따위의 작업을 이르지만 특수하게 코딩만을 이를 때도 있다.
프로그래밍의 정의를 보시면 알겠지만, 우리가 좁은 의미로 생각할 때는 코딩=프로그래밍 으로 생각하기 쉽습니다.
"프로그램의 작성"만 생각하면 그렇겠네요.
하지만, 프로그래밍의 일반 정의를 보시면, "작성 방법의 결정" 과 "에러 수정"이 분리되어 있습니다.
프로그래밍을 해 보신 분들은 알겠지만, 실제 많은 시간이 걸리는 부분은 "작성"이 아닌 "방법의 결정"과 "에러 수정"입니다.
그리고, 개발이 종료된 후 프로그래밍의 할 일은 끝나는 것이 아니고, 실제 사용 중 발생하는 "에러를 끊임없이 수정해야" 합니다.
위에서 말한 "단순 코딩을 하면 안 된다"라는 말에는 "단순한 코드 작성"에만 머무르면 안 된다는 의미가 내포되어 있다는 거죠.
더군다나, 불과 작년만 해도 오류가 빈발한 코드를 내뱉던 인공지능들이, 지금은 그럭저럭 나쁘지 않은 코드들을 생산하고 있습니다.
Claude 3.5 소넷 모델이 주는 코드들은 올초 대비 그럭저럭 괜찮습니다.
ChatGPT의 o1 모델이 얼마나 좋은지는 나와봐야 알겠네요. 아직 preview니까.
(물론 '그럭저럭 괜찮다'는 거지 '그냥 바로 써도 된다' 는 아닙니다. 아직은 받고 나면 수정 많이 해야돼요 ^^)
많은 사람들이 경고하듯, 단순 코딩만 하는 사람들은 인공지능에게 제일 먼저 대체될 겁니다.
그 다음으로는 단순 에러 수정을 하는 사람들이 대체되겠죠.
결국에는 프로그램을 어떻게 만들고, 어떻게 큰 그림을 그려나갈까 고민할 줄 아는 프로그래머만이 살아남을 겁니다.
저는 그리고 그쯤 되면, 프로그래밍을 하는 수단이 지금처럼 "텍스트 입력을 사용하는 언어일까?"일지 의문입니다.
거기까지 가지 않더라도, "지금 사용하는 언어나 플랫폼, 라이브러리를 몇 년 뒤에 계속 사용할까?"하는 의문이 듭니다.
제가 처음 C언어를 배울 때만해도, 기계어 윗단에서 GUI 같은 무언가를 구현하기 위해 배우는 상위 언어였죠.
지금은? 디바이스와 커널에 접근하기 위해 배우는 굉장히 아래 포지션의 언어로 바뀌었습니다.
제 주력 언어는 자바(Java)였고, Java는 원래 모든 디바이스에서 사용하기 위해 만들어진 멀티 플랫폼 언어였습니다.
지금 과연 Java가 그런 포지션을 가지고 있는가...는 좀 생각해봐야 할 것 같습니다.
지금 멀티플랫폼이라고 하면 오히려 플러터(Flutter)나 자바스크립트(Javascript)가 좀 더 가깝지 않나... 싶네요.
참고로 저는 Java 덕택에 안드로이드가 처음 소개되었을 때부터 시작해서, 지금은 코틀린에 정착했습니다.
iOS도 병행 개발해서 Swift도 그럭저럭 쓰는군요.
그 이외에도 수많은 언어와 플랫폼이 있습니다만, 그건 차차 풀어나가보도록 하죠.
이렇듯 계속 발전하는 시대에, 우리는 계속 어떻게 프로그래밍을, 개발을 배우기 시작할 것인가 고민하게 됩니다.
저같이 계속 개발 일선에 있는 사람도 그런데, 처음 시작하시는 분들은 정말 막막하기 그지 없을겁니다.
확실한 것은, 단순히 코딩 기술을 배우는 것만 바라고 이 바닥에 발을 들이시려고 하시면 안 됩니다.
물론 코딩 기술을 제대로 배우는 것은 중요합니다.
경첩을 달려면 최소한 알맞는 나사와 부품을 찾는 방법과, 경첩을 흔들리지 않게 잡는 법 정도는 알아야겠죠.
그래야 좋은 전동 드라이버를 잡고 올바르게 사용할 수 있을테니까요.
하지만 코딩 기술 한 가지만 아무 생각 없이 파서 평생 먹고 사는 시대는 이제 끝났다는 말씀을 드리고 싶습니다.
그런 사람들은 이제 앞에서도 말씀 드렸듯 인공지능이 대체해 버릴 경우 다음이 없을 것입니다.
앞으로 프로그래밍을 배우시는 분들께 가장 중요한 것은,
한 가지 주력 기술을 중심으로 계속 새로운 언어와 플랫폼으로 뻗어나가는 방법을 배우시는 것입니다.
이 말씀을 드리려고 이런 두서없는 말씀을 드렸습니다.
작년부터 어디서 출발선을 잡아야할지 늘 고민했는데, 인공지능의 등장이 더더욱 저를 혼란에 빠뜨렸었습니다.
시작하는 언어도 무엇으로 잡아야 할지 몇 번을 엎었고, 이야기하는 공간도 결정을 몇 번을 엎었었습니다.
오랜 기간 고민한 끝에, 이번 오블완 챌린지 이벤트를 빌어서 한 번 두서없이(!) 이야기해 보려고 합니다.
제가 글재주가 없고 끈기가 없어서 잘 될지 모르겠습니다만,
이런 이벤트가 있는 김에 해보는 것도 좋지 않을까 싶습니다.
프로그래밍 일반