LangDev

최근의 programming 언어의 교육은 어떤 추세인가요?.

김우승

자신이 아는 바에 대해서 적당히 적어주시면 감사하겠습니다. 앞으로의 추세에 대해서 생각나시는 바가 있다면 좋겠고요.

저는 지금 28살입니다. 제가 공교육으로 받은 programming 언어 수업은

초등학교 6학년 때 8bit computer(아마도 Apple?)에서 booting과 함께 실행되는 BASIC을 2시간? rom cartridge를(아마도 재믹스?) 꽂을 수 있는 기종이었는데 수업시간에 오락을 하는 경우가 좀 있었죠. 당시 초등학교에서 programming을 가르칠 수 있는 선생님은 없다고 해도 과언이 아니었을 겁니다. 당시 존경하는 6학년 담임선생님이 시도해본 거죠.

그리고 중학교때 학교에서 선생님이 computer로 뭔가를 하는 것을 봤던 거 기억나는 것은 Windows 3.1에서 지뢰찾기, 카드놀이 하던거... ^_^

중학교 때부터 computer가 시험답안을 채점하는 OMR 카드가 등장했던 것이 학교에서 computer를 쓰는 큰 활용거리였던 것으로 기억납니다.

고등학교때는 QBASIC을 3일(6시간?) 정도 했던가?.....

대학교때 C, C++, Java(날림?...) 배웠군요.

그외에 초등학교 6학년때 학원에서 6개월 좀 못 미치게 16bit computer에서 GW-BASIC 을 배웠었습니다.

앞으로 수많은 사람들이 programming을 하게 되겠죠. 단지 programming을 직업으로 삼는 사람들만이 아니고요.

많은 분들이 왜 대학에서 처음으로 가르치는 것이 C언어인가? (요새는 Java로 하는데도 많다고 하던데...) 라는 고민은 한번쯤 해보셨을 거라고 생각합니다.

하지만 paradigm 변화의 중심은 대학이 아닐지도 모르겠다는 생각이 드네요. 원래 BASIC이 교육용으로 만들어졌었죠?.... BASIC에 대해서 부정적인 분들이 많은텐데 그 평가를 내리기에는 너무 이를지도 모르겠습니다.

앞으로 programming 언어를 배울 때는 프로시저, 함수, 객체, 함수객체, 클로저라는 말을 모르고 다룰 날이 올지도 모를 겁니다. 마치 그것이 당연한 것인양 다룰지도 모르죠.

C를 배우면서 답답해서 미칠려고 할지도 모르겠습니다... ^_^

아, 그리고보니 programming 언어는 아닙니다만 HTML 역시 대학때 좀 배웠군요.

제가 학생때는 C-> C++ or Java 순으로 배웠습니다. C를 배울때 문제가 되는건 대부분 사람이 로직보다 언어 자체의 문법을 이해하지 못해서 고생을 하고 또 포기를 하는 것을 많이 봤습니다.

보다 쉬운 문법으로 쉽게 흥미를 낼 수 있는 언어를 가르치는게 어떨까요? 예를들면 Python과 같은 녀석이요.

daewon

저는 현재로서는 scheme이나 haskell이 가장 좋다고 생각합니다. 프로그래밍을 한번도 해보지 않은 사람에게는 프로그래밍을 하면서 그 기반 구조도 알아야 하는 건 큰 부담입니다. C/C++/Java등은 그런 면에서 정말 가르치기 힘든 언어입니다.

지금도 프로시저, 함수, 오브젝트, 클로저라는 말을 몰라도 사람들이 엑셀 등에서 프로그래밍 잘 하고 있습니다.

굳이 따지자면 프로그래밍으로 밥먹는 사람은 앞으로도 반드시 알아야 하고, 밥먹고 살려고 프로그래밍하는 사람들은 앞으로도 몰라도 되는 지식이지요.

semmal

현재 컴공 학생입니다. 저는 Gw-Basic->Q-Basic->VB->C->C++,JAVA 순으로 배웠습니다. C를 배우기 어려웠던 건 언어자체의 문법이나, 포인터 정도 때문이었던 것 같습니다.

그런데 제 주위에서 컴공 3학년임에도 불구하고 간단한 프로그램을 짜는 것조차 힘들어 하는 학생들을 보면 문법이 어려워서 보다는 애초에 문제를 풀어나갈 방법부터 모르는 경우가 대부분인듯 했습니다. 물론 C의 포인터와, JAVA의 객체지향, 이 부분도 있겠지만요.

