과연 C언어란 걸 알아야 하는 것일까? 곰곰히 생각해볼 수 밖에 없는 문제다. 나 또한 사실상 개발의 대부분을 파이썬으로 진행하고 있기 때문에 복잡하고도 불편한 C언어에 대해서 이제 막 개발에 발을 들인 많은 사람들은 왜 이걸 배워야 하는 지에 대한 의문이 들 것이다. 그런데 사실상 이 C라는 언어는 프로그래밍을 시작하기에 아주 좋은 언어이다. 그 이유에 대해서 알아보자.
첫 번째 이유는 그 무엇보다도 성능에 직결되는 언어이기 때문이다. 여기서 말하는 성능은 머신러닝에서 나오는 정확도같은 걸 말하는 것이 아니다. 정말 말 그대로 성능, 얼마나 이 프로그램이 빠르냐 느리냐를 명확하게 예측할 수 있는 제대로 된 예측이 가능한 언어이다. 대부분의 프로그래밍 좀 했다는 사람들은 컴퓨터가 1초에 1억번 또는 많이 쳐서 10억번 정도의 연산을 할 수 있다고 생각한다. 여기서 말하는 횟수가 사실상 C언어에서 한 줄을 처리하는 횟수와 동일하다고 생각할 수 있을 정도로 C언어는 컴퓨터의 시스템을 명확하게 반영한다.
두 번쨔 이유는 앞서 말했듯이 실제 컴퓨터 내부에서 어떤 식으로 프로그램을 실행시키는 지에 대해서 명확하게 알 수 있다는 점이다. 물론 다른 언어가 그것을 알려주지 못한다는 것은 아니나 그 어떤 언어보다도 C언어가 컴퓨터 내부 로직을 명확하게 알려준다는 것이다. 뭐 컴퓨터 공부 좀 했다는 사람들은 고급 언어와 저급 언어에 대해서 잘 알고 있을 것이다. 쉽게 말해 고급 언어는 사람이 짜기 쉬운 언어, 저급 언어는 컴퓨터가 이해하기 쉬운 언어이다. C언어는 그 중간을 명확하게 꿰뚫고 있어 사람에 따라 사람이 짜기 쉽고 컴퓨터가 이해하기 쉬운 언어일 수도 있지만, 사람도 이해하기 어렵고 컴퓨터도 이해하기 어려운 언어로 인식될 수 있다.
솔직히 많은 사람들이 파이썬만 배우면 다 할줄 아는 거 아니냐고 얘기한다. 방법론적으론 맞는 말이다. 하지만, 그깟 파이썬 6주만에 다 배우고 아무거나 다 짤 수 있는 그런 개발자는 세상에 차고 넘친다. 본인만의 경쟁력이 생길 수 있다고 생각하는가?아 뭐 물론 그마저도 똑바로 못짜는 개발자도 수두룩하지만. 어쨋든 이런 개발자들이 경쟁력을 가지기 위해선 그 무멋보다도 시스템 레벨의 성능 최적화 기법을 터득하는 것이 굉장히 중요하고 그 첫발로써 C언어를 제대로 이해한다는 것은 매우 중요하다.
이 말에도 공감을 못하는 많은 사람들을 위해서 2가지 예시를 들고 이 글을 끝내고자 한다. 첫 번째, 수많은 파이썬 라이브러리, 즉 다른 사람들이 파이썬에서 사용하라고 구현해놓은 함수들은 대부분 C언어에서 구현되고난 뒤, 파이썬을 덮어씌워 파이썬에서 사용할 수만 있게끔 만들어 놓은 것이 대부분이다. 파이썬의 코어 개발자들은 대부분 이런 말을 한다. "파이썬은 실행 속도는 느리지만 개발 속도는 빨라서 좋다." 맞는 말이지만 실행 속도가 느리면 사용자 입장에서는 그 프로그램이 사용하지 않는다. 따라서 근본적인 원인인 실행 속도를 빠르게 하기 위하여 C언어를 바인딩한다. 즉, 코드의 일정 부분을 C언어를 이용하여 실행하여 실행 속도를 빠르게하는 테크닉을 취한다. 여러분이 파이썬만 알려고 한다면 뭐 이해하겠으나 아마 실행 속도 측면에서는 C언어를 아는 사람과는 어마무시한 벽이 있을 것이다.
두 번째, 실행 속도가 같은 시간 복잡도를 가진 알고리즘에 대해서 현격하게 느리다. C언어로 1초가 걸리는 문제를 파이썬으로 10분 동안 돌린다고 해보라. 그야말로 극혐이다. 실제 로직은 똑같다. 하지만, 누가 쓰겟는가? 그렇다. 실제 메모리를 어떻게 할당하고 필요없는 로직을 사용하지 않는 것, 그것이 필요하다. 파이썬은 정말 온갖것이 다 되게끔 변수를 만들어준다. 그래서 그 변수가 실행되기에는 수많은 검사과정과 불필요한 코드 구현을 거쳐야하기 때문에 어마무시하게 느리다. 이것을 무시하고 본인의 책임하에 성능을 몇백배 빠르게 하는 방법? 바로 C언어를 제대로 이해하고 구현하는 것이다.
앞서 말한 내용이 무엇인지 모르겠다면 그냥 지금 당장 C언어를 배우면 된다. 솔직히 말해서 그야말로 알짜로 배울 수 있는 언어다. 그 후에 파이썬은 자동으로 따라온다. 솔직히 C언어가 영어면 파이썬은 프랑스어 수준으로 그냥 따라붙는다. 다시 한번 말하지만 여러분의 경쟁력을 다시 한 번 제고해보길 바란다. 정말 파이썬만 배워서 제대로 된 개발자, 경쟁력있는 개발자가 될 수 있는 지. 만약 그렇지 않다고 생각되면 지금 당장 C언어를 통해서 컴퓨터가 프로그램을 돌리는 내부 로직을 이해하자.
참고) 글쓴이는 C++과 CUDA, 파이썬을 이용한다. 파이썬은 로직을 간단하게 표현하기 위함이고, C++은 CPU, 즉 일반 컴퓨터에서의 성능을 끌어올리기 위해 사용하고, CUDA는 병렬적으로 연산을 처리할 수 있는 경우를 효율적으로 처리하기 위해 사용한다.
첫 번째 이유는 그 무엇보다도 성능에 직결되는 언어이기 때문이다. 여기서 말하는 성능은 머신러닝에서 나오는 정확도같은 걸 말하는 것이 아니다. 정말 말 그대로 성능, 얼마나 이 프로그램이 빠르냐 느리냐를 명확하게 예측할 수 있는 제대로 된 예측이 가능한 언어이다. 대부분의 프로그래밍 좀 했다는 사람들은 컴퓨터가 1초에 1억번 또는 많이 쳐서 10억번 정도의 연산을 할 수 있다고 생각한다. 여기서 말하는 횟수가 사실상 C언어에서 한 줄을 처리하는 횟수와 동일하다고 생각할 수 있을 정도로 C언어는 컴퓨터의 시스템을 명확하게 반영한다.
두 번쨔 이유는 앞서 말했듯이 실제 컴퓨터 내부에서 어떤 식으로 프로그램을 실행시키는 지에 대해서 명확하게 알 수 있다는 점이다. 물론 다른 언어가 그것을 알려주지 못한다는 것은 아니나 그 어떤 언어보다도 C언어가 컴퓨터 내부 로직을 명확하게 알려준다는 것이다. 뭐 컴퓨터 공부 좀 했다는 사람들은 고급 언어와 저급 언어에 대해서 잘 알고 있을 것이다. 쉽게 말해 고급 언어는 사람이 짜기 쉬운 언어, 저급 언어는 컴퓨터가 이해하기 쉬운 언어이다. C언어는 그 중간을 명확하게 꿰뚫고 있어 사람에 따라 사람이 짜기 쉽고 컴퓨터가 이해하기 쉬운 언어일 수도 있지만, 사람도 이해하기 어렵고 컴퓨터도 이해하기 어려운 언어로 인식될 수 있다.
솔직히 많은 사람들이 파이썬만 배우면 다 할줄 아는 거 아니냐고 얘기한다. 방법론적으론 맞는 말이다. 하지만, 그깟 파이썬 6주만에 다 배우고 아무거나 다 짤 수 있는 그런 개발자는 세상에 차고 넘친다. 본인만의 경쟁력이 생길 수 있다고 생각하는가?
이 말에도 공감을 못하는 많은 사람들을 위해서 2가지 예시를 들고 이 글을 끝내고자 한다. 첫 번째, 수많은 파이썬 라이브러리, 즉 다른 사람들이 파이썬에서 사용하라고 구현해놓은 함수들은 대부분 C언어에서 구현되고난 뒤, 파이썬을 덮어씌워 파이썬에서 사용할 수만 있게끔 만들어 놓은 것이 대부분이다. 파이썬의 코어 개발자들은 대부분 이런 말을 한다. "파이썬은 실행 속도는 느리지만 개발 속도는 빨라서 좋다." 맞는 말이지만 실행 속도가 느리면 사용자 입장에서는 그 프로그램이 사용하지 않는다. 따라서 근본적인 원인인 실행 속도를 빠르게 하기 위하여 C언어를 바인딩한다. 즉, 코드의 일정 부분을 C언어를 이용하여 실행하여 실행 속도를 빠르게하는 테크닉을 취한다. 여러분이 파이썬만 알려고 한다면 뭐 이해하겠으나 아마 실행 속도 측면에서는 C언어를 아는 사람과는 어마무시한 벽이 있을 것이다.
두 번째, 실행 속도가 같은 시간 복잡도를 가진 알고리즘에 대해서 현격하게 느리다. C언어로 1초가 걸리는 문제를 파이썬으로 10분 동안 돌린다고 해보라. 그야말로 극혐이다. 실제 로직은 똑같다. 하지만, 누가 쓰겟는가? 그렇다. 실제 메모리를 어떻게 할당하고 필요없는 로직을 사용하지 않는 것, 그것이 필요하다. 파이썬은 정말 온갖것이 다 되게끔 변수를 만들어준다. 그래서 그 변수가 실행되기에는 수많은 검사과정과 불필요한 코드 구현을 거쳐야하기 때문에 어마무시하게 느리다. 이것을 무시하고 본인의 책임하에 성능을 몇백배 빠르게 하는 방법? 바로 C언어를 제대로 이해하고 구현하는 것이다.
앞서 말한 내용이 무엇인지 모르겠다면 그냥 지금 당장 C언어를 배우면 된다. 솔직히 말해서 그야말로 알짜로 배울 수 있는 언어다. 그 후에 파이썬은 자동으로 따라온다. 솔직히 C언어가 영어면 파이썬은 프랑스어 수준으로 그냥 따라붙는다. 다시 한번 말하지만 여러분의 경쟁력을 다시 한 번 제고해보길 바란다. 정말 파이썬만 배워서 제대로 된 개발자, 경쟁력있는 개발자가 될 수 있는 지. 만약 그렇지 않다고 생각되면 지금 당장 C언어를 통해서 컴퓨터가 프로그램을 돌리는 내부 로직을 이해하자.
참고) 글쓴이는 C++과 CUDA, 파이썬을 이용한다. 파이썬은 로직을 간단하게 표현하기 위함이고, C++은 CPU, 즉 일반 컴퓨터에서의 성능을 끌어올리기 위해 사용하고, CUDA는 병렬적으로 연산을 처리할 수 있는 경우를 효율적으로 처리하기 위해 사용한다.
'Research' 카테고리의 다른 글
규모가 점점 커지는 개발에 대한 고민 (0) | 2020.07.14 |
---|---|
[C++] 입출력 (0) | 2019.04.21 |
[C언어] 기본이 되는 가정 (1) | 2018.12.23 |
클러스터링 (Clustering) (0) | 2018.12.14 |
이미지 세분화 (Image segmentation) (0) | 2018.12.14 |