楼主: chenyi112982
5585 43

[统计软件] 千锤百炼:如何学好C语言?搞定C++? [推广有奖]

编辑管理员

大师

74%

还不是VIP/贵宾

-

TA的文库  其他...

《经管人》精品-邂逅经管大牛

会计与财务学习答疑文库

经管类求职招聘答疑与咨询文库

威望
16
论坛币
40333 个
通用积分
47426.2146
学术水平
4872 点
热心指数
5237 点
信用等级
4486 点
经验
1870886 点
帖子
2249
精华
90
在线时间
5185 小时
注册时间
2006-5-25
最后登录
2024-4-16

初级学术勋章 中级学术勋章 高级热心勋章 高级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币


第一部分:如何学好C语言?

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

  • 鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,很多人都觉得C语言好学,其实并不然。(你可以看看《C语言的迷题》)现在的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术如果能够流行40多年,这才是你需要去关注和学习的技术,而不是那些刚出来的技术(过度炒作的技术Windows编程史)。这才是踏踏实实的精神。
  • 不要找借口。这一条路走下来并不容易,不要给自己找借口。我最不喜欢听到的就是“很忙,没有时间”这样的借口。我以前在银行做项目,早9点到晚10点,周一到周六,我一样可以每天抽1个小时来看书和专研,一年下来也能精读5、6本书。我现在的工作项目和招聘任务很紧张,刚生的小孩只有自己和老婆两人带,还需要准备讲课,但是我还是能够找到时间看文章写文章维护酷壳。所以,我可以告诉你,“时间就像海绵里的水(注:此处进行了一定改动),只要你肯挤,就一定会有”。

如果你能在2-3年内精读完这些书,并全部融会贯通,那么你就明白什么是一览众山小的感觉了!我足足花了5年时间才算是真正全部读完这些书的。最后,祝你好运!努力!


我想,这篇文章主要想告诉大家这么几件事:

  • 编程编到一定时候,你就需要了解底层系统的机制,否则,知其然不知所以然。
  • 我没有否定非C的程序员的逻辑,真正的逻辑是——如果你想要了解底层机制,请学习C语言和操作系统。
  • 40多年的Unix/C影响深远。包括影响了Windows。如果你想一通百通,一定要了解Unix。那是计算机文化真正的根。
  • 不要肤浅地去思考问题。比如,不要以为一个DBA就不会考虑数据库引擎的内存页面的问题。也不要以为Web程序员就不需要了解后台的服务器和脚本的运行性能以及TCP/IP的问题。

高手往往都是有很强的系统的基础知识的,表面的东西永远是肤浅的。



