"컴퓨터 프로그램의 구조와 해석" 이라는 책을 추천하는 글을 읽었다. 흥미가 생겨서 아마존에서 찾아봤다.

그런데, 아마존에서 서평을 보니 별 1개와 5개가 88:53의 비율로 갈린다. 재미있는 현상이다.

사용자 삽입 이미지
리뷰를 쓴 사람들 중 왜 이렇게 평가가 갈리는지에 대해 평가한 사람이 있어 잠깐 옮긴다.

I think it is because SICP is a very personal message that works only if the reader is a computer scientist (or willing to become one).

MIT의 교재라더니 역시나 CS 전공자들을 위한 책이었던 셈인가?

아무튼 조금 더 찾아보니 MITPress에서 인터넷으로 책의 원문을 모두 공개하고 있다.

http://mitpress.mit.edu/sicp/

미국의 버클리대학에서는 이 책을 텍스트로 강의한 내용을 동영상으로 만들어 제공하고 있다. 다음 주소를 따라가면 해당 동영상을 모두 볼 수 있다.

http://webcast.berkeley.edu/course_deta ··· 3D2008-d

내용도 궁금해지고, 이렇게 책 원문 전체와 동영상 강의까지 제공되니 보지 않을 수 없구나...ㅋㅋ
2009/04/30 19:04 2009/04/30 19:04
Tag //
Apple Developer Connection에서 제공하는 "The Objective-C 2.0 Programming language"라는 문서를 읽고 있다. 그런데, 사실 이 문서는 그리 잘 읽히는 그런 자습서류의 문서는 아닌 듯하다. 정말 진도가 안나간다. 따로 나오는 Objective-C 관련 서적들이 왜 필요한 지 알 것 같다. 그래서 자꾸만 아마존에서 Objective-C 관련 서적들을 기웃거리게 된다. 요즘 가장 관심 가는 책은 "Learn Objective-C on the Mac"이라는 책이다. Apress에서 나온 책인데, 아마존 별점 5/5(8)를 받은 책이다. 뭐 리뷰어가 8명 밖에 안되지만, 그래도 전부 별 5개를 줬다는 건 그만큼 좋다는 얘기일 터.
사용자 삽입 이미지

그래도 뭐 초보 프로그래머는 아닌 탓에 일단 애플에서 제공하는 문서로 대충 입문만 하고, 실제 iPhone development의 세계로 뛰어들 생각이다. iPhone 어플 개발은 현재 두 가지 책이 가장 인기있는데, "The iPhone Developer's Cookbook"과 "Beginning iPhone Development"가 바로 그 두 책이다. 첫 번째 책은 제목에서도 알 수 있듯이 Cookbook 즉 요리책 처럼 일종의 레퍼런스 역할을 할 수 있는 책이란다. 그래서 아무래도 자습서 역할로는 좀 불친절한 듯. 반면 두 번째 책은 자습서로서 꽤나 좋은 역할을 할 수 있는 책이다. 아마존 별점도 4.5/5(47)로 47명의 리뷰어들의 평점 평균이 4.5에 달할 정도로 괜찮은 평가를 받고 있다.
사용자 삽입 이미지사용자 삽입 이미지

일단 첫 번째 책은 torrent를 통해서 어떻게 구하긴 했고, 두 번째 책은 1books24x7.com에서 읽을 수 있다. 그래도 종이 책에 대한 미련을 버리기 힘드네. ㅡ.ㅡ;; 2오늘도 아마존에 들어가서 주문하려고 했더니, 책 두 권에 $99.9 더라는... 가장 싼 배송비를 선택했는데도 그렇다. 환율 계산해보니 yes24.com에서 주문하는 거나 비슷할 듯하다. yes24.com은 빨리라도 배송해주지...ㅡ.ㅡ;;

빨리 Objective-C를 읽고 다음 단계로 넘어가고 싶다.

참고: 본문의 이미지는 모두 http://amazon.com에서 가져왔다.

  1. 회사가 단체 계정을 갖고 있어서 개인적으로 가입하지 않아도 된다.
  2. 다시 아마존에 들어가보니 이전에 뭔가 잘못 됐었던 것 같다. 현재는 $67.75로 나온다. 그래서 잽싸게 그냥 주문해버렸다.
2009/01/18 19:44 2009/01/18 19:44

GDB - TUI

from Programming 2008/11/18 14:15

