2009년 8월 7일 금요일

C 언어 프로그래밍...


embedded.com에 아래와 같이 재미 있는 column이 올라왔습니다.

Real men program in C(진정한 사나이는 C 언어로 프로그램을 개발한다?)

Embedded System에서 C 언어의 중요성을 강조하며, 대학에서의 교육과의 괴리를 이야기하고 있습니다.

요즘 각광을 받고 있는 Google의 platform인 Android는 JAVA 기반이라고 합니다. 물론 그 바탕에는 linux가 있고, linux는 assembly와 C로 되어있지만, application은 JAVA로 개발한다고 합니다. 또한 Apple의 iphone은 Object-C 기반으로 개발을 한다고 합니다. 하지만 일반적인 Embedded System에서는 C 언어가 많이 사용되고 중요성을 강조할 만 합니다.

C 언어를 배우는 일은 "C 언어 21일 완성"(책을 읽어 보지는 않았습니다만...)과 같은 책을 읽는다고 끝나는 것은 아닙니다. 모든 프로그래밍 언어가 그렇듯이 문법 자체를 배우는 데는 책이름 처럼 21일이면 끝날 지 모릅니다. 하지만 위의 column에서 언급한 바 대로 C 언어에서 사용하는 volatile keyword 같은 것은 사실 그냥 책을 읽어서는 이해할 수 있는 것이 아닙니다.

언어에서 기본적으로 제공하는 함수, OS 등에서 제공하는 API 등을 배우는 것은 그렇게 간단하지 않습니다. 물론 C 언어가 기본적으로 제공하는 라이브러리, 즉 C Standard Library의 내용은 다른 언어에 비해 그다지 많다고 할 수 없습니다. 하지만 C Standard Library에서 제공하는 것은 파일 입출력, 간단한 문자열 조작, 메모리 관련 뿐으로 그것만으로는 다양한 프로그램을 작성할 수 없습니다. 예를 들어, multi thread 프로그래밍을 하기 위해서는 별도의 library(예를 들어 pthread library)나 OS에서 제공하는 API 등을 익혀야 합니다. 또한 GUI 프로그래밍을 위해서도 마찬가지로 많은 함수의 사용법을 숙지하고 있거나, 아니면 그것을 쉽게 찾아서 사용할 수 있도록 훈련이 필요합니다. -- 그래서 저는 GUI 프로그래밍을 거의 하지 않습니다.

또한 프로그래밍을 하기 위해서는 기본적으로 프로그래밍 tool의 사용법을 숙지해야 합니다. compiler의 사용에 있어서, compiler option의 의미, compiler가 출력하는 에러나 경고 메시지의 해석등은 꼭 익혀야 합니다. debugging을 위해서는 debugger 사용법을 익힐 필요가 있습니다. 단순한 프로그램이야 소위 말해 printf-debugger(printf 함수를 이용하여 코드의 곳곳에 필요한 것을 출력하도록 한 후에 출력 결과를 보고 debugging하는 방법을 말함)을 사용해도 무방하지만 그렇지 않은 경우에는 debugger 사용법은 필수적입니다. 최적화를 통해 프로그램의 run-time을 줄이거나 하게 되면 profiling tool의 사용법을 익혀야 합니다.

PC Windows 프로그래밍을 위해서 배워야 할 것은 비교적 간단할 수도 있습니다. Tool은 Visual C++만 익히면 큰 문제가 없고, MS Windows만 공부하면 끝이라고 볼 수 있습니다. 그리고 인터넷에 돌아다니면 도움을 얻을 수 있는 곳도 상당히 많이 있습니다. 대신 PC 프로그램은 대부분 화려한 GUI와 복잡하거나 특수한 기능을 가지고 있어야 상품화가 가능하고, 호환성에서 문제를 일으키지 않아야 하므로 개발 과정이 까다로울 수 있습니다.

Embedded System은 반면, Tool이 system 마다 다르고 사용하는 OS마다 배워야 하는 API들이 다릅니다. 또한 개발하는 System 마다 하드웨어가 다르기 때문에 chip data sheet을 읽을 수 있는 능력이 있어야 합니다. 인터넷에서 얻은 자료나 소스 코드는 대부분 바로 적용할 수 없고 system에 맞추어 변형을 해야 하는 어려움이 있습니다. 대신 System에 특화된 software를 만들게 되므로 test가 비교적 단순한 편이고, source line count를 복잡도라고 한다면 따진다면 PC 프로그램 보다는 단순한 경우가 많다고 볼 수 있습니다.



0 개의 댓글:

댓글 쓰기