读刘未鹏老大《你应当如何学习C++(以及编程)》

标签(空格分隔): 三省吾身



原文地址:你应当如何学习C++(以及编程)

  本人反思自己这些年在学校学得稀里糊涂半灌水。看到这篇文章,感觉收获不少。仿佛有指明自己道路的感觉,当然真正困难的还是坚持学习,多动手实践。

  但是这篇文章确实对于纠结知识细节还是看抽象理论给出了指导意义。麻省理工大学的《计算机科学及编程导论》课程上,Eric Grimson开篇就说到这本课不仅教授如何编程让电脑做一些事情,而是面对问题的时候思考,如何用算法或机器语言来描述这个问题,然后让电脑来替我们解决这个问题。以下是原文。

  This course is going to be not just about teaching you how to program a computer, how to tell the computer instructions that it can understand. It’s also going to be really important to create within you a capability to think computationally. So our goal is to let you become skillful at not only getting the computer to do something, but to do that thing that you want it to, to get it to solve a problem. By the end of this course, we hope that your first instinct when faced with any interesting challenge is to first think about how could I capture that challenge, that problem in an algorithmic or mechanical description of steps such that I could get the computer to do the work for me. If you can do that, it’s going to give you a great deal of advantage as you face any kind of problem. And those are the skills that you’re going to see throughout this course.

以下是原文摘抄和自己的理解:

1. C++中众多的细节虽然在库设计者手里面有其用武之地,但普通程序员则根本无需过多关注,尤其是没有实际动机的关注。一般性编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。

链接中的几本书,

1.《代码大全》:云风的 blog《代码大全》读书笔记

2. CSAPP 《深入理解计算机系统》

这是 CMU 的“计算机科学导论”的教材。是计算机系统和操作系统入门。

3. SICP 《计算机程序的构造和解释》

这是 MIT 的6.001课程的教材。是编程语言入门。(这门课在好几年前就改成Python了)

4. CLRS 《算法导论》

这是 MIT 的6.006课程的教材。是算法分析入门。

后面三本书知乎上有讨论

2. 避免去过问任何语言细节,除非必要。这个必要是指在实际编程当中遇到问题,这样就算需要过问细节,也是最省事的,懒惰者原则嘛。一个掌握了基本的编程理念并有较强学习能力的程序员在用一门陌生的语言编程时就算拿着那本语言的圣经从索引翻起也可以编出合格的程序来。十年学会编程不是指对每门语言都得十年,那一辈子才能学几门语言哪,如果按字母顺序学的话一辈子都别指望学到Ruby了;十年学习编程更不是指先把语言特性从粗到细全都吃透才敢下手编程,在实践中提高才是最重要的。

我的理解:语言细节也是重要的,不熟悉一门语言但也必须对其中原理掌握的很透彻,不然真正用起来的时候,很可能根本不知道要用到什么细节。对于细节的不理解,你也不知道哪个是有用的,哪个无用的,无从下手。翻过了,怎么才能对其中的原理掌握透彻呢?往往也是从一门语言开始学起。对于一般人来说,不深入具体细节,也很难理解抽象。所有往往第一门语言比较难学,之后会轻松很多。

3. 然而真正的编程能力是与语言细节没关系的,熟练运用一门语言能够帮你最佳表达你的意图,但熟练运用一门语言绝不意味着要把它的边边角角全都记住。懂得一些常识,有了编程的基本直觉,遇到一些细节错误的时候再去查书,是最节省时间的办法。

4. C++的书,Bjarne的圣经《The C++ Programming Language》是高屋建瓴的。《大规模C++程序设计》是挺务实的。《Accelerated C++》是最佳入门的。《C++ Templates》是仅作参考的。《C++ Template Metaprogramming》是精力过剩者可以玩一玩的,普通程序员碰都别碰的。《ISO.IEC C++ Standard 14882》不是拿来读的。Bjarne最近在做C++的教育,新书是绝对可以期待的。

5. P.S. 关于如何学习编程,g9的blog上有许多精彩的文章:这里这里这里这里… 实际上,我建议你去把g9老大的blog翻个底朝天 :P

g9老大,他的博客

