Explanatory Notes On <K's 50 PV>
详解<K's 50 PV > Revision 1.0
[下篇]
by Kingofark
[注]:<K's 50 PV>是《Kingofark's 50 Points of View About Learning C++ And Programming(kingofark关于学习C++和编程的50个观点)》的简称;<K's 35 MPV>是《Kingofark's 35 More Points of View About Learning C++ And Programming(kingofark关于学习C++和编程的另外35个观点)》的简称。
条款28. C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
严正声明:对本条款的解说方式决不是kingofark偷懒的表现。详情见本文的后记。
[解说]:
请参考条款1。(完)(吐舌头)
条款29. 请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
[解说]:
同条款28的解说。(又吐舌头)
条款30. 读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
[解说]:
关于《Inside The C++ Object Model》:
“C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。”
任何技术,习其表皮,即可把玩;探其隐匿,则能熟悉;得其精髓,方可掌故之,如使双手般精良到位。
人们对“会”这个字有着不同层次的理解。我以为,通常我们应该以最狭义的方式去理解它。这不是在苛求自己,而是在检查自己是不是足够浮躁。
[kingofark的收获]:
沉着的对自己说:“我什么都不会!”。
条款31. 学习编程的秘诀是:编程,编程,再编程;
[解说]:
“实践是检验真理的唯一标准”。这句话连中学课本中都有。
其实,“实践”不仅具有检验真理的功能,它还碰巧是个精干的多面手,可以帮助大家做很多事情——只要你诚心聘请它就可以了,甚至连免费咨询电话都不用打——心诚则灵。
不说了——大道理,说起来太张扬,恐有人给我带一顶“教条主义”的帽子。
[kingofark的收获]:
有些道理很大(甚至比太阳还大),但是真正懂它的人的数目却很小。
条款32. 请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
[解说]:
对书籍的讨论,我留在我的系列拙文《kingofark的“五评计划”》中慢慢进行。这里只想指出一点:《C++ Effective Object-Oriented Software Construction》一书在国外已经有了第二版了。
条款33. 记住:面向对象技术不只是C++专有的;
[解说]:
同条款17。
条款34. 请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
[解说]:
自己输入源代码,且不说可以练指法,它还是一种研读代码的过程,这道理与看不懂原文就翻译不好文章一样。自己一字一句读过,才有可能通过键盘输入,于是自己在不知不觉中就已经读过一遍代码了。
我们常说代码总须多读才能明白些,难道你就愿意通过使用源代码光盘的卑鄙手段来放弃自己多一次的仔细阅读机会吗?
有人说用源代码光盘也能读代码。然而应该思考这样一点:只看光盘上的源代码,并不能保证你不一目十行、草草了事;而对着书输入源代码,你就不可能一目十行,因为那样的话你根本无法从键盘输入。
想想这两者之间种种潜在的差距吧!我想我们还是踏实一点为好。
[kingofark的收获]:
光盘上存储的仅仅只是供参考的源代码,不是研读带来的收获。
条款35. 把在书中看到的有意义的例子扩充;
[解说]:
同条款5。
条款36. 请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
[解说]:
这一条基本上是在对我自己敲警钟。
早年学习C++的时候,国外的C++书籍还没有引进。至于当时国内的C++教材,要是参差不齐我倒可以满足了(因为毕竟“参差不齐”意味着并非没有好的),可偏偏就是一律整齐。那些教材的作(抄?)者,大凡把C教材的制作班底拿来remake一下,然后又贴上一些诸如inline、class、exception这样一些时髦的标签,再大喊一声“cut!”,即宣布一切搞定了,连take 2都用不着 [注:哦,这都是做影评(经常说“这个续集只不过是正集的一个remake”之类的话)、拍电影(导演喊“cut!”)、录音乐(录制take 1,take2等)使用的术语]。在这些“C++教材”中,很多C++的重要特性都被作为一个小到令人乍舌的章节来介绍,活像影片中闪现不到半秒钟的色情镜头——想看的人心中大呼不过瘾,不想看的人则吃惊中带些厌恶。结果我当时几乎没学过异常处理的知识。
现在国内外优秀的C++书籍多了,我才得以重新完整的学习C++。这一次,我可不能再学不伦不类的“C Remake++”语言了。
条款37. 经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
[解说]:
除了参考条款5之外,还想补充一点:
本观点并不是想暗示大家应该对C++的各个方面内容一字排开并按某种顺序学习,而只是说明在不断学习提高的过程中,自己的实践经验也应该得到相应的积累。其实我觉得要把这件事做好,涉及到比想象中更多的事情,其中至少包括为自己的程序做文档以便于日后查看、重读。
这件事真是说来容易做来难,我们还有很多需要努力的地方,不是吗?
条款38. 不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
[解说]:
同条款5。
条款39. C++语言和C++的集成开发环境要同时学习和掌握;
[解说]:
见条款6。
条款40. 既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
[解说]:
这里说的“坚持”,绝不意味着迷信和狂热的崇拜(参见条款50),而应该意味着不浮躁,能够静下心来,扎扎实实打好基础。
[kingofark的收获]:
抗拒浮躁的过程有一点点像憋尿,当然两者的结果和产生的影响大不相同。
[参考]:
<K’s 50 PV>条款50。
条款41. 就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
[解说]:
见条款6和条款9。
条款42. 当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
条款43. 别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
[解说]:
古墓丽影(Tomb Raider)这个游戏想必大家都已经很熟悉了。当《古墓丽影:最后的启示(Tomb Raider : Last Revelation)》正式发行后,我和好友zy当然也乐此不疲的买了游戏光盘,和性感美丽的Lara Croft在3D世界中同甘共苦。
事情就这样开了:
好友zy忽然有一天在电话中告知我说,Lara要与一个巨大的石头脸进行一种规则较为简单的格子棋游戏。棋盘是单向无环路的,有起点和终点;下棋双方每边各有三个棋子,通过随机的方式得到一定范围内的步数来走棋;正常情况下,每一方每次只有一次确定步数的机会并只能选一个棋子走棋;如果被移动的棋子在移动后停在某些特定的位置上,那就可以再走一次棋;特别的,如果得到的步数是某些特定的数字,则也可以再走一次棋;谁先把自己的三个棋子走完就算谁赢。
我们讨论了半天,觉得这个简单的游戏可以很容易写出C++代码来,于是就开始做设计。虽然朋友很快就退出改玩游戏去了,但还是给了我很多建议。
第一遍设计出来之后,我养成的种种坏习惯复发了。等到代码成形,里面已经充斥着杂乱的结构体和全局变量了。而且由于抽象的不合理,代码中处处都存在着重复的代码段。看着一堆垃圾般的代码,我的信心好像碰到异物的蜗牛触角一样刹那间飞也似的缩走了,。
然而,不能接受“程序甚至还不能编译执行”这样一个事实的我不能释怀,只好硬着头皮继续写下去,越写越看出自己代码中的龌龊。结果当然是bug满宇宙飞,想修改都不容易了。只好作罢,继续自己每天正常的C++学习。
若干个月之后,当我偶然从废纸堆中翻到那个bug.exe的原始设计草稿时,我又忍不住重新思考这个问题了。几个月的C++学习毕竟不是全没有作用,因此在充分认识到以前代码的缺陷的前提下,我的脑海里涌出了许多新思路,真所谓长江后浪推前浪……
现在回想起来觉得,倘若当时第一次就半途而废,或许还不会对其中的不足之处有那么深的印象。这才发觉差劲的代码原来也是搞自我批评的重大阵营。
[kingofark的收获]:
做什么事都不要虎头蛇尾。就连把坏事做一半所得到的教训,也不如把坏事做完得到的教训深刻。
条款44. 决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
[解说]:
参见条款26。
条款45. 每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
[解说]:
这个道理涉及到一些鲜为人知的一系列心理学、教育学方面的问题,我不在此累述。大家只用记住:转述的过程,也是人们常说的“把知识变成自己的”之过程的一种表现形式。
[kingofark的收获]:
题外话:有学问的老师未必讲课讲得好;讲课讲得好的老师未必有学问,但他/她总能把自己懂的那一部分知识讲清楚。我更喜欢后一种老师。
条款46. 记录下在和别人交流时发现的自己忽视或不理解的知识点;
[解说]:
当你发现别人比你知道得多的时候,你不羡慕吗?不嫉妒吗?不敬佩吗?不崇拜吗?不自卑吗?不想超过他吗?
随身带张纸,带支笔,并不会累死你的。
[kingofark的收获]:
就算是天上真的掉下馅饼了,也还是需要你伸手去捡着吃的。如果你仅仅因为懒得伸手而不去吃,那可就比迷信“天上掉馅饼”的人还要可悲了。
条款47. 请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
[解说]:
同条款37。
条款48. 保存好你写过的所有的程序——那是你最好的积累之一;
[解说]:
理由一:如果你不保存好,就无法遵守条款35,37,47了;
理由二:越来越多的代码多少会给人一种成就感,可以在不经意之间增强自信心。
[kingofark的收获]:
理由三:万一自己以后出了名,还可以在电视直播或者自传里面把代码拿出来,作为训诫后人、为人师表的本钱,谱写一曲老当益壮的精神文明凯歌。
条款50. 请热爱C++!
[解说]:
请热爱C++,但是切忌蜕变成目光短浅的、迷信C++的狂热分子。
[kingofark最后的收获]:
对C++说:“Everybody says I love you but no more.”
[K’s 50 PV 后记]:
回顾这50条,揪心的发现其中有许多的重复观点,只是用了不同的表述而已。
这也与< K’s 50 PV>的成因有关。
最初是在的论坛上看到一篇人气颇旺的贴文,讨论些学习C/C++的经验,忽然使我有了对过去学习的感触,一些自己揣摩的文字猛然间如滔滔江水连绵不绝,又如黄河泛滥一发不可收拾,死心塌地、义无反顾的从脑海里泄将出来。
其实最后写出来的,无非是些众所周知的“耳茧增长因子”,全没有女人裸体见情人般的光彩。但自己还是不免浮躁的得意起来,淫笑着将这些文字发成贴子,收获了一次在公共场所署上自己大名的快感。
等到我严肃得要给她写注解的时候,才很尴尬的注意到自己的无知与浅薄。于是很无能的继续写下去。这一次,便有了女人裸体见陌生人的尴尬——还是全裸。
惭愧、羞愧一并涌上脸来,铁青。
无地自容。是以为记。