로그인회원가입 장바구니마이페이지
kangcom
전체
서평보기
프로그래밍 언어론(개정판)
원유헌 | 정익사 | 국내서 | 2003-09-10
종합평점
도서수준
이 책을 교재로 강의를 듣게 되었다면 , 강좌를 때려쳐도 좋다 2003-12-19 오후 9:29:46 
평점
도서수준
조회수 (4300)
공감 (0)
조해진 님의 블로그
-- 다른 프로그래머 사이트에서 이 서평에 관한 토론를 해본 결과, 서평의 부적절한 면이 있는 면이 있어, 이를 삭제,수정하고 좀더 명확하게 말하고자, 내용을 조금 추가 합니다 ----------


저는 원래 학교 교재로 쓰이는 책은 서평으로 거의 남기지 않는 편입니다
[이번이 처음일지도 .....]

하지만 이 처럼 극악인 책은 처음이라 ... 말을 안할수 없네요


프로그래밍 언어론을 배우는 이유가 무엇일까요?

요즘의 언어가 어떻게 발전되어 왔는지, 어떻게 발전할것인가를 이해하고

다른 여러 언어들과의 차이와 공통점을 이해 함으로써

언어들의 이해를 돕고자 하는 것이라 볼수 있을것입니다


따라서 위의 말한 내용을 배우고자, 프로그래밍 언어론책을 보는게 정답이라고 봤을적에

이책은 오답이 무엇인지 극명하게 보여줍니다

프로그래밍 언어론을 배우는 이유를 알기 위해서는 이책을 절대

읽어서는 안될것입니다


왜 이렇게 까지 서평을 쓰는 필자 [저 자신]가 이렇게 까지 흥분을 하면서

악평을 할까라고 의심을 품는 분을 위해서

제가 수업때 들은 내용과 책의 내용을 체크해 가면서 제가 여태 배우고 , 경험한

지식을 바탕을 토대로 이 책의 결함을 체크해 드리겠습니다

[일단 2002년 2003년 의 책의 내용이 거의 완전 똑같다는 면에서 2002년 책을 두고 설명을 하겠습니다
2003년 판도 제가 체크를 했고 페이지 차이가 있긴 하지만 , 글자 하나 토시 틀리지 않다는 점에서
같기 때문입니다 , 페이지를 체크 한다면 2003년 판도 그 엇 비슷한 페이지에 같은 내용이 있을것입니다]


이책의 제일 먼저 거론할 결함은 저자의 프로그래밍 언어에 대한 이해부족입니다

[이상하게 들리실지도 모르겠습니다.... 허허참... -_-;]

무지 많은 언어를 거론하면서 언어에 대한 쓸때없는 지식만 늘어놓을뿐, 언어의 차이를 이해하는데

거의 도움이 되지 않는 내용이 많습니다

한마디로 자기가 아는 언어의 이것저것 고만고만한 특성만 조금씩 따다가
대충 얼버부렸다고 말하는게 좋겠네요, 내용을 보면 저자가 뭐하나 제대로 알고있다고
보기 힘든 내용이 태반이었습니다

특히 저자는 C,C++에 대한 이해부족이 가장 컸는데 , 옛날부터 현대에 까지 가장 많이 쓰이고 있는 언어중 하나라

볼수 있는 이런 언어에 대해 이해가 너무나도 부족하다는 것입니다

예를 들면 117p의 C,C++에 대한 ++후위 연산자에 대한 부분을 C++ 언어의 스펙상으로 보자면

그런식으로 표현하면 안되는것입니다.

sum = count++ 이것이 sum = count ; count = count + 1; 로 묘사가 되어 있는데

사실 저렇게 표현할 경우 함수같은 부분에서 return count++;를 표현 할 경우 위의

내용대로 진행 될수 없음을 알수 있습니다

따라서 저것은 ++ 연산 함수라 보고 함수 내부에서 temp = count; count = count + 1; return temp; 를 해줘야