아, 현재 저희 학교 저희 과의 커리큘럼 자체는 1학년때 1년간 C를 배우고 2학년 때 한학기 정도 C++을 배웁니다. 다른 언어는 커리큘럼에 포함되어 있지 않아요…

컴공3학년

저 역시 semmal 님의 생각에 동의합니다. Haskell과 Scheme이 가장 적당한 언어 같고, 하나를 더 꼽으라면 Smalltalk가 있겠습니다. 중학교 이상에게는 Haskell, Scheme이 좋을 것 같고, 어린 아이들에게는 Smalltalk가 더 좋을 것 같습니다.

제 동생에게 Smalltalk를 가르친 적이 있습니다. 약 2년 전이었는데, 제가 고3 때였고 동생은 초등학교 5학년으로 올라갈 때쯤이었습니다. Squeak을 받아서 가지고 놀라고 하니 잘 놀더군요. 사실 생각해보니 제가 가르쳐준 게 없어서, 제가 가르쳤다고 하기 힘드네요. 좀 놀라웠던 것이 하나 있었는데, 모든 메서드가 영어라서 무슨 뜻인지 모르겠다고 하길래, 그럼 숫자에 더하기: 메서드를 써보라는 말만 툭 던지고 저는 딴 짓을 하러 갔습니다. (사실 ‘메서드’라는 용어조차 가르치지 않았습니다. 대충 ‘말’이라고 설명했던 것 같습니다.) 좀 있다가 다시 가보니까, 숫자 클래스에 더하기: 메서드를 정의해서 쓰고 있더군요. 빼기:곱하기:, 나누기:도 만들어서 쓰고 있었습니다. 제가 놀라서 어떻게 메서드 만드는 법을 알았냐고 했더니, 그냥 일단 1 더하기: 2라고 쓰고 실행시켜보니 뭐라고 에러가 떠서 예(yes)만 눌렀더니 “더하기:라는 말이 뭔지 설명하라고 하는 것 같은 창”이 뜨길래 거기서 아무거나 그럴듯하게 쳐보다가 알아냈다고 했습니다. (리턴하는 ^ 연산자를 어떻게 알아냈는지도 여전히 미스터리…)

다만 요즘 초등학생들은 워낙 화려한 그래픽의 게임을 많이 접해서인지, Squeak의 그래픽에는 쉽게 흥미를 잃어버리더군요. 결국 제 동생은 짧은 시간 그걸 붙잡고 놀다가 나중에는 다시 게임을 하더라구요.

관련이 있는 것 같아서, 제가 고등학교 때 후배를 가르쳤던 것에 대해서 KLDP에 썼던 글도 링크합니다. http://kldp.org/node/91217#comment-430616

홍민희

이 글타래에서는 물론 초급자나 비전문가들에게 학습시키기 좋은 언어에 대해서 이야기해보는 것도 좋지만 제가 좀더 관심있는 사항은 최근의 초중등 학생의 컴퓨터 수업이 어떻게 진행되는가입니다.

어떻게 보면 옛날에는 programming을 하지 않으면 computer를 대하기 어려웠지만 지금은 다양한 응용 program이 있어서 programming 언어 수업보다는 그런 응용 program을 가르칠지도 모르겠군요. 하지만 분명 programming 언어를 가르치는 수업도 있을 것 같기에 그 사항에 대해서 아시는 분이 있으면 가르쳐 주십사 부탁드립니다.

Programming 언어는 언어 core 뿐 아니라 이미 제작된 library도 언어 보급에 큰 영향을 끼친다는 점은 물론 다들 아실 겁니다. 또한 국내에서 Haskell, Scheme 혹은 Smalltalk을 알아서 가르칠 수 있는 사람도 적을 거라고 생각합니다. 무엇보다 한국어로 된 자료가 너무 부족하거든요. 저는 그렇기에 초급은 Basic, 고급은 C/C++ or Java의 인식을 무너뜨릴 가능성이 있는 언어는 Python이 아닐까 싶습니다.

이건 어디까지나 진보적 관점에서 하는 이야기죠. 우리나라는 MS 제품의 영향력이 너무 강해서 Visual Basic(그것도 version 6)의 아성이 무너질 것 같지가 않습니다.

여기 누군가가 정치가나 고급기술공무원이 되어서 정보처리기능사에서 Visual Basic을 Python으로 바꿔줬으면 좋겠다는 생각을 좀 해봅니다.

