많은 프로그래밍 초보자들은 자신이 처음으로 배워야 할 언어에 굉장히 신중을 기하는 것 같아 보이는데 사실상 사장된 언어를 배우는거 아닌 이상은 크게 중요하진 않음. 비베 배워서 실무에서 잘 써먹는다는 사람도 봤고 베이직이나 코볼도 아직 현역으로 돌아감. 그런데 C++이 C랑 이름도 비슷하고 문법도 비슷하니까 C를 적당히 배우고 C++로 넘어가고 싶다는 이야기가 많이 있는데 결론부터 말하자면 C++이나 배워라. 도움 1도 안됨.
1. C++은 C의 상위호환 언어가 아님.
C++이 얼핏보면 C에서 객체 지향 패러다임을 추가한 것으로 보이는데 실제로는 이보다 훨씬 복잡한 개념이 도사리고 있음. 문법은 C에 기초를 두고 있는 것은 맞는데 그건 C족 언어들의 공통적인 특징이니까 별로 중요한건 아님. 그렇게 따지면 자바나 C샵도 C랑 비슷한 문법을 가지고 있는데(수식 한정해서) 말 그대로 객체 지향 패러다임만 추가한 언어들일까? 단지 문법이 비슷하다고 C를 선행학습하는 것은 도움이 안됨.
2. 프로그래밍 초보자는 대부분 컴퓨터공학 입문자다.
이런 사람들에게 필요한건 C의 조건문이나 반복문이 어떻게 동작하는가가 중요한게 아니라 컴퓨터가 명령어를 실행하고 어떻게 흐름이 바뀌는지를 먼저 설명해야하지 않을까? C 문법으로 설명하려고 하면 특정 언어에 종속되는 설명이 되고 개념의 이식성이 생기지 않음. 답은 추상화임. 언어별로 각각의 문법이 어떻게 동작하는지 이해하는 대신 공통되는 개념을 배우면 다른 언어를 배우게 되더라도 자신이 알고 있는 지식을 추상적으로 이식할 수 있음.
3. 패러다임 자체가 달라서 분명 C++ 코드를 쓰고 있는데 C 문법으로 컴파일되는 이상한 상황이 발생함.
C에서는 객체 지향이라는 개념이 없다. 아니 객체 지향이라는 것은 패러다임이라 특정 언어에 종속되는 개념이 아님. 단지 언어에서 직접 지원하나 아니냐의 차이일 뿐이지. 그런데 C를 어지간히 배우더라도 객체 지향이라는게 뭔지 설명해주는 책은 없음. 그럼 뭐냐고? 프로시저 기반의 프로그래밍이 머리에 고정된다는 말이지. C++을 제대로 사용하려면 당연히 프로시저끼리 데이터를 주고 받는 식으로 작성하면 안됨. 함수 개수가 수십개 정도라면 접두어 정도로 해결 가능하겠지만 그게 복잡한 프로젝트일수록 이름공간 충돌이 생각보다 자주 일어남. 그리고 내가 작성한 코드가 C 표준 라이브러리에서 이미 사용되고 있는 명칭이 포함될 수도 있고 외부 라이브러리를 사용해도 마찬가지임. 그냥 C++의 클래스만 사용하면 모든게 해결되는데 말이지.
너무 빡쳐서 제대로 설명 못한 부분은 많지만 아무튼 요약해서 말하자면
(1). C랑 다른 언어들이랑 문법이 비슷하니까 선행학습하겠다는건 말이 안됨. 초보자에게 필요한건 개념이지 언어의 문법이 아님.
(2). C를 잠깐이라도 배우면 프로시저 기반의 프로그래밍이 머리에 고정되니까 좀 어려워.
(3). 객체 지향은 패러다임일 뿐이니까 C로도 객체 지향 프로그래밍을 구현하는게 이론상 가능한데 애초 목적이 객체 지향이라면 C로 객체 지향 구현하는게 중요한게 아니라 C++의 개념을 익히는게 더 중요함. 나머지는 시간 낭비.
그리고 C++ 입문자용 책이라고 해서 C에 대한 파트가 없는것도 아님. 당연히 같은 계열이니까(둘다 벨 연구소에서 나왔음) 공통되는 문법 요소는 기본적으로 설명은 해야지. 그런데 남은 C++ 객체 지향의 상속까지 와서 배우고 있는데 자신은 구조체 기반의 프로그래밍을 배우고 있다면 시간낭비하는거임.
헛소리를 장황하게 써놨노
내가 좀 글을 장황하게 쓰는편이긴 해도 헛소리는 아님
근데 결국 도움되더라 그래픽스 api 내부 c로 구현되어 구조체로 통신하니
ㅇㄱㄹㅇ ㅂㅂㅂㄱ
그건 API가 C로만 짜여져 있으니까 그런거고
비추 개많네 ㅋㅋ
다 땔감이 비추누른거임
C++이 진짜 C의 상위호환이라면 C 프로젝트 코드를 C++ 전용 컴파일러에 넣어도 컴파일이 되어야 하는데 그렇지가 않아서 문법만 조금 비슷한 다른 언어로 보는게 맞아.
둘다 배우면 해결될일을 뭐이리 길게 써놨노ㅋㅋ
걍 시발 둘다 배워라
ㅋㅋㅋ 객체지향 개념이 뭐 대단한거라고 그거때문에 c++만 하라하노 - dc App
이 글을 보고 든 생각 = 개구리 올챙이적 생각 못 한다
구체적인 결과물 띄우는 예제 시켜도 어려워하는 코린이들한테 추상화랜다 아이고 ㅋㅋ
그러니까 그런 애들한테 필요한건 컴퓨터 지식이지 특정 언어에 대한 지식이 아님. 그리고 결과물 띄우는게 어려운건 순수 CLI 코딩이라면 그럴만도 하겠지만 IDE 사용하면 알아서 컴파일 잘 해주는데? 터미널 다루는 기술은 나중에 따로 배우면 되는거고.