남느
490
2022-07-09 00:31:46 작성 2022-07-09 12:10:10 수정됨
6
2752

C언어를 꼭 배워야 하는가


C언어를 배운다는 것의 의미

C언어를 배운다는 것은 단순히 언어의 문법을 배운다는 의미가 아닙니다.

컴퓨터 구조, 특히 메모리에 대해 배운다는 의미를 포함합니다.

하지만 C언어로 프로그래밍에 입문하는 분들은 컴퓨터 구조에 대해 공부하기 전에 문법부터 배우며 'C언어 포인터 어렵네? 나는 기초도 못하는 바보인가 봐.' 하며 프로그래밍 자체를 포기하는 것이죠.

 

저는 정보처리기사를 취득하고 독학학위제로 컴퓨터 과학과 학사를 취득했습니다. 독학학위제를 취득하기 위해 공부할 때 "CODE" 라는 책이 좋다 하여 읽어봤는데요. 600쪽이 넘는 책을 절반쯤 봤을 때, "이 책이 왜 좋다는 거야?" 하면서 읽는 것을 때려치웠습니다. 컴퓨터 구조 과목에서 2~3시간이면 할 얘기를 쓸데없이 길게 늘어뜨려 써져 있었거든요.

읽는 것을 때려치우면서 드는 생각은 컴퓨터 공학(혹은 과학) 전공자들은 "컴퓨터 구조 과목 시간에 다 뭐했나?" 하는 생각이었습니다.

 

그 후에 다른 과로 편입(애당초 다른 과로 편입하려고 독학학위제 취득했었습니다.)하고 어쩌다 보니 국비 학원에서 Java 교육을 받고 취업해서 남들 다 하는 대로 C언어를 공부하게 되었습니다.

근데 C언어를 공부하며 "CODE" 라는 책을 읽을 때 드는 생각이 똑같이 들었습니다.

 

"Java라면 Heap에 들어가 있어 사용자가 신경 쓰지 않아도 될 것을 포인터라는 것에서 위험하고 귀찮게 다루는 것 빼고는 크게 다를 게 없는데 왜 꼭 C언어를 배우라고 하지? 컴퓨터 구조 과목이나 다른 프로그래밍 언어 과목에서 간단하게 설명하고 넘어가면 되는 내용 아닌가?"

 

대충 그렇게 생각하고 C언어 공부를 때려치우게 되더군요.

프로그래머의 공리는 무엇인가

'1 + 1 = 2' 를 증명하라.

라는 문제를 한 번쯤 들어보셨을 겁니다.

이 문제를 접하고 한 번이라도 '스스로' 생각해보신 분들은 굉장히 말도 안 되고 어려운 문제라고 생각하셨을 겁니다.

자연수 1 이라는 것을 증명할 수가 없거든요. 저도 이 문제를 처음 접하고 "자연수 1을 어떻게 증명하지? 진짜 어렵네. 나는 못해." 하며 포기했습니다.

나이가 들어서 유튜브 알고리즘에 '1 + 1 = 2' 를 증명해주는 영상이 떠서 보게 되었습니다.

그런데 '1',  '+' , '2' 와 같은 것은 증명하는 것이 아니라 정의하는 것이더군요.

그리고 증명하지 않고 "당연히 참으로 받아들이는 명제" 인 공리에 대해 알게 되었습니다.

 

컴퓨터가 알아들을 수 있는 유일한 언어는 기계어입니다. 기계어 <-> 어셈블리어 <-> 고급언어. 이런 과정을 거쳐 우리가 작성한 프로그램이 컴퓨터에게 전달됩니다. 아마 이 글을 읽는 대부분은 기계어를 읽지도 쓰지도 못할 겁니다.

 

만약 1970~80년대로 돌아가 프로그래머에게 "기계어를 모르고 어셈블리어만 알아도 프로그래밍이 가능할까요?" 라고 묻는다면 "가능은 하겠지만 기계어를 꼭 배워야만 합니다." 라고 답할 겁니다.

2022년 지금 여러분들에게 묻겠습니다. "기계어를 모르고, 어셈블리어도 모르는데 프로그래밍이 가능할까요?"

 

미국 대학의 프로그래밍 입문 언어

미국 대학의 프로그래밍 입문 언어

https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext

 

해당 출처에 따르면 2014년 미국 대학의 컴퓨터 과학과 프로그래밍 입문 과목에서 가장 많이 사용하는 프로그래밍 언어는 파이썬입니다. 그다음이 자바입니다.

