현대 사회에서 프로그래머가 되기 위해 배워야할 것들은 아주 많다. 초창기의 프로그래머들은 주로 기계만 다루었고 개발 방법도 한정되어 있었기 때문에 약간의 학습과 연습만으로도 프로그램을 짤 수 있었다. 요즘은 컴퓨터가 각 분야에 활발하게 활용되고 있고 개발 방법이 다양해져서 상황에 맞는 적절한 개발 프로젝트를 진행하기 위해서는 프로그래머가 공부해야 할 것들이 훨씬 더 많아졌다.

상상을 초월할 정도로 넘쳐나는 많은 지식들 중 어떤 것들을 선정해서 어떤 순서로 학습하는 것이 효율적인지는 입문자들이 가장 먼저 관심을 가져야할 부분이다. 모든 것들을 두루 공부해 볼 수 있을만큼 시간이 넉넉하고 능력이 뛰어나다면 아무 문제가 없겠지만 우리들 대부분은 그렇지 못하기 때문이다. 자신이 개발하고자 하는 관심분야에 꼭 필요한 것들을 순서에 맞게 공부하는 것이 중요하다.

윈도우  환경에서 응용 프로그램을 개발하는 프로그래머가 되기 위해서는 다음 두 과정 중 하나를 선택하는 것이 가장 일반적이다. 물론 목표하는 바가 웹 개발자가 게임 아티스트라면 필요한 과목은 달라질 것이다. 또한 응용 프로그래머를 목표로 한다고 하더라도 이 순서가 항상 가장 효율적이란느 것은 아니며 여러 가지 가능한 방법중의 하나일 뿐이다.
사용자 삽입 이미지
이 간단한 순서도는 프로그래머 입문에 필요한 과목들에 대해 여러 가지 중요한 사실을 설명하고 있다. 그림에서 보다시피 C는 C++과 API의 선수 과목이며 두 과목을 배우기 전에 C를 반드시 먼저 배워야 한다. C/C++, API는 모두 MFC의 선수 과목이며 MFC를 제대로 배우고 사용하기 위해서는 앞 세 과목에 대한 기본적인 이해가 반드시 필요하다는 것을 알수 있다. MFC는 사용하기는 쉬운 툴이지만 익숙해지는데는 다른 과목보다 훨씬 더 많은 시간을 필요로 한다.

C++과 API는 상호 의존 관계가 없기 때문에 순서에 구애 받을 필요가 없다. API는 C수준의 라이브러리며 윈도우즈는 객체 지향과는 거리가 먼 운영체제이기 때문에 C++을 몰라도 API를 학습하는데는 아무런 지장이 없다. C++은 객체 지향 언어의 문법을 규정하고 있으며 곤솔상에서도 예제를 만들어 테스트해 볼 수 있기 때문에 역시 API를 몰라도 학습이 가능하다.

그러므로 C를 공부한 다음에 C+과 API는 취향에 따라 순서를 정해 한쪽을 먼저 공부하거나 또는 둘을 같이 병행 학습하는 것도 가능하다. 그러나 여러 가지 이유로 C++보다는 API를 먼저 공부하는 것이 더 효율적이다. 왜냐하면 C++이 다루고 있는 객체 개념은 무척 생소하고 어렵기 때문에 C수준에서 충분한 실습을 한 후 C++에 입문하는 것이 좋으며 API는 윈도우즈 환경에서 C언어를 실습해 볼 수 있는 좋은 기회이기 때문이다.

또한 C와 C++은 둘 다 언어의 문법이기 때문에 계속 문법만 공부하게 되면 학습 과정이 지루하다는 단점도 있다. API를 사용하면 칙칙한 콘솔 화면을 벗어나 윈도우, 대화상자, 컨트롤 등을 다루어 볼 수 있고 예쁜 그래픽도 출력해볼 수 있기 때문에 코드의 실행 결과를 좀 더 분명하게 살펴 볼 수 있어 실습의 재미를 더해 준다. 공부를 재미로 하는 것은 아니지만 흥미라는 요소는 지속적인 학습에 무시못할 요소이다.

이 4 과목이 응용 프로그램 작성을 위한 기본 과목들인데 이 과목들을 공부하는데 필요한 학습 기간은 얼마나 될까? 소요 기간은 개인의 상황과 능력, 태도, 학습 깊이 등에 따라 많은 편차가 존재할 것이다. 절대적인 시간을 예측하기는 어렵지만 혼자서 자습을 하고 충분한 실습과 습작 과정까지 포함한다면 6-6-3-3 정도가 일바넞ㄱ으로 필요한 시간으로 추정된다. C언어는 가장 기본 과목이고 모든 과목의 선수과정이기 때문에 충분한 시간을 들여 숙달할 필요가 있고 API는 그 자체로 양이 많다.

만약 개인의 수학 능력과 이해도가 뛰어나고 시행 착오를 줄여줄 수 있는 친절한 조언자가 옆에 있다면 이 기간은 다소 단축될 수 있다. 그러나 학습에 절대적인 시간은 반드시 필요하므로 너무 짧은 기간에 많은 것들을 공부하려고 욕심을 내는 것은 오히려 좋지 않다. 별다른 고통없이 단기간에 얻을 수 있는 것들은 대체로 그만큼 가치가 낮은 것들이다.