김우승

기본적인 프로그래밍을 가르칠 때 몇가지 고려해야할 사항이 있습니다.

  1. 프로그래밍을 해야한다.
  2. 문법을 알아야 한다.
  3. 기본적인 라이브러리를 알아야 한다.

보통 대부분의 교육은 2번과 3번부터 진행이 됩니다. 학원을 가도 그렇고 수업을 들어도 대부분 이런 식입니다. 1번은 가장 마지막에 가르치게 되고 보통은 알면 다행이고 모르면 어쩔 수 없다는 식인게 대부분입니다.

그럴 수 밖에 없는 것이, C/C++/Java는 말할 필요도 없고 Basic만 하더라도 문법을 상당히 많이 알아야 합니다. 또한 기본적인 라이브러리를 쓰기 위해서 그 앞에서 알아야 할 것도 많습니다. 그런 식으로 가르치다보면 프로그래밍을 배울 시간이 부족할 수 밖에 없습니다.

scheme과 haskell은 이렇게 문법을 익혀야 하는 부담이 거의 없습니다. 이중 haskell은 생각보다 문법과 라이브러리가 복잡한 편이지만 커리큘럼상에서 충분히 극복이 가능한 수준입니다. 즉, 프로그래밍 교육 처음부터 1번을 시작할 수 있다는 겁니다.

1년의 시간동안 C와 Java를 배우는 것보다, 10개월동안 프로그래밍을 익히고, 나머지 2개월동안 C와 Java의 문법을 가르치는 것이 훨씬 더 효율적이고 좋은 방법이라 생각합니다. 이미 프로그래밍을 깨친 사람에게는 문법이란 그리 큰 문제가 아니니까요.

semmal

제가 초등학교·중학교 다닐 땐 프로그래밍을 학교에서 가르친 적은 한 번도 없었습니다. 중학교 때 컴퓨터 과목이 생기면서 컴퓨터 사용에 관한 쌩기초(...)만 조금 다뤘던 수준입니다. (나름 교과서에 SQL에 관한 개념 설명이 나오기도 했지만 프로그래밍하고는 거리가..-_-)

과학고등학교를 가면서 좀더 제대로 된 컴퓨터 시간이 생겨서 C++을 배웠는데 사실 상 C처럼 쓰는 방법을 배웠다고 보는 게 맞을 듯합니다.;;; (덕분에 저 아직도 C++에서 클래스 제대로 못 씁니다..orz)

KAIST의 경우 제가 입학한 2005년도를 기준으로, 모든 학부 입학생이 필수로 들어야 하는 CS101 프로그래밍 기초 과목에서는 Java를 다뤘고 전산과 전공의 첫번째 과목인 CS206 데이터 구조도 역시 Java를 다뤘습니다. (바로 전년도까지는 C도 썼던 것 같습니다.)

다만 CS101의 경우 프로그래밍을 접해본 사람이 아닐 경우 내용을 따라가고 이해하는 데 심각한 어려움 있는 경우가 대다수였지요; 프로그래밍 스킬은 고사하고 Object와 Class의 개념 이해를 제대로 하고 넘어가는 수강생이 얼마나 될지 심각하게 걱정될 정도였습니다. 교수님들이 수업 시간에 설명을 하시긴 하지만 프로그래밍 자체에 대한 경험이 전무한 사람한테 바로 OOP의 개념을 주입시키고 그걸 활용해 프로그램을 짤 수 있도록 만드는 게 쉽지는 않아보였습니다.

주변 몇몇 분들은 차라리 C 언어를 가르치는 게 활용도 측면이나 프로그램이 어떻게 동작하는지 원리를 알 수 있다는 면에서--C 언어가 저수준이기 때문에 추상화는 덜 되어 있지만 그만큼 컴퓨터 자체가 어떻게 동작하는지 알기는 편하죠--오히려 CS101 용으로 낫다는 주장도 했었습니다. 아니면 MIT처럼 SICP를 도입해야 한다는 경우도 있었구요. (SICP를 쓰던 수업이 전산과 2학년 과정에 있었는데 수강생이 너무 적어 폐강되었다는 사실이...-_-)

