시비처럼 보일 수 도 있는 궁금함

매일 매일 즐겁게 코톡 눈팅하고 있습니다.
싸지방에서는 뭐 할 수 있는게 거의 없으니까 코톡 들어와서 글쓰다 삭제하는게 주요 업무네요.

얼마전에 사회에 살고있는 아는 동생(곧입대함ㅋ)이 군대에서 코딩을 독학하고
전역후에 전과를 하고 싶다고 합니다. (전과에 필요한 조건은 이미 대충 맞췄다니 그건 알아서 하겠쥬)

당장 C언어부터 공부하고싶다는데 보통 이런 개발자 커뮤니티에서는 이럴때
The C Programming Language를 추천하더군요,
저는 일단 윤성우님이 쓰신 열혈 C언어로 프로그래밍의 기초를 이해했는데 큰 무리는 없었습니다.(영어 넘나 어려운것…★)

그래서 저도 잠시동안 망설였습니다.
그도 그럴게 제가 읽어보지 않은 책을 무작정 추천할수 는 없잖습니까?
거기다가 예전에 지나가다 읽어본 글에서 The C Programming Language는 어느정도 프로그래밍에 지식을 가지고 있는 분들이 이해하기 쉽고 처음 코딩을 접하는 사람들에게는 어렵다는 말을 들었습니다.

그럼에도 수많은 사람들이나 대학교에서 The C Programming Language를 가장 기본으로 취급하는 이유가 왜입니까?

물론 본 저서의 저자가 C언어를 직접 개발한 만큼 다른 서적에 비해 명확한 이점도 있겠지만, 그것만이 전부일것같지 않아서 질문해보니다.

안녕하세요.

먼저 c로 입문하실필요는 없다고 생각하고요.

열혈은 너무 입문용이에요. 어쩌피 포인터때문에 다른책을 또 봐야대요.
포인터에대한 설명이 좀 부족한감이잇죠.

아주 입문이 아니라면 데니스 리치의 책을 추천하고 싶네요.

Ps. 작성자분께서 열혈로 공부를하셧다면 알고계실겁니다. C언어에서 call by reference를 어떻게 사용하나요?

코딩은 혼자 하는 것이 아닙니다. 남의 코드를 읽고, 또 남이 내 소스를 읽을 일도 있습니다. 따라서 그 언어의 다른 사용자들이 코딩하는 방법을 알 필요가 있습니다.

예를 들어, C언어를 사용하면서 반복문 대신 어셈블리어마냥 goto문만 사용한다던가, C++을 쓰면서 Ruby처럼 람다를 펑펑 만들어대면 실행은 문제없을지 몰라도 타인이 읽을 수 없는 코드가 됩니다. 프로그래밍 언어를 익힌다는 것은 문법뿐만 아니라 그 언어의 사용자들이 구축한 코딩 방법과 문화, 그리고 설계자의 의도 또한 받아들이는 것입니다. ‘연산자 오버로딩 시 인자명은 lhsrhs로 할 것’, ‘여러 개의 원소들에 대해 수행하는 함수는 그 범위를 beginend로 받을 것’, ‘간단한 템플릿 타입 인자는 T로 받을것’, RAII 등은 문법만으로는 알 수 없는, C++ 고유의 특징인 것처럼 말입니다.

이러한 관점에서 데니스 리치나 비야네 스트롭스트룹의 책이 높게 평가받는 것입니다. 문법뿐만 아니라, 그 언어를 어떻게 사용해야 하는지에 대한 standard를 제시해 주기 때문입니다.

비슷한 맥락에서 저는 '라이브러리는 필요할 때마다 찾아보면 되지’라는 생각을 지양합니다. 오히려 표준 라이브러리 구현을 까볼 것을 권유합니다. 쓰라고 있는 것이니만큼 그 언어를 어떻게 사용해야 하는지 잘 알려주기 때문입니다.

2 Likes

저도 동감하는 말입니다. ^^/

근데 표준 라이브러리도 가끔 못난 부분이 있어서 적당히 걸러봐야 합니다. 월급루팡들…

C++ 대신 C를 진지하게 파고들고 싶으시다면, 옌스 구스텟의 Modern C를 추천합니다. 지인 추천으로 알게 되었는데 좋은 책이더군요. (구스텟은 C 표준 위원회의 일원입니다)

아칙 출시되지 않았고, (2019년 12월에 출시 예정이고, 그만큼 C에 대해 “모던하면서 엄밀하게” 다루고 있습니다) 인터넷에서 pdf로 받으실 수 있습니다.

https://modernc.gforge.inria.fr/

C11의 _Generic과 멀티스레딩에 대해서도 다룹니다. C11 멀티스레딩 자체가 지원이 부실한 편이기 때문에 기본만 다루고 넘어가는 수준이지만요.

C, C++ 책은 C알못이 쓴 저질 서적이 하도 많기 떄문에 2017년까지는 K&R만한 서적이 없기는 했는데, K&R에서도 나쁜 습관을 은근히 많이 가르치기 때문에 (예를 들어 int i; int j; 처럼 초기화하지 않은 지역 변수를 덩그러니 남겨놓는다든가) 이제는 추천서의 자리에서 내려와야 할 때인 것 같긴 합니다.

5 Likes

어떻게라고 말씀하셔도 구체적인 예시가 생각이 나질 않네요.
흠…변수값을 참조만 할때 사용합니다.
설명이 올바른지 확실이 잘안서네요.

네 생각안나는게 맞는겁니다 ^^

왜냐하면 C에는 그런게 없거든용 ㅎㅎㅎ

포인터 값을 매개변수로 넘겨서 그 값을 참조해서 변수값을 변경하는 방법만 존재할 뿐이죠. 그 매개변수값을 바꾼다고 원래 값이 변하진 않자나용 ㅎㅎㅎ

열혈에서는 이러한 행위를 call by reference라고 소개하고잇어용.
제 생각엔 엄밀히 말한다면 잘못되었다고 봐요.

입문을 할때는 사실 개념의 정확성이 중요하잖아요 ㅎㅎㅎ
단순한 문법에서 더 나아갈때 그 책은 조금 부족한 면이 잇어요.
그래서 다른책을 추천드리는거죠.

많은 컴공학생들이 열혈만 보고 c를 넘어가는 경우가 있는데… 안타깝죠.
물론 열혈을 보고 다른책도 보고 스스로 계속 c를 공부하신다면
전 열혈봐도 괜찮다고 생각해요.

어쩌피 서적은 매개체일뿐이고 공부는 스스로하는거니까요. ㅎㅎㅎ

좋은 하루 되세요. ^^

저희학교 국어쌤 윤성우로 공부하시는중…^^

센세…ㅠ

그렇군요…!!
명확한 설명 감사합니다. 그럼 동생한테는 열혈 추천하고
저는 원서보러 갈께용(<-진짜 ***)

이렇게 모두의 노력은 물거품이 되었읍니다…

2 Likes

하지만 정말 명심해야하는 것이죠.
우리에겐 많은 이정표가 있지만 그 길을 걷는 사람은 드물거든요.

이정표를 보는건 공부가 아닙니다. 걸어야 공부죠 ㅎㅎㅎ
우리가 할 수 있는건 이정표를 보여주는것 뿐이잖아요 ㅎㅎㅎ
이 게시글의 작성자분도 잘 하실거라 믿습니다

1 Like