퍼온 글 입니다.
출처는 http://kin.naver.com/detail/detail.php?d1id=1&dir_id=102&eid=+vUb9qg6V3gU9ILc4vq9XnyR9hOHha3u&qb=TUZDv80gQVBJIMilv+s=&pid=fgMHGsoi5UNssbu2M1Zsss--044627&sid=STO54OenM0kAAGC2MNY

윈도우 프로그래밍과 관련하여서 언어로는 C, C++언어가 사용되고 있고 이들 언어를 이용하여서 윈도우 프로그래밍을 하는 방법으로는 api를 이용하는 방법과 MFC를 이용하는 방법이 있습니다.

api는 C언어로 작성이 되어있고, MFC는 C++언어로 작성이 되어 있습니다. MFC는 api중에서 일부를 C++로 클래스화 시켜 놓은 것입니다. 결국 윈도우 프로그래밍에서는 MFC를 주로 하면서 api를 혼용해서 하게 됩니다.

MFC를 먼저 하고 api를 공부하는 것은 추천하지 않습니다. 그 이유는 api를 알고 MFC를 공부하면 MFC 이해가 훨씬 쉬워집니다. api를 모르고 MFC를 공부하는 과정에서 겪게 되는 시행착오나 개념의 불명확한 이해를 피할 수가 있습니다. 그러나 api가 워낙 방대하고 MFC조차도 api 모두를 MFC로 만들지 못하였기에 api를 다 공부하고 MFC로 들어간다는 것은 너무 힘이 낭비되는 면이 있습니다. 그래서 api책에서 현재 우리나라에서 이쪽으로 가장 많이 읽히는 책이 김상형씨의 api정복이라는 책이 있는데 이 책에서 나오는 11장 윈도우 메시지 정도까지 보셔서 윈도우에서 메시지를 처리하는 기본적인 개념에 대한 이해를 하시고 MFC로 들어가기를 추천합니다. 이렇게 하면 api에 대해서 기초지식을 공부하는 시간이 오히려 MFC를 보면서 이해안되어서 헤매는 시간보다는 더 적게 걸립니다. 그리고 MFC로 기본적인 서적을 보고 본격적으로 MFC를 이용할려면 결국 MFC와 api를 혼용할 수 밖에 없기에 api에 대해서 기본개념 정도는 익히고 들어가세요.

api책을 보실려면 결국 C에 대해서 공부를 하셔야 합니다. C를 먼저 공부하시고서 api 기초부분을 공부하시면 됩니다. api를 공부하실 때 C++도 같이 하시던지 아니면 api를 보고서 C++를 하시던지 순서는 상관없습니다 MFC에 들어가기전에 C+하고 api에 대한 기본학습이 되어야 합니다.

이상은 실제 프로그래밍에서 사용하는 도구의 학습일 뿐입니다. 이것으로 어떤 프로그램개발을 할 수는 없습니다. 요즘 한창 논의되는 지문인식, 생체인식 포토샵 같은 그래픽 관련 프로그램이나 게임등 이런 분야들에서 인공지능이니 영상처리니 하는 내용들이 실제 상용화하는 프로그램개발에 사용되는 지식들인데 이러한 지식들은 프로그램의 내부 로직을 결정하는 것입니다.

결국 도구의 사용법과 로직이 결합되었을 때 비로서 프로그램개발이 가능하게 되는 것입니다.

로직과 관련한 공부가 자료구조, 알고리즘입니다. 이러한 자료구조와 알고리즘에는 기본적인 수준의 정렬, 검색, 트리 등이 있고 전문분야의 알고리즘에는 인공지능, 영상처리에 고유한 알고리즘들이 있습니다. 기본적인 알고리즘은 대학에서 이산수학이라는 분야와 관련되어있고, 전문분야의 알고리즘은 미적분, 통계, 수치해석 등과 밀접한 관련이 있습니다.

도구에 대한 학습과 병행해서 로직을 위한 공부를 계속 하셔야 하는 것입니다. 님께서 말씀하시는 자료구조, 알고리즘이 도구를 공부하는 데에서 중간에 지나야 하는 하나의 단계가 아닙니다. 위에서 말한 기본알고리즘은 이산수학과 관련된 분야로 이산수학을 굳이 하지 않아도 학습이 되지만 전문분야의 알고리즘은 수학을 모르고서는 알고리즘 이해자체가 되지 않습니다.

프로그래밍 학습이 언어를 비롯한 도구에 대한 학습과 논리를 위한 알고리즘, 수학 공부가 병행이 되어야 합니다. 기본알고리즘은 물론 C언어나 C++로 구현이 되기에 이들 언어를 일단은 학습을 하셔야 공부하실 수 있습니다.

이후에는 데이터베이스, 네트워크 등도 공부하셔야 할 분야입니다. 데이터베이스나 네트워크를 배제한 프로그램개발이라는 것은 오늘날 상상할 수 없기 때문입니다. 물론 깊이는 님께서 나아가시는 쪽에 따라서 달라지겠죠.

질문에 C와 C++의 차이에 대해서 말씀을 하셨는데 C언어는 절차중심입니다. 그래서 어떤 자료를 처리하는 절차를 강조하는 것이고 C++은 자료와 절차가 혼합이 된 것입니다. 오히려 자료에 중심을 두고 있습니다. 일부에서 C 언어를 배우고 C++로 들어가면 절차적 사고로 인해 C++의 객체지향적 사고가 방해받을 수 있다고 하는데 그것은 C언어로 개발을 오랜 기간 한 분들에게나 해당할 듯 싶습니다. 님처럼 api를 이해하기 위한 수준으로 C를 배우시게 되면 그러한 염려는 없지 않나 봅니다. 그리고 C++의 객체지향적 사고는 C++문법책으로 공부가 되는 것이 아니고 C++언어는 디자인패턴, 리팩토링 등 클래스 설계와 관련된 공부를 계속 꾸준히 하셔야 합니다. 디자인패턴 등이 쉬운 주제들은 아닙니다. 체화하여서 쓴다는 것이 시간을 필요로 하고 경험을 필요로 합니다.
Posted by +깡통+