6. 实际上,正确的态度是,细节是必要的。但细节是次要的。其实学习编程我觉得应该最先学习如何用伪码表达思想呢,君不见《Introduction to Algorithm》里面的代码?《TAOCP》中的代码?哦,对了它们是自己建立的语言,但这种仅教学目的的语言的目的就是为了避免让写程序的人一开始就忘了写程序是为了完成功能,以为写程序就是和语言细节作斗争了。Bjarne说程序的正确性最重要,boost的编码标准里面也将正确性列在性能前面。

7. 重要的不是你掌握的语言,而是你掌握的能力,借用myan老大的话,“重要的是这个磨练过程,而不是结果,要的是你粗壮的腿,而不是你身上背的那袋盐巴。”。此外学习C++的意义其实真的是醉翁之意不在酒,像C/C++这种系统级语言,在学习的过程中必须要涉及到一些底层知识,如内存管理、编译连接系统、汇编语言、硬件体系结构等等等等知识(注意,这不包括过分犄角旮旯的语言枝节)。这些东西也就是所谓的内功了(其实最最重要的内功还是长期学习所磨练出来的自学能力)。对此大嘴Joel在《Joel On Software》里面提到的漏洞抽象定律阐述得就非常漂亮。

我的理解:这种能力应该就是对编程本质的理解。所谓看山是山,看山不是山吧。以前看到一个东西,知道它能用到哪里,一开始有点死记硬背。后来明白这是什么,为什么需要这样,什么情况和它实际是一样的,有了类比联想。但是现在自己不管内功外功都太差,都需要功夫。

8. 让你成为高手的并不是你掌握什么语言,精通C++未必就能让你成为高手,不精通C++也未必就能让你成为低手。我想大家都不会怀疑g9老大如果要抄起C++做一个项目的话会比大多数自认熟练C++的人要做得漂亮。所以关键的不是语言这个表层的东西,而是底下的本质矛盾。当然,不是说那就什么语言都不要学了,按照一种曹操的逻辑,“天下语言,唯imperative与declarative耳”。C++是前者里面最复杂的一种,支持最广泛的编程范式。借用当初数学系入学大会上一个老师的话,“你数学都学了,还有什么不能学的呢?”。学语言是一个途径,如果你把它用来磨练自己,可以。如果你把它用来作为学习系统底层知识的钥匙,可以。如果你把它用来作为学习如何编写优秀的代码,如何组织大型的程序,如何进行抽象设计,可以。如果掉书袋,光啃细节,我认为不可以(除非你必须要用到细节,像boost库的coder们)。

我的理解:可能是武侠小说看多了,我之前容易有的误解就是内功有了,什么外功都会。这仿佛一看是正确的,但其实在实际学习中,我们所谓的外功往往也是促进我们内功的修炼的。这两者应该是相辅相成相互促进的。过多的强调某一面都会片面。

没有对细节的挖掘,我们很难理解抽象的理论。不注重对抽象理解的认识和思考,我们又会陷入无休无止的细节中,长进缓慢。

精彩评论:

2楼 pongba 2007-05-16 15:30发表 [回复]

HumanChao wrote:

这么好的帖子怎么没人支持一下呢.我感觉那本《高质量C++编程指南》道是挺实在,只有100页,用点心2个小时就可以读完。公司每进一名新员工我都会介绍此书。

《高》是一本有用的书,我也读过。但不应该用来影响初学者的编程哲学。许多人读《高》这样的书都容易形成一种感觉,就是细节非常重要。

实际上,正确的态度是,细节是必要的。但细节是次要的。

12楼 g9yuayon 2007-05-16 22:05发表 [回复] [引用] [举报]

这篇写得真不错。收藏了。Damien Katz重写Notes公式引擎的前还不懂C++, 读了一半《C++ Programming Language》就后就上手了。鲍岳桥他们开发联众前也不懂Win32,但还是一边查手册一边把联众开发出来。那是可还不能用Google满世界找资料。

13楼 myan 2007-05-16 22:08发表 [回复] [引用] [举报]