말이 됩니다 , 이런 방법은 C++ 스펙상에서, 후위연산자의 정의로 되어 있습니다

후위 연산자는 오버라이딩을 하더라도 저런 방법을 사용해야 한다는것이죠

[의심이 나시는분은 count++ = 값; 을 해보시면 count의 ++가 임시값을 리턴한다는것을 확인할수 있습니다]


그리고 262p 아래 보면 나타는 여러 언어가 반환[리턴] 할수 있는 것에 대한 설명이 나오는데
여러 언어에 관한 부분내용을 보면 , C,C++에 관한 부분에서 스칼라형[아마도 기본형이라 추정됨]과
과 포인터형을 리턴할수 나오고 "포인터는 반환문의, 직교성을 갖도록 제공한것으로
포인터는 구조형을 반환하는 효과를 가질수 있다"라고 말합니다

일단 직교성이라는 단어는 일반적인 국어 사전이나 백과사전에서는 찾아볼수 없는 말이거나와
어디서 말을 만들어 냈는지 몰라도 , 일단 그냥 그려려니 받아 들인다고 친다해도
C/C++ 에서는 구조형을 리턴할때 구조형 자체 값를 리턴할수 있거니와 이것이 기본적으로
C/C++에서 표준으로 정의된 동작방법입니다 [물론 포인터형도 리턴할수 있습니다]
근데 마치 자바처럼 구조체형 리턴은 , 포인터밖에 리턴이 안되는냥 말합니다
저자가 자바같은 언어의 수준에서 C/C++를 보다 보니 말도 안되는 소리를 늘어놓은거라 볼수 있는것이죠
한마디로 제대로 된 언어 이해를 한게 별로 없다 싶을정도로 정말 대충 대충 말을 늘어 놓습니다

이것뿐 아닙니다
171p에서도 참 우스운 말을 늘어 놓습니다
배열이 메모리의 직렬화된 부분으로 설명을 해놓고 정수단위로 인덱스화해 참조하는식으로
설명을 해놓고 파스칼에서는 첨자의 집합으로 열거형을 사용할수 있다고 합니다
하지만 CPU가 메모리에 접근할때는 최소 바이트 단위로 접근할수 있기 때문에 정수가 아니면
무의미하다 볼수 있는데도 , 열거형을 사용할수 있다는듯 설명을 합니다

실상 열거형도 정수형이라 볼수 있는것이고 , C에서 열거형중 부동소수점이 아닌 열거형을 쓰면
마찬가지로 첨자로 쓸수 있습니다

파스칼 역시 인덱스로 쓸수 있는것으로 , 말만 열거형이지 , 실지로 정수형을 쓰는 셈인데
마치 특이하다는듯 다루고 있느냥, 독자를 우롱합니다
[인덱스로는 결국 정수로 변형해서 쓰이는 셈입니다]


프로그래밍 언어론을 배우는 이유가 언어의 실질적인 근본을 배운다고 본다고 봤을적에

이책은 쓰잘때없는 별것도 아닌 잡기?같은것으로 독자를 혼돈에 빠지게 할뿐 제대로 된 지식전달은 거의

없다고 보아질정도였습니다

특히 책의 모든 지면에서 이미 사장되어 컴파일러 조차 구할수 없는 언어로만
이상한것을 다루는데 , 자신의 부족한 지식을 컴파일러를 구할수 없는 언어로
대충 때우려는 인상 마저 줍니다
한마디로 현대적인 언어는 거의 모르는거 같이 보였습니다 [ 책 내용을 토대로 추측컨데...]

컴파일러 조차 없는 언어를 자꾸 쓰느니 차라리 슈도 코드로 보여주던가
최소한 컴파일러가 존재하는 언어로 코드를 보여주는게 독자에 대한 최소한의
예의라 볼수 있는데, 저자는 단지 자신의 부족한 지식을 이런 얄박한 방법으로
매꾸려 하고 있는게 보입니다......
그렇게 해서 언어의 정확한 차이를 보여준다기 보다 그냥 대충 나열하는 수준이었습니다