회사에서 작업할 때는 putty를 이용해서 서버에 접속한 후 gdb로 작업을 한다. 그런데, 디버깅을 하거나 execution path를 분석할 경우 source code를 확인하기가 귀찮았었다. 매번 list명령을 사용하거나 다른 창에 따로 source를 열어 놓은 후 같이 보면서 작업했는데, TUI (Text User Interface)를 사용하면 gdb 화면에 바로 source 창을 띄워놓고 작업할 수 있다. gdb 프롬프트에서 CTRL-X A를 입력하면 된다.

사용자 삽입 이미지

참조: http://davis.lbl.gov/Manuals/GDB/gdb_21.html

2008/11/18 14:15 2008/11/18 14:15
Tag // ,

C++-style casts

from Programming/C&CPP 2008/10/23 16:15

const_cast<T>(expression)

dynamic_cast<T>(expression)

reinterpret_cast<T>(expression)

static_cast<T>(expression)

  • const_cast is typically used to cast away the constness of objects. It is the only C++-style cast that can do this.
  • dynamic_cast is primarily used to perform "safe downcasting," i.e., to determine whether an object is of a particular type in an inheritance hierarchy. It is the only cast that cannot be performed using the old-style syntax. It is also the only cast that may have a significant runtime cost.
  • reinterpret_cast is intended for low-level casts that yeld implementation-dependent (i.e., unportable) results, e.g., casting a pointer to an int. Such casts should be rare outside low-level code.
  • static_cast can be used to force implicit conversions (e.g., non-const object to const object, int to double, etc.). It can also be used to perform the reverse of many such conversions (e.e., void * pointers to typed pointers, pointer-to-base to pointer-to-derived), though it cannot cast from const to non-const objects. (Only const_cast can do that.)

출처: Effective C++, Third Edition

2008/10/23 16:15 2008/10/23 16:15
Tag //

오늘 밤 주간 회의를 기다리면서 지금 공부하고 있는 "OS 구조와 원리"를 6장 까지 끝냈다. 책을 따라 하나씩 코딩해 가면서 느끼는 점은 재미있다 라는 것과 함께 참 불친절한 책이구나 라는 것이다.

기본적으로 이 책은 책만 봐서는 전혀 따라할 수 없게 되어 있다. 반드시 책에 포함되어 있는 CD에서 해당 소스를 다운 받아서 같이 참조해야 한다. 책은 정말로 그냥 소스에 대한 주해서 정도로 봐야 한다. (저자가 이미 그렇게 밝혀 놨었는데, 대수롭지 않게 생각했다가 뼈저리게 느꼈다.) 한마디로 주요 텍스트는 부록 CD에 들어 있는 소스코드인 셈이고, 책은 소스코드에 대한 설명인 셈이다. 물론 책에 나오지 않는 내용들은 당연시 소스코드만으로도 충분히 알 수 있는 내용들이다.

각 장 별로 하루씩 할당하도록 되어 있는데, 생각보다 하루 치가 많아서 시간이 꽤 많이 걸린다. Teach Yourself 시리즈처럼 하루치에 1~2시간 정도로 생각했다가는 낭패볼 듯. 뭐 내 내공이 부족하기 때문이겠지만...

아무튼, 6장 까지 마무리 한 기념으로 스크린 샷~

사용자 삽입 이미지


2008/09/29 23:30 2008/09/29 23:30

OS 구조와 원리 study

from Programming 2008/09/27 12:33

한빛미디어에서 나온 "OS 구조와 원리: OS 개발 30일 프로젝트"를 읽고 있다. 물론 그냥 읽는 게 아니고 하나씩 따라하면서 읽고 있다. 거의 책의 진도에 맞춰서 나가려고 하고 있는데, 주말에는 좀 더 나가야겠지?

아무튼, 4일 째가 되어서 뭔가 화면이 나왔기에 기념샷 하나 올려둔다. ㅋㅋㅋ

사용자 삽입 이미지


2008/09/27 12:33 2008/09/27 12:33

16 bit registers

  • AX ... accumulator
  • CX ... counter
  • DX ... data
  • BX ... base
  • SP ... stack pointer
  • BP ... base pointer
  • SI ... source index
  • DI ... destination index

8 bit registers

  • AL ... accumulator low
  • CL ... counter low
  • DL ... data low
  • BL ... base low
  • AH ... accumulator high
  • CH ... counter high
  • DH ... data high
  • BH ... base high

segment registers

  • ES ... extra segment
  • CS ... code segment
  • SS ... stack segment
  • DS ... data segment
  • FS ... dummy segment
  • GS ... dummy segment
2008/09/25 22:53 2008/09/25 22:53

사용자 삽입 이미지

그림출처: amazon.com