我想每一个曾经深入研究那些细节的人,或迟或早都还是会走出来的。2000年我开始研究STL,后来到Loki,再后来一点点Boost,也曾经以为细节掌握越多、语法规则运用越熟练、奇思妙想越多,就是水平越高。当年曾经跟一个朋友在论坛里斗编程,他写一个Python程序,我写一个C++程序,看谁简洁。写实际产品的时候,不用上STL、Design Patterns就亏心得睡不着觉。我把boost::mempool/smart pointer给剖离出来,移植在Windows CE 3.0平台上。当时的eVC3仅具有初步的模板支持能力,要做大量的代码修改剪裁工作。后来的结果是,内存分配比WinCE CRT的malloc加速85倍,当时高兴的不得了。那种感觉,今天回想起来恍如隔世。

可是到了03年初,就已经发现这个路子有问题。程序毕竟是以用为本,而真正有用的程序,反而在编码上往往是质朴的,强在对领域知识的理解和创新上,对用户需求的把握和体现上。从那时开始,我的思想发生了一个痛苦的嬗变。在认识到自己过去所想有问题的同时,也进入了一种迷茫状态,丧失了对一切语言和技术细节的学习兴趣。什么.NET,Java,POSIX,Compiler, Web,SOA,好玩的东西就那么一小撮,大部分细节是索然无味的,甚至面目可憎。这个状态持续了将近两年,才随着对Python、Ruby的了解而逐渐过去。

现在回过头来反思,当年拼命研究那些细节,固然是进入误区,但是何尝又不是一段历练。现在C++社群的大牛们纷纷提出要改造C++教学路径,这个我当然是支持了。现在的C++学习者可以不用绕弯路,可以直接用那些高层抽象工具解决问题,不用再苦苦理解什么函数重载决议的规则,不用为内存的高效利用而发愁,对于做具体项目来说当然幸福,但是对他们的技术成长就一定是好事吗?恐怕也未必。少了一份磨难,也就少了一份成熟。

所以我觉得,多绕点弯路其实没关系,力气还是长在了自己身上。关键还是要踏踏实实下功夫搞。如果让我回答“应当如何学习C++”这个问题,我只有一句话可说,那就是:“下足功夫”。

14楼 pongba 2007-05-16 22:23发表 [回复] [引用] [举报]

myan老大提到:

所以我觉得,多绕点弯路其实没关系,力气还是长在了自己身上。关键还是要踏踏实实下功夫搞。如果让我回答“应当如何学习C++”这个问题,我只有一句话可说,那就是:“下足功夫”。

myan老大所说的下足工夫当然是无可厚非的。做任何事都是这样,不下足工夫不可能认识到一些东西。

但真正的问题是工夫是花在刀刃上还是刀背上。是下足工夫做语言律师还是下足工夫搞实践。

时间只有一份。对于中国的学生,尤其如此。C++的细节庞杂无比,C++的书籍满天飞,光是下足功夫学习语言核心都不知道要多久。由于时间只有一份,所以就没时间去学习更重要的编程基本功、解决实际问题的能力、算法,等等。后者同样可以达到锻炼乃至是更强的锻炼。所以,光是要下足功夫其实是避开了真正的问题。

我自己也经历了myan老大的这个过程。我的看法跟myan不一样。我认为时间是宝贵的,所以工夫自然要下,但真正的问题是,往什么地方下。

g9老大提到:

Damien Katz重写Notes公式引擎的前还不懂C++, 读了一半《C++ Programming Language》就后就上手了。鲍岳桥他们开发联众前也不懂Win32,但还是一边查手册一边把联众开发出来。那是可还不能用Google满世界找资料。

这种下功夫的方式我非常认同。窃以为这才是真正pragmatic的方式,一来用实践驱动学习有干劲,而来不容易堕入为学习而学习从而迷失的地步,三来这非常锻炼人解决实际问题的能力。四来这样的学习是最“经济”,效率最高的。

24楼 myan 2007-05-17 09:57发表 [回复]

to pongba:

你的基本观点我当然是赞同,相信每个从细节走出来的人都会赞同。问题在于对于初学者(当然主要是学生),怎么走合适。你说:“时间只有一份。对于中国的学生,尤其如此。”

事实上,任何工作了几年的人都能感觉到,学生阶段是最有时间的,工作了以后就没时间了。所以如果要走弯路,要琢磨一点语言细节,要做一点吃饱了撑的事情,练一点内功,最好在学生阶段走。当然,你觉得,如果在学生阶段都不走弯路,那岂不是更好?看上去当然更好,但是走弯路是不是真的可以避免,那条路是不是弯路,你指的路是不是就那么直,不那么好说的。特别是在你人生不同的阶段,你会对自己的过去有不同的看法和评价。我的观点就是,总体上讲,弯路是不可避免的,走弯路也不全是坏事,甚至在年轻的时候多走弯路,可能是太好太好的事情了。你以为的直路,说不定到头来是更大的弯路。人生的事情很难说清楚,最不用后悔的是受磨砺,最不用担心的是没机会。