더욱이 가장 심각하고 말도 안되는 장이 있었는데 "9장 부 프로그램 부분"입니다

세상에 이럴수가..... 라는 말이 나올정도로 부 프로그램란은 실로 어처구니 없다 라는 생각만

들게 했습니다


블럭에 대한 개념과 함수에 대한 개념을 다루는데

문제는 함수속의 내부 블럭과 함수속에 내포된 함수의 대한 개념이 똑같다는것이었습니다

이것은 옛날에 쓰이던 언어의 구조이거나 지금은 잘 쓰이지 않는 방법인데

마치 이게 다 인양 9장을 마무리 짓는것입니다

알고리즘책에서 정렬을 배우는데 , 버블 정렬 만 소개해주고는 이게 정렬하는 방법의 전부인양 소개를 한다면 과연 그 책을 어떻게 볼것인지 생각해 봐야 할거라 봅니다

이것때문에 .... 이분 정말 프로그래밍 언어론 교수님이 쓴책이 맞나?라는 의심을 품게 했습니다

게다가 함수안에 함수가 선언되는 방식이 마치 , 현재까지 쓰이는 일반적인

방법론인양 떠벌이는데.... 한마디로 이런 방식은 거의 잘 쓰이지 않죠
[옛날 고전적인 특정 언어에서 쓰였다가 지금의 프로그래밍 언어에서는 저런식으로
언어 설계를 하지 않습니다]

그리고 함수에서 함수가 선언될 경우 내부 함수는 블럭개념으로 사용되는데
현재 컴파일러조차 구할수 없는 언어에서 쓰이는 이런 폐기된 옛날 방법을
함수의 일반적인 구현 방법이라고 9장 내내 떠벌이것은 정말 못보아줄정도였습니다

C,C++에서는 내부 블럭을 허용하고 블럭밖의 변수이름을 선언하는것도
가능하지만 이것도 애매하다고
자바에서는 함수 내부의 블럭이 있으면 블럭 외부에 선언된 같은 이름은 변수를 선언하면
에러가 나는 판이죠

이런 경향은 전혀 무시한체 위에 pascal,PL/I 방식이 전부인듯 말하는것은 정말 답답하더군요
다시 말하지만 PL 배우는 이유가 무엇인지요?

버블 정렬이 정렬의 정석쯤 되는건지요? 차라리 요즘 언어 방식의 구조로 설명을 했어도 이 정도로 짜증이 나진 않았을거라 봅니다

프로그래밍 언어론을 왜 배우는지, 이 책의 저자인 교수님에게 묻고 싶을정도입니다

Ada PL/I 같은것으로 떠벌이면 독자들이 , 모르니까 그냥 그려려니 하고 넘어가줄줄 알았나 보죠?

간략하게 말해 9장에서 주장하는 바는 32비트 운영체제 세상에 , "도스방식의 16비트 운영체제가 전부다"

라는거와 같다고 볼수 있습니다


휴.........


워낙 책이 좋지 않아 , 수업때 강제로 들은 내용을 토대로 글을 써도

벌써 이만큼이네요 , 아직 쓸것은 태산인데.....


더 늘어놓기 지루하지만 몇가지만 더 추려보면..... ,

표준에 대한 인식도 없어서 시대는 2003년인데 , 1990년에 대한 C++ 표준을 들먹입니다

이미 6년전에 2차 C++표준이 이루어졌는데도 불구하고 아직도 1990년 표준으로 책의 예제를

쓰고 있습니다

그래서인지
10장 추상타입에 관한 C++ 의 예제도 표준에 부합하지 못하고

