written by 김시찬 (chanywa), 2004-01-08
( 2004-04-27, 2006-02-01 updated )
Homepage : http://chanywa.com
Email : chany@chanywa.com
최강 언어, C ?!?!
필자가 C 언어를 처음 접한 것은 고등학교 3학년 때였다. 친구들은 다들 입시공부에 매달릴 때 쯤, 나는 C 언어의 매력에 푹 빠져 있었던 것이다. 그때가 94년도였으니까 그동안 대략 10년이나 흐른 셈이다.
당시에 C 언어를 배우고자 책을 구입하고 PC 통신에서 정보를 얻을 때 쯤, C 언어도 몇년 후에 없어질지 모른다는 얘기가 나온 적이 있었다. 새로운 다른 언어들이 개발되기 때문에 까다로운 C 언어는 없어진다는 얘기였다. 당시 COBOL과 FORTRAN이 더욱 많이 사용되던 때였고, C 언어도 우리나라에 들어온지 오래되진 않았던 시점이었다. 아무 것도 모르는 나는 과연 이것이 배울 가치가 있는 것인가에 대해 나름대로 고민을 했었고, 결국 지금은 C 언어로 밥먹고 사는 처지가 되어버렸다.
단지 터보C 만이 존재하는 줄 알았던 나는 C의 앞길을 어둡게만 봤었지만, 좀 더 공부하는 폭이 넓어지고, 실무경험을 쌓아갈수록 C의 능력에 대해 감탄을 금할 수가 없다.
요즘에도 여러가지 언어들이 나오면서 학생층에게는 C 언어의 위기감을 느낄지 모르겠으나, 사실은 그렇지 않다. 같은 C 계열인 C++에게 조차도 말이다. 물론 많은 부분들이 C에서 C++로 전환되어가고는 있지만, 반면에 시장은 엄창나게 커져가고 있으며 C++가 C의 모든 부분을 대체할 수는 없다. 한마디로 C만 하더라도 먹고 살 수는 있단 얘기다.
정말 C 언어가 최강일까?
제가 학생때는 각자가 사용하는 언어나 컴파일러가 최고라며 말다툼을 하는 경우가 종종 있었다. 필자가 앞에서 "최강언어, C"라고 적긴 했지만, 정말 경험을 쌓게 된다면 최강언어라는 것은 없다는 것을 금방 깨닫게 된다.
프로그래밍 언어는 목적이 아니라 수단일 뿐이다. 내가 지금껏 C 언어만 10년을 공부했다할지라도, 진정 프로그래머로서의 실력이 쌓였다면 그것을 바탕으로 Java나 Basic에 금방 적응을 할 줄 알아야 하고 또 막상 상황이 닥치면 그렇게 하게 된다. 중요한 것은 문법이 아니라 머리와 감각이다. 언어는 단지 그 생각들을 표현하는 수단이기에 언어 자체에 너무 매달려서는 안된다는 말이다.
실무에서 프로젝트가 커지면 커질수록 동시에 사용되는 언어의 종류도 많아진다. Visual C++ 과 Visual Basic을 함께 쓰는 경우가 아주 많으며, 그외에 C 계열이나 Java와 웹 프로그래밍 언어인 PHP, ASP 등과 함께 쓰이는 경우도 적지 않다. 아무리 C 언어가 좋다고는 하지만 개발시간과 효과를 따졌을 때, 다른 언어가 C 언어보다 좋은 경우도 참 많다.
이것은 단지 C 계열 언어와 다른 언어와의 차이점에 그치는 것은 아니다. 같은 C 언어 중에서도 Visual C++이 좋을때도 있고, C++ Builder가 좋을 때도 있는 법이다. 그리고 사무용 프로그램 개발시에는 필자가 말하는 "최강언어, C" 보다는 파워빌더나 델파이 등이 더욱 각광받기도 한다. 아직도 전산통계쪽에서는 COBOL을 사용해 개발한다고 하지 않는가. 한마디로 최강언어란 있을 수 없고, 있지도 않다. 단지 자신의 프로그래밍 스타일에 따라서 주력 언어를 선택할 뿐이다.
누구나 그렇듯, 나도 갈팡질팡 했었다
초보시절이나 학생시절에 가장 궁금했던 것 중 하나가, 과연 좀 한다싶은 사람들은 어떤 걸 공부하고 어떤 걸 사용하는가 하는 것이다. 비록 고수는 아니지만, 나름대로 초보티는 벗어났다고 생각하기에 그동안 접했던 것을 간단히 소개해보겠다.
제일 처음에는 BASIC이란 것을 배웠다. 그것도 8비트 Apple 컴퓨터에서... 당시 그것이 정확히 무엇인지는 모르겠으나 그냥 BASIC 이라고만 기억한다. 그 이후에 컴퓨터가 16bit로 넘어가면서 MS-DOS 환경에서 동작하는 GW-BASIC을 사용했었는데, 대략 89~90년쯤이었던 것 같다. 이때는 다른 언어는 존재하는지도 몰랐던 것이 사실이다.
GW-BASIC에는 한계가 있어서 어느 정도 시간이 흐르자 프로그래밍이란 것에 대한 재미가 없어져 버렸다. 몇년이 지난 후에 나름대로 컴퓨터를 한다 싶은데 별로 인정받을 길이 없어서 다시 시작한 것이 프로그래밍이었다. 94년쯤 C 언어를 독학으로 시작했는데, 정보문화사에서 나온 "안녕하세요, 터보C"라는 책과 Turbo C v2.0 컴파일러를 사용했던 것으로 기억한다. 필자 인생 최초의 C 언어 입문이었다. 물론 그 이후에 Turbo C++ v3.0도 사용했었지만 독학이다보니 당시에 C++이란 개념을 제대로 이해하지 못해서 C 언어만 공부했었다.
그러다 군입대를 했고 우연찮게 군대내에서 낡아빠진 구닥다리 16비트 컴퓨터를 구하게 됐다.. 당시는 펜티엄2 MMX 정도가 유행했었을 때인데, 486도 아닌 286 컴퓨터라니... 그것도 하드디스크도 없는... 그래도 다행히 Turbo C v2.0을 구하는 바람에 디스켓을 바꿔넣어가며 공부를 했었다. 군내라서 등록된 디스켓만을 사용해야 하는데, 그것을 구하는 것도 장교들을 통해서 며칠에 걸친 구걸(?)끝에 얻은 것이었다. 이때 내 생애 최초로 만든 첫작품, 테트리스가 완성되었고, 그러면서 파일입출력, 공용체, 포인터등등의 C언어 마지막 단계들을 모두 익혔다.
제대후에 컴퓨터공학으로 복학을 해야 하는데 별로 할줄 아는 것도 없고 해서, 당시 학생들 사이에 유행하는 Visual C++을 시작했다. 물론 휴학기간중이라 독학이었다. 학원을 다닐까하는 생각도 해봤지만, 자격증 준비반 이외에는 제대로 된 학원조차 찾기가 힘들었다. 당시 공부를 하면서 MFC를 쓰긴 했으나 거의 C 수준이었다. 이때부터 클래스, 오버로딩, 오버라이딩 등 C++ 개념이 들어서기 시작했다고 볼 수 있다.
그러다 복학 후에는 Java가 유행한다고 해서 이것도 공부했다. 사실 필자가 군대에 있을 때 고참들로부터 이 언어의 얘기를 많이 듣긴 했어도 그냥 무시해버렸었다. 제대후 바깥에 나오니까 정말로 Java 붐이 일고 있었다. 교내에 건물하나를 증축해서 자바교육센터라는 것을 세울 정도로 말이다. 갈대같은 공학도의 마음... ㅜㅜ
대학 재학중의 개발은 주로 Visual C++을 이용하는 것이었고, 간혹가다 Java였다. 그리고 대형 실무 프로젝트에 아르바이트로 투입되면서 C++ Buiilder를 처음 사용하게 되었다. 별다른 교육도 전혀 받지 않았고, 필요에 의해 처음 써보는 컴파일러를 가지고 그냥 뛰어들게 되었던 것이다. 물론 쉽지는 않았지만 C에서 Visual C++까지 해오면서 C, C++, 윈도우 프로그래밍에 대한 개념이 섰던 터라 적응이 오래걸리진 않았다. 물론 장기간 C++ Builder를 사용해온 사람만큼 잘할 수는 없겠지만... ^^
홈페이지를 운영할 목적으로 취미삼아 PHP도 독학했다. 학교 다닐적 당시 벤쳐붐이 일때, 교내 연구소에 있던 선배가 같이 들어와서 ASP 하자고 했는데 뿌리쳤던 적이 있다. 그러고나니까 웹프로그래밍을 배울 기회가 없고, 만만한게 C와 비슷한 PHP이길래 무작정 뛰어들었던 것이다. 이것 역시 너무 쉽게 적응해버렸다. C와 유사하다는 이유만으로 거의 공짜로 익히다시피 했으니까 ( 어떤 사람은 Perl이 더 비슷하다고도 하던데,... ) 만약 C를 제법 한다 싶은데 웹프로그래밍을 배우고 싶다면 PHP를 접해보길 권한다.
아무튼 필자의 주력언어는 지금도 C 언어이다.. C++도 아닌 C 언어... 몸담고 있는 직장이 임베디드 관련이다보니 아직은 C++이 활성화되지 않았다. 대부분이 C 언어고 OS의 종류에 따라 WinCE 계열로 바뀌면 C++을 써야한다고는 하는데, 아직은 일부 팀에서 진행중일 뿐이다.
어떤 언어를 하면 돈을 많이 벌 수 있을까?
사실 따지고 보면 돈 버는 언어라 하면, 고급언어(High Level)보다는 저급언어(Low Level)를 꼽는다. 임베디드 쪽도 그러하고, 시스템 프로그래밍도 그렇다. 요즘 각광받는 분야가 SOC (System On Chip)이다보니 전자제품마다 프로그래밍 안들어가는게 없고, 덩치 크고 느린 자바를 넣는 것보다 속도 빠르고 덩치작은 C 언어를 쓰는게 일반적이다. Embedded Programming
특정 하드웨어의 기능들을 동작시키기 위해 그 하드웨어에 맞게 필요한 기능들을 일종의 맞춤제작으로 컴팩트화 시켜서 제작하는 프로그래밍을 뜻한다. 물론 이렇게 짜여진 프로그램은 일반적으로 프로세서 동작을 위한 OS를 포함하며, ROM 등의 하드웨어에 기록된 채로 제품출시가 된다. 한글로 억지로 풀이하면 내장형 시스템이라고 할 수 있겠다.
PDA, 인터넷 냉장고, 디지털 TV, 홈시어터 심지어는 전기밥솥까지 임베디드 프로그램이 내장되어 있다.
그리고 중요한 점은 수요에 비해 공급이 얼마나 많은가 혹은 많아질 수 있는 소지가 있는가 하는 점이다. 한 예로 예전에 웹프로그래밍이 한창 유행할때 다루기 쉽다는 이유만으로 공학도는 물론이고 수학과, 철학과, 의학과, 심지어는 집에서 쉬던 아주머니들까지 배웠다. (물론 4~50대 아줌마를 말하는 건 아니다 ^^;;) 초기에는 월급이 4~500만원을 넘었었지만 웹프로그래머가 순식간에 급증하는 바람에 지금은 취직자리 구하는게 쉽지가 않다. 그 중에 정말 돈버는 웹프로그래머는 따로 있지만, 대부분의 사람들은 적은 보수로 일하거나 다른 길을 찾게 되었다.
일반 어플리케이션 프로그래머들도 예외라고 할 수는 없다. 웹 프로그래머보다는 덜 할지 몰라도 만만치 않다는 얘기다. 전국 대부분의 대학, 심지어는 외국어대학에도 컴퓨터계열학과가 있다. 이 학과출신들은 모두 어플리케이션 프로그래머라고 해도 과언이 아니다. 1학년때부터 4학년때까지 배우는 것이 그것이니까. 간혹 생각이 트인 교수님이 계시다면 얘기가 달라지겠지만, 현재는 그것이 학과기본과정이다보니 어플리케이션 프로그래머들은 지금 현재에도 대량생산(?)되고 있는 중이다.
임베디드 쪽이나 시스템 프로그래밍등의 순수 C 프로그래밍(필자가 이렇게 부름 ^^;;)이라고들 하는 분야는 웹이나 일반 어플리케이션 분야보다 힘든게 사실이다. 그리고 C 언어만 하기보다는 시스템 구조도 알아야 하고, 어셈블리어도 조금씩은 배워둬야 한다. 그리고 각종 알고리즘도 습득해놓고 효과적으로 적용할수록 실력을 인정받게 된다. 물론 어플리케이션이나 웹 프로그래머들도 이런 걸 습득하겠지만, 중요도나 활용도 측면에서는 다르다.
어떤 아이콘을 얻어 쓰느냐, 어떤 이쁜 컴포넌트나 컨트롤을 붙이느냐로 판가름나는 것이 아닌, 머릿속에 든 내용만으로 작업을 하는 경우가 많다. 그래서 이곳에는 수요에 비해 공급이 엄청 모자라다. 즉, 일자리가 너무나 많다는 것이다. 필자가 있는 곳도 사람이 모자라 허덕이고 있다. 그리고 일년에도 수차례 개발자 추천좀 해달라는 메일이 회사에서 뿌려진다. 하지만 정작 추천할 사람을 찾을 수가 없는 것이다. 왜냐면 다들 쉬운 것만 하려고 하니까...
그럼 어떻게 해야하나
자신은 C보다 다른 언어가 더 좋은데, 필자가 순수 C 프로그래밍을 찬양(?)한다고 해서 굳이 흔들릴 필요는 없다. 제대로 정리가 안되어 이 글을 읽는 사람이 이해를 못했을 수도 있지만, 말하고자 하는 요점은 C가 좋다는 얘기가 아니기 때문이다.
부족하나마 필자가 말하고자 했던 내용을 아래와 같이 정리해봤다.
둘째, 문법보다 기법이나 알고리즘 구현, 문제 해결방법론에 초점을 맞추어라.
그것이 진정한 실력을 쌓는 길이다.
셋째, 쉬운 방법을 선택하지 마라. 누구나 다 할 수 있는 것을 배워봤자,
당신의 자리는 아무나 차지할 수 있다.
넷째, 유행에 민감하지 마라. 유행은 유행일 뿐이다.
한번 공부한 것은 전문가가 될때까지 머물러라.
지금 처한 상황에서 가장 배우기 좋은 언어를 선택하면 무난하다. 학교에서 밀어주고 있는 분야가 있다면 그것을 하면 좋고, 혹은 주변에 특정 언어의 실력자가 있다면 그 사람을 따라가는 것도 좋다. 언급했듯이 어느 정도의 실력이 쌓인 후라면 다른 언어로 전향하는 게 쉬울 뿐만 아니라, 자신의 스타일이나 장래를 따져볼 수 있는 여력이 생기기 때문이다. 다만 너무 쉬운 것이나 편하게 일하는 것은 가급적 피하는 것을 잊지 말아야 할 것이다.
글을 마치며...
대학 복학후 2학년때 방황을 했었다. 내가 과연 컴퓨터공학이라는 전공을 잘 선택한 것인가, 나한테 소질은 있는 것인가, 그리고 어느 방향으로 나아가야 할 것인가... 그 때 전공과목담당이셨던 강석훈 교수님께서 수업시간에 언급해주신 말씀들이 지금의 내가 있게 했는지도 모른다. 학생들의 좁은 생각사이에 파묻혀 갈팡질팡할 때 길을 제시해주셨고, 나는 그 길을 따랐고, 결국 지금은 어느 우수학생 못지 않게 성장을 했으니 말이다.
그래서 당시 교수님 말씀을 들었을 때 내가 받아들인 내용이나 내 심정, 느낌을 가급적 잘 살려서 다른 사람들에게 작은 도움이 되었으면 하는 마음에서, 간략하게나마 이 글을 적어보았다. 이 글을 통해서나마 그때 필자에게 길을 제시해주신 강교수님께 감사드린다는 말씀을 전해드리고 싶다.
그렇다고 해서 혹시나 이 글을 대충 읽고 아무 생각없이 순수 C 언어의 세계로 뛰어드는 불나방은 없길 바란다. 필자는 사실 C 언어가 가장 좋다. 그리고 이것으로 먹고 산다. 하지만 "꼭~!" 이라는 말은 하고 싶지 않다. 중요한 것은 언어가 아니라, 그 언어를 정복하고자 하는 당신의 자세이기 때문이다. <끝>
'develop' 카테고리의 다른 글
논리적 오류 해결하기 (0) | 2004.05.05 |
---|---|
독학인가, 강습인가 (0) | 2004.04.27 |
for문 날씬하게 사용하자 (2) | 2004.04.19 |
TC, BC, VC의 차이점 (1) | 2004.01.08 |
구구단을 무시하지 마라 (0) | 2004.01.06 |
댓글