프로그래밍 공부 방법에 대해 의견을 듣고자 합니다

jsyang3의 이미지

안녕하세요. 저는 대학에서 프로그래밍 강의를 맡고 있습니다 (산업공학과)
우선 제 소개를 하면, 10년동안 CADCAM/그래픽스 관련해서 연구를 하고 있고 다수의 산업용 SW를 개발해서 상품화에 성공했습니다.
20대 후반 늦게 프로그래밍(대학원)을 시작했고, 프로그래밍에 익숙해지기까지 고생이 많았었습니다. 이 과정에서 나름대로 터득한 경험을 바탕으로 학부 2학년 프로그래밍 강의를 하고 있습니다.
그러나, 2년전 부터 제가 강의하는 내용이 학생들에게 제대로 전달되는지 회의감이 들고, 최근에는 나 혼자 수업시간에 떠들고 있다는 느낌이 강하게 들게 되었습니다. 매학기 100여명의 수강생 중 강의 내용을 80% 이상 습득한 학생이 20명 정도에 지나지 않는 것 같습니다.

강의교재는 Dietel 저자의 "C++ How to Program"을 사용해서 이 교재의 반(11장까지)을 1학기에, 나머지 반(24장까지)을 2학기에 진행하고 있습니다. 또한, 4년전에 이 교재의 전체 내용을 강의 동영상으로 만들어 학생들에게 제공하고 있습니다. 학생 수도 많고 강의시간도 매주 3시간 정도라 (그리고, 진도도 빨리 나가야 하고) 실습은 수업시간에 어렵습니다.

프로그래밍 고수님들께 아래 내용에 대한 의견을 듣고자 합니다.
(1) 프로그래밍을 처음 접하게 되는 2학년에게 어떤 방향으로 강의를 해야 할 까요? 많은 내용을 전달하고 싶은데 학생들이 힘들어 합니다.
(2) 강의교재에 대한 의견과 좋은 강의교재(한글)를 추천해 주세요. 현 강의교재 "C++ How to Program"는 C++에 대한 포괄적인 내용을 갖고 있기는 하지만, 학생들이 따라오기 힘들어 하는 것 같습니다. 더군다나 영어책이라....
(3) 프로그래밍 입문자에게 C++과 같은 하드코딩이 어렵기는 하지만, 기초를 강화하기 위해서 다른 언어보다 C++을 선호합니다. 또한, 제가 그동안 C++에 익숙했기 때문에 강의의 수월성도 좋습니다. 그러나, 주변에서 Phython, C#, JAVA 등을 강의하는 것이 어떠냐는 의견이 있습니다. 학부 2학년에게 프로그래밍 세계에 진입할 수 있는 언어를 추천해 주세요.
(4) 기타 고수님들께서 학부 2학년에게 바라는 공부/강의 방법을 말씀해 주세요.

두서 없이 내용을 작성했지만, 고수님들께 의견을 듣고자 하는 것은... 어떻게 컴퓨터 비전공 학과 2학년 학생들에게 프로그래밍 강의를 해야 할지에 대해 좋은 말씀 듣고자 합니다.

프로그래밍을 시작하는 후배라 생각하시고 좋은 답변 부탁드립니다.

감사합니다.

세벌의 이미지

1. 매학기 100명 수강생이라 함은 한 반에 100명이란 얘긴가요? 그만큼 많은 사람이 있으면 그중에는 못 따라 오는 사람도, 너무 쉽다고 하는 사람도 있는 건 너무 당연한 현상일 듯.

2. 학생들에게 영어 공부 하라고 하세요. 영어 모르면 어느 정도 이상 나아가기 어렵습니다.

3. 선생님께서도 Python 공부 하세요. 그리고 Python도 가르치세요.

4. 학부 2학년이라... 같은 학부 같은 2학년이라도 사람마다 수준이 다른 건 어쩔 수 없겠죠.
참 어려운 문제인데...
선생님께서 강의하면서 학생들과 소통하면서
어느 정도 수준으로 할지를 선생님 스스로 터득해야 하지 않을까요?

덧.
대개 학생들이 질문하던데 선생님께서 질문하는 경우는 처음 보는지라...
제가 두서 없이 이리 답변을 달아도 될런지는 모르겠네요.
도움이 되시길 바랍니다.

jsyang3의 이미지

답변 감사드립니다. 100명이 3~4개 반에 나누어 강의가 진행됩니다. 영어공부 하라는 얘기는 정말 가슴에 와 닿는 것 같습니다. 저도 동의합니다. 그러나 어떤 분은 프로그래밍이 학문적 지식전달이 아니고 기술을 익히는 것이기 때문에 수강생들이 이해할 수 있는 한글로 강의하는 것이 좋다고 하네요. 몇년전에 영어강의를 했었는데 최악이었습니다.
Python 강의를 추천하신 외부 전문가도 있어 긍정적으로 검토하고 있습니다. 확신이 서지 않았었는데 Python 얘기를 해 주시니 적극적으로 검토하겠습니다.
다시한번 감사드립니다. 다른 분들도 제가 도움이 될 수 있는 간단한 코멘트 부탁드립니다.

