博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何学好C和C++
阅读量:6541 次
发布时间:2019-06-24

本文共 2905 字,大约阅读时间需要 9 分钟。

上的两篇文章,转载至此,学好C和C++。

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

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

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

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

  • 鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,很多人都觉得C语言好学,其实并不然。(你可以看看《》)现在的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术如果能够流行40多年,这才是你需要去关注和学习的技术,而不是那些刚出来的技术(,)。这才是踏踏实实的精神。
  • 不要找借口。这一条路走下来并不容易,不要给自己找借口。我最不喜欢听到的就是“很忙,没有时间” 这样的借口。我以前在银行做项目,早9点到晚10点,周一到周六,我一样可以每天抽1个小时来看书和专研,一年下来也能精读5、6本书。我现在的工作项目 和招聘任务很紧张,刚生的小孩只有自己和老婆两人带,还需要准备讲课,但是我还是能够找到时间看文章写文章维护酷壳。所以,我可以告诉你,“时间就像乳沟,只要你肯挤,就一定会有”。
  • 学好C语言和系统编程。我认为,学好编程有四个方面:语言、算法和数据结构、系统调用和设计
    • 语言。我可以告诉你C语言有两大主题你要好好学,一个是内存管理,一个是指针!这个世界上90%以上的C/C++出的严重性错误全是和这两个有关。不要看谭浩强的那本书,那本是本烂书。推荐这本书给你《》
    • 算法和数据结构。我认为,用C语言实现算法和数据结构莫过于最爽的事情。推荐你看这本书——,还有那本经典的《》
    • 系统编程。Windows下推荐两本书——《》和《》,Unix/Linux下推荐两本书——《》和《》《》尤其是《Unix网络编程》这本书,一通百通,无论Windows还是Unix/Linux,都是一样的。
    • 系统设计。关于设计方面,我全力推荐《》,看完以后,你就明白什么是真正的编程文化了。然后,当你看到Windows的Fans的某些言论时,你就知道什么叫一笑了之了。

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

——-更新:2011/03/29 20:00——-

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

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

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

===

昨天写了一篇,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为中谈到了算法和系统,所以这里就只谈C++语言。

  • C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为,C++的学习曲线是相当BT的,你可以看看。C++是一门很自由的语言,自由到了有点。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待
  • 多问“为什么要这样”的问题。学习C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很 多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有 RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。有空看看《》一书。
  • 看书,大量的C++书。你可以按如下先后顺序阅读(下面这些书,我花了大约4-5年的时间,今天我还在随时温习)
    • 《》,这本初级读本可能让会你啃得很痛苦,所有的语言的特性和为什么都在里面了,好好读读。当然由C++之父写的《》也不错。两本看一本就好了(我看的是前者)。
    • 了解C++的语法仅仅是万里长征的第一步,你还需要看看《》和《》这两本书并不厚,但我从02年就一直看到现在,每次读我都有新的体会,这两本书太经典了。如果你对C语言不熟,这两本书会让你回去补C语言的课。
    • 同样是另一本经典之极的书,学c++必读,但是中文版的翻译的很不好,所以还是去读英文版的吧。
    • 《》同样非常值得一读,这里教的不是编程,而是思考的方法,这是相当珍贵的。
    • 《》和《》让你看看各种问题的解决方法和一些常见的经典错误。
    • 《》和《》可以让你知道C++各种神奇的用法。
    • 《》是把C++实践到了极致的东西。很强大。STL——神一样的模板库(容器,算法和函数对象),不得不服。
    • 《》让你了解编译器下的C++是什么样的,让你了解C++的性能并不差。这个对于C++的程序员太关键了。我以前写过的《》还有《》属于这个范畴。
  • 和Java语言做对比。我个人以为Java对C++这个并不成熟的语言做了很多调整,规范和限制。所以,对比 一下Java和C++,想一想,为什么一些东西在C++中可以做,但在Java中却不行。比如:Java的异常是必需要catch的,不然就会编译不通 过。为什么Java不提供操作符重载?为会Java会引入接口来做多重继承?等等。Java体现着很多面向对象设计的东西,学习Java有助于你学会怎么更好地使用C++来编程
  • 面向对象设计 。虽然。但是我觉得面向对象设计中的一些实践非常的不错,比如,单一原则,依赖倒置原则,等等,都非常地经典。《》必需一读,《》可以一读。但不可以设计模式为中心来编程,而应该是用设计模式来解藕
  • 类库学习。看看MFC是怎么封闭Windows API的,看看ACE是怎么面向对象的,看看boost是怎么玩面向对象的,看看CPPUnit又是怎么设计的。当然,,可以参考。

希望没有吓到大家,并欢迎大家补充。

转载于:https://www.cnblogs.com/wyqx/p/3432095.html

你可能感兴趣的文章
Memcache的分布式应用
查看>>
Community Server专题二:体系结构(转载)
查看>>
Microsoft VBScript 运行时错误 错误 '800a000d' 类型不匹配: 'regEx.Replace'
查看>>
生活随笔:你会狗眼看人低吗?
查看>>
[轉]安裝SQL2000出現的問題"先前的程式安裝在安裝機制上建立了擱置檔案作業
查看>>
SHELLEXECUTEINFO 结构详解
查看>>
40种网页常见技巧<javascript>
查看>>
什么是设计模式原则?
查看>>
“如何管理好你的时间”培训小结
查看>>
sql server 命令行工具
查看>>
(android实战)创建查看试卷答案功能(类似于疯狂小鸟的选关)
查看>>
1993年高级程序员下午试题1(自然数排列)
查看>>
JQuery学习笔记 (3)
查看>>
28、深入理解计算机系统笔记,Web服务器简介
查看>>
C#如何使用反射实现通过字符串创建类
查看>>
FANN学习2之建立简单工程
查看>>
电子病历开发经验共享 —— 2009年一时兴起写在某个论坛上的,转抄留恋。
查看>>
C# Label显示多行文本及换行(WinForm/WebForm)
查看>>
BeiJing2006 狼抓兔子
查看>>
silverlight:telerik RadControls for Silverlight 主题使用心得
查看>>