1. 컴퓨터 프로그램을 만드는 행위
한국어 | 코딩 |
영어 | coding |
중국어 | 电脑编程 |
1.1. 과정
코딩이란 프로그래밍 코드를 어딘가에 적는 것을 말한다. 예를 들면 메모장을 켜고 평범한 글을 쓸 수도 있고 프로그램 코드를 쓸 수도 있는데, 후자를 하면 코딩이다. 보통은 코딩을 위한 전용 프로그램인 IDE를 사용하는데, 그 이유는 단지 메모장보다 더 편리하기 때문이다. 보통은 코딩을 할 때 컴퓨터를 이용하기에 키보드를 마구 두들겨 가며 코딩을 하겠지만, 종이나 화이트보드 위에 손으로 직접 코드를 써 가면서 코딩을 할 수도 있다.[1], 공학 전 분야, 특히 컴퓨터공학 전공자들이 많이 하는 행위이다.구체적인 예를 들면 다음과 같다.
만약 우리가 게임을 만들고 싶다면 가장 처음에 해야할 게 뭘까? 어떤 게임을 만들지 정하는 것이다. 그 게임은 오버워치 같은 게임이 될 수도 있고 리그 오브 레전드 같은 게임이 될 수도 있고 클래시 오브 클랜이나 브롤스타즈, 배틀그라운드 같은 게임이 될 수도 있다. 어떤 게임이든 좋다. 정했다면 그 상상 속 게임의 내용을 어딘가에 적어두면 더 좋다. 생각만 하고 메모를 안 하면 나중에 필요할 때 까먹거나 헷갈릴 수도 있으니까.
어떤 게임을 만들게 될 지 정했으면, 그것에 대한 필요 기능에 대한 요구사항(requirements)을 제작하여 실제 게임으로 만들어 줄 수 있는 개발자에게 보내고 의뢰한다.
개발자는 우리가 쓴 게임에 대한 글을 읽고 이 게임이 어떤 게임인지, 완성되었다면 어떤 모습일지 산술적으로 필요한 계산 파트를 분할하여 파악한다. 기획서의 요구 사항을 컴퓨터가 (유저의 마우스 클릭 입력을 읽을 수 있고)/(데미지를 계산하여)/(적이 죽는 모습을 모니터 화면에 출력)/ 하는 일련의 계산식을 지닌 내용을 컴퓨터가 읽고 쓸 수 있도록 글을 바꿔 작성하는데, 이것이 개략적 개념에서의 코딩을 뜻한다.
우선 개발자는 메모장 같은 걸 켜고 거기에 해당 과정에 코드를 적고 저장한다. 만들어진 파일들은 당연히 평범한 텍스트 파일들이다. 여기까지가 코딩이다. 이렇게 저장된 파일들을 컴파일러 혹은 인터프리터라는 프로그램에 넣으면 알아서 컴퓨터 프로그램이나 스마트폰 애플리케이션 파일을 만들어준다.[2] 그리고 그렇게 만들어진 게임을 우리에게 보내주면 끝난다.
▲ 사람들의 상상 속 프로그래밍 VS 현실[3] |
단, 프로그래밍 언어를 조금 이상하게 사용했을 경우 프로그램이 만들어지지 않거나, 만들어져도 쓰는 도중에 마음대로 꺼진다.[4] 또는 성능을 마구 잡아먹거나, 기능이 이상하게 돌아가거나, 해킹에 사용될 수 있는 약점이 만들어지기도 한다.[5] 이럴 때는 잘못된 부분을 고쳐주어야 한다.[6] 위의 유튜브 영상에서 갑자기 구글을 찾아보는 이유가 디버깅 때문이라고 할 수 있다.
1.2. 코딩을 잘한다는 것
C급 개발자와 S급 개발자는 구현 방식이 달라지는 경우가 많은데, 가장 흔한 예시로 Python의 itertools나 regex의 활용을 들 수 있다. 보통 생각하기에는 Python에서 Function Call만 하면 끝나는 구문을 하나하나 다 구현하고 있다면, 이것이 C급 개발자일 것이라고 생각하기 쉽다.
그러나 코딩의 목적에 따라 이런 판단은 확연히 갈릴 수 있다. 만약 코딩 목적이 "최적화 된 Source Code의 완성"이라면 Function Call 만 하면 끝나는 Python 코딩이 가장 적합한 결과물이 될 수 있다. 그런데 목적이 "메모리 Usage의 최소화"라면 Function Call 이라는 메모리를 잡아먹는 방식보다는, C++로 동작 하나하나를 구현하여 메모리 사용량을 줄이는 것이 훨씬 효율적이다. 또한 만약 외주를 받아 "C++ Source Code"를 납품해야 하는 경우로 가정해도 Python의 Function을 C++로 일일이 구현하는 것이 맞는 결과물이 된다.
여기에서 알 수 있듯, "코딩을 잘한다"는 것은 목적에 부합하는 결과물을 빠르게 만들어내는 능력을 말한다. 극단적으로 이야기하면 알고리즘의 구현은 당연히 할 수 있어야 하고, 그것을 여러가지 방법으로 할 수 있어야 한다. 이를 위해서는 다양한 프로그래밍 언어에 대한 숙달은 기본 조건이며, 각 언어별 특징을 파악하고 있어 현재 프로젝트에 어떤 언어가 필요할지 선택 가능해야 한다. 이때 퍼포먼스 측면도 중요하지만 앞서 언급했듯 "빠르게" 만들어야 하는 점도 굉장히 중요하다. 게다가 컴퓨터 프로그램이나 모바일 애플리케이션을 써보면 알겠지만, 코딩의 품질은 난데없이 등장하는 버그 및 에러가 있느냐 없느냐에 달려있다. 이것을 얼마나 구체적이고 세부적으로 대비하였는지 여부가 코드의 퀄리티를 보장하는데, 퍼포먼스와 납기를 맞추면서 고 퀄리티의 디버그 코드까지 넣는 것이 얼마나 어려운 일인지는 말이 필요 없을 것이다.
더불어 이것을 만드는 것이 한 사람이 아니라 여러 사람이라는 점도 주요한 점이다. 한 사람이 역전의 용사급 역량을 갖추고 있다고 해도, 팀 인원이 이 역량에 따라가지 못한다면 결과물은 저열한 물건이 나올 수 밖에 없다.
종합하면, "코딩을 잘한다"는 것은 기본 코딩 능력 및 일정과 인원에 대한 관리 능력의 총합을 이야기하는 것이다. 단순하게 코드를 잘 구현하는 것과는 확연히 다르다는 이해가 필요하다. 물론 프론트엔드나 백엔드 간의 차이나 업무 환경의 차이 등을 모두 동등하게 평가할 수는 없을 것이므로 현실적으로는 치우치는 경우도 있음은 고려해야 할 것이다.
S급 개발자가 목표라면 관련 이야기가 좀 더 확장될 수 있다. 여러 코드에 대해 지식이 있다고 해도 주 종목 하나를 프로페셔널하게 잘 할 필요가 있고, 알고리즘에 대해서도 보다 심화된 지식을 지닐 필요가 있다. 다만 일반론적으로 따진다면 S급 개발자는 희귀종 수준이므로 참고로만 해두는 게 좋다. 박사 학위를 받은 개발자라도 3분의 1 만이 S급으로 분류되는 업계 현황을 고려한다면 더더욱 그렇다.
1.3. 교육 과목
컴퓨터 프로그래밍을 통해서 일반적 문제해결 능력 / 논리력을 기르고자 하는 새로운 교육 과정. 기존에도 중고등학교 과정에 정보 교과는 있었지만 존재감이 없었는데 이를 흡수하여 별도의 필수 정규교과목화 한 것.SW 교육은 2015 개정 교육과정에 따라 2017년에 초등학교 1~2학년이 처음 배우기 시작했고, 2018년에는 초등학교 1~4학년을 거쳐 2019년부로 모든 초등학생들이 SW 교육을 받기 시작했다. 중고등학교는 2018년부터 중학교 1학년과 고등학교 1학년이 배우기 시작해 2019년에는 중2와 고2 학생들이 배웠고, 2020년을 기점으로 모든 초등학생과 중고등학생들이 SW 교육을 배우기 시작해 코딩 교육이 정규 교육 과정으로 완전히 도입되었다.해당 기사[7] 하지만 직업적 프로그래머 양성을 목표로 C언어 등을 가르치는 전문계 특성화고등학교에서 배우고 대학수학능력시험의 직업탐구 영역의 하나인 프로그래밍 과목과는 다르다. 하지만, 중고등학생용 정보 교과서를 보면 불 대수가 나오고 python, C언어를 가르치게 되어 있다.
일반인이나 교육 관계자들이 가장 크게 오해하는 것이 코딩 교육이 미래의 소프트웨어 개발자를 확보하기 위한 교육이라는 잘못된 접근이다. 초등 ~ 고등학교에서 음악 교과를 가르치는 것이 가수나 작곡가 등 전문 음악인 양성을 위한 것이 아니고 단지 감성을 풍부하게 하는 교양으로 가르치듯이 모든 학생을 대상으로 가르치는 코딩 교육도 사고력과 응용력을 풍부하게 하는 두뇌의 체조에 불과하다. 이걸로 미래 전문인 양성에 도움이 된다고 할 수는 없다. 그저 일반인들에게 컴퓨터의 원리에 대한 기본적 이해를 늘리고 그중에서 재능이 있는 사람은 자신의 재능을 발견할 기회를 주는 정도에 불과하다.
흔히 코딩을 어렵지 않다고 강조하기 위해 코딩 학원 또는 프로그래밍 취업 과정 등에서 마치 6개월 정도 집중적으로 배우면 취업을 할 수 있다는 식으로 코딩이 어렵지 않다고 광고를 하지만 마치 6개월 정도 배우면 누구나 변호사나 의사나 수학자나 프로 축구 선수가 될 수 있다는 거나 마찬가지이다. 직업적으로 프로그래밍을 하려면 다른 직업들과 마찬가지로 적어도 2 ~ 4년은 전문적인 교육이 필요하고 연구 능력을 갖추려면 대학원 석사 등 그 이상의 교육이 필요하다. 초중고에서 12년이나 수학을 배웠다고 누구나 직업적인 수학자가 될 수는 없다. 취미로 바둑을 좀 둘 줄 알거나 공을 찰 줄 아는 것과 직업적인 프로 기사나 직업적인 프로 축구 선수가 되는 것은 전혀 다른 일이다.
마치 수학을 가르쳐서 수리적인 사고 능력을 기르거나 체육 / 음악 / 미술 교과를 통해 신체를 단련하거나 예술적 교양을 기르는 것과 비슷한 취지의 교육이다. 초중고 수학 교육이 사회에서 수학을 직접 활용하는 게 목표가 아니고 체육 / 음악 / 미술 교육도 운동선수나 예술가 양성이 목적이 아니듯이 코딩 교육도 프로그래밍 / 코딩 기술 습득 자체나 프로그래머 양성이 교육의 목표가 아니다. 초중고 수학 교육의 목적은 수학적, 과학적 사고 능력 배양이 목표다. 코딩을 배우는 것도 코딩을 직접 사회에서 활용할 기회가 있어서가 아니라 코딩을 통해 배울 수 있는 여러 가지 문제 해결 경험이 지능 발달과 문제에 대한 통찰력과 분석력 증진에 도움이 되기 때문이다. 다만, 교사가 코딩 수준을 컴퓨터교육과 1학년 수준으로 생각하고 가르친다면 이야기가 달라지니, 기성세대인 교사와 학부모가 어떻게 코딩을 이해하느냐가 관건이다.
그보다는 논리적이고 조직적인 사고방식, 복잡한 문제를 분석해서 이를 명확하게 이해하는 능력, 큰 문제를 간단한 여러 문제로 분할하여 추상화하는 능력, 문제를 순차적 기계적으로 이를 해결하는 능력, 수치와 판단을 기반해 문제를 해결하는 방법, 작은 부분을 조합해서 크고 복잡한 기능을 만드는 능력, 시행착오를 통해 해결책을 찾아가는 과정, 다른 사람과 소통하고 협력하여 큰 문제를 해결하는 능력 등등, 한마디로 말하면 "복잡함(Complexity)"과 순차적 조직적 문제해결 과정을 다루는 능력을 기르는 것을 목표로 한다. 이를 요즘은 디지털 문해력(digital literacy)라고 부르기도 하는데 코딩뿐 아니라 컴퓨터나 정보 기술 전반에 대한 지식이나 이해력이나 이런 정보 기술을 일이나 놀이에 활용할 수 있는 전반적인 이해력과 응용력을 말한다. 기술적 운동 신경이나 감각 또는 눈썰미에 해당하는 개념이라고 할 수 있다.
어쩌면 어린이들의 레고 블록 놀이나 비슷하기도 하다. 따라서 어떤 구체적인 지식 자체를 배우는 걸 목표로 하는 것이 아니고 그 배우는 과정에서 수많은 실패를 경험하면서 점진적으로 목표인 문제해결을 향해 한걸음 씩 나아가며 탐구심, 도전 정신, 끈기, 명료한 사고, 틀을 벗어난 창의적 사고방식, 흥미 유지, 타인과의 의사소통, 협동 정신 등 다른 공부나 활동에 유리한 여러 기술들을 몸에 익히게 된다. 수학이나 과학 실험도 그러한 능력을 기르는 데 좋은 도구이지만 수학보다 좋은 점은 비교적 난이도가 낮고 비용이 적게 들고 쉽게 실험을 반복하여 손에 잡히는(tangible)한 결과를 얻을 수 있으므로 수학에 비해 사전 지식이 덜 필요하고 학습자의 흥미를 유지하기가 좋다는 것이다. 수학은 한번 뒤쳐지기 시작하면 다음 과정이 이해가 되지 않아 따라가기 어렵다. 따라서 요즘 수학을 포기하는 학생 수포자 문제의 한 대안이 될 수 있다.
현재 초등학생의 경우 일주일에 1시간가량 가르칠 예정인데 이렇게 가르친다고 일부 코딩 교육 정책 추진자들이 주장하듯이 미래의 빌 게이츠나 저커버그 같은 IT 인재를 양성하는 교육인 건 결코 아니다. 일주일에 한 시간씩 미술이니 체육 교육을 시킨다고 미래의 피카소나 손흥민을 양성한다고 주장할 수는 없다. 코딩 교육의 목표를 구체적 인물로 예를 들자면 맥가이버 같이 호기심이 많고 임기응변, 응용력이 풍부한 인물일 것이다. 사실 단점도 없지는 않은데 과학은 발전 속도와 방향에 따라 어떻게 될 지 몰라서 코딩 의무화는 아무래도 국가가 선택권을 강제하는 면도 있다.[8]
무엇보다 도구를 만드는 인간, 공작인 (工作人, Homo faber)으로서의 본능을 어릴 때 일깨워서 미래의 이공계 인력 자원을 확보하기 좋은 교육이다. 원래는 실과 과목이 그런 목적이 있었지만 초중고 학교 현장에서 학생들에게 직접 목공 등 공작이나 제작 교육을 하기에는 예산이나 교사 등 여건이 부족하여 거의 효과가 없었는데 코딩은 학생들에게 직접 실용적 "물건"을 자기 손으로 제작해보는 경험을 하게 함으로써 이런 공작인으로서의 재능과 즐거움을 조기에 발견하게 하여 미래의 공돌이나 덕후의 길로 가게 하는 것이다.
코딩 교육에서 널리 채택되는 프로그래밍 언어들은 보통 굉장히 직관적이고 배우기 쉬우며, 경우에 따라 마우스 등의 입력기기를 통해서도 쉽게 작성 및 실행[9]이 가능하면서도 단순한 기본 요소들을 가지고 조합과 응용으로 복잡한 문제도 탐구적으로 시행착오를 통해 문제를 점차 점근적으로 해결하는 데 적합한 언어, 또는 그런 목적만을 위해 별도로 제작된 언어들이다. 과거에는 LOGO 언어라든지 BASIC 언어 등이 쓰였고 현대에는 스크래치, 엔트리 등의 GUI 기반 언어나 파이썬 등의 스크립트 언어, 조금 더 고등교육으로 넘어가면 Scheme[10], MATLAB 언어 등이 자주 쓰이는 편이다. 대체로 Java나 C++ 등 컴파일 언어보다는 간단한 파이썬이나 자바스크립트 같은 데이터형 선언이 없고 빠르고 반복적인 개발에 적합한 인터프리터 언어가 더 많이 쓰인다.
다만, 앞서 말했다시피 기성세대에겐 코딩=프로그래밍이라는 인식이 잡혀있어서 이 부분을 해결해야 한다. 또, 프로그래밍이나 코딩 해본 사람은 알겠지만 저게 어째서 되는 거지랑 이게 어째서 안되는 거지에 대한 절망은 전공자들도 엄청 심하게 느끼는 부담감이다.
그리고, 현실은 이러한 우려가 가장 심하게 나왔다. 이미 학원가에서는 초등학생 4학년은 이제 초등학교 수준을 넘어서 가르침을 받는다라고 하며, 실제로 강남권 등에서는 컴퓨터 공학과 전공 학생들도 어려워하는 대학 전공 수준을 가르치고 있다. 또, 학생들이 실패를 자주 겪고 초등학생 수준 수학보다 더 복잡한 코딩 때문에 심각한 좌절을 겪고 있다. 그리고 특히 2021년 들어 게임 회사와 네이버 등 IT 기업들의 연봉 인상 붐이 불며 미래 고소득 직업으로 부각되자 단지 교양 차원이 아닌 미래에 직업으로서 프로그래밍 기초 양성을 원하는 학부모들이 늘고 있다.
하지만 이걸 문제로 볼 것인지에 대해서는 다르게 볼 수 있다. 예를 들어 음악이나 스포츠 분야도 학교 교육이 아닌 미래의 음악가나 프로 스포츠 선수 등 해당 직업인을 희망하는 초등학생이라면 그런 수준이 과하다고 볼 수 없다. 초등학생 피아노 교육도 이미 체르니 30번 까지는 기본이다. 음악 대학에서 그보다 훨씬 고급의 과목을 배운다. 단지 과거에는 컴퓨터 분야는 중고등학교에서 그런 교육을 받은 학생이 없어서 대학교에서 그런 과목을 기초로 가르치는 것이지 만약 대부분의 입학생이 초중고에서 피아노 학원에서 배운 음악대학 입학생처럼 컴퓨터 프로그래밍을 배운 학생이라면 그 교육 수준은 크게 올라갈 수 밖에 없다. 현재대다수 대학의 프로그래밍 입문 강의는 아주 기초적인 수준에 불과하고 이는 초중고에서도 시간만 들이면 충분히 습득할 수 있는 내용이다.
이런 코딩 조기 교육은 다른 조기 교육과 마찬가지로 좋은 점도 나쁜 점도 있다. 같은 초등학생도 수학이나 운동이나 음악 등에서 개인의 성취 정도 차가 매우 큰 것처럼 코딩도 개인 차가 매우 크다. 수학도 초등학교 3학년에 고등학교 수학의 정석 수준을 끝내고 나중에 수학 올림피아드에 나가는 학생도 있고 고등학교를 졸업하고도 분수 셈도 어려워하는 학생도 있다. 11살에 바둑 프로에 입단을 하는 천재도 있고 평생 5급 바둑을 벗어나지 못하는 사람도 많다. 재능과 흥미가 있는 학생이면 초등학생이라도 책과 컴퓨터만 가지고도 남이 가르치지 않아도 자기 스스로 공부해서 간단한 게임 정도는 충분히 만들 수 있다. 이런 학생들에게 조기 교육은 호랑이에게 날개를 달아 주는 격이지만 반면 재능이 없는 학생에게는 억지 조기 교육은 수학과 마찬가지로 재미없고 지루해서 컴퓨터에 대한 공포심이나 반감만 갖게 할 따름이다. 또한 코딩은 실패가 잦을 수 밖에 없는데, 이 점은 학습된 무기력으로 이어지기 아주 좋은 과목이라서 자괴감만 들게 한다. 당장 앞에서도 말했듯이 전공자들도 코딩에 대해 좌절을 현재 진행형으로 맛보고 있다. 이 문제에 관해선 버그 문서로.
이런 코딩 교육의 목표는 꼭 컴퓨터나 프로그래밍 언어로만 할 수 있는 건 아니다. 코딩으로 땅콩 샌드위치 만들기처럼 크고 복잡한 문제를 작고 간단해서 모호함 없이 바로 실행할 수 있는 요소로 분해하고 순서대로 나열하고 조합하고 엄밀하게 기술하여 아빠로 하여금 땅콩 샌드위치를 만들게 하는 과정을 가르치는 방법이야 말로 코딩 교육이 가르치고자 하는 핵심 요소를 담고 있다.[11] 아빠 대신 로봇 팔이 그런 역할을 하게하면 그게 바로 산업 현장에서 쓰이는 로봇 프로그래밍이다.
실제로 레고가 이를 위해서 마인드스톰 외에 초보를 위한 단순 코딩 제품을 출시했다. 교육용 스마트 로봇을 코딩으로 움직여 조종하는 교육은 학생들의 흥미를 유지하고 코딩의 기초를 가르치는데 매우 좋은 방법이라 여러 기관에서 이를 시도하고 있다. 그리고 이런 로봇이나 레고나 마인드스톰 자체도 실제 기계 로봇이 아닌 컴퓨터 화면에서 움직일 수 있는 가상의 로봇이나 가상의 마인드스톰 시뮬레이터가 있기 때문에 비싼 로봇을 학교에서 보유하지 않더라도 그런 로봇 프로그래밍을 교육하거나 연습할 수 있다. 이로써 로봇 코딩의 비용의 문제나 유지 보수 문제를 해결 할 수 있다.
또 이런 코딩 교육의 일환으로 간단한 게임 제작을 가르치는 경우도 있다. 예를 들어 Pong이나 벽돌깨기 뱀 게임 스페이스 인베이더 수준의 극히 간단한 게임은 아이들도 이미 잘 알고 있으므로 그걸 구현해보는 것은 아이들에게도 흥미로운 경험이 되고 좌절하지 않고 흥미를 유지하기 쉽다. 또 보기엔 간단해 보이지만 좌표 처리 실시간 화면 표시 입력 처리 게임 논리 등 게임 제작의 이해에 필요한 뼈대는 모두 가지고 있어서 실질적 교육 효과도 크다.
이런 코딩 교육에 대해 학교에서 주에 1시간 정도 연간 30여 시간 가르치는 정도 외에 따로 학원이나 개인 교습 같은 과외가 필요할지는 개인에 따라 차이가 크다. 예를 들어 음악이나 미술, 체육 교육 에서는 음악, 미술, 체육 대학을 진학하고 이를 직업으로 삼으려면 현재는 중고등학교 때 그런 음악, 미술 학원이나 과외는 거의 필수적인 것으로 여겨지고 있다. 아마 코딩도 같은 길을 갈 확률이 높다. 즉 나중에 코딩을 직업으로 삼는 전문가들은 대부분 어릴 때부터 코딩을 전문가들로부터 전문적으로 배운 사람들이 하게 될 것이고 해당 대학 등의 정규 과정을 거치지 않은 사람은 마치 음악 / 미술 대학 출신이 아닌 음악가 / 미술가처럼 경력에 상당히 불이익을 받을 가능성이 있다. 하지만 단지 아이의 교양을 늘리거나 체력을 키울 의도로 피아노 학원이나 태권도 학원에 보내는 정도라면 굳이 현 단계에서 코딩을 배우는 데 학원을 보내야 하는 지는 아직은 시기상조이다. 아이가 코딩에 흥미를 보인다면 그냥 태권도 학원 보내는 정도로 가벼운 마음으로 보내는 정도가 적당할 것이다.
다만 2020년대 들어 이런 양상은 변하고 있다. 인공지능의 급격한 발전으로 미래의 노동이나 취업시장의 양상이 크게 달라질 수 밖에 없고 이런 발전 추세가 멈출 가능성은 거의 없다. 지금 아이들이 사회에 나가 취업을 할 무렵에는 인공지능은 현재의 PC나 스마트폰 만큼이나 사회에 깊숙히 침투해 있고 직업적 일을 하는데 거의 필수적 도구가 될 것이라 그런 인공지능을 잘 다루는 능력이 생산성을 좌우하게 될 것이다. 스마트폰도 어릴 때 부터 컴퓨터 접해 잘 이해하는 신세대들이 쓰는 것과 노인들이 쓰는 능숙도가 크게 다르듯이 인공지능이 더 발전해 직접 사용자가 인공지능 코드을 코딩할 필요가 없어진다고 해도 코딩교육을 통해 양성된 분석력이나 인공지능의 원리에 대한 이해력은 그런 인공지능을 더욱 더 잘 사용하게 할 수 있어서 이제는 어릴 때의 어느 정도 심도가 있는 코딩교육은 거의 필수로 보인다.
프로그래밍 직업인을 양성하는 것은 현재 학교에서 실시하는 코딩 교육은 턱도 없이 부족한 맛보기 정도밖에 되지 않으니 만약 프로그래밍이나 이와 유사한 기술 전문으로 하는 직업인으로서의 교양을 양성하려면 중학교 정도에서 진로를 정하고 최소한 학원이나 전문 교습을 받거나 특별 활동으로 컴퓨터 동아리 등을 통해 전문적인 프로그래밍을 익히는 것이 좋다. 프로그래밍도 수학이나 음악처럼 일찍 시작하는 게 크게 유리한 기술 중에 하나이다. 가끔 큰 해킹 사고를 일으킨 범인을 잡고 보니 중고등학생이었다는 보도가 나올 만큼 이 분야도 일찍부터 재능이 개화하는 과목이다. 그래서 영재 학교나 과학고 같은 데서는 코딩은 일찍부터 가르치는 게 타당하다. 프로 축구 선수로 성공하려면 최소 중고등학교 때 학교 축구부 선수는 해야 하는 거나 마찬가지다.
더 나아가 미래에는 마치 스포츠나 음악 등의 분야에도 유소년 클럽이나 컨서버터리가 있듯이 직업적 프로그래밍도 재능이 있는 학생을 선발해서 일반 중고등학교 공부와 병행해서 전문적인 교사 아래에서 체계적으로 실전적 프로그래밍 교육을 시키는 교육 과정이 등장하게 될 것이다. 또 대학 과정도 마치 음악이나 미술 대학 입학 시험에 해당 실기 시험이 있듯이 컴퓨터과학 관련 학과의 입학에는 기초적인 자료구조 및 프로그래밍 등 관련 시험이 포함될 수 있다.
미국에서는 AP 컴퓨터과학 기본과 AP 컴퓨터과학 A 교육 과정 및 시험이 실시된다.
1.4. 대한민국에서의 코딩
1.4.1. 부정적 견해
코딩교육 새 논란...“코딩없는 개발 비효율만 불러”코딩 열풍, 명과 암
[현장클릭]코딩으로 대학간다면?
[MT리포트]학부모 불안감 파먹는 '코딩 광풍'
[MT리포트]"국·영·수·코 하란거잖아요”…'코딩'이 싫은 아이들
"주입식 SW교육은 청년실업 더 심화시킬 것"…소프트웨어 전문가 쓴소리
코딩 열풍의 이면-도입 취지 좋지만 제2의 영어·수학 될라 '코포자’ 양산 우려…전문인력 충원 우선
코딩 취업설명회
코딩에 대해 기이하게 집착적인 정치인들이 많다. 정확히는 기성세대의 잘못된 인식이 매우 크다. 이러한 경향은 알파고의 등장과 ChatGPT의 상용화로 높으신 분들 사이에 AI 붐을 터뜨렸다. 결국 코딩 교육이 실시되게 되었으며 대한민국조차도 코딩 교육이 의무화 되었고 논란이 터졌는데도 정작 공무원들에게조차도 코딩을 가르쳐야 한다는 주장까지 제기되고 있다. 코딩 부트캠프 역시 미국에서 수입되어 서울과 경기도 지역을 중심으로 광범위하게 퍼졌다.
이런 현상에 대해서는 반응이 엇갈린다. 각종 시뮬레이션이나 프로그래밍이 연구에서 반드시 필요할 것만 같은 전공자 중에서도 코딩을 싫어하는 사람들은 엄청 싫어한다. 관심 있는 분야나 전공의 이론적인 연구는 좋아하지만 그것을 코딩을 통해 시뮬레이션 및 검증을 거치는 과정에서 스트레스를 받는 이공학도들은 자연 과학, 공학, 의학 등 분야를 막론하고 적지 않다. 심지어 컴퓨터 공학을 복수 전공으로 접하기에 가장 좋은 학과인 수학과에도 코딩을 싫어하는 학생은 굉장히 많다. 코딩 안 하면 학점 못 받고 졸업 못 하고 논문 못 쓰니까 타성에 젖어 하는 공부의 반복이다. 밥벌이와 연구를 위해서라도 코딩을 익혀야 한다는 이공계조차도 코딩에 대한 시선이 애증으로 얼룩져있는데 범위를 넓혀 대학생 및 젊은이들 전체로 따지면 더 말할 필요도 없을 것이다.
이렇듯 코딩에 대한 흥미 정도는 사람마다 천차만별이다. 허나 이에 대해 필요한 근본적인 고찰은 뒷전으로 미룬 채 대한민국이나 해외나 정치인들과 기성세대의 필요성에 의해 거의 강제적으로 코딩 교육을 집어넣고 있어 문제가 된다. 특히 코딩 교육을 강조하는 정치인들 대다수가 코딩에 대한 전문성이 없다는 것이다. 취업 준비생도 아니고 이미 기존 직장에서 무난하게 근무하며 잘 지내는 사람들에게 업무에서 잘 쓰지도 않아서 굳이 배워봤자 활용하지도 못할 코딩을 가르쳐야만 하는 가에 대해 의문을 갖는 이들도 늘고 있다. 과거엔 직장인들과 공무원들에게 니들이 고리타분하다고 주장해대며 창의성과 발상의 전환이 필요하다며 인문학 배우기가 유행하더니 이젠 또 코딩으로 유행이 옮겨간 것이다.
그 와중에 대한민국의 강력한 입시 열풍과 결합하여 코딩 사교육 시장이 성장하기 시작했다. 이들의 주 타겟은 고등학생 이하의 자녀를 둔 학부모와 취준생으로, IT 쪽은 학력도 나이도 안보고 매우 개방적이며 미래지향적이고 전망이 좋다는 둥 온갖 꽃밭으로 물든 미사여구로 고객을 현혹한다. 이게 무서운 점은 다른 과목과 다르게 코딩은 '그 결과물이 눈에 보인다'는 것이다. 가령 "수학과 영어를 공부해야 나중에 좋은 직장 간다"라고 백날 말해도 이게 현재 공부중인 학생이나 취준생에겐 와닿지가 않는다. 그러나 우리 일상에 밀접한 스마트폰, 게임, ChatGPT, 사물인터넷 등의 문명의 이기는 분명하게 사람들이 그 편의성을 인지하고 있기 때문에, "이런거 써보셨죠? 멋있죠? 코딩을 배우면 당신도 이런거 하는거에요. 좋은 회사 들어가서요." 식으로 고객들을 꾀는 것이 코딩 학원가의 주 전략이다.
알아둬야 할 것은, 각 학원에서 수업을 진행하는 강사들은 실제 개발 경력도 있고 업계에 종사경험이 있는 전문가가 맞겠지만, 일반인들에게 대뜸 코딩을 배우라며 권유하는 사람들은 그냥 학원을 홍보하는 사람이지 그 본인이 코딩을 해본 사람들이 아니라는 것이다.[12] 코딩 공부의 필요성을 본인이 느낀다면 당연히 공부하는 것이 맞고 학원을 다니는 것도 분명 좋은 선택이지만, 정말 코딩을 배워서 어디에 쓰는지, 업계 현황이 어떻게 되는지 등의 민감한 이야기는 그냥 실제 현업에 일해본 사람에게 물어보는게 정답이다.
이러한 코딩 열풍에 코딩 종사자들과 전문가들, 코딩을 가르치는 공교육 및 사교육계 인사들은 함박 웃음을 짓고 있지만, 사실상 입시위주 교육마냥 코딩을 가르치는 교육의 동기와 목적이 크게 변질된 것이다. 이러한 현상이 더 악화하기 전에 코딩 교육의 근본적인 목적과 의의가 무엇인지 교육계와 소프트웨어 업계, 그리고 한국 사회는 깊이 성찰을 해야만 한다.
1.4.2. 긍정적 견해
다만 위의 부정적 견해는 지극히 근시안적 견해라고 하지 않을 수 없다. 초, 중, 고등학교에서 음악이나 미술이나 체육을 가르치는 것도 이들이 다 예술가나 선수가 되기 위한 것이 아니라 상식적 현대 시민이 될 수 있는 기본이기 때문이다. 예술적 재능이나 신체적 능력이나 흥미가 없다고 학생들에게 음악이나 미술 체육 을 가르치는 게 잘못이라는 것은 지극히 근시안적이고 퇴행적 견해이다.이런 부작용에도 불구하고 프로그래머를 직업으로 하지 않을 사람에게도 코딩을 가르쳐야 할 이유는 있다. 문학이나 예술이나 문화 교양 역사 등이 종합적, 융합적 사고나 예민한 감수성과 공감 능력 등 인문적 지능을 훈련하는 데 적합한 교육이라면 코딩은 반대로 조직적 분석적 사고력이나 명석한 표현 등 이공계적인 지능을 훈련 시키는 데에 매우 효과적인 교육이다. 일부 학생들이 코딩을 배우는 데 어려움을 느끼고 힘이 든다는 것은 그만큼 기존의 사고방식에 큰 변화를 요구한다는 것이고 그만큼 교육의 효과가 크다는 것을 의미한다. 학교에서 코딩 교육의 목표는 코딩 가능자를 양성하려는 것이 아니고 바로 사고방식과 과정에 큰 변화를 일으켜 조직적 분석적 사고력을 높이기 위한 것이다.
코딩을 이해하는 사람과 그렇지 않은 사람은 컴퓨터와 관련 없는 복잡한 문제를 분석하고 접근하는 방식 자체가 다르고 결과물도 다르다. 예를 들어 순서도라든가 모델링이나 시뮬레이션의 개념은 코딩에서 나온 개념이지만 일반적 업무나 연구 분석에도 매우 유용한 개념이다. 프로그램 설계 도구인 UML은 경영컨설팅 회사 같은 데에서도 업무 과정의 설계나 개선에 많이 쓰인다. 코딩에서 나온 추상적인 것을 구체화하는 기술과 개념은 이와 같이 일반적 문제를 조직적으로 분석하고 구체화하는 데 매우 강력한 사고의 도구이다.
또 예를 들어 업무를 전산화하려고 할 때 해당 기존 업무 담당자가 자기 업무를 분석해 세부적인 요구 사항을 작성할 때 프로그램이 어떻게 그런 업무를 할 수 있는 지 코딩을 이해하는 것과 아닌 것은 개발진과의 소통 능력에 차이가 커서 결과에 큰 차이가 난다. 코딩을 하지 않더라도 코딩의 방법론을 이해하는 것은 다양한 현실의 업무나 소통에 엄청난 도움을 준다. 게임을 기획하는 프로듀서는 코드 한 줄 쓸 필요가 없지만 프로그램의 개발 과정이나 코딩을 이해하지 못하고 기획을 하면 현실적 기획도 소통도 되지 않아 프로그래밍 팀이 제대로 된 결과물이나 개발을 하기 어렵다.
위의 부정적 견해에 이공계도 코딩을 싫어한다고 하는데 이제 제대로 된 이공계 직장이나 연구직은 (인문계 연구직 포함) 코딩을 못하는 연구직은 할 수 있는 일이 지극히 한정이 되고 살아 남기 어렵다. 코딩을 못하는 것은 마치 과거 컴퓨터나 워드, 엑셀, 파워포인트 잘못 다루던 꼰대 부장님 정도로 업무 능력에 큰 핸디캡을 지게 된다. 코딩 못하는 신입 사원은 미래 꼰대 부장님 확정이다. 지금 대학생은 앞으로 40년 직장 생활 해야 하는데 현재의 40년 전 1980년대 직장에서 타자기나 주판이나 계산자나 청사진으로 업무를 보던 시대였다. 즉 현대에 코딩 못하는 것은 한국 직장에 PC 보급을 시작하던 1990년대에 컴퓨터를 쓸 줄 몰라 주판이나 타자기가 더 간편하고 빠르다고 고집하던 1990년대 꼰대 부장님 같은 꼴이 나는 거다.
현대의 사무직은 업무에 다량의 빅 데이터를 다루어야 하는 일이 흔해지고 역사학 연구도 빅 데이터 분석이 필요하다. 액셀로 간단히 다룰 수 있는 정도를 넘어서면 자기 업무에 필요한 다종다양한 분석 도구는 그걸 일일이 전산실에 의뢰하거나 외주를 주어 개발할 수도 없고 스스로 만들 수 밖에 없다. 그래서 교양으로 배운 코딩으로 엉성하게라도 엑셀 + 비주얼 베이직이나 파이썬 따위로 스스로 도구를 만들어 쓰는 직장인도 많다. 모바일 게임에서 리세마라나 챗봇이나 게임 모드 등 게임 매크로를 스스로 만드는 겜돌이도 많다. 이제 전산 개발과 전혀 관련 없는 일을 하는 사람도 어느 정도의 코딩 능력은 웬만한 고등학교 정규 과목보다 직장 생활이나 취미 생활 등 실생활에 유용하다.
위 부정적 견해에 코딩을 이해하지 못하는 고위층에 대해 비판하고 있는데, 이러한 현상을 줄이는 것이 코딩 교육의 보편화이다. 지금 가르치면 20 ~ 30년 후에는 그 학생들이 코딩을 이해하게 될 것이 아닌가? 코딩이 뭔지도 모르면서 그 중요성이나 영향력을 제대로 가늠할 수 있겠는가? 그러므로 지금 학생들에게 코딩을 가르치는 것은 10년후에 코딩을 할 프로그래머를 양성하기 위한 것이 아니라 바로 20년 후에 제대로 된 정책을 기획하고 개발 업무를 관리할 코딩을 이해하는 교육부, 문화체육관광부 공무원이나 기자나 회사 관리자를 양성하기 위해서이다. 더 나아가 컴퓨터나 프로그래밍 등 현 사회와 경제를 움직이는 핵심적 기술을 이해는 일반 시민을 양성하기 위해 필요한 교육이다.
옛날 선비들도 공맹 공부만 한 게 아니고 거문고도 배우고 활도 쏘았다. 코딩도 마찬가지이다. 이제 컴퓨터는 현대인의 상식이고 코딩은 교양이다. 더구나 이제 IT 기술은 현대 경제를 움직이는 가장 큰 동력이고 AI 는 인류의 미래를 근본적으로 변화시킬 동력으로 여겨지고 있다. 학교에서 과학을 가르치는 이유도 과학자 양성이 아니라 과학기술로 움직이는 현대사회를 이해하는 시민, 직업인을 양성하는 것이고 최소한 각종 유사과학 사기에 속지 않기 위해서이다. 예술을 가르치는 것도 하다못해 예술이나 스포츠 팬이 되었을 때나 예술이나 문화 관련 투자를 할 때도 최소한 용어나 개념과 과정을 이해해야 제대로 펜질이라도 할 수 있기 때문이다. 세계적 투자가 워렌 버핏도 80년대부터 지금까지 이어지는 컴퓨터 인터넷 등 장기적인 IT 산업 붐에도 2000년대 후반에 들어서야 애플이나 아마존 등 IT 주식에 투자하기 시작할 정도로 IT 산업의 성장에 관심이 낮았는데 이는 그가 IT 쪽에 문외한이었기 때문이었다. 모든 것이 과학기술과 컴퓨터와 프로그램으로 움직이고 변화하는 현대사회에서 과학기술과 IT기술은 정치적 국제적 외교적 군사적 사회적 경제적 문화적으로 막대한 영향을 미치고 있다. 그런 사회에서는 과학기술과 IT 기술을 알아야 공무원도 정치가도 군인도 기자도 사업가도 투자자도 예술가도 회사원도 농부도 주부도 될 수 있다. 이런 현대사회에서 컴퓨터나 코딩 모르면서 시민으로서 또 직업인 생활인 유권자 투자가 문화애호가 로서 제대로 활동할 수 없고 사회나 정치 경제 문화에 대한사회와 경제를 제대로 이해하고 올바른 여론이나 의견을 형성할 수는 없다.
1.5. 같이 보기
2. 자동차의 튜닝 중 하나
자동차의 튜닝 중 하나로서, 사용자가 변경할 수 없는 자동차의 특정 기능을 활성화 또는 비활성화하거나 수치를 변경하는 것을 의미한다.자동차 브랜드들은 하나의 자동차를 만들어서 전세계로 수출하게 되는데, 제조사들은 지역별 규정이나 규제, 지역별 필요사향, 옵션과 등급의 차이 등에 전부 대응할 필요가 있다. 하지만 이 수많은 경우의 수에 전부 대응하는 각기 다른 모델을 개발하여 생산하면 많은 비용이 들기 때문에 제품 자체는 단일화시켜 생산히고 모델에 따라 특정 기능을 소프트웨어적으로 활성화 / 비활성화시켜 출고하는 경우가 많다.
코딩은 이런 식으로 비활성화된 기능들을 다시 살려내 사용할 수 있도록 하거나 필요하지 않은 기능을 끄는 튜닝을 의미한다.
따로 부품을 살 필요 없이 컴퓨터와 OBD2 케이블과 프로그램만 있으면 상대적으로 쉽게 할 수 있는 튜닝 중 하나이며 옵션을 추가하거나 특정 옵션이 있는 트림을 구매하는 돈에 비해 저렴하다 보니 만족도가 높은 편이다.
예를 들면 BMW의 잠금 시 사이드미러 접힘 시간을 줄인다던가[13] BMW M 로고를 계기판이나 아이 드라이브에 시동 시 띄우거나 변수를 바꿔 편의 기능으로 활성화한다
또한 더욱 더 어려운 방법으로는 차량 첫 출고 때부터 해당 기능의 주요 부품이 장착되어 있거나 없어도 간단 설치로 호환이 된다면 해당 스위치나 부품을 구매하여 장착 후 다른 차량의 기능 인증서(FSC)를 추출해 임의적으로 삽입하여 넣기도 한다 그런 식으로 하는 것을 “VO코딩” 또는 “레트로핏(Retrofit)” 이라 한다.
이베이 등지에서 1만원 ~ 2만원사이에 FSC 인증서를 구매해 Apple CarPlay 를 활성화 하거나 Android Auto 를 활성화 하거나[14] 다른 차에서 추출한 인증서를 임의로 삽입하여 인식하게 하는 방식이 있다.[15] 또한 제조사에서도 제조사 수리용 프로그램을 실행하면 강제 활성된 기능을 자동 해제하긴 하지만 이베이에서 1~3만원 사이에 리얼 인증서를 구해 넣는다면 그마저도 해제되지 않는다.
자동차 코딩이 활성화된 차량 브랜드로는 주로 BMW가 널리 알려져 있으나, 아우디나 토요타와 같은 다른 회사들의 차량에서도 어느 정도 코딩이 가능한 것으로 알려져 있다.
3. 조사방법론 용어
조사방법론에서 코딩은 흔히 부호화로 번역되며, 양적으로 처리 가능한 각각의 값(value) 혹은 문자 부호에 질적인 의미를 대응시키는 과정이다. 척도를 활용한 질문지에서 코딩은 굳이 필요치 않거나 혹은 질문지 개발 단계에 포함되나, 개방형으로 수집된 주관적인 자료의 경우 수집 이후에 반드시 코딩이 뒤따르게 된다. 가장 대표적이고 이해하기 쉬운 코딩의 사례로는 "남성"=1, "여성"=2 같은 식으로 처리하는 것이 있지만, 코딩이 문제가 되는 대부분의 상황에서 코딩은 이보다 훨씬 더 복잡하다.자료수집에 있어 개방성이 높아지고 구조성이 낮아질수록, 수집 이후의 코딩의 노고는 그만큼 증가하게 된다. 단순히 노가다라서 문제라는 것이 아니라, 조사든 연구든 간에 그것이 실제로 사회적 가치를 갖기 위해서는 코딩 과정에서의 엄격성과 체계성을 만족시켜야 하기 때문에, 힘들다고 적당적당히 하고 넘길 수 있는 작업이 아니다. 질적 연구자들이 대개 그렇듯이 코딩 작업 중에는 여러 사람들이 몇 시간 이상씩은 있는 힘을 다해 전심으로 집중해야 할 정도로 정신적으로 고되다.
코딩의 어려움은 개방형 질문에서 응답자들이 응답한 각각의 답변들을 어떻게 처리할 것인지 고민하는 데 기인한다. 사람들마다 천차만별로 답하기는 했어도, 조사자는 그들 중 일부는 서로 비슷한 생각을 서로 다르게 표현했을 수 있다는 가능성을 놓지 말아야 한다. 결과적으로 비슷한 것끼리는 서로 묶어주고, 이 각각의 묶음들의 응답 빈도가 어느 정도인지 식별하는 분류 작업이 코딩의 상당수 시간을 차지하게 된다. 결과적으로 가장 빈번하게 수집된 응답의 묶음들에 양적인 값들을 부여하게 되는데, 이와 같은 분류의 과정을 탤리(tally)라고 부른다.
Q. 귀하는 나무위키에 대해서 어떤 의견을 갖고 계십니까? ① 긍정적이다 ② 부정적이다 ③ 별 생각 없다 ④ 기타 의견 | ||
응답별 빈도 | ||
문항 | 빈도(단위: 명) | 값 |
① 긍정적이다 | 196 | 1 |
② 부정적이다 | 278 | 2 |
③ 별 생각 없다 | 402 | 3 |
④ 기타: 긍정적이면서 부정적이다 | 57 | 4 |
④ 기타: 긍정도 부정도 아니다 | 15 | 5 |
④ 기타: 있으면 좋지만 없어도 상관없다 | 10 | 6 |
④ 기타: 그때그때 다르다 | 8 | 7 |
여기서 만일 어떤 응답자가 "머리로는 나쁘다는 걸 아는데 마음으로는 재미있다" 로 4번에 적었다고 해 보자. 이 응답을 "기타: 긍정적이면서 부정적이다" 쪽으로 어렵잖게 분류하는 조사자들도 많을 것이다. 그런데 만일 "고민 중이다" 로 응답한 사람이 나왔다면, 이건 "기타: 긍정도 부정도 아니다" 에 함께 분류하는 것이 옳을까? 또는, 만일 "나무위키는 의견을 물을 가치조차 없는 사이트이므로 이런 조사는 하지 말아야 한다" 고 응답한 사람이 나왔다면, 이 의견은 기타 의견란에 길게 썼지만 어쨌든 조사자가 임의로 "부정적이다" 쪽으로 이해해서 코딩해도 될까? 이런 판단은 엄청난 시간과 고민을 요하며 여러 조사자들 사이의 협의가 필요할 수도 있다. 개방형 질문에서 코딩이 힘들다는 말은 바로 이런 의미다.
자주 거론되는 코드로는 다음과 같은 종류가 있다.
- 순서 코드(sequence code): 모든 질적 의미들을 단순히 순서대로 숫자에 대응시킨다. 가장 간단해 보이지만 나중에 코드를 손보기가 힘들고, 단순한 순서에 입각했기 때문에 숫자만 보고는 이게 원래 무슨 뜻이었는지 짐작하기가 어렵다. 그래도 객관식 조사에 잘 어울리고, 숫자를 쓰기에도 가장 경제적인지라 종합사회조사 같은 대규모 조사에서는 순서 코드 외에는 생각하기가 어렵다. 이 경우 코드의 각 값의 해독을 위해 코드북(codebook)이 있어야 한다.
- 완전 순서 코드(complete sequence code): 순서 코드의 중간중간에 예비용으로 빈 공간을 만들어서 추후 코드 체계의 수정을 용이하게 한다. 하술할 블록 코드와 비슷하게 쓸 수도 있다.
- 블록 코드(block code): 먼저 자료를 분류하여 여럿으로 나누는 블록화 작업을 하고, 각각의 블록마다 순서 코드의 형태로 의미를 숫자에 대응시킨다. 이 경우 블록 체계가 복잡하면 블록화하는 의미가 없다.
- 집단 분류 코드(group classification code): 일정한 분류기준을 사전에 잡아둔 후 대·중·소분류를 나누고, 각 집단 속에서 순서 코드의 형태로 숫자의 각 자릿수에 의미를 대응시킨다. 가장 체계적이지만 가장 낭비되는 숫자가 많다. 직업분류코드, 주민등록번호, 우편번호가 대표적인 사례다.
- 의미 코드(mnemonic code): 본래 의미를 연상할 수 있도록 문자 기호에 대응시킨 코드. 직관성은 높지만 통계적 처리는 불가능하다. 공항 코드가 대표적이며, 증권 분야에서도 AMZ, GGL, F 따위의 코드를 활용하고 있다.
코딩은 늘 잘못 입력할 가능성을 내포한다. 오류에도 대표적인 몇 가지 종류가 있다.
- 전사 오류(transcription error): 하나의 숫자나 문자 기호를 다른 것으로 잘못 입력한 경우이다. 12345라는 코드를 잘못해서 12245로 입력하는 것이 그 사례.
- 전위 오류(transposition error): 두 숫자나 문자 기호의 위치를 서로 뒤바꾸어 입력한 경우이다. 12345를 잘못해서 13245로 입력하는 것을 말한다.
- 생략 오류(omission error): 원래 입력해야 할 숫자나 문자 기호를 입력하지 않은 경우이다. 12345를 입력해야 하는데 1245만 입력해 놓은 상황을 가리킨다.
- 추가 오류(addition error): 원래 입력해서는 안 될 숫자나 문자 기호를 입력한 경우이다. 12345를 입력하다가 잘못해서 123345로 입력하는 오류가 이것.
무엇이 오류임을 찾아내는 것도 쉽지 않다. 예컨대 5지선다 객관식 조사의 다섯 문항이 14245로 코딩되어야 한다고 가정해 보자. 잘못해서 키보드의 손 위치를 엉뚱한 데 올려놓아 47578로 코딩했다면, 이 부분에서 오류가 생겼음을 눈치채기는 쉽다. 그런데 14145로 잘못 코딩했다면, 이 경우에는 질문지 원본을 처음부터 다시 대조하지 않는 이상 그것이 오류임을 눈치채기 어렵다. 이런 문제를 해결하기 위해서는 조사자 2명 이상이 동일한 자료를 중복으로 코딩하면서 서로의 코딩 결과에 달라지는 부분이 있는지를 점검하는 방법이 있지만, 엄청난 인력 낭비이기 때문에(…) 잘 쓰이지는 않는다. 이처럼 오류의 발생 여부를 찾아내는 활동을 가리켜 클리닝(cleaning)이라고 한다.
리커트 척도(Likert scale)의 경우 역코딩(reverse coding)이라는 활동이 추가로 요청될 수 있다. 예컨대 국민들의 행복을 측정하기 위해서 '매우 그렇다'~'매우 아니다' 의 5점 척도를 제작했다고 가정하자. 각각의 문항들이 "귀하는 지금 행복하십니까?", "귀하는 다음 생에도 지금 같은 삶을 원하십니까?", "귀하는 삶의 의미를 추구하고 계십니까?", "귀하는 원하는 바를 이루고 계십니까?" 같은 질문들로 구성되어 있는데, 그 중의 하나는 뜬금없이 "귀하는 지금 우울하십니까?" 를 질문하고 있다. 이것을 그냥 코딩하게 되면 문항 간 신뢰도가 약해지게 된다. 다른 모든 문항에는 그렇다고 응답한 사람은 이 문항에만 아니라고 응답할 것이고, 다른 모든 문항에 부정적인 사람은 이 문항에만 긍정적일 것이기 때문이다. 그렇기 때문에 여기서만 1→5, 2→4, 4→2, 5→1 형태로 코딩을 뒤집어 줄 필요가 있다.
코딩에서 또 다른 중요한 문제가 바로 결측값(missing value) 혹은 무응답(no answer)의 처리 방안이다. 웹 기반 질문지의 경우 응답하지 않은 문항이 있으면 설문 진행을 막는 기능도 있지만, 지필 질문지는 별도의 조사원이 붙지 않으면 결측값을 방지하지 못하는데다, 배포식으로 진행하는 조사는 응답자가 다른 데 한눈이 팔리거나 대충대충 응답하는 상황을 통제할 수가 없다. 여러 이유로 결측값은 흔히 발생할 수밖에 없고, 이에 대응하는 방법들도 다양하게 고안되었다.
- 결측값 제외: 가장 흔한 방법. 이후의 통계적 처리에서 결측값으로 지정된 값이 보이면 무조건 빼도록 조치한다. 이를 위해, 8 이하의 숫자들로 값이 지정된 경우에는 9를, 두 자릿수까지 값이 올라가는 경우에는 99를, 세 자릿수까지 올라가면 999를 지정하는 것이 관행이 되어 있다. SPSS 같은 프로그램에서도 이런 숫자가 보이면 자동으로 계산에서 빼도록 지시할 수 있다. 일부 통계 분석의 경우, 그 내적인 논리 상 결측값이 존재하면 분석 자체가 안 되는 경우가 있다.
- 평균 삽입: 결측값이 발생한 변인에서 그 문항의 빈 칸을 빼기보다는 그 변인의 평균으로 채워 넣는다. 한 반의 수학 점수 평균이 72점인데 학생 한 명이 시험지를 제출하지 않았다면, 그 학생의 수학 점수가 72점일 거라고 가정하는 방식이다. 따라서 평균에 영향을 주지 않는 방식으로 결측값을 보정하지만, 그만큼 통계량의 산포(dispersion)가 과소 추정되는 문제가 발생한다.
- 최빈값 삽입: 평균 삽입과 같은 논리이지만, 여기서는 최빈값을 삽입한다. 결측값을 보인 응답자의 실제 응답은 가장 흔하게 나타나는 응답일 가능성이 높다고 전제하는 것이다. 이 경우 응답의 분포가 편포라면 평균에도 영향을 줄 수 있다.
- 회귀식 예측: 흔하게 택할 수 있는 방법 중에서는 가장 엄밀한 방법. 회귀 분석이 예측에 적합한 분석이라는 점에 착안하여 데이터의 빈 자리에 들어갈 값이 무엇인지를 회귀식을 세워서 예측한다. 그러나 이 역시 산포를 정확하게 추정할 수는 없다.
- 보삽법(interpolation): 시계열 분석에서 활용되는 방법. 전체적인 추세를 확인한 후, 누락된 시기의 결측값을 추세에 맞게 채워넣는다. 예컨대 2000년에서 2020년까지의 주민등록인구 자료가 있는데 2018년 자료만 없는 상태라면, 해당 연도에는 전체적인 인구변화 추세에 부합하는 숫자를 넣는 것이다.
- 유사 응답자 확인: 결측값을 보인 응답자의 전반적인 응답 패턴을 파악하고, 그 응답자와 가장 비슷한 응답을 한 다른 응답자를 찾는다. 그리고 그 응답자가 해당 문항에 어떻게 응답했는지 살펴서 문제의 결측값에 그 값을 채워넣는다.
물론 본격적인 통계학의 영역으로 들어가자면 이보다 더 복잡한 방법들도 얼마든지 쓰일 수 있다. 예컨대 단순확률대치법(single stochastic imputation)에 속하는 Hot-Deck 방법이라든지, 부트스트랩의 논리를 활용하여 최종 추론의 자유도를 조정하는 다중대치법(multiple imputation) 같은 것들도 있다.
3.1. 둘러보기
🏬 사회과학 조사·연구 방법론 둘러보기 | |||
{{{#!wiki style="margin: 0px -10px -5px; min-height: 26px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -2px -11px" | <colbgcolor=#C1F3FF>📝 서론 | <colbgcolor=#F7FFFF,#191919>사회과학 · 과학적 방법 · 사회조사 · 연구 · 가설 · 이론(이론적 조망) · 연구윤리 | |
🔍 조사방법론 I | 변인 · 정의 · 상관관계와 인과관계 · 실험(실험설계 · 통제 · 통제집단과 실험집단) · 사례연구 | ||
자료 · 자료수집(면접법 · 초점집단면접법 · 질문지법 · 관찰법) · 코딩 | |||
📈 조사방법론 II | 표본조사 · 지표 · 측정 · 신뢰도와 타당도 · 지수 · 척도 | ||
📊 사회통계 | 통계적 방법 · 기술통계학 · 확률 및 분포 · 추론통계학 · SPSS · 분석기법(분산분석 · 회귀분석) | ||
👔 공인 자격증 | 사회조사분석사 · 빅데이터분석기사 · 국가공인 데이터분석 전문가 | ||
📂 메타 문서 | 연구방법론 관련 정보 | ||
상기 문서들은 한국통계진흥원 및 한국산업인력공단의 출제범위에 의거하여 엄격히 망라되어 있으며, 동 기관의 과목별 구분·명명에 의거하여 조사방법론은 2파트로 구분됨 |
[1] 이런 것을 손코딩이라고 부른다. 굉장히 무식한(?) 노가다 같아 보이지만, 2020년 전면 개정 정보처리기사 시험이나 개발자로서의 구직 면접을 본다면 손코딩을 이가 갈리도록 반복해야 할지도 모른다. 손코딩 '면접' 정도 되면 거의 이공계 지망 대학(원)입시 수험생들이 치르던 구술 면접과도 비슷해진다. 이 손코딩이라는 것에 있어서도 교육자, 학습자, 현업 프로그래머 등의 취향이 갈리는데, 코딩 교육에 있어 전공자들의 입장에서야 귀찮아 보일지 몰라도 기초부터 가르칠 때에는 수학 시간에 공리, 정의, 정리, 증명을 손으로 써 가듯 컴퓨터 없이 손으로만 써가며 사고력을 키우는 것이 중요하다고 보는 사람이 있는가 하면, 모티베이션 고갈을 우려하여 오히려 기초과정일수록 적당한 교육용 프로그램에다 해야 한다는 사람도 있다.[2] 이 과정을 컴파일(compile)이라고 한다. 단순한 텍스트 파일을 프로그램으로 바꾸어 주는 과정이다.[3] 마치 해킹을 하는 것 같다만 실상은 해당 언어 프로그램에 맞는 코드를 쓰고 디버깅을 하고 오류 문구가 뜨자 그걸 검색하는(...) 내용이다.[4] 이것들을 오류, 혹은 에러(Error)라고 부른다. 전자는 에러 중에서도 특별히 컴파일 에러(compile error)라고 부르고, 후자는 런타임 에러(runtime error)라고 부른다. 컴파일 중에 에러가 발생하는지, 실행 중에 에러가 발생하는 지에 따라 달라진다.[5] 이것을 버그(bug)라고 부른다.[6] 이 과정을 디버깅(debugging)이라고 부른다.[7] 2000년대생 부터 대부분 2015 개정 교육과정 적용에 따라 코딩 교육을 정규 교육과정으로 배우기 시작했다.[8] 하지만 수학이 그렇듯이 컴퓨터과학의 지식 대부분은 개념이나 논리에 가까운 것이기 때문에 시대가 지난다고 해서 크게 바뀌지는 않는다. 단, 윈도우용 프로그램, 안드로이드나 iOS용 애플리케이션 등 특정한 플랫폼에서 돌아가는 애플리케이션이나 프로그램을 만드는 법은 매우 자주 바뀌는 편이다. 따라서 코딩을 배울 때 썼던 방법을 나중에 그대로 써먹지는 않을 거다. 그러나 컴퓨터 과학의 개념들이나 문제 해결 방법들은 수학처럼 죽을 때까지 써먹을 수 있다.[9] 즉 컴파일 등의 과정이 간단한 GUI 내부적으로 가려지는 환경을 사용하거나, 인터프리터 언어를 사용한다.[10] 주로 프로그래밍 언어론 시간에 SICP랑 같이 배운다.[11] 실제 코딩마냥 이 비유에서도 자식(입력값)에 따라 아빠(출력값)가 실수를 자주 범한다.[12] 이러한 부분은 개발자들이 네이버 블로그를 선호하지 않는 이유에 한몫했는데, 가장 접근성이 좋은 플랫폼임을 이용하여 블로그나 카페를 통해 그저 코딩을 배우면 취직도 잘되고 모든 일이 잘 풀릴듯이 코딩을 권유하는 학원들의 광고글이 범람하고 있기 때문이다. 이런 학원의 마케팅 담당들은 코딩 경험이 없기 때문에, 블로그에 IT 정보랍시고 올라오는 것도 대부분 두루뭉실하거나 추상적인 개념으로 포장하고 있으며, 조금만 딥한 수준으로 들어가면 아예 잘못된 정보가 있을 정도로 전문성이 의심될 지경이다.[13] 기존은 3초이상 눌러줘야지 실행된다[14] 그마저도 제공되는 툴로 클릭 몇 번 하면 활성화 된다[15] 주로 차선 이탈 방지나 전방 충돌 경고 등 고급 기능을 많이 활성화 한다