라스코니의 이미지

전공과정 학생과 비전공 학생은 수학의 목적 및 동기, 의지 자체에서 차이가 많을 것으로 보이네요.
비전공 과정 학부생이라면 당연히 프로그래밍에 대한 열정, 의지가 상대적으로 적겠죠. 또 교수 입장에서도 많은 것을 요구하기도 무리가 있을 거고요.

저라면 이렇게 하겠습니다. 비전공 학부생들에게는 C++ 텍스트 북 전체를 흩는 것 보다는 핵심 개념 위주로 강의하고, 비전공 학부생들이 한번쯤 만들어 볼만한 쉬운 프로그램 과제를 2개 정도 학기 중 내주고 시험은 중간고사 한번, 그리고 최종에는 좀 도전성 있는 term project를 내 주어 그래도 개중에 따라오는 학부생들에게 성취감과 높은 grade를 얻을 수 있는 기회를 주고요.

 의 이미지

1. 수강생들의 "필요"를 만족시킬 수 있는 수업 방식이 좋을 것 같습니다.

저는 컴퓨터공학을 전공했기 때문에 산업공학과 커리큘럼은 잘 모릅니다.

하지만 프로그래밍이라는 게, 컴퓨터공학과 학생 중에서도 비교적 소수의 geek들을 제외하고는, 원래 그 자체가 목적이라기보다는 수단으로서 매력적인 기술이거든요.

자기가 어떤 일을 해야 하는데, 프로그래밍을 통해서 컴퓨터의 힘을 빌어 그 일을 수행할 수 있다는 걸 깨달았을 때, 프로그래밍 공부에 의욕이 생기고 효율이 향상되는 경우를 많이 보았습니다.

그러한 효과를 얻기 위해서는 교수자께서 수강생들의 배경지식 등을 잘 파악하고 거기에 맞추어 계획을 세우는 것이 중요하겠지요.

수강생이 100여 명쯤 된다면 결코 쉬운 일은 아니겠습니다만 그 중 상당수가 산업공학과 2학년 학생이라는 공통점이 있다면 그 점을 먼저 살펴보시는 게 좋을 듯합니다. 해당 학과 1~2학년 커리큘럼을 알아본다던가 하는 식으로요.

2. 프로그래밍 언어 선택 역시 그 연장선상에서 고려될 수 있을 것 같습니다.

제 경험상 C++의 OOP 지원은 프로그램의 규모가 어느 정도 되었을 때부터 그 쓸모가 두드러졌습니다. 물론 프로그래밍 입문자들 대상으로 한 학기만에 거기까지 도달한다는 것도 현실적이지 않으니 아마 그 이전까지만 진도를 나가셨겠지요. 그 시점에서 C++가 다른 언어에 비해 객관적으로 뚜렷한 어떤 강점이 있는지는 조금 애매한 문제가 되겠습니다.

말씀드렸다시피 저는 산업공학과 커리큘럼에 대해 잘 모르니 제가 부적절한 선입관을 보이더라도 악의가 없었음을 이해해 주시고 용서 바랍니다. 하지만 (귀하께서 이전에 하셨던) 규모 있는 프로그램을 작성할 계획이 아니라면, C++보다는 좀 더 작은 어플리케이션에 유용한 다른 프로그래밍 언어들도 많습니다. 앞서 추천받으신 파이썬이 좋은 예입니다. Tkinter를 활용할 수 있을 때까지 진도를 나갈 수 있다면 GUI 프로그램 개발을 텀프로젝트로 낼 수도 있겠습니다. 사실 별 거 아니지만, GUI는 입문자들의 흥미를 강하게 끌고는 하죠.

https://wiki.python.org/moin/TkInter

그 외에도 추천을 받으신다면 Matlab은 어떤가요? 뚜렷한 용도가 있고 배워두면 유용한 언어이지요. 학교에서 Matlab 라이센스를 제공해 주지 않는다면 오픈소스인 R도 있습니다.

https://en.wikipedia.org/wiki/R_(programming_language)

극단적으로 실용성을 추구한다면 MS Office에서 사용할 수 있는 VBA도 있겠습니다. 종종 무시당하곤 합니다만, 어떤 업무를 하던 간에 꼭 쓰게 될 MS Office의 활용 능력을 강화할 수 있다는 측면에서 꽤 괜찮은 선택이라고 생각해요. 기초적인 프로그래밍을 가르칠 수 있을 만한 요소들도 어지간하면 갖추고 있을 겁니다.

https://en.wikipedia.org/wiki/Visual_Basic_for_Applications

dymaxion의 이미지

