`
tanghongjun1985
  • 浏览: 56574 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

分享如何学好C++的一点想法及给初学者的建议

    博客分类:
  • C++
阅读更多
分享如何学好C++的一点想法及给初学者的建议http://student.csdn.net/space.php?uid=41561&do=blog&id=1449
   江涛 jiangtao [at] tao-studio.net
摘要:
    根据社区中一些言论的思索,发现一些问题,产生一些想法。并将这些想法分享给C++
    初学者。


关键词:
    C++ 学习方法 分享 误区


0.引言
    本文适用于C++初学者。
   “妈呀,咋又跑偏了哩!”[小沈阳]
    如果您还是作为C++的初学者或者是“学过几年C++”却不得要领,您是否知道,您也存
在跑偏了的可能呢?   根据student.csdn.net社区中的一些言论,指出C++初学者陷入
的误区,并试图分享一些如何学好C++的一些想法。


   本文特别以论文的形式出现,但这仅是形式上,本文缺少论文存在的一些先决条件,可划
分为杂文类中。
 


1. 社区中的一些言论
   [作者注:尊重同学的隐私,引文略!]


   根据以上贴子的摘录,我把社区人口分为以下几类
  
   0-1. 隐身高手
   0-2. 不知道在说什么,无法分类的
   0-3. 老师,辅导员
   0-4. 快乐的C++爱好者


   1-1. 不快乐的C++爱好者及伪快乐者
   1-1-1. 为学业而挣扎的同学
   1-1-2. 不知道如何入门的同学
   1-2-3. 不知道如何时提高的同学
   1-2-4. 陷入学习误区而挣扎的同学
   1-2-5. "乐于"陷入学习误区的同学
  
   本文主要是写给后一大类的人。
2. 分享一些我学习C++(编程技术)的想法
   先分享一些通用的包括但不限于C++的,再分享一些仅与C++相关的。
   1) 培养兴趣
   爱因斯坦说“兴趣是最好的老师”。有些人是天生会对某一事物产生兴趣(一见钟情),有
些是后天慢慢好感并产生兴趣(先结婚后恋爱,像老一代人),有些是则是指腹为婚,但却
也终生幸福的人。
   但是,如果您是对C++(或编程技术)实在没有兴趣,当初报考专业也是家长老师逼迫的。那我
强烈建议  该转学转学,该退学退学,该改行改行,及早选择自己的新生活吧。
    
  2) 打好基础(尤其是在校的同学)
   学好一门课需要重视它的先导学科。学习有捷径,那就是先打好基础。张无忌之所以能快速学
习,是因为他已炼成神功了。下面列出一些基础的知识:
   a) 语文
   b) 英语
   c) 基础数学
   d) 离散数学,组合数学
   e) 数据结构及算法
   f) 操作系统
  
   语文,看似很远的课本了,其实,在工作中离我们很近。写报告、作总结、开会发言、说服客
户掏腰包,说服老板涨工资。就连论坛发贴也需要语文功底。
   英语,尽量不要向网友求助:“有没有xxx的中文版”。仔细看几本英文原著,差不多编程的英文
书都能看个大概了。
  


3 如何学C++
  C++是一门期很古老又充满生机的编程言语。如果您想成为真正的编程高手并以技术工程师为职业创
造财富,那选择C++是正确的。如果我们对以上断言达成共识之后,那就请接着向下看。
   下面的内容分为两大部分,分别讲述如何入门和如何提高。
  1) 如何入门
    轻松上阵:学习c++,并不需要特别的先导知识。我认为,只要能理解顺序,条件和重复,
那就能学编程。有论证结论:任何复杂的程序,都是由顺序执行、条件判断和重复执行组成的。
    学C++,不一定非要先学C。
    入门选择正确门口:
    C++是抽象名词,它不会单独存在。它会与以下名称共同存在:
      a) 程序
      b) 文件
      c) 可执行文件
      d) 代码
      e) 源代码
      f) 编译器
      h) 链接器
      i) 调式器
      j) 集成开发环境(IDE,即把编译器,链接器,调试器合在一起的东西)
      k) 命令行
    另外,还有一大堆影响初学者其它的名词,如
      VC, gcc, mfc, windows等等。
     
    认为C++入门难,可能是没有理想上述名称的关系,其实也不要紧,了解上述术语也容易。
下面直接给出入门的方法建议(按顺序)。

     建议1: 作好准备,建立好C++的开发环境,选择一个单纯的命令行开发环境。
      较容易得到的有VC开发环境和linux下的gnu开发环境,也可以在windows下用cygwin,这
是一个让不熟悉linux开发环境的初学者也可以在windows下使用像linux一样的开发工具。不建
议直接使用Visual Studio 或eclips这样的集成开发环境。
   
    IDE有很多优点,但是,对于初学者来说,它的缺少也很明显。大而全的集成开发环境会让
初学者面临更多的名称,从而更烦恼。


     建议2: 先学会C++编程的过程,步骤可以列举如下
       a) 理解编程的目标(需求)
       b) 编写 make file文件
       c) 编写程序
       d) 编译,链接程序
       e) 检查是否有编译、链接错误,如果有错转到c),直到没有错误
       f) 调试程序,检查程序输出结果是否符合预期要求,如果有错,转到c),直到没有错误
      无论是选择vc的编译器,还是linux(cygwin下)用g++编译器,上述过程都能通用。
入门C++编程,可以写编译一个最简单的程序,演练上述过程。


     建议3: 理解C++包括的学习内容
      C++是一个内容并不多的编程语言,可以分为四大块内容
      第一部分: C++基础部分,它包括C++的一些标识符,语句,函数,参数。
      第二部分: C++面向对象部分,它包括用C++设计新的类型,通过面向象的思想来编写
程序。
      第三部分: C++的泛型编程,它包括用C++设计一些模板,通过泛型或元编程的思想来
写程序。
      第四部分: C++的第三方可复用的库。也包括开发人员自己写的库。学习如何使用第三
方或自己写的可复用的库。


     作为初学者,可以先学第一,第二,第四部分。




2) 如何提高C++编程技能
    建议4: 遵守规范和遵循“原则”
        如: 编码规范和编码规范的原则;
             编程规范和编程原则;
             设计规范和设计原则。
     举例来说,前阵子有网友探讨编码规范和样式,这是一个很好的现象。但遗憾的是没
给出编码规范的原则。我这里简单的引述一个较好的原则(注:原则也会不停的进化的)。
     a) 简单原则,清晰易读。
     b) 最小混淆原则,代码样式一致
     c) 最小干扰原则,修改方便。
如果编码规范中的要求满足以上原则,那就是好的规范。(注:匈牙利样式的风格与原则冲
突较大,所以它仅存于MFC中)
    再举个编程原则:比如,设计函数尽量是唯一的返回点;  函数尽量完成一个仅一个
完整的功能等。
    设计原则:开闭原则,替换原则,依赖倒转原则等等。
   
    建议5: 识别优秀的代码和发臭的代码
    优秀的代码长什么样呢?我认为有下面的特性,以优先顺序列序
    a) 易读易懂的
    b) 正确且高效的
    c) 易复用的
    d) 易移植的
    稍作说明:代码主要还是用来被阅读的,其实是写代码和让机器执行,如果代码很难
读懂,它的价值就会打折扣;第二点不必说明,错误的代码什么价值也谈不上;易复用和
易移植是体现代码价值很重要的指标了。
    发臭的代码又长什么样呢?这个可以参考“重构”相关的知识,也可以留作大家讨论。
   
    建议6: 重视代码的价值--复用层次
    代码的复用度越高,它的价值就越大,代码作者就更应该获得更多财富和尊敬。代
码复用的层次既是软件工程发展的过程,也是学习者学习的路线。
    那代码复用有哪些层次呢?下面是我的规纳
    第一层次:代码级复用:也就是最低层次代码复用,是源代码级的拷贝粘贴。初学者
也不学就会的技术;
    第二层次:函数级复用:子函数的出现,人们可以通过函数来复用代码,并发展成为
    库函数。像c语言中的 printf(),scanf()这样的函数就放在库中,可以被开发人员链
接到自己的程序中。有时候初学者还以为这些函数是C语言中的一部分呢。
    第三层次:类库级复用:面向对象的思想曾经是被人们寄予了厚望,希望它能帮助人们
脱离软件工程危机(软件工程的危机中的程序员被比喻成陷入焦泥潭的猛兽,越挣扎陷是越
深)。大家熟悉的基础部分的MFC,boost都可以算作是基于类库的复用。我们也可以把COM,
模板算到这一层次。
    第四层次:基于模式的复用:一个伟大的建筑工程师给软件开发人员提供了灵感,发现
建软件和修房子一样,离不开那些相同或相似的套路。于是,为了复用以前的成功案例,总
结出一些模式。模式还和面向对象技术结合起来了,专门研究具体的问题可以分到什么类别中,
并直接给出对象模型。设计模式已经应用了十多年了,可惜很多初学者还不重视它。
   
   第五层次:基于模式的框架复用: 理想中的面向对象是想把对象当作可复用的库像积木一
样生成, 这样开发软件就像搭积木一样快乐。但是,很快就发现,让积木结合的胶水比积木
还更难控制,程序员要写大量的胶水代码,并且反复的重写。解决这个问题就是应用框架。
框架的成功示例很多了。像ACE,MFC就是成功的框架。


   第六层次:中间件级的复用: 不同的应用领域以及不同的基础环境,却有着相同或相似的
中间层,图形表示就是一个两头大中间小的沙漏形。中间件就是研究“沙漏”腰。中间件是一个
很迷人的领域。


  第七层次:面向服务的复用?基于模型的程序自动生成?认识会不断的提高,我想很快会有
更迷人的领域。


   建议7: 重视C++的应用
   C++不是孤离的,如果离开应用学C++会容易走偏。建议学习了C++基础之后,多学习以下内容
(可选,排名不会先后)
   a) 操作系统(linux,windows),熟悉多线程,linux的体系,windows的内核对象
   b) 数据库
   c) 图形
   d) 网络
   e) 你的专业和兴趣的其它领域
  
   建议8: 重视C++相关的工具
   a) 调试器
   b) 测试工具或框架,如cppunit
  
   建议9: 重视团队
   个人英雄时代过了,现在的项目离不开不同角色的开发人员协同工作。让专业的人做专业的事,
所以,选择一个自己感兴趣的点,深入研究,做到最好。
  
   建议10: 多读别人的代码并自我积累
   不必说为什么。
  
4. 结束语
   本文的观点不求全部被认同,欢迎来邮件与我交流心得,共同学习提高。
  
分享到:
评论

相关推荐

    给C++初学者的忠告

    ### 给C++初学者的忠告 #### 1. C++是一门复杂的语言 - **解释**:作为一门功能强大的编程语言,C++具备高度的灵活性与控制力,但这也意味着它比其他一些现代语言(如Python或Java)更难上手。初学者在学习过程中...

    编程及C&C++初学者 FAQ.pdf

    ### 编程及C/C++初学者FAQ知识点详解 #### 一、开始之前 ##### FAQ那是什么? FAQ代表“Frequently Asked Questions”,即常见问题解答。它是一种文档形式,用于汇集并解答用户常问的问题,旨在减少重复回答相同...

    C++探秘 68讲贯通C++.pdf

    它不仅为初学者铺平了学习C++的道路,而且为希望深化理解C++的专业人士提供了一套有价值的参考材料。通过互动式的教学方法和逐步深入的课程设计,读者能够在有趣且富有挑战性的学习过程中掌握C++编程。

    c++贪食蛇代码

    "c++贪食蛇代码"项目是将经典游戏——贪食蛇实现为C++程序的一个实例,特别适合初学者和爱好者熟悉C++语言,以及游戏开发的基本原理。这个游戏通常涉及到编程中的循环、条件判断、数组、函数、结构体等基本概念。 ...

    More Effective C++A 35 New Ways to Improve Your Programs and Designs

    ### 更有效的C++编程:35种新方法提升程序与设计 #### 深入理解C++语言特性 《More Effective C++: 35 New Ways ...通过学习本书中的技巧和建议,开发者可以更好地利用C++的强大功能,编写出既高效又可靠的软件系统。

    简单版C++贪吃蛇

    【贪吃蛇游戏简介】 贪吃蛇是一款经典的电子游戏,起源于1976年的《Blockade》。...对于初学者来说,这是一个很好的动手实践项目,而对有经验的开发者,它也是一个快速验证想法和学习新技巧的平台。

    c++编写的控制台坦克游戏

    这个游戏尽管代码量较少,但包含了C++编程的基本要素,如类的定义、对象的创建、输入输出操作以及文件结构的组织,是学习C++编程的一个良好实践案例。 1. **文件结构** 游戏的源代码分散在六个文件中,每个文件都...

    手机C++编译器

    需要注意的是,虽然手机上的开发环境相比桌面环境可能会有一些限制,例如性能、屏幕大小和输入方式等,但这并不妨碍初学者入门或者进行简单的项目实践。对于那些希望在任何地方都能编程的人来说,手机C++编译器是一...

    C++ vs 抗日英雄

    分享代码和项目是开源精神的体现,通过这种方式,其他开发者可以学习、借鉴或贡献自己的想法,共同促进技术的发展。 在C++编程中,开发RPG游戏通常涉及以下关键知识点: 1. **面向对象编程**:C++支持类和对象,...

    Beginning C++ Game Programming-xxzzzzjohn

    在本书的描述中,我们可以看出它非常注重于实用性和实践性,让初学者通过学习C++这一基础但强大的编程语言来开发游戏,从而在实践中学习编程技巧和游戏开发的思维。 书中可能涵盖了C++的基础知识,例如数据类型、...

    C++程序设计..PPT

    《C++程序设计》是针对初学者的一份入门资料,主要介绍了C++语言的基础知识,旨在帮助学习者从零开始掌握这一强大的编程语言。课程涵盖了C++的基本语法、数组、指针等复杂应用,以及面向对象编程的基础和实践。课程...

    (C++)贪吃蛇DOS界面

    通过这个项目,C++初学者不仅可以巩固语言基础,还能学习到游戏开发的基本流程和逻辑思维,是一次宝贵的实践机会。对于有经验的开发者,虽然这个游戏可能较为简单,但它仍然可以作为一个快速实现和测试新想法的平台...

    中文汉字替换c++中的英文关键字

    这种尝试旨在降低编程语言的学习门槛,尤其是对于那些英语水平不高的初学者,使编程更加贴近他们的母语环境。 首先,我们需要理解C++是一种面向对象的编程语言,它由Bjarne Stroustrup于1983年基于C语言发展而来。...

    C++编程实例源程序

    C++编程语言是一种强大且灵活的面向对象编程语言,它起源于C语言,但...对于初学者来说,这些实例是一个宝贵的资源,可以用来验证理论知识,而对于经验丰富的开发者来说,它们可能是激发新想法或优化现有代码的好工具。

    自己用c++ 做的一个浏览器 简单 但是功能还是能实现

    此项目可能包含基本的网络请求处理、页面解析、UI界面构建等基础功能,适合初学者研究和学习。 【标签】:“C++”、“自编浏览器” 标签“C++”强调了项目的核心编程语言,表明代码以C++编写,涉及C++的语法、类库...

    C++从零开始 C++编程

    本文将从基础开始,引导初学者理解编程的本质和C++的基本概念。 首先,我们来探讨什么是编程。编程不仅仅是学习一种编程语言,比如C++,更重要的是理解和掌握编程思想。编程是一种描述解决问题的过程,它将人的想法...

    C++编程思想,Bruce Eckel

    它适用于那些正在学习C++语言基础的人群,同时也适合想要深化理解或扩展知识面的专业人士。 #### 专家推荐与读者反馈 - Al Stevens(《Dr. Dobb's Journal》特约编辑)高度赞扬了本书中关于iostreams章节的内容,...

Global site tag (gtag.js) - Google Analytics