CS206의 경우 저는 독일인인 Otfried Cheong 교수님한테 들었는데 오히려 CS101보다 더 근본적인 개념들을 배우면서 더 깊이있는(?) 코딩 스킬을 얻을 수 있었습니다. 특히 프로젝트에서 Java 언어의 구석구석을 활용해야 할 만큼 상당히 명강의였던 것으로 기억하고 있습니다. 다만 이 과목의 경우 어느 교수님이 가르치시냐에 따라 차이가 좀 나서(사실 전산과 전공이 대부분 그렇습니다만...-_-) 딱히 좋다 나쁘다 말하기는 좀 그렇습니다;;

최근에 들은 소식으로는 모 교수님에 의해 CS101 수업을 완전히 개혁하는 움직임이 있다고 하는데, 제가 교환학생 와 있는 관계로 어떻게 되어가는지 잘 모르겠군요. 아는 선배가 Python과 Ruby를 추천했다고도 하던데...;

ps. CS206에서 Java를 다루는 것까지는 괜찮았는데, 문제는 CS230 시스템 프로그래밍이 C 언어를 다루는 첫 과목이 되다보니 역시 프로그래밍 경험이 없던 전산과생들은 많은 고생을 했습니다. 특히 제가 들었을 땐 그 유명하신 송모 교수님(...) 수업이었던지라 Linux shell + job control + remote shell + mini ftp + multithreaded file transfer을 C 언어 한 줄도 모르던 학생들이 한 학기만에 다 짜내야 했었지요... KAIST 전산과의 모토가 '사자새끼 벼랑에 떨어뜨려 올라오는 놈만 살린다'라는 소문이 괜히 나오는 게 아니다 싶었다는...;; (참고로, KAIST 전산과에서는 CS101을 제외하고 언어 그 자체를 가르치는 과목이 전혀 없습니다. 해당 과목에서 필요하면 알아서 공부해야 하지요. 단, CS320 프로그래밍 언어 과목에서는 Algol부터 ML, Java에 이르기까지 다양한 패러다임의 언어들을 다루나 이 역시 언어 자체를 배운다기보다는 각 패러다임의 특징과 내부 구현 개념 등을 주로 다룹니다. 그리고 제가 배웠던 커리큘럼에 따르면 KAIST 학부 과정에서 숙제 등으로 C++을 사용하는 수업은 없었습니다. CS360 데이터베이스 개론에서 황규영 교수님이 수업하실 때만 프로젝트에서 C++을 사용하는 듯했습니다.)

아침놀

일단 위는 사실(?) 설명이었고, 제 생각을 말씀드리자면 일단 프로그래밍 개념 자체를 접해본 적이 없는 사람들을 위해서는 Python이 가장 낫지 않나 싶습니다. Java의 경우 hello world를 위해 필요한 main class와 static void 등의 의미를 이해하지 못한 상태에서 '일단 무조건 쳐놓고 시작한다' 식으로 가기 쉽거든요.

Python의 경우 멀티패러다임 언어이기 때문에 처음에는 단순한 순서적 프로그래밍과 간단한 함수 선언을 이용한 구조적 프로그래밍으로 나가다가, 다음 학기 과목 등에서 OOP 기능이나 함수형 언어 특징 등으로 내용을 확장하기 용이하다는 장점이 있습니다. 물론 다양한 패러다임을 쓸 수 있는 대신 각각에 대한 세부적인 지원이 없다는 단점이 있기는 합니다.

개인적인 경험으론, 프로그래밍을 처음 배울 때 가장 장벽이 되는 부분이 문법과 동시에 그 문법으로 어떻게 생각하는가 하는 부분 같습니다. 우리가 백날 영어 문법·단어 외운다고 영어가 유창하게 되는 것이 아니듯 프로그래밍 언어도 마찬가지인 것 같아요. 어느 일정 수준 이상의 프로그래밍 경험을 가져야 그것이 자기 사고방식에 녹아들기 시작하는 것 같습니다.

ps. 흥미유발을 위한 언어로서도 Python이 꽤 괜찮은 것 같습니다. 다양한 라이브러리를 활용해서 수강신청 자동 매크로 프로그램 만들기를 가지고 동아리에서 스터디가 진행된 적이 있었는데 아주 관심있게 듣더군요. ㅋㅋㅋ

아침놀

학과에서는 C / Java 순으로 배웠습니다. 동아리에서는 C#을 별도로 배웠고, 개인적으로는 Python / Ruby 순으로 공부했었습니다. 개인적으로 OOP에 대해 많은 관심을 가지고 있어서 모두 객체지향 언어였네요. 함수형 언어 등에 대해 공부하고 싶은 생각이 있습니다.

켄조쿤