11장 예외 처리부분에서는 C++이 사용자 정의 타입만 예외를 던질수 있다고 설명합니다
자바에서는 시스템 예외까지 다 잡을수 있느냥 설명하고요

하지만 C++ 1997년에 제정된 표준에 의하면 자바같은 예외 클래스 트리가 존재하며 같은 방식으로
이미 정의된 시스템 예외를 던질수도 있다는것을 저자는 모르고 있었습니다

여기서 특히 더 문제가 되는것은 예외를 던지는 언어4가지를 들고
자세히 설명하면서 예외를 던지는 언어들의 차이를 비교 하는것입니다

그런데 C++과 자바의 차이를 주로 비교한 내용을 보면
예외를 던지는 구조는 실질적으로 2언어의 차이는 없는 셈입니다
그런데 차이점이라고 늘어놓고 있으니
수없는 개정만을 매년내면서 도데체 무엇을 개정하는것인지 의문을 던지고 싶습니다
차라리 finally를 중점으로 두고 차이를 설명한것만도 못하다는 느낌입니다

이렇게 계속해서 틀린 내용을 가지고 비교 대조를 하니
저자가 주장하는 봐도 의심이 들고 , 다른 언어도 제대로 알고 말하는지
매우 의심스러웠습니다

잘잘한것을 계속 말하면 끝이 없기때문에 이만두고

두번째로 말할 것은 저자의 성의 부족입니다.......

분명 개정판을 수없이 냈음에도, 달라진 내용이 거의 없다는것입니다

일반적으로 오타 같은정도의 수정으로는 개정판이라 하지 않습니다

예를들어 김상형님의 API 정복이라는 책은 몇년간 수많은 책이 팔렸고

인쇄를 했지만 , 내용면에서 달라진게 없고 , 오타 수정정도이기에

, 책 끝에 잘 안보이게 , 몇판 인쇄정도로 표시하는데

이책은 매년 개정판이라고 수없이 내 뱃으면서 , 달라진것이

그림이나 표 조금 옮기기 밖에 없는 , 아무 무성의한 모습을 보여줍니다

단지 개정판이라는 이름을 붙여 책 더 팔아먹기위한 일반적인 수작이라고

밖에 볼수 없는 일 입니다

그리고 제가 제시한 의문에 대해 이 책의 저자의 제자로 있었던 강사분도 제 의견을 인정을 하였지만

다르게 생각해보면 말이 되기도 한다고 말을 하는것을 보아서...

절대 이 책을 선택하면 안된다고 생각이 듭니다


다시 말씀 드리지만 프로그래밍 언어론을 배우는 이유가 뭘까요?

이 해답은 이책에서 찾을수 없다고 생각되며

개념이 안잡힌 분들이 이책을 본다면 프로그래밍에 대한 혼돈과 어지러움, 잘못된 지식 습득

밖에 생기지 않을거라 단언할수 있습니다


그리고 이 책이 많은 대학의 교재로 쓰이는걸로 아는데

몇년동안 수많은 개정판이 나오면서

여태 이책에 대한 독자들의 클라임이 없었다는것 조차 놀랍게 느껴졌습니다


휴.... 너무 말이 길어져 이만 줄여야 겠네요

이거 더이상 말하면 독설이 더 튀어나올거 같아서 ^^;; 그럼 ~




 
코멘트 3   공감 0
정우진 2004-02-03 오전 5:45:04
님에게 올인~
안병희 2004-02-15 오전 6:55:31
저자에게 메일을 보내세요
이충석 2004-03-11 오후 5:59:46
부분적으로는 저자에게 동감이 갈수도... 학생들에게 보다 쉽게 의사전달의 표현을 하고자 전체적인 부분을 무시하고 아주 좁은 범위에서의 내용만을 쉽게 보여주려고 하지 않았나... 하는 생각도 드네요, 아뭏튼 좋은 평 잘 보았습니다.
코멘트작성
 
이메일주소수집거부