Console프로그램과 GUI프로그램.

프로그래밍/프로그래밍 메모장 2006/05/17 00:13
C/C++ 프로그래머를 위한 Xevious7의 조언.
Console 프로그램과 GUI프로그램
  - 2006년 5월 ~  http://www.xevious7.com


GUI환경이 일반적인 현재의 상황에서 프로그래밍을 한다는 것은 기본적으로
GUI를 구현해야 된다는 압박이 있습니다.

저는 이것이 "초보 프로그래머"에게는 굉장한 진입장벽이라고 생각합니다.
여러분이 프로그래밍을 배우고 있다면 일단 GUI는 잊어버리십시요.

뿐만아니라 10년이상의 경력을 가진 베터랑 프로그래머에게도 어떤 프로그래밍을
하는데 있어서 똑같은 부담으로 다가오는 사실입니다.

프로그래머가  어떤 프로토타입 또는 테스트를 위한 프로그래밍을 할때는
Console 환경에서 프로그래밍 하는것이 작업에 있어서 엄청난 효율을 가져온다는
사실을 아십니까?

또한 프로그래밍을 배우는 초보 프로그래머는 어느정도 배우는 동안에는
GUI를 생각하지 않는것이 훨씬 유리합니다.

많은 프로그래밍 서적 역시 Console 프로그램으로 프로그래밍 언어를 설명하고
가르치고 있습니다.
과거에는 기본 환경이 Console 환경이었기 때문에 자연스러운 것이였지만
GUI를 기본으로 쓰고 있는 현재의 환경에서 Console 환경을 맞추어서 프로그래밍
한다는 것에 대한 어떤 편견이 생겨버린듯 합니다.
말하자면 어떤 프로그래밍을 할때 기본적으로 GUI를 디자인 하고 있다는 것이죠

사실 GUI는 유저 인터페이스 입니다. 여타 OOP 프로그래밍 책에서도 주장하듯이
인터페이스와 구현이 분리되어야 훨씬 보기가 좋습니다. 그렇다면 프로그래밍의
시작은 GUI를 생각하는 것이 아닌 프로그램의 코아를 생각해야 됩니다.

하지만 우리는 이 GUI 즉 겉으로 보이는 유저 인터페이스에 신경을 써버린 나머지
여러가지 재미있는 테스트 프로그래밍을 할 수 있는 많은 시간을 뺏기게 되버립니다.

초보 프로그래머 같은 경우는 윈도우즈와 이벤트 드라이븐 을 이해하려다가
정작 중요한 프로그래밍 기본원리인 '문제 해결'에 접근하는 공부를 소홀히 하게
됩니다.

GUI는 잊어버리십시요. 여러분이 코아를 작성하고 나면 얼마든지 GUI를
여러분의 코아와 결합할 수 있다는 사실을 상기하십시요. 그리고 여러분이
훌륭한 그래픽 디자이너가 아닌 이상 어차피 최종의 껍데기는 프로그래머가
만드는 것이 아닙니다. 정말 멋있는 화면은 디자이너가 만들어내는 것입니다.

게다가 GUI는 원도우즈든 리눅스든 상관없이 정형적으로 쓸수 있게 디자인
되어있습니다. 즉 기본 인터페이스들이 각각의 GUI시스템에 마련되어져 있습니다.

고수들은 이미 알고 있기 때문입니다.
그래서 GUI를 따로 프로그래밍 하지 않도록 계속적으로 정형툴화 하고 있는것입니다.
비주얼툴이나 RAD툴은 다 이런 이유로 탄생한것입니다.
프로그래머가 너무나 많은 시간을 이러한 GUI에 시간을 투자하는 것을 알았기 때문이죠
GUI는 툴이 지원하고 프로그래밍을 하게 하자 라는 것이 이러한 툴이 나온 이유인것입니다.

하지만 우리는 C와C++을 하고 있습니다.  물론 C++ 빌더같은 비주얼툴이 있었지만
아시다시피 대세에 밀려버렸습니다. 물론 MFC 같은 프레임 워크가 있지만
MFC를 배우는데 6개월 이상을 투자해야 될것입니다. 여러분은 프로그래밍의
정말 중요한 부분을 배우기도 전에 GUI를 위한 프레임워크나 배워야 겠습니까?