MFC까지 기본 과정을 마친 후에는 보통 COM을 공부한다. COM은 마이크로소프트 사의 최신 기술들을의 기반 이론이기 때문에 Active X, DirectX, OLE DB, ATL, OLE 등의 고급 기술을 익히기 위해서 필요하다. 기반 이론으로 COM의 위치는 상당히 중요하지만 다소 어렵고 난해한데다 최신 개발툴들은 COM의 기능을 추상화해 주기 때문에 몰라도 일단 사용은 할 수 있다.

이후의 공부 과목은 자신의 관심과 진로에 따라 결정해야 한다. 상기 4과목은 어디까지나 기본 과목에 불과하며 실무 프로젝트에는 고수준의 실제 기술이 필요해질 것이다. 어떤 프로그램을 만들고 싶은지, 어떤 회사에 취직을 했는지 등에 따라 다음과 같은 과목들을 연구하고 관심을 가지게 된다.

■ DB : SQL, ODBC, OLE DB, DAO, ADO, 오라클, SQL 서버
■ 게임 제작 : DirectX, 3D 그래픽 라이브러리, 전산 수학
■ 시스템 프로그래밍 : DDK, 컴파일러, 운영체제
■ 네트워크 : 소켓, 각종 프로토콜(FTP, HTTP)
■ 웹 프로그래밍 : ASP, JSP, PHP, XML, 포토샵, 플래시, DB

이 외에도 교양적으로 꾸준히 연구해야 할 과목으로 자료 구조, 알고리즘, 컴퓨터 일반, 소프트웨어 공학 등이 있고 고급 기술로는 인공 지능, 화상 처리, 멀티미디어 등이 기술이 있다. 또한 시대의 흐름에 따라 새로 등장하는 기술이나 이슈들이 항상 존재하는데 최근에는 임베디드와 모바일 프로그래밍이 새로운 기술로 각광받고 있으므로 이런 분야에서 일을 하고 싶다면 최신 기술에도 관심을 가져야 할 것이다.

이상에서 보았다시피 프로그래머가 되기 위해 공부해야 할 것들은 무척 많으며 이 모든 기술에 정통하려면 아마도 평생 공부해야 할 것이다. 하지만 다행히도 실제 프로젝트에 모든 기술이 동시에 필요한 것은 아니며 여러 분야의 전문가가 모여 팀 프로젝트를 하는 경우가 많기 때문에 자신의 분야만 잘해도 훌륭한 프로그래머가 될 수 있다.

모든 것을 다 알고 있는 개발자는 없다. 그러나 일이 맡겨졌을 때 할 수 있는 준비가 된 사람과 그렇지 못한 사람이 있다. 프로그래머에게 가장 중효한 능력은 당장 무엇을 할 수 있는 지식이 아니라 필요할 떄 찾아서 공부할 수 있는 순발력과 기본기이다. 그 기본기 중에서도 가장 중요한 것은 바로 C언어와 C언어로 구현된 알고리즘, C++ 언어와 객체 지향의 개념이다. 그래서 C/C++은 다른 어떤 최신 기술보다도 시간과 정성을 아낌없이 투자할 가치가 있는 것이다.

개발자 이야기 : 준비된 개발자

개발자는 무엇이든 할 수 있는 사람은 아니며 너무 많은 분야가 있기 때문에 현실적으로 모든 것에 두루 능숙한 그런 개발자는 없다. 그러나 어떤 프로젝트가 떨어지더라도 수행할 수 있는 준비는 해두어야 한다. 어느날 갑자기 친구한테서 전화가 왔다고 하자.

"야, 핸드폰용 테트리스 게임을 급하게 만들어야 하는데 할 수 있어?"
"그거 모바일 프로그래밍이잖아, 나 해본 적 없어서 못해"
"이거 지금 급한데, 일주일동안 한 50만원에 아르바이트 해봐, 너 공부하면 되잖아"
"음.. 글쎄, 머 까짓거 하면 되곘지, 그래도 지금 하는 프로젝트가 바빠서 안돼"
"그럼 100만원 줄께."
"으음.. 지금 하는게 더 급한데, 곤란..."
"... 팀장님한테 말해서 200만원 예산 타볼께"
"그렇다면야..."

원하는 인력을 보유하지 못한 회사가 단기간의 프로젝트를 위한 적임자를 찾기가 쉽지 않기 때문에 이런 식으로 개발이 진행되는 경우가 많다. 누구나 일주일만에 모바일 프로그래밍을 공부해서 핸드폰용 테트리스를 만드는 것이 가능한 것은 아니다. 기본기가 없는 사람은 아무리 시간을 많이 주고 보수가 후해도, 그리고 열심히 노력한다 하더라도 프로젝트를 성공적으로 수행하지 못한다. 그러나 준비된 개발자는 당장 알지 못해도 일주일이라는 시간동안 모바일 개활 환경만 좀 익히면 가능해지기도 한다. 사실 일주일은 결코 짧은 시간이 아니다.

그렇다면 개발자에게 있어 준비라는 것은 과연 무엇을 의미하는 것일까? 언어에 대한 기본적 지식, 자료 구조에 대한 깊이있는 이해, 해박한 알고리즘 지식, 그리고 숙련된 디버깅 경험 등을 들 수 있을 것이다. 지금 여러분들이 배우는 C 언어에는 이 모든 것들은 완벽하게 포함되어 있어 C를 개발자의 기본 언어라고 하며 C/C++ 이야 말로 개발자의 기본기라고 할 수 있다. 당장 화려한 3D 게임이나 고성능 네트워크 메신저 등을 만들어 보고 싶겠지만 이런 꿈은 잠시 접어두고 지금은 준비된 개발자가 되기 위해 C 언어에 매진할 때이다.






Posted by 테티스
,