Sablog Models/알고리즘

Programming: Problem-Solving Process.

어­리 2009. 5. 3. 00:08

블로그를 시작하면서 내용이 담긴 첫 글.

컴퓨터 프로그래밍이란 일반적으로,

  • 특정한 프로그래밍 언어를 이용해
  • 하나 이상의 추상적 (수학적) 알고리즘 또는 프로세스를 (프로그램을)
  • 구체적인 (실행 가능한) 형태로 구현

하는 과정을 의미한다. 이를 하나씩 짚어 보자... 프로그래밍이 포함하는 과정은 크게 두 가지이다.

첫째로 문제를 파악하고 사용 가능한 알고리즘을 선정하여 조직하는 단계이다. 프로그램도 존재 목적이 있다. 적당한 플랫폼상에서 일정한 역할을 수행하기 때문이다. 이것은 시스템의 특정 부분을 예정된 대로 변화시킨다. 이것을 프로그래밍의 의도로 볼 수 있다. 이 의도를 실행시키기 위해서는 논리적인 문제 해결 절차가 필요하다. 결국 프로그래밍에서는 코딩의 전 단계에 수학적 문제 해결 과정이 들어 있는 것이다. 다시 말해 프로그래머는 자신이 짜야 하는 프로그램(목적)을 파악해, 소스 코드로 바꿀 수 있는 수학적 계획의 형식으로 조직할 필요가 있다. 일종의 일반화이다.

둘째로 조직된 알고리즘을 소스 코드로 변환하는 단계이다. 이 작업이 대개 코딩이라고 불린다. 알고리즘이 좋아도 컴퓨터가 읽을 수 없으면 무용지물이므로, 프로그래머는 일반해법을 적당히 바꾸어 컴퓨터에 넣어 준다. 그래야 비로소 컴퓨터가 명령을 수행할 수 있는 것이다. 여기에서 특정한 프로그래밍 언어가 쓰이게 되며, 프로그램의 많은 부분이 결정된다. 대체로 둘째 단계는 첫째 단계에 비해 수단에 불과하다는 인식이 강하지만, 당장 몇 가지 언어를 접하게 되면 다른 생각을 가질 수 있다.

아무튼 굉장히 간단해 보이는 두 단계이지만, 아마추어가 프로그래밍을 이렇게 분리해 생각하기는 어렵다. 정보 올림피아드에 대비하지 특별히 않은 초보 프로그래머들은 대회에서 당혹감을 겪는다. 초보 프로그래머에게 첫 번째 단계는 거의 없는 것이나 마찬가지인 반면에, 정보 올림피아드 대회에서는 첫 번째 단계가 매우 중요하다는 점 때문이다. 현재 많은 큰 프로젝트들이 컴포넌트 단위로 프로젝트로 진행되며, 오픈 소스로 웹 상에서 코딩이 이루어지는 것도 많다. 이런 프로젝트에서 첫 번째 단계는 특히 더 중요해진다. 한편, 두 번째 단계에 대한 지식도 함께 갖고 있어야 일이 제대로 진행될 수 있다.

영 필요 없는 소리만 열심히 하고 있군. 블로그의 미래가 굉장히 걱정된다.