- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
第一篇
, j! w2 k$ l8 r! u
( ? J$ X$ |/ w# [3 q% \7 U' \一些同学问我,如何学好C++,我没有别的办法给你们,唯一的办法就是读书,读大
2 @% h3 O& x5 {) O1 Y量的书,就可以解决。要把C++作为日常语言,而不是一种程序语言,这样就好办了。
4 a1 _ q1 w$ {+ Z {4 y" P
' s+ M" j$ U2 } J# h7 d有人又要问我,那么我应该读什么书才好?没有时间怎么办?$ L# N+ R6 t% ?8 k D
5 B/ [( X- ^2 |5 e4 h4 q" v- U我只能对你们说,没时间的话,就别学C++了,做你们喜欢做的事。生活中没有
* n1 {3 t( H1 [2 W5 UC++,也同样美好。
& r' }& m) A; ~# F/ x" i' s% H; w8 E: R4 Q
如果你准备学,一定要学好,那么我开个书单,应该问题不是甚大。
% _+ C6 ?) |4 M g$ R: @$ U
6 i9 k/ ]5 e% u% [首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解3 n6 h5 Z0 @4 S4 ?! V$ |* y9 U
一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到/ Q+ _$ `% H1 S6 {) j7 |/ P
你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。# u' J9 L3 X# |+ M
( J3 J0 y1 Q0 n y' ^5 s
第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Primer,这2 i2 n% I* m0 R+ L, _6 I) ^
本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B.& i- B8 W1 X8 s( d- P8 _8 t5 E
Lippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而
9 [1 F% I, O7 x8 S且讲得非常清楚。
# D: o1 |, O, n2 u9 N8 w7 @. r. ?4 X2 x- ~
第二本应该停止技术层面的东西,静下心来看看Pike和Kernighan的The Practice. _4 g% d, H5 f& x
of Programming,好好地整理一下,在程序设计中应该有哪些注意的事项。这本$ [$ l( ?" U \
非常薄的booklet,可以说是程序员必读的指南。' ^) x; T9 }5 O7 ]
/ `% B. d6 r4 O! F, T
第三本书,就应该是Bruce Eckel写的、候捷译的Thinking in C++,这本书每过' x, a! R6 C; h
半年我就要重读一遍。可以说每一章都是写得发人深省的,这本书让我感觉到了
@: y0 x9 ^$ v7 ]2 F# d5 d技术运用的非常高的境界,但是语言非常平实,只要认真地读,即使基础不行,3 b5 a: I, S$ Y/ c0 ~4 |; q( t
也一定可以懂。我在教课的时候,就是用这本书(面对的学生是零基础)。
8 m! _0 X1 X$ D6 R- `; I- J' I0 Y3 `) r/ `2 e( Z) j7 Z
要更上一层的话,就要慢一步,先要把握C++设计习惯的良好。这是Scott) z0 v7 W+ |3 {: P- f; ]% Y
Meyers的Effective C++和More Effective C++带给我们的无尽收益。我More
2 K: B( ~" _" L# A( B `Effective C++买不起,只好花了10块钱复印装订了一本"线装本",看起来像葵花8 [- q- s ^3 b( A8 ^
宝典(;-))。这两本书是真正的经典,作者对C++的纯熟,使得语言的风格读起来
) |. j4 J3 d2 |9 }( R5 u' l简直是如饴甘甜,就像他站在对面在讲课。我手中有这两本书的原版CD,如果有兴
' v5 }$ ]" m* v$ j8 E) l: ^趣,可以发E-mail到sjtu@263.net或在饮水思源投条儿给gaobo索要,只要您提供: v; G" y0 v9 ]( |: }& F* Z
光盘我就给免费烧。如果你已经深刻地理解了Effective C++和More Effective1 ^- X s9 f7 C2 m* P
C++,那你可以发现,你在众人中已经是鸡群之鹤。可以指导项目运作了,可以编2 E x# {3 }7 f8 o1 L
写一切你想做的程序了,可以指出别人看起来不错的代码的大小问题了。如果你能
1 O7 Z$ _* a' r% f( E! ^一眼看出有人的代码是对应于"条款27"或"条款M6",那你可真是让本人刮目了。9 Q; h% [. ]! n! Z" @" ?) B5 ?/ T
; s9 {- J2 y' o& J& N8 c# a9 ]我已经讲了,如果要写程序,EC++和MEC++的境界已经足以使你自如应付,可是如
6 o7 K- F4 `- i果你还不满足,想关注一些理论层面的问题,或是想看看实现的代码,你就不应该" E7 S& l6 h' W7 h
错过这几本好极了的书。我是说Herb Sutter的Exceptional C++和More
" V. \& p0 L: O7 ]8 CExceptional C++,这两本书的难度是非常大的,我对每一条的阅读笔记都是十多0 Q1 P% k$ u: b, I- R; |/ r
页。特别是泛型程序设计的部分,这两本书旁征博引,极尽深入探讨之能事,每每
5 q, G! p4 ]: }$ i看懂一条,都抹汗一次,大感酣畅淋漓;还有侯捷的 STL源码剖析 ,以实际的
9 c" `8 K) z4 p+ q% P9 D例子一点点地讲解一个STL是怎么样实现的,我是刚开始读,不发表评论;而7 X9 w# r! S; ^# I9 \
Stanley B. Lippman,Cfront的实现者之一,执笔写出Inside the C++ Object
2 [# [* j7 ]3 R2 ?( Z# N; i+ R& fModel,我只有一个字,就是基本帅呆了。我从中了解了无数的编译器解释源代码
, E! h3 c' G6 @3 `3 e的细节,以及记忆体分配的细节,呵呵,这些都知道了,我还怕什么呢?最近得到4 _2 |4 @2 U- Q1 |/ o
了另一Cfront实现者、C++标准委员会Koenig的 C++沉思录,看起来非常不错,这+ ]3 l' e" H8 k1 h7 F N( q
里也推荐给大家,但我也没看完,亦无发言权。 8 i7 `( u" R F2 ]5 W: q1 S
0 O* t$ h) K7 g* ^5 r8 F/ g
最后最后,你们,未来的C++理论家们,可要记住,Bjarne Stroustrup的The C++ . D, m0 g2 S5 @& K* e
Programming Language无论如何也应该读个四五遍!这是一切C++的书本的源泉。
& z' O u6 m. i3 u2 B! ^如果还觉得不够,就向C++标准委员会订购一本C++标准。 {5 q# Y, r9 D2 s4 N: C1 a, n$ I
( f8 k9 w1 ?! M. m) J( P6 d一切中国大陆作者的书,一概不要看(包括我的)。一切VC++或讲特定的编译器的
7 n9 [4 i% _' j9 c% ^. L+ N书,一概不要看。如果需要补C语言的课,买一本非常小的K&R的The C
5 o+ ~' S: S9 e6 t7 D, `Programming Language足矣,其它的书一概不要看。不要先学C,再学C++,而要直3 w% n6 Y% d4 k* @
接学C++。你不是先学古文,再学白话的,对不对?所以相信我,直接来更容易。' s5 S: }3 d2 O+ {- r( j/ z
) G. S+ \6 ?7 q: `
以上文字,皆为原创,本人愿意为每个字负责。
# M# }4 X4 G* v$ W- z: [* M/ F. F( O3 J# a8 N: @
第二篇
$ Z8 a7 n2 r" ?2 [/ |# q- l; B$ J
# y5 |8 T( K6 K# Z" m D& o1 g好久未来C板了,原因这段时间一直在研究两本书,看得自己不敢多说一句话。
5 R! d* A, k6 i9 L z+ p9 w/ ]* v. r- o$ B) i3 t3 r ]- i% D$ l
1、《Effective STL》
* r7 V# W2 q8 G9 x# Q; Z" P订购:http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8537+ D% F/ e0 F2 h# C. L
作者:Scott Meyers. ^$ J8 j8 K7 h ?' E" o8 q
出版社:中国电力出版社1 M- b' }6 A+ N
一开始欺负这本书比较薄,想快点看完,但不久就发现自己已经翻不动了。直+ o! o' ~" j9 z& c
到看完最后一个字,才发现一个基本的事实:薄的不是这本书,而是自己的见识。$ T- x U1 s% ?% u) ^0 |
有关STL的书也读了不少,正如读《Effective C++》以前,有关C++的书也读了/ _& s0 D, |. `! ^
不少。Meyers的书总是给人一种脱胎换骨的提升感觉,他总能在大家以为老生常谈
( R1 ?" ]- i5 r# k9 T的地方挖出意想不到的新意,并指出一些一般人习以为常的东西其实存在种种危机," c" D( T& r9 I) s) M
或是在一些看来完全等价的选择中,为特定的场合选择最有效的(Most
8 \; a$ a# T, M% g- wEffective)那一种。而且他的切入口总是让人看得懂的(不像Stroustrup的书,
" z8 ?. G* X. E% S% G8 g第一句话就要琢磨半天),但是他总是会选择几个拓展点,并把它们分析得淋漓尽; e9 J1 K5 N& U# C( r( ?
致,这时候就需要一段代码一段代码甚至是语句粒度地阅读了——当然,最后总是& p( X5 E; M% z
看得懂,这和读者的阅读程度总是正比,这会给人极大的成就感。可以说,在STL& C- n- L& M4 z6 ]
实践的书籍,无书可出其右(当然在STL实作方面,我还是要向大家推荐侯捷的
# _8 e( o/ ^% [8 m* i《STL源码剖析》)。% `( i6 h; ?7 ?" M5 T) |6 c1 s
读完这本书后,和Pascal就产生明显的距离感了。这里我仍然要说:请热爱
/ m- o* {2 h0 n- uDelphi!我还是更愿意写“var s:set of char;”而不是
5 t, Q6 E, d" t1 h' q. m" Z. m“set <char*, less<char*>, allocator<char*> > s”,;-)。
/ M+ x& [" B1 t7 l
$ h2 Q! W' V* q7 h2、《Modern C++ Design》6 c, W# U4 l( _
订购(中文):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8184
- B# @4 g* f+ w8 z" v订购(影印):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8319
( R1 v }9 O+ }; f作者:Andrei Alexandrescu
4 o0 J/ M% [, N1 G! N! M# C译者:侯捷、於春景0 @( m. b6 X/ `- z# S- \8 [6 n) S9 x
出版社:华中科技大学出版社(中文)) z. i; ]# w- }' }
中国电力出版社(影印); I9 ]! w0 L' f% t6 s- U; f
读完这本书的第一页,我就知道自己放不下它了,但我也知道,我的苦难经历
" k0 R4 j: ]. K, m+ n又要多上一笔了。用C++实作设计模式,已经是骨灰级的难度,但这本书明显还在讲
2 p6 h' s( G, l: v4 l一个template的对象模型的问题,这在我读《Inside the C++ Object Model》时是
3 {- ?+ u; [7 m# F3 ]0 F屡攻不下的难点。不过,出乎意料的是这本书居然使我具有一些概念了,而且动手写
4 e, ~- L$ O( n5 e) j. R5 y出了一个SmartPointer。
# o+ u# ~6 {3 m7 v 这本书我还远不能说我读懂了,但是确乎是读完了。如果你还没有读过对象模型
4 q5 h# e+ _0 G' w和设计模式的书,我认为需要读一读。否则,直接看这本书根本就是受罪。最近,有9 ^4 ?8 Z8 ?3 w1 W$ p! U" B
一些朋友也注意到设计模式的重要性了,可能从明年起我在《电脑报》上要发表一些6 g' P7 ?' y5 H. @1 W4 z
文章,届时请朋友们指教吧。4 q# ?0 M5 k' E) N
9 ]6 _! C4 X( j1 ? N! }$ Q6 l
另外就是Effective C++点评继续写,我现在觉得更惶恐,但是信心也更足了。 |
zan
|