파이썬이 범용성이나 점유율이나 뭐 완벽하지만...
정말 생 완전 초보에게는 또 그것도 쉽지 않을 수 있다고 생각됩니다.
대신 Julia Lang은 어떨지 모르겠습니다.
이 언어가 과학기술용으로 좀 마이너하긴 하지만, 외국 공대에서 상당히 호응을 얻고 있고요.
또 반대로 국내 대학교에서는 거의 외면받고 있는 시기인지라, 이것을 먼저 도입하신다면 선구적인 역할을 하시는 것이 될 것 같습니다.
또 언어 자체가 입문 단계에서는 뭐 Matlab 수준의 쉬움을 자랑하는지라...
컴퓨터 공학 자체에 대한 깊이있는 이해가 목적이 아니라면,
선형대수학 등 일반 공학문제를 곧바로 다룰 수 있다는 점에서 꽤 유용할 것 같습니다.
한 발 더 나가면 뭐 Jupyter를 이용해서 환경구축을 해 줘서 하는 방법도 좋을 것 같고요.
실제로 Jupyter를 수업용으로 사용하는 사례가 꽤 되는 것 같더라구요.

======================================
Mechanical Engineer
DymaxionKim.github.io
======================================

jsyang3의 이미지

dymaxion님, 라스코니님, 그리고 이름이 없으신 다른 한분.. 소중한 답변 감사드립니다.

저도 개발자라고 하기 낯 간지럽지만, 오랫동안 개발 일을 해 오다 보니, 심각한 편견 같은 것이 생긴것 같습니다. 파이선이나 기타 인터프리터 언어를 무시하고 있었습니다. 그렇지만 강의를 원점에 두고 다시한번 심각하게 고민하고 있습니다.

Matlab과 R-Package는 이미 타 과목(2학년) 수업에 사용하고 있습니다.
학과에서는 프로그래밍 언어, 알고리즘/자료구조를 3개 과목에서 배울 수 있도록 요구하고 있습니다. 그래서.. 1학년 때 A과목에서는 프로그래밍 기초(C, C++, 또는 JAVA 선택 예정), B과목에서는 자료구조/알고리즘, C과목에서는 MFC 또는 Qt와 같은 GUI, 외부 라이브러리 인터페이스를 넣으려고 합니다. 그러나 역시 무리라고 판단이 되네요.

암튼, 위의 많은 분들 답변을 하나하나 곱씹으면서 고민해 보겠습니다. 다시 한번 감사드립니다.

vagabond20의 이미지

위에 여러분이 좋은 의견을 벌써 많이 올리셨는데, 제가 좀 보태자면 이렇습니다.
*
저의 아들이 미국 주요 주립대 (럭거스) 에서 컴퓨터 싸이언스 전공을 했고 저 역시 소프트웨어 엔지니어로 거의 30 년을 일해 왔기때문에 나름대로 안목이 있다고 말씀드리는겁니다.

미국의 대학들 컴퓨터 싸이언스 학과가 하는게 정석 혹은 표준이라고는 할 수 없을겁니다. 그런데 확실한거 하나는 학교에서는 20 년전 제가 텍사스의 주립대 석사를 할때나 지금 (럭거스) 이나 주요 프로그래밍 언어는 C 라는 겁니다. 전산학과의 클라식이라고 할까 뭐 대충 그런 느낌을 받습니다. 왜냐하면 C 언어가 가장 유닉스나 리눅스와 궁합이 맞고 시스템 리소스 활용 측면에서 교육용으로 적합하기 때문이 아닌가 싶은데요.

언어는 그렇다고 치고,
글 올리신 분의 강의 진행 과정에 대해 주제넘은 조언을 드리자면
강의를 진행하는 사람의 의도와 의욕만 가지고는 학생들이 싫증을 느끼거나 포기하는 경우가 속출할것입니다. 대충잡아 그런대로 따라오는 학생비율이 50% 는 되도록 해야 같은 반 학생들끼리도 해 볼만 하다거나 좀 노력하면 어떤 가시적인 성과를 낼 수 있다는 확신을 서로 공감하게 될겁니다.

그렇다고 무조건 쉽게만 해서는 안되겠지요.
어떤 언어를 선택해서 프로그래밍을 가르치던간에 그 언어의 어려운 구탱이 개념을 모두 학생들에게 섭렵하게 하려는것은 의욕충만일 경우가 많습니다. 실제로 그 어려운 구탱이 개념들이 모두 일반적인 프로그래밍 혹은 소프트웨어 개발에 다 쓰이지는 않을것이고 말입니다.

이게 어떤 언어이고 이렇게 쓰면 원하는 결과를 낼 수 있으며, 구현하는 방식은 한가지 답만 있는게 아니다고 말미를 남기듯 강의하시고 학생들이 성취감을 느끼게 하는데 중점을 두시는게 좋을것 같습니다. 그러다보면 우수한 학생들은 지들이 알아서 어려운 구탱이 개념도 가져다가 프로젝트 등에 넣어 제출할 것이고, 나중에라도 책을 찾아가며 써 보게 될겁니다.

여의도자바