- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
第一篇
7 j) x) D: Z1 g. L5 y* I) A6 ?' ?/ {4 ]2 p4 w. S" ~& G
一些同学问我,如何学好C++,我没有别的办法给你们,唯一的办法就是读书,读大
: V; y3 D; W7 X! u2 M7 w8 T量的书,就可以解决。要把C++作为日常语言,而不是一种程序语言,这样就好办了。
8 {# T5 N2 B0 C( b1 L0 } S0 r8 l! Q. S3 @
有人又要问我,那么我应该读什么书才好?没有时间怎么办?
. a9 ~* ^6 P) |3 P8 r8 \
" p: ~& n! \0 F& _; w# z7 g R我只能对你们说,没时间的话,就别学C++了,做你们喜欢做的事。生活中没有
2 h2 J' `* J& t% ?* H4 cC++,也同样美好。
0 A$ ?# J: m/ w1 \! [4 a% {& O9 q t( D+ V/ V# y7 |
如果你准备学,一定要学好,那么我开个书单,应该问题不是甚大。
8 [, D$ l1 R% f/ g% W
) D; V: L9 n) U% c首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解6 F4 o8 v6 G. `. `0 C, t7 Q4 E
一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到
0 p, R2 N3 H. i7 g2 x1 X: y* b你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。# m! M9 j$ ~+ y5 z N8 [* g: |
0 p8 b! t5 v9 S
第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Primer,这# v( v% T4 _, g3 N9 }9 a
本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B.
0 q- q3 K; K$ Y: E! @8 A$ SLippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而
$ J7 [' a! b& K: r/ `9 g+ J; q且讲得非常清楚。; V* J' }! D, g# i7 h, n3 F; D
s7 C& u0 U# W9 x7 `- K
第二本应该停止技术层面的东西,静下心来看看Pike和Kernighan的The Practice
* |8 G4 ]' `2 C/ Xof Programming,好好地整理一下,在程序设计中应该有哪些注意的事项。这本
( i0 {3 }1 k6 ^- i1 I非常薄的booklet,可以说是程序员必读的指南。
5 n$ M# S3 s/ S4 \* _+ v1 a/ X, q* g* ^' v) w/ z8 o
第三本书,就应该是Bruce Eckel写的、候捷译的Thinking in C++,这本书每过
. g& q- E) R0 B( C2 o8 H半年我就要重读一遍。可以说每一章都是写得发人深省的,这本书让我感觉到了, O2 B! y- B9 ]9 ~. P' u
技术运用的非常高的境界,但是语言非常平实,只要认真地读,即使基础不行,
& i' m8 m% q' t5 t; l) q1 o也一定可以懂。我在教课的时候,就是用这本书(面对的学生是零基础)。
: n' ]4 N" z$ b$ q) A
7 f6 R6 z' i% w$ _+ E要更上一层的话,就要慢一步,先要把握C++设计习惯的良好。这是Scott" d1 l9 g: c' l. a5 t4 R
Meyers的Effective C++和More Effective C++带给我们的无尽收益。我More
4 t& ]9 V9 m$ x9 l" I. p5 [, rEffective C++买不起,只好花了10块钱复印装订了一本"线装本",看起来像葵花* u" o! i% \1 m
宝典(;-))。这两本书是真正的经典,作者对C++的纯熟,使得语言的风格读起来0 g; y* r U3 O" ?
简直是如饴甘甜,就像他站在对面在讲课。我手中有这两本书的原版CD,如果有兴
9 p( E( v/ v5 R! d0 I3 j9 M趣,可以发E-mail到sjtu@263.net或在饮水思源投条儿给gaobo索要,只要您提供
; u: Y# `0 D4 R9 X光盘我就给免费烧。如果你已经深刻地理解了Effective C++和More Effective! E- [4 t6 k: Y/ O/ o2 C, K" ^1 ?
C++,那你可以发现,你在众人中已经是鸡群之鹤。可以指导项目运作了,可以编5 I7 L& g" c/ c* h c* _8 J
写一切你想做的程序了,可以指出别人看起来不错的代码的大小问题了。如果你能
8 {" S4 _9 H8 h7 ]8 i& d一眼看出有人的代码是对应于"条款27"或"条款M6",那你可真是让本人刮目了。* h+ B6 k( Q- z1 c! P
( _0 p0 i4 E! ~+ g7 ]2 B8 x" {
我已经讲了,如果要写程序,EC++和MEC++的境界已经足以使你自如应付,可是如. q& Y. Q0 ]9 [7 ]7 _ Y! O }
果你还不满足,想关注一些理论层面的问题,或是想看看实现的代码,你就不应该
* [" |& U" z' z* m" V7 D3 i错过这几本好极了的书。我是说Herb Sutter的Exceptional C++和More$ R# F. e% {0 A4 R" {, |6 Y
Exceptional C++,这两本书的难度是非常大的,我对每一条的阅读笔记都是十多
`7 r7 [1 d+ L' o+ m1 a9 R% k I0 @页。特别是泛型程序设计的部分,这两本书旁征博引,极尽深入探讨之能事,每每
$ z7 |: |1 W/ W q看懂一条,都抹汗一次,大感酣畅淋漓;还有侯捷的 STL源码剖析 ,以实际的
; n! j7 c G; X2 z g5 B- F3 t" k例子一点点地讲解一个STL是怎么样实现的,我是刚开始读,不发表评论;而. d% z, f- K/ E4 y* y9 @
Stanley B. Lippman,Cfront的实现者之一,执笔写出Inside the C++ Object e" B% s+ g; j6 \
Model,我只有一个字,就是基本帅呆了。我从中了解了无数的编译器解释源代码
/ }) r! j- w- o+ ^的细节,以及记忆体分配的细节,呵呵,这些都知道了,我还怕什么呢?最近得到; l2 ] ?! f3 K& Z$ ~/ `0 ~) D! y
了另一Cfront实现者、C++标准委员会Koenig的 C++沉思录,看起来非常不错,这! q; M! @: U+ M" U+ X. m
里也推荐给大家,但我也没看完,亦无发言权。
. o' f F9 N, @% e8 { r: H, l
$ j* b$ X+ E9 u: Q( I" U$ U最后最后,你们,未来的C++理论家们,可要记住,Bjarne Stroustrup的The C++ M, o: S+ W9 o& z3 `! ^
Programming Language无论如何也应该读个四五遍!这是一切C++的书本的源泉。
P/ x. w2 z- Y" w如果还觉得不够,就向C++标准委员会订购一本C++标准。
% K c1 |" G% Z+ W* v6 \) X3 q% w9 e/ Q% L" V
一切中国大陆作者的书,一概不要看(包括我的)。一切VC++或讲特定的编译器的1 h5 h( ? L- b" V
书,一概不要看。如果需要补C语言的课,买一本非常小的K&R的The C
& R+ S( C5 ^2 _, n- l' IProgramming Language足矣,其它的书一概不要看。不要先学C,再学C++,而要直" p) a6 R" t' V3 x) C
接学C++。你不是先学古文,再学白话的,对不对?所以相信我,直接来更容易。
( |+ |* i% |% \$ Z8 ]! }6 Y" v1 A% E( h; z
以上文字,皆为原创,本人愿意为每个字负责。
& B' G! r$ E: J) W
, ^. U) e% @. T8 J第二篇8 L J! l, |" l
( p9 s5 K. ~* H' B# T) v: V G
好久未来C板了,原因这段时间一直在研究两本书,看得自己不敢多说一句话。
8 A4 r$ ]# @8 N* f# J0 {0 [/ M) [0 n' Q6 c8 k$ ~* D
1、《Effective STL》" ` n8 [ s$ c) o
订购:http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8537
2 X- u H( K8 o0 d! |( u; e3 r4 W作者:Scott Meyers
+ c! c1 l* a% |1 f; o3 j出版社:中国电力出版社
: y1 Z! u5 x( k7 u6 b% o+ g 一开始欺负这本书比较薄,想快点看完,但不久就发现自己已经翻不动了。直) p: C, I- _3 P7 p0 Z
到看完最后一个字,才发现一个基本的事实:薄的不是这本书,而是自己的见识。
# V2 G3 G) }1 P0 K 有关STL的书也读了不少,正如读《Effective C++》以前,有关C++的书也读了/ R( e4 P6 F6 T- b5 l
不少。Meyers的书总是给人一种脱胎换骨的提升感觉,他总能在大家以为老生常谈
- e: y, F8 _& B: s的地方挖出意想不到的新意,并指出一些一般人习以为常的东西其实存在种种危机,! D1 r1 n$ u; S- A! `; n+ c
或是在一些看来完全等价的选择中,为特定的场合选择最有效的(Most; n2 C' M7 ~# M4 {2 D
Effective)那一种。而且他的切入口总是让人看得懂的(不像Stroustrup的书,
5 ^7 f; @6 ~. \5 `( U% m第一句话就要琢磨半天),但是他总是会选择几个拓展点,并把它们分析得淋漓尽
* Y/ t* P+ m5 {9 v& |! c致,这时候就需要一段代码一段代码甚至是语句粒度地阅读了——当然,最后总是
4 L, Y" P9 {: ~ j看得懂,这和读者的阅读程度总是正比,这会给人极大的成就感。可以说,在STL3 n: T; i `$ [. G2 b
实践的书籍,无书可出其右(当然在STL实作方面,我还是要向大家推荐侯捷的
9 k1 v# O( M% \1 f! f《STL源码剖析》)。
3 a# L. |6 j% H/ [3 v& ~9 m0 _ 读完这本书后,和Pascal就产生明显的距离感了。这里我仍然要说:请热爱
- N8 I# w1 J2 G4 pDelphi!我还是更愿意写“var s:set of char;”而不是$ }+ c/ X6 x* Q/ K) P) p1 A
“set <char*, less<char*>, allocator<char*> > s”,;-)。8 C8 `3 O: }# W+ e/ d
& p- [8 t% C; k& t. W2、《Modern C++ Design》
9 e; o, T. w! ]订购(中文):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8184
* c3 ?- `, X& ?% _1 f! s订购(影印):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8319
4 f1 I+ l# U; U9 _+ g作者:Andrei Alexandrescu
' g( q5 L$ l1 ?/ T译者:侯捷、於春景( u. t$ d b9 M. ]# y v, }
出版社:华中科技大学出版社(中文)
4 q) G3 a/ m% T' h* Y' E# U+ h 中国电力出版社(影印)
/ b) S! W- m7 _" S! H/ p 读完这本书的第一页,我就知道自己放不下它了,但我也知道,我的苦难经历5 a7 l- Y4 X& ~; \" I
又要多上一笔了。用C++实作设计模式,已经是骨灰级的难度,但这本书明显还在讲
1 q* s/ J2 m+ z$ \, N+ O5 D! z! P一个template的对象模型的问题,这在我读《Inside the C++ Object Model》时是
; {, d3 G6 @/ s: g2 G0 W屡攻不下的难点。不过,出乎意料的是这本书居然使我具有一些概念了,而且动手写
, \! P7 B/ z% p7 Z! d) H出了一个SmartPointer。
; B1 a; C# D2 s- L( g# Y, p 这本书我还远不能说我读懂了,但是确乎是读完了。如果你还没有读过对象模型
! z; ]/ P; ~- L0 u3 o. M7 U和设计模式的书,我认为需要读一读。否则,直接看这本书根本就是受罪。最近,有
. [; q5 W/ a, N1 t5 P9 C5 Q ~一些朋友也注意到设计模式的重要性了,可能从明年起我在《电脑报》上要发表一些
3 G0 ~, g7 }3 U' F+ M% u5 k, k* ?文章,届时请朋友们指教吧。
! r8 r3 E# e) W* i7 V, b1 G$ E9 \3 E; P* R* |; _' {- @
另外就是Effective C++点评继续写,我现在觉得更惶恐,但是信心也更足了。 |
zan
|