至于那条“直路”,对于学生来说还挺令人向往的,可等到工作阶段,你立刻就能体会到是个什么感觉了。每天都被任务驱动着,根本不用自己费力去找“pragmatic”方式,每天都是街头喋血,连回去练练扎马步、丹田气的机会不多。到时候别说语言细节,就是一些必要的应用数学、算法理论之类的东西,也只能见缝插针学一点,囫囵吞枣,解决问题就好。实际上未鹏你是中国学生里的一个异数,你在学生阶段踏踏实实搞了一些“语言律师”的东西,因此现在有所反思,觉得自己应该早点街头肉搏,而且现在你去街头肉搏,最多已开始有点不适应,一旦适应之后,你就够厉害,因为你内功厚。但是大多数学生,他们一开始的学习方式就是你所倡导的“pragmatic”街头喋血。但是他们的结果,不是写出Notes规则引擎,不是开发出联众,而是搞了多年ASP,不知道HTTP原理;学了三年.NET,但就是理解不了异步编程模型,一碰到BeginInvoke就发怵;写了两年MFC程序,不理解Windows事件模型,一遇到问题就只能抓瞎。我这些说法都不是凭空说的,背后都有我身边的实际例子。如果你把视野放的足够大,你就会认识到,中国的学生不是太务虚,而是太务实,不是太不实用主义,而是太实用主义了。所以我觉得你的这个呼吁,对于一小部分人来说是合适的,对于绝大多数人来说是不适用的。

当然,工作当中需要了解的细节也是有的,比如做国际化的人,需要对字符编码的问题滚瓜烂熟,搞Windows向Linux移植的人,需要对Windows内部钩子的实现、Linux/X系统内部事件机制了然于心;搞WinCE开发,需要对微软ActiveSync的一些编程接口非常熟练。这些细节,或者说特定领域的知识技术,没有具体的应用背景和支撑环境,是不可能学进去的。因此现在大公司招高校毕业生,普遍比较理性,知道学生没有那个环境和条件搞pragmatic,一般都是不要求的。就看你基础打得扎实不扎实,有没有钻研精神。重要的是这个磨练过程,而不是结果,要的是你粗壮的腿,而不是你身上背的那袋盐巴。

我曾经问过一个美国大学的教授,是一项国际大学生编程大赛的主席,那些编程大赛的题目究竟对实际软件开发有什么用?他说,其实他们也知道不太有用,但是第一只有这个形式的东西搞比赛容易操作,真正有用的东西没法比赛,第二,重要的是选手参与这个比赛的过程,要想取得最好的成绩,往往要花几年时间,做几千题,几千道跟实际软件开发没太多关系的题。最后证明,在这个大赛中取得好成绩的,以后在工作中大多数也能取得好成绩。你说这个弯子绕的大不大,这个时间花得冤不冤?

最后,其实这些话是写给你的,也是写给我自己的。10年前的这个时候,正好是我已经熟练掌握了C,开始雄心勃勃地向C++主峰发起进攻的时候。今天如果能够让我年轻10岁,回到大学里重新选择,我可能不会选择深入研究C++,而是把C学透了,就去研究OS、Compiler、TCP/IP。但是当年我看不到这些,只能看到C++。我后悔吗?不太后悔。人只能在一种局限性与另一种局限性之中选择,走了那条路,今天就会后悔别的事情。如今我对IT这个产业链有所了解之后,更觉得世界之大,岂是一人一时所能逆料。所以全局最优是可望不可及的,个人所能做的,只是追求局部最优而已,然后让命运的大浪把你送上高峰或者拍入深渊。比如,你以为出国读书,一定是好?你以为被一流大公司高薪聘请,一定是妙?你以为你在学生阶段写出一个软件,搞得天下闻名,万人敬仰,就一定有好结局?真的不一定啊。但是不一定,是不是我们就可以吊儿郎当,游手好闲?当然不是。全局最优不可期盼,但局部最优一定要努力争取,要按照自己定的路线去踏踏实实的努力,取得尽可能好的成果。所以,你要想做个好的语言律师,就踏踏实实下功夫去做吧,没什么不对的。还是那句话,下足功夫,练出一副好身板,比什么都重要。如果说后悔,我从不后悔技术路线的选择,只是后悔那时候下得功夫还是不够,还是拿出太多的时间去看电视,吃烧烤了。