Code Optimization: Effective Memory Usage

지금 회사에서 Internal Study를 진행하고 있는 책입니다. 내용은 제목에서 보는 바와 같이 프로그램 코드를 어떻게 하면 좀 더 최적화할 수 있는가에 대한 내용입니다. 주로 메모리 관련하여 하드웨어적으로 깊숙히 들어가서 살펴보고 있습니다.

그런데, 가독성이 정말 떨어집니다. 이해하기가 힘들어요. 하드웨어를 잘 아시는 분들이시라면 쉽게 이해하실지도...

그리고 책이 나온 시점이 꽤 되는 관계로 최신 하드웨어를 반영하고 있지는 못하다는 점이 아쉽네요. 그래도 전체적으로 내용은 좋습니다. Micro Optimization이 필요하다면 한 번쯤 봐 두는 것도 나을 듯.

아무튼, 다음 주에는 제가 발표할 차례라 준비를 해야하는데... 처음부터 제대로 읽어보려고 했더니 너무 힘드네요...ㅡ.ㅡ;;

more..


  1. 뭐 그래도 번역서와 집필서는 다르겠죠? 문장력보다는 내용에 실망한 것이니...
2008/07/24 16:52 2008/07/24 16:52

지난 10년을 돌아보고, 앞으로의 10년을 계획하기에 앞서 잠깐 옆에 있는 책장에 꽂혀있는 전산학/컴퓨터 관련 서적들을 꼽아봅니다. 책을 잘 정리하는 편은 못되는지라 그냥 왼쪽 위에서부터 오른쪽으로 꽂혀있는 순서대로입니다.

  1. 누워서 읽는 알고리즘
  2. 행복한 프로그래머
  3. Theory and Applications of Numerical Analysis, 2nd edition
  4. Introduction to Probability Models, 8th edition
  5. Introduction to Algorithms, 2nd edition
  6. Algorithms in C++ (Parts 1~4, 5), 3rd edition
  7. Linear Algebra and Its Applications, 3rd edition
  8. Data Structures & Algorithm Analysis in Java
  9. Data Structures & Problem Solving Using Java
  10. Fundamentals of Data Structures in C++
  11. Data on the Web
  12. Computer Organization & Design
  13. Data Structures, Algorithms and Applications in Java
  14. Java Pitfalls
  15. Constructing Intelligent Agents Using Java, 2nd edition
  16. Web Development with JavaServer Pages
  17. Patterns in Java Volume 1
  18. Beginning XML, 2nd edition
  19. Beginning Java Objects
  20. The Pragmatic Programmer
  21. Programming Pearls, 2nd edition
  22. Database System Implementation
  23. Advanced Programming in the UNIX Environment, 2nd edition
  24. UNIX Network Programming Volume 1, 3rd edition
  25. Effective C++, 2nd edition
  26. Thinking in C++, 2nd edition
  27. 좋은 프로그래밍 습관
  28. Applied Statistics and Probability for Engineers, 3rd edition
  29. UNIX System Administration Handbook, 3rd edition
  30. 윈도우 프로그래머를 위한 MFC 구조와 원리
  31. TCP/IP 소캣 프로그래밍
  32. Design Patterns
  33. 뇌를 자극하는 윈도우즈 시스템 프로그래밍
  34. Operating System Concepts, 6th edition
  35. C Programming FAQs
  36. Programming Microsoft Windows with C#
  37. Managing Projects with make
  38. Programming Windows, 5th edition
  39. Extreme Programming Installed
  40. C++ Primer Plus, 4th edition
  41. Building Parsers with Java
  42. Data Structures and Algorithms in Java
  43. Database System Concepts, 4th edition
  44. JavaServer Faces in Action
  45. Game Architecture and Design
  46. Introduction to 3D Game Programming with DirectX 9.0
  47. 위피 모바일 게임 프로그래밍
  48. C++ FAQs
  49. Swing
  50. 초보자를 위한 비주얼 C++ 5 21일 완성
  51. ASP 프로젝트 실습
  52. Distributed Programming with Java
  53. 일주일만에 배우는 CORBA
  54. 쓰디쓴 자바 - 자바 안티패턴 이야기들
  55. 정보처리기사 필기시험 대비서 1 - 프로그래밍 언어
  56. 서울대 객체지향 DBMS SOP 구축 이야기
  57. 서울대 관계형 DBMS SRP 구축 이야기
  58. 초보자를 위한 비주얼 C++ 6 21일 완성
  59. 98 특별 대비 정보처리기사 1급 필기 - 전산 수학
  60. 예제로 배우는 비주얼 베이직 6 인터넷 프로그래밍
  61. 수학으로 디자인한 플래시의 세계
  62. The Unified Modeling Language User Guide
  63. The Rational Unified Process, An Introduction, 2nd edition
  64. Operating Systems, Design and Implementation, 2nd edition
  65. Refactoring
  66. The Art of Computer Programming Volume 1, 2, 3rd edition
  67. 유전 알고리즘
  68. C++ Coding Standards
  69. Java Examples in a Nutshell
  70. An Introduction to Object-Oriented Programming, 2nd edition
  71. Modern Information Retrieval
  72. Core Java 2 Fundamentals Volume 1
  73. 예제로 배우는 C++ 24시간
  74. Java가 보이는 그림책
  75. 플래시 MX 액션 스크립트
  76. 버그 패턴과 자바
  77. NEW 비주얼 C++ 6 입문
  78. Discrete Mathematics and Its Applications, 4th edition
  79. Visual C++ Programming Bible, 2nd edition
  80. 배시 셸 시작하기
  81. Learning the bash Shell
  82. Game Coding Complete
  83. Essential ActionScript 2.0
  84. BSD Hacks
  85. PHP Web-DB Programming Guide
  86. C Primer Plus, 5th edition
  87. Hackers & Painters
  88. The C++ Programming Language, special edition
  89. Computer Systems, A Programmer's Perspective
  90. HTML & JavaScript 사전
  91. AJAX Hacks