第二部分:如何学好C++?

  • C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待

  • 多问“为什么要这样”的问题。学习C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。有空看看《C++演化和设计》一书。

  • 看书,大量的C++书。你可以按如下先后顺序阅读(下面这些书,我花了大约4-5年的时间,今天我还在随时温习)

  • C++ Primer》,这本初级读本可能让会你啃得很痛苦,所有的语言的特性和为什么都在里面了,好好读读。当然由C++之父写的《C++程序设计语言》也不错。两本看一本就好了(我看的是前者)。

  • 了解C++的语法仅仅是万里长征的第一步,你还需要看看《Effective C++》和《More Effective C++》这两本书并不厚,但我从02年就一直看到现在,每次读我都有新的体会,这两本书太经典了。如果你对C语言不熟,这两本书会让你回去补C语言的课。

  • Think in C++同样是另一本经典之极的书,学c++必读,但是中文版的翻译的很不好,所以还是去读英文版的吧。

  • C++沉思录》同样非常值得一读,这里教的不是编程,而是思考的方法,这是相当珍贵的。

  • Exceptional C++》和《More Exceptional C++》让你看看各种问题的解决方法和一些常见的经典错误。

  • Advanced C++》和《Modern C++》可以让你知道C++各种神奇的用法。

  • 泛型编程与STL》是把C++实践到了极致的东西。很强大。STL――神一样的模板库(容器,算法和函数对象),不得不服。

  • 深入探索C++对象模型》让你了解编译器下的C++是什么样的,让你了解C++的性能并不差。这个对于C++的程序员太关键了。我以前写过的《C++虚函数表解析》还有《C++对象内存布局》属于这个范畴。

  • 和Java语言做对比。我个人以为Java对C++这个并不成熟的语言做了很多调整,规范和限制。所以,对比一下Java和C++,想一想,为什么一些东西在C++中可以做,但在Java中却不行。比如:Java的异常是必需要catch的,不然就会编译不通过。为什么Java不提供操作符重载?为会Java会引入接口来做多重继承?等等。Java体现着很多面向对象设计的东西,学习Java有助于你学会怎么更好地使用C++来编程

  • 面向对象设计 。虽然面向对象可能是个骗局。但是我觉得面向对象设计中的一些实践非常的不错,比如,单一原则,依赖倒置原则,等等,都非常地经典。《设计模式》必需一读,《面向对象的分析和设计》可以一读。但不可以设计模式为中心来编程,而应该是用设计模式来解藕

  • 类库学习。看看MFC是怎么封闭Windows API的,看看ACE是怎么面向对象的,看看boost是怎么玩面向对象的,看看CPPUnit又是怎么设计的。当然,Java的JDK中有太多的设计模式,可以参考。
  •     希望没有吓到大家,并欢迎大家补充。




    注:本文进行了综合剪辑和编加,选编自陈浩老师在酷壳网的博客、以及他在IT技术学习上的博文,在两文之间进行的综合整理-------对于学习C语言和C++,不仅指明了学习路径和方法,理论体系和有益的建议,更为大家提供了学习资料和书籍清单,丰富足料!

    二维码

    扫码加我 拉你入群

    请注明:姓名-公司-职位

    以便审核进群资格,未注明则拒绝

    关键词:C语言 Exceptional Effective exception Template C语言 c程序语言

    回帖推荐

    Crsky7 发表于40楼  查看完整内容

    更好的学习路径应该是先学面向对象C#,接着学算法与数据结构,然后学C#与C++混合编程,最后学习汇编与反汇编。
    已有 3 人评分经验 学术水平 热心指数 信用等级 收起 理由
    离歌レ笑 + 50 + 3 + 3 + 3 精彩帖子
    fantuanxiaot + 10 + 1 + 1 + 1 精彩帖子
    kychan + 10 + 1 + 1 + 1 chenyi112982原来也会C语言和C++

    总评分: 经验 + 70  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

    本帖被以下文库推荐

    任何一种学习,就其本质而言,都是从提问开始的
    爱问就有答案,酝酿好答案的感觉就像千年狐狸吐出内丹......
    沙发
    jerker 发表于 2015-4-3 00:12:37 |只看作者 |坛友微信交流群

    回帖奖励 +3

    C++ Primer,一本久负盛名的C++经典教程

    使用道具

    藤椅
    jerker 发表于 2015-4-3 00:13:59 |只看作者 |坛友微信交流群

    回帖奖励 +3

    算法导论,“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。

    使用道具

    板凳
    zhukeming 发表于 2015-4-3 00:21:03 |只看作者 |坛友微信交流群

    回帖奖励 +3

    谭浩强、侯捷、潘爱民的系列丛书

    使用道具

    报纸
    auirzxp 学生认证  发表于 2015-4-3 00:28:08 |只看作者 |坛友微信交流群

    使用道具

    地板
    auirzxp 学生认证  发表于 2015-4-3 00:29:29 |只看作者 |坛友微信交流群

    回帖奖励 +3

    使用道具

    7
    auirzxp 学生认证  发表于 2015-4-3 00:30:22 |只看作者 |坛友微信交流群

    回帖奖励 +3

    使用道具

    8
    德阿卑之尘 发表于 2015-4-3 00:42:55 |只看作者 |坛友微信交流群

    回帖奖励 +3

    先留名

    使用道具

    9
    IQ8181 在职认证  发表于 2015-4-3 09:30:40 |只看作者 |坛友微信交流群

    回帖奖励 +3

    虽然过了二级C,但什么都不懂

    使用道具

    10
    IQ8181 在职认证  发表于 2015-4-3 09:31:13 |只看作者 |坛友微信交流群

    回帖奖励 +3

    使用道具

    您需要登录后才可以回帖 登录 | 我要注册

    本版微信群
    加JingGuanBbs
    拉您进交流群

    京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

    GMT+8, 2024-4-24 21:56