34楼 YYLFYY 2007-05-17 21:34发表 [回复]

个人觉得myan老大和pongba老大说的都是正确的,外功与内功,知识和技能,本来就是见仁见智的问题(有些像前段时间金旭亮老师和yuanfeng老大的观点)

我个人很喜欢往细节底层里钻,喜欢《C++ Primer》,喜欢看Lippman把深藏在水下的东西都翻出来展示给大家看,也非常的固执的认为,没有掌握OS和Win32之前,绝对不要碰VC或者BC。

有时间也很迷茫,因为学了那么久,现在也不能写个像样的东西出来。pongba老大说的细节问题反应在论坛上,myan老大说的务实问题反应在学校里,的确是这样。

学校里,没有人会在乎你懂得重载函数的解析过程,或者是说清楚指向函数指针数组的指针这些杂七杂八的东西。“什么?你用Dephi做了一个航空管理系统!”“这个在线答题系统是你用Java设计的?!牛!”通常是这么回事。一方面,企业对于项目经验的要求;另一方面,是学生自己“学以致用”的思想,两者结合,就出现了myan老大说的那种“中国的学生不是太务虚,而是太务实”的观点。是啊,学了没有用的东西,谁会去学。“学OS能写操作系统吗?”“学编译能写Complier吗?”不能,所以还不如学学如何在C++ Builder中拖放控件做个画图程序更有用。

论坛上就不同了,高手低手汇聚一堂,能写航空管理系统算啥,能写虚拟机的人都多得数不过来。当然,能说清楚类模板的名字解析的人就很少了。能开发项目,能写底层,但要是给一张大学C++试卷,能难说能不能及格。细节出于此,在网络上,大家都喜欢把语言的底层机制翻来覆去的玩耍。

我想myan老大考虑的是,工作后不像在大学里,有足够的时间能系统的学习细节和底层,所以偏重于强调大学期间修炼内功。pongba老大从C++学习来分析程序设计的学习之路,强调不要死抠细节,毕竟编程不是单纯的语言控制。两位老大都说得在理。

时间: 2024-08-08 12:01:37

读刘未鹏老大《你应当如何学习C++(以及编程)》的相关文章

刘未鹏《逃出你的肖申克》系列读后总结

在漫长的进化史中,人的身体演化出一种自动保护机制,这种机制的终极目标,就是保证个体的生命安全和后代繁衍,一切与这个目标相悖的需求,都是低优先级的,这种机制被弗洛伊德称为潜意识,在佛教界被称为内功,忍界则被叫做念力,不论叫什么名字吧,总之看起来是个很好的事儿,但是问题也出在这里. 为什么这么说呢,关键点就在于生物的进化历程超级缓慢.想象人类为了适应环境进化了亿万年,才得以进入石器时代,这个速率慢得跟蜗牛爬一样,与之相对应的,是周遭环境的急剧变化,特别是进入现代社会后的几百年间,环境变化的速率比得上

关于刘未鹏的<<暗时间>>

最近在看刘未鹏的<<暗时间>>这本书,收获颇多.作者本身是搞计算机技术的,和我的专业一样,因此很吸引我,他是如何变成现在这般厉害,这般成功,这般思考深邃,目光独到,意义深远的:这本书我差不多读了两遍,作者指出要书写总结自己的想法,这样才会有实质性的思想的进步,才会深刻的影响改变自己,因此我写下了这篇文章. <暗时间>告诉我很多东西,我且把我记忆印象最深刻的写下,你若有同感欢迎和我共同探讨,我渴望这样的你出现. 第一:为什么有些人做什么都能成功,做什么都能把它做的很好,出

2013年读书笔记1--暗时间(刘未鹏)

