Kingofark关于学习C++的50个观点:有助于提高编程思想
源代码在线查看: kingofark详解他的50个观点(上) .txt
条款1. 把C++当成一门新的语言学习(和C没啥关系!真的。); [解说]: 这一条源于我在《程序员》杂志2001年第4期上看到的《将标准C++视为一个新语言》一 文,作者是C++的设计者Bjarne Stroustrup。这篇文章还可以在Bjarne Stroustrup的个 人网页上找到。 这篇及时到来的文章很好的调整了我的思维,让我有幸在初学C++时就得以拨乱反正的重 新审视了C++这门语言和自己对C++的学习,同时也使我就此开始了条款28,29。 条款2. 看《Thinking In C++》,不要看《C++变成死相》; [解说]: 于此,我不再多说——因为争议太多罢。这里我向大家推荐我在《kingofark的“五评计 划”》系列文章里面关于此书的一些讨论。(在撰写本文时,《kingofark的“五评计划 ”》已经在撰写中,相信很快能与大家见面。) [kingofark的收获]: 明白了“阴沟里也能翻船”的道理。 [参考]: 条款19,21,22,30;条款6,9,39,41。 条款5. 不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者 可以引伸出很多知识点; [解说]: 这是kingofark我的亲身体会。 我早年学过BASIC,后来学C的时候,手里攥着一本教材,对其中的习题很不屑。有这样 一道题: “编写一个程序,在屏幕上打印 * * * * * * * * * * * * * * * * 要求使用本章学过的循环语句。” 其实我当时的眼光在扫到那个弱智的三角形图案时就跳到下一道题去了,全没有注意到 题目最后的要求,于是脑海里很不屑的闪现出这样的一段代码: printf(“ *\n”); printf(“ * * *\n”); printf(“ * * * * *\n”); printf(“ * * * * * * *\n”); …… 几个星期之后,我在翻书时很偶然的瞥见了这道题的后半部分要求,心里生疑;“这么 简单的打印问题干嘛用循环?”于是重新审题。这一次,我的脑子里再也没有闪出东西 ——唔,除了问号以外——于是忍不住开始编写程序。结果“不编不知道,一编死翘翘 ”,在经过了半天的捉摸之后,才终于有了一个正确的答案。从此明白了:哦,要先在 草稿纸上设计一下,不能光凭脑子想;哦,打印一个三角形还可以用这么巧妙的循环; 哦,…… “但这完全是你自己没有认真看题造成的吧!?”你可能会抱怨我说跑题了,“这跟本 条款有何干?” 好吧,如果上面的故事算是跑题的话,那么现在题跑完了。 在经过了那段学习打印“*”的初期,书上的习题也越来越不容易,其中有这么一道: “编写一个程序,要求输入任意十进制数,在屏幕上显示相对应的十六进制数。” “很简单嘛,”我又想着(嗯?我怎么会说“又”这个字?),脑子里闪现构思若干: 定义一个int decimal_val,由用户赋值后,再通过相应的计算转成十六进制就可以了嘛 。” 三下五除二,程序出来了,得意洋洋,忍不住叫父亲来看。早年做过计算机工作者的父 亲看了我运行程序演示,对我说:“输入的数值太有限了,只能转换int级的数值。” “那简单!”我更得意了,“把int改为long int,不,改为long long int,……呃? ”问题忽然严重了:习题要求能转换“任意十进制数”,但即使是long long long lon g int,也还是有限的。怎么办? 父亲只说:“是不是可以考虑用char数组来接收用户的输入,这样可以支持任意长的输 入,就是转换十六进制的方法要重新设计了。” 一个星期之后(噢,是的,那时我很笨),我终于可以在朋友面前炫耀我的“超级转换 程序”了。 [kingofark的收获]: “麻雀虽小,五脏俱全” [参考]: 条款13。 条款6. 会用Visual C++,并不说明你会C++; [解说]: Visual C++这个集成开发环境的确为我们提供了很多的东西,包括巨大的MFC(Microso ft Foundation Class),可爱的按钮啦,很“专业”的帮助窗口啦,让人很有成就感的 about窗口啦,等等。然而,特定程序的核心算法还是需要我们自己来提供,适合特定程 序的类还是需要我们自己来派生和管理,大部分特定程序的数据结构还是需要我们自己 来实现——只不过我们是在VC的帮助下做其中一些事情罢了。 很多人都曾向我声称他“会”VC了。但除了书上的例子,他们什么都做不出来。 之所以称VC为“集成开发环境”,就是因为其本身是作为承载C++的一种“环境”而存在 的,C++才是我们所要关注的主体。 有了球场边球迷们的欢呼、喝彩和助威,足球运动才越发体现出其无比的魅力。然而我 们踢的仍然是足球,不是场边的球迷。VC与C++之关系亦包含有相似的道理。 [kingofark的收获]: 一脚出去,不要踢错了对象。 [参考]: 条款4。 条款7. 学class并不难,template、STL、generic programming也不过如此——难的是 长期坚持实践和不遗余力的博览群书; [解说]: 哈哈,这句话的的确确是我鼓励初学者的话。毕竟从技术上讲,STL和范型技术的的确确 不能像著名主持人崔永元给自传起名字那样被概括为“不过如此”。 我认为,长期坚持实践和不遗余力的博览群书,是一个程序员的根本治学之道。虽然谁 都知道这是一个多少有些完美的期望,但它毕竟是期望而不是奢望——总可能实现罢。 [kingofark的收获]: 应该仔细研读和体会U2乐队的一首名曲《I’m still haven’t found what I’m look ing for》的歌词,这样,在人生的任何一个高度上驻足思考时,都不至于忘记了自己所 追寻的一切。 条款8. 如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C ++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的; [解说]: 只说三点: (1) www.1cplusplusstreet.com上面就有很多利用编写游戏来学习C++的有趣内 容,相当的好; (2) 很多著名的游戏也都是有源代码可看的; (3) Open Source的资源也是大家学习的好地方。 [kingofark的收获]: 过分热衷于电子游戏的人大约有两种“通关方法”: (1) 酷爱游戏—>玩游戏—>还想玩游戏—>还想玩游戏—>还想玩游戏—> 成为超超超……(汗)级玩家; (2) 酷爱游戏—>玩游戏—>改游戏—>对游戏的制作产生好奇—>钻研游戏的 开发知识—>成为有潜力/有实力的业余/专业游戏开发者。 [参考]: 条款6,24,39,41;条款15-23。 条款16. 把时髦的技术挂在嘴边,还不如把过时的技术记在心里; [解说]: 这里还是强调了一个人学习要踏实的道理。 总听到很多人不屑的说某某技术已经过时,学了也没用之类的话。其中屡被攻击的对象 比如dos啦,mode 13h啦,win3.1啦,VGA啦,甚至是win95、Pascal、C、C++等等。这些 人是浮躁的(见