39개의 대학 중 C, C++로 프로그래밍에 입문하는 대학은 12개입니다.

 

입문 과정 이후에 C, C++을 배우는지는 모르겠지만 적어도 입문할 때 C를 배울 필요는 없어보입니다.

실용적인 측면

웹 프론트엔드 개발을 하기 위해서는 자바스크립트를 배워야 합니다.

웹 백엔드 개발을 위해서는 Java, C#, Python 등등의 언어를 배워야 합니다.

게임 개발을 위해서는 C# 혹은 C++을 배워야 합니다.

 

2018년 기준 SI 46%, 서비스 21%, 게임 18%...

IT 솔루션이나 임베디드 시장이 작아서 C를 사용할만한 곳은 상당히 적어보입니다.

결론

이 문제에 대한 "정답"은 존재하지 않습니다.

이 글은 정답이 아니라 제가 맞다고 생각하는 답입니다.

 

그럼에도 이 글을 쓴 이유는 많은 사람들이 이 질문을 받았을 때 근거 없이 대답을 하는 것을 보았기 때문입니다.

또 질문을 하는 입장에서도 "C가 기초니까", "C언어는 근본이니까" 라는 말도 안되는 이유에 납득하는 사람은 없을 거라고 생각해서입니다.

 

이 문제에 대해 여러분들 나름대로의 답을 찾는데 이 글이 도움이 됐으면 좋겠습니다.

0
  • 댓글 6

  • Constant
    727
    2022-07-09 01:35:19

    두괄식이란 표현을 아실까요.. 공감을 해드리고 싶은데 어떤 내용이 핵심인지 모르겠습니다. 

  • 남느
    490
    2022-07-09 11:36:39 작성 2022-07-09 12:09:25 수정됨

    Constant 주말이라 술 한잔하고 글 썼더니 그런가봐요 ㅎㅎ 수정해야겠네요 ㅋㅋ

  • 코딩완전뉴비
    113
    2022-07-09 13:01:02
    저는 글의 내용이 이해가 잘 됩니다. 논리적으로 잘 쓰셨습니다. 좋은 글 감사합니다.
  • 화성산도적
    39
    2022-07-11 08:58:44

    C/C++를 이야기하는 이유는 다른게 없습니다.

    개발 언어의 기본이기 때문입니다.

    모든 언어들이 갑자기 생긴 것도 아니고 대부분 C/C++에서 파생되었다고 봐도 무방합니다.

    그리고 C/C++에서 사용했던 개념들이 다른 언어들에도 언어적 특성에 따라 표현 형식만 다른 뿐 모두 사용되고 있습니다. (보이지 않는 부분들에서는 여전히 C/C++로 제작되어 있습니다.)


    그래서 C/C++ 개발자들은 JAVA나 C#으로 쉽게 전향을 할 수 있었습니다.

    하지만 반대의 경우는 제 경험으로는 굉장히 어려워했습니다.


    요즘은 개별 언어들이 워낙 언어적 특색이 강해서 위에서 이야기한 내용들이 잘 안 맞는 것 같기는 합니다.


    하지만 한 단계 더 깊게 들어가는 경우라면 여전히 C/C++을 알아야 합니다. 


  • 네입티브
    266
    2022-07-11 10:52:27

    1.향후로도 하드웨어 개발에 있어서는 C언어는 대체가 불가합니다.

    2. 무슨 프레임워크든 저수준 그래픽 엔진 등에 접근하려면 C언어는 필수불가결합니다.

    3. 컴공을 소프트웨어만을 다루는 학과도 아니고, 애초에 코딩을 배우는 학과도 아닙니다. 얼마든지 하드웨어를 다룰 여지가 많습니다.

    4. 메모리 구조가 이렇기 때문에 당연히 이렇게 동작하겠지? 라는 논리는 Unmanaged 언어를 해보지 않으면 직감적으로 취득하기 어렵습니다.

  • fewfefwfew
    246
    2022-07-11 19:41:32

    언어는 도구일 뿐이고 자신이 하는 일에 맞는 도구를 선택하는게 중요하죠.

    택시기사는 자동변속기(Java)를 사용하고 F1드라이버는 수동변속기(C)를 사용합니다.

    과연 택시에 수동 변속기가 효율적일까요?

    공기역학을 배운다고 승객을 더 빠르게 목적지에 데려다 줄 수 있을까요?

  • 로그인을 하시면 댓글을 등록할 수 있습니다.