제발 문제해결하는 방법을 배우십시요. 알고리즘 서적을 공부하고 언어론을 공부하십시요
도날드씨의 The Art of Computre Programming 같은 프로그래밍 서적을 공부하지
못할망정  어떤 문제가 있을때 그것을 프로그램에서 어떻게 해결해야 될지 하는
라직을 세우는 연습을 하라는 이야기 입니다.
수학과 물리학을 공부하십시요. 아니면 추리소설을 읽으세요.

기본이 되고 나서  그다음 인터페이스 또는 라이브러리 또는 프레임 워크를 공부하십시요.
기본을 쌓지 않고 구현에 엣지에 서있는 것은  거꾸로 쌓은 탑과 같습니다.
위로 갈수록 커지는 피라밋을 거꾸로 한 모양말 입니다.

기본없이 최상위 인터페이스나 라이브러리 열심히 공부했다면 아무 의미가 없습니다.
이제라도 기본에 충실하십시요.
왜냐구요.. 그러한 인터페이스들은 사실 계속 바뀌는 부분입니다. 그것은 그때 그때
필요할때 배워서 써야 되는 그러한 것입니다. 그것을 못한 다면 감히 프로그래머라고
할수 없는 것이지요.

API는 실제적인 프로그램을 위해서 당연히 필요한것입니다.
(이글을 참조하세요. http://www.xevious7.com/40 프로그래밍 언어와 라이브러리-)
하지만 API는 그러기 때문에 그때 그때 필요한것을 참조하여 개발하는 개발
인터페이스일 뿐입니다. 프로그래밍을 한다는 것은 어떤 문제해결을 위해서
플랫폼을 선택하고 API를 선택하고 설계를 해서 구현을 한다는 것입니다.
물론 API를 이미 알고 있다면 개발은 더욱 수월하게 될것입니다. 이러한 API들은
어떠한 문제인지 어떠한 플랫폼인지에 따라 바뀌어 나가고 경력이 많아질수록
마치 언어처럼 알고있는 단어가 많아지는 것과 같습니다.

하지만 프로그래밍의 가장 중요한 부분은 문제해결에 대한 대처 능력입니다.
그래서 사실은 '피플웨어'의 조사에서처럼 경력 6개월의 프로그래머와
경력 5년차의 프로그래머의 차이는 크게 중요하지 않다는 것입니다.

여러분이 프로그래머가 되기위해서 정말 공부해야
될것은 문제해결 방법론입니다.
겉이 중요한것이 아닌 알고리즘,데이타구조
그리고 여러가지 프로그래밍의 기초가 되는
수많은 문제들을 풀어보는 것입니다.




P.S  절대로 세부기술이 중요하지 않다고 말하는 것이 아닙니다. 노하우(KnowHow)는
당연히 중요한 것입니다.
노하우가 중요하지 않다면 경력이라는게 필요가 없는것이겠죠.
하지만 더욱더 중요한것은 노화이(Know Why)이라는 것입니다.
일단 노화이를 알고 노하우를 쌓아가는 방법이 장기적으로 훨씬 좋습니다.
노하우먼저 쌓았다면 노화이를 깨쳐가야 하겠습니다.

P.S 웹플랫폼이나 다른언어에서는 또다른 이야기 입니다.
top

Trackback Address :: http://xevious7.com/trackback/56

  1. jay 2007/01/28 18:21 MODIFY/DELETE REPLY

    감사합니다. 좋은 글읽고 다시한번 생각해보게 되었습니다. 수학공부중인 학생입니다.

  2. abc 2009/05/14 01:15 MODIFY/DELETE REPLY

    좋은글이네요. 참고하겠습니다.

    • xevious7 2009/05/20 17:27 MODIFY/DELETE

      ^^ 감사합니다. 이런것도 있다라는 것으로
      생각해주시기바랍니다. 모든것은 상황에 따라
      변하는것이니 :)

Write a comment