강의실/정보영재

어느 지인분 말에 따르면 요즘에 삼성에서는 진급시험에서 알고리즘 시험을 본다고도 하는데요...


4차산업시대를 앞두고 있는 IT 계열회사에서는 이 알고리즘의 역할을 충분히 중요하게 생각 하고 있는것 같습니다.


나무위키에서 알고리즘을 검색해 보니 "문제를 해결하기 위한 절차나 방법." 이라고 정의 되어 있습니다.


인터넷 에서 다음과 같은 유머가 있습니다.


"아내가 남편에게 심부름을 시켰답니다.

 우유한개만 사다 주세요. 계란 있으면 6개 사다 주세요.

 남편이 우유 6개를 사오니 아내가 왜 우유를 6개나 사왔냐고 묻자

 남편이 말하길 계란이 있어서 6개 사왔다고 하네요."


이건 알고리즘의 부재가 아니라...

고객과의 소통이 원활하지 않았다는 이야기가 될것 같습니다.


일반적으로 IT 계통에 종사하는 분들이 그 업무를 100프로 이해 하면서 고객의 요구사항을 분석 하지는 못합니다.

이때 고객과 개발자간의 위에 아내와 남편간의 소통처럼 소통에 문제가 발생합니다.


주로 시스템을 개발 하면서 고객과 그때 그때 서로 소통하면서 수정해 나가기는 하지만...

가끔은 정말 사소한 일을 간과하고 넘어갈때(개발자도 이해한다고 생각하고 고객은 개발자가 이해 했다고 생각하고) 마지막에 시스템 납품시에 다시 갈아 엎는 일도 발생할 수 있습니다.


저는 알고리즘을 정의 할때 먼저 "정확한 문제의 이해" 라고 말씀드리고 싶네요.

학생들이 간혹 문제를 이해하지 못해서 엉뚱한 프로그램을 구현하는 것을 종종 볼수가 있는데요.

그래서 항상 학생들에게 말하는 것이 문제를 이해 하는것이 알고리즘의 8-90프로 이다 라고 이야기 하고는 하는데요.


이 문제를 정확히 이해 하지 못한 순간 몇시간 동안 구현한 프로그램은 한순간에 물거품이 되어 버리거든요.

그래서 저희와 같이 공부하는 학생들에게는 문제를 끊어 읽는 연습을 시키고는 합니다.

정확히 문제를 제출한 사람의 의도를 파악해야 하기 때문입니다.

가끔은 문제를 몇번을 읽어도 이해 안되는 문제가 있을때는 입력 데이터 예제와 출력데이터 예제를 가지고 판별하기도 하는데요.


이처럼 어떤 문제를 이해하는 부분은 알고리즘에서 정말 중요한 부분이라고 생각 합니다.


그 다음이 "그 문제를 어떤식으로 해결해야 하기 위한 절차 또는 방법을 찾는 일"이라고 생각 합니다.


문제를 정확히 이해 한 후에 그에 맞게 알고리즘을 구현해 나감에 있어서 빠른 알고리즘, 메모리를 적게 사용하는 알고리즘 등을 따지게 되는 것은 아닐까 생각 합니다.


왜 제목과 전혀 다른 이야기를 했을까요?

제목을 보고 찾아오신 학부모님은 현재 자신의 아이가 정보올림피아드에 소질이 있는지 없는지 궁금해서 오셨을텐데요...


사실 정보올림피아드는 알고리즘과 무관하지 않습니다.


정보올림피아드 경시대회는 순수하게 알고리즘 대회라고 보시면 되거든요.

단지 그 알고리즘 표현을 C/C++ 이라는 프로그래밍 언어로 구현한다고 생각하시면 됩니다.


알고리즘과 C/C++ 프로그래밍 언어는 전혀 다른 별개의 것입니다.


사람으로 따지면 C/C++ 은 사람이 표현하는 말이나 손짓 몸짓을 익히는 것이라 생각하시면 되고요.

알고리즘은 뇌에서 판단을 하는 사고력 같은 역할을 하는것이니 얼마나 다르다는 것을 조금은 느끼실수 있을겁니다.


저희 원에서 알고리즘 공부를 계속하는 학생들을 보면 다른 사람보다 문제 분석력이 우수한 학생들이 계속해서 공부하는 것을 볼 수 있습니다.


따라서 우리 아이가 정보올림피아드 준비해야 돼? 말아야 돼? 고민이 되시는 분이시라면...

우리 아이가 어떤 문제가 주어졌을때 정말 문제를 정확히 이해 하는지...

또는 많은 고민 끝에 스스로 문제를 풀어 나갈 끈기가 있는 학생인지 등을 판단 하시면 우리 아이가 정보올림피아드에 도전을 해도 될 아이인지 아닌지 판단하기가 수월 할 듯 싶네요.^^


저희가 학생들을 가르치다 보면 프로그래밍 과정을 공부하다 보면 이 아이가 알고리즘에 소질이 있는지 없는지를 대충 파악하게 됩니다.

그런데 성격 급하신 학부모님은 프로그래밍 과정 입문하고 나서 얼마 지나지 않아 우리 아이가 알고리즘에 소질이 있는지 물어 보시는 분이 계시네요.^^

일단은 저희는 프로그래밍 과정이 끝나야 알수 있다고는 말씀드리는데요... 

사실 프로그래밍 과정에서는 정말 빠르게 익히는 학생이 알고리즘에 가서는 많이 헤매는 경우도 보아 왔구요...

프로그래밍 과정에서는 좀 많이 느렸던 학생이 알고리즘 과정에 가서는 정말 신선한 아이디어를 내는 경우도 봐 왔기 때문에...

프로그래밍 과정의 후반부에 알고리즘이 조금씩 들어가는 부분에 진입하지 않고서는 학생을 판단 하기가 어려운 경우도 있습니다.

 

또한 프로그래밍 과정에서 중간에 그만두게 되면 그 학생은 프로그래밍 언어를 아는것도 아니고 모르는것도 아닌 애매한 상태가 되거든요. 

최소한 잘 하든 못하든 하나의 과정을 끝낸것과 끝내지 않은 차이가 크다고 생각하기 때문에...

어떤 과정을 시작 하셨을때 그 과정은 끝을 보시라고 권해 드리고 싶습니다.


이상으로 제 개인적인 견해를 말씀드렸습니다.


항상 밝고 건강한 우리 아이들이 이 미래를 이끌어 나갔으면 싶네요.^^
















이 장소를 Daum지도에서 확인해보세요.
인천 서구 당하동 1028-2 장원프라자 502호
도움말 Daum 지도
4 0
  • 버블프라이스 2017.09.08 04:32 신고    

    컴퓨터 뿐만 아니라 일반 학업에서도 '문제를 정확하게 이해해내고' 푸는 것은 정말 중요한 것 같습니다.
    특히 영어 어학시험에서 시간분배를 잘못하면 정말 어려운 '토익이나 토플' 시험에서요^^
    부모 입장에서는 아이가 어떤 문제가 주어졌을때, 정확하게 이해하고 해결할 수 있는 능력을 키울 수 있게 도운 다음 그다음에 대회에 참가시는 것이 좋을것 같습니다.
    행복한 금요일 되세요-

  • 핑구야 날자 2017.09.08 08:09 신고    

    문제를 정확히 이해하는 것 부터가 중요한 것 같아요. 그렇지 않으면 코딩이 엉뚱한 결과를 만들어 내니까요

  • 양정석 2017.09.08 12:48 신고    

    좋은 주말되세요^^

  • 청결원 2017.09.08 14:05 신고    

    잘 보고 가네요~~