Monthly Archives: January 2007

습관을 고쳐 초딩때 꼴찌가 전교 순위권이 된 이야기

조선일보 2006년 11월 6일 월요일, D1, ‘맛있는 공부’ 편에 나왔던 이야기를 소개해보겠습니다. 우선 제목이 “초등 꼴지, 4년 만에 15등이 된 비결은? “6가지 습관 고쳐 상위권으로””이라고 상당히 길었습니다. 저를 포함한 많은 사람들이 ‘비법’이니 ‘특효약’이니 같은 것에 관심이 많습니다. 저도 여기에 특별한 비법이 있다하고 자세히 읽어봤습니다. 내용은 초등학고 선생님이 아마도 꼴지라는 말에 충격을 받은 여학생이 공부를 해야겠다는 중학교에 들어가면서 성적이 올라가서 결국은 고등학교에서 성적이 순위권에 들어가게 되었다는 단순한 이야기입니다.

이런 이야기는 여러곳에서 접해볼 수 있는 평범한 이야기지만, 제가 글을 쓸만큼 관심가는 내용이 있었습니다. 다음과 같은 그 학생이 바꾼 6가지 습관이었습니다.

1) 공부 얘기만 하기
2) 선생님 말씀 무조건 받아적기
3) 아침형 인간 되기
4) 나만의 공부 계획짜기
5) 외모 신경쓰지 않기
6) 컴퓨터 게임 끊기

이런 습관들은 평범하게 보일지도 모르지만, 이런 평범함 속에 결정타가 들어 있습니다. 저도 효과를 봤던 것이 들어 있었는데, 2번, 선생님 말씀 무조건 받아적기 입니다. 기사를 보시면 아시겠지만, 공부를 못하는 사람들은 어떤 것이 중요한 이야기인지 모릅니다. 그러니 수업이 재미없죠! 그리고 어떤 것은 적어야 할지도 당연히 모릅니다. 그래서 무조건 적는 것이 효과적입니다. 저같은 경우도 대학교에서 어떤 한 수업을 좋아서 몇 번이나 청강한 적이 있었는데, 같은 수업을 몇 번 들어면서 무조건 수업 내용 모두를 적어보니, 수업시간도 재미있고, 내용도 잘 알게 되고, 수업시간에 집중도도 높아집니다. 이 습관은 참 좋은 습관입니다. 한번 해보세요!

3번째 아침형 인간도 할만합니다. 아침에 조금 읽찍 일어나려면 우선 일찍 자야 되고 일찍 자면 수면량이 늘어나 학교에 가도 졸립지 않게 됩니다. 그리고 5번, 6번도 다들 아시는 것처럼 효과적입니다. 외모꾸미는 시간이 생각보다 많이 드는 것은 다들 잘 알고 있을 것 같고, 컴퓨터 게임도 중독성이 있어서 시간을 많이 뺏기게 됩니다. 저도 제가 겪어봐서 압니다. “2시간만 게임하지”라고 말하고 정말로 2시간만 하는 사람은 정말로 자제력이 좋은 사람이고 이런 사람은 공부도 잘합니다. 그러니 자신이 공부를 잘 못한다고 생각하면 , 아에 안하시는 편이 공부를 하는데 좋습니다.

이처럼 공부를 잘하는 것은 어떤 특별한 방도가 있지 않습니다. 사람들이 평범하고 모두 알만한 것들을 지키는 것이 공부 잘하는 방법이라고 할 수 있겠죠. 그런데 그런 것들이 왜 그렇게 하기 힘들까요? 참 어렵네요 ^^;

C 프로그래머처럼 생각하기

이 글의 출처가 어딘지는 모르겠네요! 아마도 컴퓨터에 자료를 저장하기 시작한지 15년은 충분히 넘었을 것 같습니다. 그러니 좋은 글들은 모아두었던 것 같습니다. 이 자료도 프로그래머가 되어 보겠다고 이곳 저곳 기웃거릴 때 모아두었을 겁니다. 지우기에는 아까워 여기에 보관하려고 합니다.

C 프로그래머처럼 생각하기

여러분은 이 책의 내용을 공부하고 나서 능숙한 C 프로그래머가 되기를 바랄 것이다. 그러나 이것이 쉬운 일만은 아니다. 프로그래밍 언어도 영어나 일본어 같은 일반적인 언어와 마찬가지로 아무리 문법을 많이 알고 있다고 해도 적절한 경우에 적절한 문법을 사용하지 못한다면 아무 소용이 없다.  해결해야 하는 문제에 대해서 적절한 C의 문법을 사용하면서 프로그램을 작성하기 위해서는 문법을 아는 것도 중요하지만, C 프로그래머처럼 생각하는 방법을 기르는 것 또한 매우 중요하다.

