Category Archives: 비판적 사고

철학자 탁석산이 제안하는 글쓰기의 왕도 – 논증을 배워라!

제가 대학교 1학년때 탁석산 선생님께 수업을 들었던 적이 있습니다. 그 때도 항상 말씀이 쨍쨍했죠. 그러다가 TV에서 보고 이렇게 인터넷을 통해 기사를 보니 너무 좋습니다. 다음 글을 보면 선생님의 스타일을 짐작하실 수 있죠.

고등학생을 위한 논술 책이라기보다는 실용적인 글쓰기에 대한 책입니다. 논술이라는 것은 자신의 주장을 남에게 설득시키는 글이지, 감정을 표현하는 글은 아니죠. 우리는 ‘글쓰기’라면 문학적인 글쓰기를 생각하는데 생활에서 필요한 글은 문학적인 글이 아닙니다.

다음 링크를 보시면, 선생님의 인터뷰를 보실 수 있습니다. 강추합니다. 저랑 비슷한 책을 좋아하시기 때문에 더욱 더 좋습니다. ^^;

http://www.yes24.com/ChYes/ChYesView.aspx?title=003001&cont=1407

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

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

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

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

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

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