暗时间(刘未鹏)读书笔记 1.过早退出是一切失败的根源 2.兴趣遍地都是,专注和持之以恒才是真正稀缺的 3.反思是改变自己的第一步,我们常常容易发现别人的问题,别人的错误,却难以发现自己思维中的问题,因为我们很少的自己的思维当做目标去思考. 4.一个有趣的例子,饿死在干草堆中间的驴子.有人因为无法做出决定就推迟决定,然而实际上推迟决定是最差的决定.把时间都花在了选择A还是B上,这段时间就不是你的了. 5.娱乐是娱乐,知识是知识,如果真想得到知识,最好过滤一下你得到的信息,不要在别人的思考结果中活

转载:知其所以然(以算法学习为例) 作者: 刘未鹏

作者: 刘未鹏  发布时间: 2016-07-23 18:41  阅读: 3917 次  推荐: 11   原文链接   [收藏] 原文发表于2008年 其实下文的绝大部分内容对所有学习都是同理的.只不过最近在正儿巴经地学算法,而后者又不是好啃的骨头,所以平时思考总结得就自然要比学其它东西要多一些. 问题:目前几乎所有的算法书的讲解方式都是欧几里德式的.瀑布式的.自上而下的.每一个推导步骤都是精准制导直接面向目标的.由因到果,定义. 引理.定理.证明一样不少,井井有条一丝不乱毫无赘肉.而实际上,

【转】数学之美番外篇:平凡而又神奇的贝叶斯方法----刘未鹏

概率论只不过是把常识用数学公式表达了出来. --拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了--这果然是个牛逼的方法. --题记 目录 0. 前言1. 历史    1.1 一个例子:自然语言的二义性    1.2 贝叶斯公式2. 拼写纠正3. 模型比较与贝叶斯奥卡姆剃刀    3.1 再访拼

刘未鹏《暗时间》读书笔记

很多时候,道理我都懂,只是希望有个愿意给我讲并且讲得精彩的人再拿水泼我一遍. 2014.8.25 傍晚 能迅速进入专注状态.长期保持专注状态.抗干扰,是高效学习的三个最重要的习惯.都是可以锻炼的,如练习抗干扰可以在公车上读大部头的书. 设计自己的进度条:如果对整个目标的几个重大步骤有清晰的界定,能够对每个步骤的耗时作出上界估计,你就不会对不确定的未来,不确定的时间投入感到恐惧,就不会被这种不确定感压迫到过早退出. 过早退出是一切失败的根源. 靠专业技能的成功是最具有可复制性的:它需要的只是你在一

关于书写--刘未鹏博客

书写的好处有以下几点: 书写是对思维的备忘:人在思考一个问题的时候,就像是在黑暗中打着电筒往前走(事实上,我们的工作记忆资源是有限的,有研究证明我们只能在工作记忆里面持有7加减2个项目:此外认知负荷也 是有极限的),每一步推导都将我们往前挪一小步,然而电筒的光亮能照到的范围是有限的,我们走了几步发现后面又黑了,想到后面就忘了前面的,想到某个分支 上去就忘了另一个分支,我们常常想着想着就想岔了,想岔了也就罢了,问题是一旦想岔了太远,就很难回到当初岔开的地方了.有时候,我们是如此努力地试图一 下就走

设计自己的进度条--(暗时间,刘未鹏)

所谓规划,其实就是针对这种心理弱点(对不确定时间投入感到恐惧)的做事方法. 如果你对整个目标的几个重大的步骤有清晰的界定,能够对每个步骤的耗时作出靠谱的上界估计,你就不会对不确定的未来,不确定的时间投入感到恐惧,就不会被这种不确定感压迫到过早退出. 2015-04-14 23:05:42

总有一种正能量触动你的心灵,读刘丁宁的一封信

刘丁宁,女,2013年和2014年两届辽宁省高考文科状元. 2013年高考,刘丁宁考出了668(含加分10分)分,为辽宁高考文科状元,被香港大学以全额奖学金录取.2013年10月,刘丁宁离开香港大学重回母校(本溪市高级中学)复读,只为追寻纯粹国学. 刘丁宁再次参加2014年高考,以666分的成绩获得辽宁省高考文科最高分,将进入北京大学中文系读书.网友评价"彪悍的人生也不需要解释". 下面是她写的一封信,<这是一篇童话>--刘丁宁. "就像安徒生童话<野天鹅&