C 프로그램을 작성하여 어떤 문제를 해결할 때에는 일련의 단계를 거쳐야하는데, 여기에서는 프로그램을 작성하여 문제를 해결하는 방법에 대해서 잠시 이야기를 해볼까 한다. 항상 어떤 일이든지 치밀한 구성과 주도 면밀한 계획이 있어야만 성공할 수 있는 법! C 언어의 문제 해결을 위한 프로그래머로서의 지침을 지금부터 알아보기로 하자.

  1. 해결해야 할 문제 분석하기: C 언어로 프로그램을 작성하기 전에 가장 먼저 해야 할 일은 어떤 문제를 해결해야할 지를 알아내는 것이다. 왜 그런고 하니, 해결해야 하는 문제가 무엇인지 확실히 알아야 어떻게 해결할 것인지를 결정할 수가 있기 때문이다. 작성하려고 하는 프로그램이 어떤 기능을 갖고 있는 프로그램인지, 누가 사용할 프로그램인지를 먼저 분석하고 깨닫는 것이 무엇보다 중요하다.
  2. 프로그램의 목적 결정하기: 해결해야 할 문제가 무엇인지를 알았다면 어떠한 프로그램을 작성해야 할지 결정해야만 한다. 그러니까, 자신이 작성할 프로그램이 어떤 작업을 수행하는 프로그램이지 설계해 보는 것이다. 사용자에게 어떤 입력을 받고 파일 또는 데이터베이스에서 어떤 데이터를 읽어 작업하고 어떠한 결과를 출력할 것인지를 결정한 후, 자신이 만들 프로그램의 목적과 상세한 기능에 대해서 설계하는 것이 필요하다.
  3. 프로그램의 구조 설계하기: 작성할 프로그램의 목적과 외형적인 설계가 끝났다면 실제 프로그램의 구조를 설계해야 한다. 데이터가 어떻게 흘러가는지 어떠한 작업들을 어떤 순서로 실행할 것인지를 설계하여야 한다. 이런 경우, 프로그램의 어떤 문제를 해결하기 위한 작업들을 시간 순서대로 설계할 수도 있을 것이고 작업의 계층적인 형태로 설계할 수도 있을 것이다. 또, 프로그램에서 사용하는 데이터는 어떤 구조를 갖는지를 반드시 설계하자. 만일 여러 사람이 공동으로 작업하는 커다란 프로젝트일 경우에 프로그램의 구조를 설계하지 않고 작업에 들어간다면 그 프로젝트는 실패하기 십상이다. 프로젝트의 크기가 클수록 프로그램의 구조를 설계하는 것이 더욱 중요해진다. 이것은 객체 지향 이론으로 넘어가는 이야기이긴 하지만, 프로그래머라면 반드시 숙지해야할 내용이므로 명심하자! 혼자 살아가는 사람은 없듯이, 항상 다른 사람들과의 교류, 다른 운영 체제와의 호환을 생각하면서 프로그램을 작성해야한다.
  4. 함수 설계하기: C는 독립된 작업들을 함수로 사용하여 작성하는데 앞에서 설계한 프로그램의 구조를 바탕으로 하여 독립된 작업들을 함수로 분리하는 작업을 거쳐야한다. 어떤 함수가 어떤 작업을 수행할 지를 설계하는 것이다. 이렇게 함수가 설계되면 프로그램에서 공통적으로 사용되는 부분을 찾을 수 있게 되는데 이러한 부분을 함수로 작성한다면 좀 더 효율적으로 코드를 작성할 수 있게 된다. 또한 함수 설계를 잘하면 한 프로그램에서 작성한 함수를 다른 프로그램에서 다시 사용할 수도 있게 된다. 이렇게 함수를 설계하고 나면 프로그램의 작업들은 계층적인 형태를 갖게 되고, 실제로 프로그램을 작성할 때에는 각각의 함수에서 해겨해야 하는 작업에만 신경쓰게 되므로, 빠르고 쉽게 작업할 수 있다.
  5. 프로그램 작성하기: 설계한 함수를 바탕으로 실제로 프로그램을 작성하는 부분이다. 함수를 사용하여 전체 프로그램의 작업을 구분하고 나면, 하나의 함수를 작성할 때에는 그 함수의 기능만을 신경쓰게 되므로 실제 프로그램 작성은 어려운 문제가 아니게 된다. 이제 C의 문법을 사용해서 그동안 설계한 추상적인 내용들을 실제 코드로 표현하기만 하면 되는 것이다.
  6. 테스트 및 디버그하기: 프로그램을 작성하고 나면 이 프로그램을 실행해 보고 잘못된 부분이 있으면 그 부분을 수정하는 작업을 가해야 한다. 항상 마무리가 좋아야 하는 법! 작성한 프로그램이 한번에 원하는 결과를 내는 일은 극히  드문 경우이므로, 잘못된 연산이나 원치 않은 오류가 발생할 수 있는데 이러한 부분을 프로그램의 버그(BUG)라고 하고 이러한 버그를 수정하는 작업을 디버그(DEBUG)라고 한다. 얼마나 버그를 최소화하는지, 얼마나 디버그를 잘 하는지 하는 것도 프로그래머로서의 자질 여부를 판가름 하는 중요한 요소이다.