그냥 얼핏 보면서 지나칠 때는 그다지 많아 보이지 않았는데, 생각 외로 꽤 많네요. 사실 금전적인 이유로 책을 잘 사지 못했었는데... 조금 놀랐습니다. 게다가 읽지 않은 책이 반을 넘어간다는 깨달음에 한 번 더 놀랐습니다.

그래도 강과장님의 글 '충분히 낭비할 것을 권장함'처럼 이런 낭비는 괜찮지 않을까 스스로 위안해 봅니다.

2008/07/23 00:51 2008/07/23 00:51
Tag //

php에서는 array()를 이용하여 배열을 만들어 쓸 수 있다. php의 배열에는 numeric과 associative의 두 가지 타입이 있는데, numeric은 Java나 C/C++에서의 array와 비슷하다고 보면 된다.

$names = array("Peter", "John", "Joe");

와 같이 선언하면 다음과 같이 for문을 이용하여 출력할 수 있다. 여기서 array의 크기를 알기 위해서 count()함수를 이용하였는데, sizeof()를 이용해도 된다.

for ($i = 0; $i < count($names); $i++)
echo $names[$i];

그러나 Java나 C/C++과는 달리 array_push()함수를 이용하여 element를 더 추가할 수도 있다. 이 때 여러 element를 한꺼번에 추가할 수도 있다.

array_push($names, "Doug", "Brian");

associative array는 hashtable과 비슷한데, 0부터 생성되는 숫자로 된 index가 아닌 임의의 숫자/문자열을 index로 쓸 수 있다. 다음과 같이 선언할 수 있다.

$ages = array("Peter" => 32, "John" => 24, "Joe" => 50);

이 경우 다음과 같이 출력할 수 있는데,

echo "Peter's age is ".$ages["Peter"];

이 경우 index로 쓰인 숫자/문자열을 모두 알고 있어야 한다. 만약 모르는 경우에는 다음과 같이 foreach문을 이용하여 iteration할 수 있다.

foreach($ages as $idx=>$val)
echo $idx."'s age is ".$val;

마지막으로 php의 array도 다차원으로 선언해 쓸 수 있는데, 선언하는 방법은 다음과 같다.

$families = array(
"Peter"=>array("George", "Lois", "Megan"),
"John"=>array("Glenn"),
"Joe"=>array("Cleveland", "Loretta", "Junior"));

물론 다음과 같이 할 수도 있다.

$families = array();
$families["Peter"] = array();
$families["John"] = array();
$families["Joe"] = array();
array_push($families["Peter"], "George", "Lois", "Megan");
array_push($families["John"], "Glenn");
array_push($families["Joe"], "Cleveland", "Loretta", "Junior");

출력할 때는 일반적인 다차원 배열에 접근하는 방법과 동일하다.

echo "Peter has ".$families["Peter"][0]." in his family";

참조:
http://www.w3schools.com/php/php_arrays.asp
http://www.plus2net.com/php_tutorial/array_size.php
http://kr2.php.net/manual/en/control-st ··· each.php
2008/06/09 00:49 2008/06/09 00:49
Tag // ,