프로그래밍 언어를 배우기 시작하면, 대부분의 사람들은 C언어를 먼저 공부를 하거나 혹은 해당 언어를 바탕으로 첫 프로그래밍을 배우기 시작한다. 딱딱한 책과 익숙치 않은 어려운 영어들을 보면서 계속해서 흥미를 잃어간다. 그리고 속으로 생각한다.
'아... 프로그래밍은 내 길이 아닌가?'
왜 C언어를 왜 배우는지도 안알려주고, 왜 이것부터 해야하는가? 누군가 속시원하게 알려주지도 않고 참고 C언어를 계속해서 학습 해나간다.
그러다 포인터부분에서 딱하니 막히기 시작하고, 아에 손을 놔버리게 된다.
아마 이글을 읽을려는 분들은 왜 C언어를 배워야 하는가에 대해 진지하게 고민을 하고 있으며, 답답한 마음에 검색하여 들어왔을거라 생각한다.
그렇다면, 지금부터 C언어를 왜 배워야 하는가에 대해 내 개인적인 의견을 적고자 한다
답을 내리기 전 Low언어와 High언어의 구분
우선 현재 프로그래밍 언어의 체계에서 저수준언어(Low)와 고수준(High)를 구분할 필요가 있다.
Low언어 : 인간으로부터 Low한 -> 컴퓨터에게 친숙한. Ex) C, C++ 등.
High언어 : 인간으로부터 High한 ->인간에게 친숙한 Ex) Python 등.
친숙이라는 단어를 이해해해 보자, 우선 컴퓨터의 세계에서 친숙이라는 말의 기준은 컴퓨터에게 친숙한 정도가 된다.
우리는 컴퓨터의 언어를 배우고 있기 때문이다.
컴퓨터는 기본적으로 0과 1을 이용하는 비트 체계로 이해하게 된다. 즉, 0과 1을 바탕으로 모든 걸 해석하게 된다. 비트를 바탕으로 활용해서 컴퓨터에게 친숙하게끔 하게 되면 그 단계는 매우 줄어든다. 왜? 굳이 장황하게 설명을 안 해줘도 0과 1로만 있으면 다 이해하니까.
하지만 사람에게 친숙하게 하려면 이 0과 1을 많은 단계로 인간에게 친숙하게끔 단계를 만들어줘야지만, 친숙하게 이해할 수가 있게 된다. 즉 인간에게 이해할 수 있도록 단계가 많아져버릴 수밖에 없다. 이 말은 즉 High언어는 메모리 용량이 Low언어에 비해 올라갈 수밖에 없다.
그래서 배우는 이유가 뭐라 생각하니? 크게 2가지의 관점
- 1. 결국, 생산자의 관점에서 판매단가 절감을 위한 즉, 사양을 낮춘 메모리.
- 2. 메모리 직접 접근을 위한 효율적인 자원 관리 가능 (C언어의 가장 큰 장점)
컴퓨터의 본체의 가격과 프린터기의 가격이 같아버리면 프린터를 살 것인가?
생산자(일반적으로 어떤 물건을 판매하는 큰 회사정도로 이해)의 입장에서 판매단가는 결코 무시할 수 없는 요소중 하나이다. 프린터가 컴퓨터 본체 가격과 같아버리면 어느 누구도 구매를 하지 않을거라 생각한다. 메모리가 굳이 비싼 걸 탑재할 필요가 없으니까. 목적은 프린터기를 통해 인쇄만 잘 되는 정도의 가격과 사양이 낮은(인쇄에만 적합한) 메모리만 있으면 되니까.
마치 냉장고에 음식을 넣으려고 한다. 그릇이 싼 작은 걸로 넣을 수 있는 양을, 굳이 비싼 큰 그릇을 써서 담는다면? 냉장고는 불필요한 공간을 차지하게 되고, 다른 그릇이 들어갈 공간을 차지하게 돼버린다. 그만큼 비효율적이다.
그렇기에, 하드웨어와 소프트웨어의 상호작용은 매우 중요하다
- 하드웨어가 아무리 좋다 한들 소프트웨어가 좋지 않게 된다면 하드웨어는 속빈강정에 불과하고
- 소프트웨어가 아무리 좋다 한들 하드웨어가 받쳐 주지 않는다면 그 소프트웨어 역시 제대로된 사양 발휘를 못해 버리게 된다고 생각한다.
결국, 서로서로의 최적화가 잘 이루어져야 한다.
효율적 관리도 싫고, 생산자 관점도 싫은데 그래도 배워야 할까?
관점의 차이다. 그냥 즐기고 내가 만든 프로젝트를 따라 하는 정도에 머물고 싶으면 굳이 배울 필요는 없다.
하지만 내가 조금 깊이 있게 배우고 조금 더 깊게 알고 싶다. 싶으면 그때 배워도 된다. 언젠가는 알고 싶어질 날이 올 거라 생각한다. 특별한 경우와 목적이 있는것이 아니라면 어떤 언어를 배워야 한다는 강박관념에서 자유로워졌으면 좋겠다
프로그래밍 언어는 도구이다. 결국 생각하고 그 생각의 문제를 숫자로 표현하는 과정이다. 본인이 C언어를 배우던 '파이썬'을 배우던 '자바'를 배우던 나중에는 언젠가는 다시 C언어로 돌아와 공부할 가능성이 매우 높다. 지금 이해가 안갔던게 다른 언어를 공부해보니 언어의 유사성으로 인해 이해가 안갔던 부분이 쉽게 이해가 갈 수 있는 부분들이 생길것이기 때문이다.
그리고 언어를 완벽하게 할려고 하는 습관은 프로그래밍 언어를 배울 때 다소 멀리해야 한다. 처음부터 완벽하게 할려고 하지말고 개념적인 요소와 더불어 그 개념을 활용할 줄 아는 정도여도 괜찮다.
본인이 초급자라면 더욱더 괜찮으니 하나를 완벽하게 끝낼려는 강박에서 한발짝 떨어지자.
(완벽함이란 절대 단기적으로 완성되지 않는다)
지금 고민하고 있는것은 나중에 돌아보면 '아 별거 아니였네...' 라고 하는 날들이 언젠가는 온다.
정 리 -
1. 일단 본인이 C언어를 상황상 무조건 배워야 한다면 일단 따라가라고 말하고 싶다. 이해가 안되더라도 이해가 될때까지 일단 잡자. 조금 고통스러울수는 있다. 당연한 과정임을 받아들이자. 절대 쉽고 빠르게 이해할 수 있는 개념은 존재하지 않는다.
2. 그게 아니라 개인적인 공부로 해서 어느정도 힘들다면 다른 언어로 넘어갔다가 다시 공부해도 괜찮다.
'* Language > C' 카테고리의 다른 글
[C언어] 포인터 개념 아직도 햇갈리시나요? 코드로 봐야 100% 이해 할 수 있습니다. (0) | 2021.09.04 |
---|---|
[C언어] 사용자 입력 여러개 받기(반복문) (0) | 2021.08.30 |
[C언어] 헷갈리는 증감 연산자(++a, a++) 차이 한 번에 이해하기 (0) | 2021.08.17 |
[C언어] 확실히 알고가자 프로토타입(Prototype)이란?(개념잡기) (0) | 2021.01.06 |
댓글