简述 C 和 C++的学习历程

 

 


简述 C 和 C++的学习历程

肖舸老师
 


总是被同学们问到,如何学习C 和 C++才不茫然,才不是乱学,想了一下,这里给出
一个总的回复。

一家之言,欢迎拍砖哈。

1、可以考虑先学习 C。

大多数时候, 我们学习语言的目的, 不是为了成为一个语言专家, 而是希望成为一个解
决问题的专家。 做一个有用的程序员, 做一个赚钱的程序员。 我们的价值, 将体现在客户价
值上,而不是语言写得好不好看。

C++是 C 的一个面向对象的解释,C++为 C 扩充了大规模工程应用, 复杂的系统结构的
组织和掌控方法,但是,我认为,C++骨子里还是 C 的。

毕竟,解决具体问题,每个函数内部,都是用C 的方式写程序,还是面向过程的。

因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问
题的能力。就是先学习怎么走路,再学习怎么跑步。

2、学习 C 的过程中,一定要理解结构化编程思维。

为什么呢, 我前面有文章说过, 软件语言的发展过程, 就是一个数据私有化的过程,大
型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。

这是现代工程化开发的核心和灵魂。

因此,利用 C 这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。
因为 C 的函数,本来就是为重用做准备的。同时,全局变量和cpp 内部私有变量的差别,
其使用原则,这些都能学到很多结构化开发思维。

3、开始学习 C++

C++不难学的,很多人觉得 C++难学,其实是因为它在 C 之外,又提供了很多的概念,
尤其是对象,很难以理解。

不过我经过这么多年, 把这个问题反而看淡了, 我认为面向对象相对面向过程, 仅仅是
结构化程序设计的一个具体体现, 是编译器提供手段, 强迫程序员必须遵循数据私有化的一
个实例,C++和 C 的关系,最核心的莫过于此。

IT 学生解惑真经

现在我们回到 C 再看看,如果我们把一个全局变量,写到一个cpp 里面,并且在对应
的 h 文件中不声明, 它是不是就只有这个模块可以使用?它是不是就是私有变量, 以这个理
解,类能明白了吗?

4、学习 C++的深入技巧

C++在类的基础上, 经过这么多年的发展, 其实提供了很多深入的概念, 看起来很复杂,
其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是?

既然模板理解了,STL,A TL这些,静态模板库,动态模板库,还难理解吗?就是一大
堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。

ok,STL 都理解了, 泛型开发还难吗?所谓泛型开发, 其实就是我做一个模板, 来定义
一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,
我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这
个道理?

学到这里,C++和 C, 其实已经差不多了。 再学语言, 就是求全责备, 过于钻牛角尖了。

5、学习应用开发

前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语
言学完,要学习应用开发。

什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows
下给我写个程序,我要什么什么功能。为啥Windows 呢?因为我习惯。

OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具
体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows
系统, 服务器是Linux, 这些都是行业习惯, 嵌入式不好说, 各种平台都有, Palm,S60,Linux,
WinCE,等等。要根据自己的目标客户来定。

当我们选定目标平台后, 有一个问题, 选什么语言, 很多时候, 学生和商用程序员差别
就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看
哪个语言更合适,不会的语言,要去学。

ok, 假定我们选了C 和 C++, 那么, 我们需要选择开发平台, Windows 下不用说了, VC,
这是最好用的,Linux 下呢,gcc,其他的也差不多。

假如我们开发 VC,并且使用 C++,这个时候,才需要考虑学习MFC 了,因为这是微
软的标准类库,至少 Windows 平台下,它最权威,你看见没有,我们从学习开始,走了多
少步,才走到 MFC?是不是 MFC 不是学习 C++上来就必须学的?

6、学习 MFC

 

学习 MFC, 很多人一上来就开始看其体系架构, 看得一头雾水, 那个模块关系依赖图,
我到现在都看不懂。

呵呵,其实不是啦,和学语言一样,我们学MFC 的目的,也不是希望成为 MFC 的专
家,而是要利用 MFC 开发 Windows 应用程序,为我们赚钱。看见没?MFC 是手段,不是
目的,目的是开发 Windows 程序。

其实 Windows 下,有一套很标准的 C 接口,叫 Win32API,这个才是 Windows 的标准
编程核心,因此,学习 MFC,真实的目的是理解 Windows 程序开发,建议可以先学习
Win32API,看来我们又回到 C 了哈,呵呵。刚开始学 C 有用吧?

7、Win32API

其实 Win32APi 不难学的,因为虽然它很大,有很多接口,但不是必须的,我们真正做
个简单的 Windows 应用,其实用不到这么多的。做个简单的Dialog,然后实现个功能,你
遇到的接口函数,其实绝大多数,就是以后常用的了。把常用的记熟练,就ok 了。

关键是,这个时候要通过 WinMain 方式,去理解 Windows 的事件机制,这是核心,其
实说起来简单得要死。 就是以前你的程序, 由于没有系统支撑, 很多事必须自己做, 比如检
查鼠标和键盘输入,你需要写个死循环,自己不断去看,而Windows 说,这些事你不要做
了, 我来做比你好。 你没事就玩去吧, 我把和你相关的消息放到一个队列里, 就是你的事件
队列,你自己没事去找找看,有没有新消息来,有就做事,没事就玩好了。很简单是不?

当然,Windows 是多任务操作系统,有时候,我们的逻辑需要并发一些功能,比如说,
我在等鼠标键盘消息的时候, 需要再看看打印机准备好了没有, 这里就需要理解并行计算了,
这和语言无关, 和操作系统无关, 这是另外一个话题, 这里不多说了, 你可以自己找找线程
开发的相关资料看。

看见没,为了学习好 Windows 编程,其实我们不仅仅需要学习语言,还要学习操作系
统,并行计算原理,内存原理,可能有时候还需要学习网络通信,等很多知识,所以说,单
凭学习语言,是成不了商用程序员的,一个合格的程序员,需要理解的东西,太多了,要广
为学习。

当我们把 Win32API,以及基本的窗口化程序设计理解了,就可以回到MFC 继续学习
了。是不是有点递归返回的意思?呵呵。

8、回到 MFC

原来学 MFC 很难的,因为其封装了太多细节,很难理解透彻。不过还好,我们有侯老
师的深入浅出 MFC,去找本来看看,如何从 Win32API 的纯 C 编程,改变为 MFC 的 C++
方式,看这个最快,基本上前 6 章看完,已经会了,这里我就不多说了。

9、COM

 

 


COM、COM、COM,我最头疼的 COM,呵呵。
 

IT 学生解惑真经
 

COM 就是一种远程过程调用,即你请求的代码是在另外一个进程中运行的,通过某种
通信协议来回传递参数和结果。仅此而已。DCOM 进了一步,服务者可以在另外一台计算
机上。 在公司开发中, 大家可能各做一块, 如果要合作,Windows 下建议多使用 COM。 (我
个人喜欢 socket 通信哈)

简单说,COM 提供了一种机制,可以跨进程通信,甚至跨机器通信。不过,为了传递
各种类型的参数,COM 可谓是无所不用其极,它发明了智能指针,可以指向任何类型的数
据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起
作用了,还用到了 ATL。

学习 COM,要注意一个接口的概念。由于开发者是不同的人,调用程序和服务程序,
可能不是同一种语言,OK,不能简单提供一个C 或 C++的.h 文件来解答接口, 因此,COM
提供了标准接口,使用者在程序内部,以查询方式获得可用接口,进而以接口ID 调用。很
累人的。

学会了 COM,就可以多理解一点ActiveX 了,那么再学习一点dll(动态链接库)的知
识,我们就已经可以写OCX 控件了。一般说来,OCX 控件是个很好的设计,哪都能用,一
个软件的模块,最理想是开发成这个样子,比exe 灵活。

10、没了。

按少林派说法,学了上述这些,其实已经算打过18 铜人阵了,已经可以下山助明主,
扫奸佞,扭转乾坤,解万民于倒悬了。

不过, 关键是你通过上面的过程, 是不是已经学会了学习的方法, 再遇到新的东东,是
不是已经不难学了?这大概就是武学中的悟性了, 有了这个根基, 以后只要慢慢修炼, 估计
20 年后,可与天下英雄一较短长了。

呵呵,你说是不是?

呼呼,好累。

学生评论:

董志勇(Net 老师) :
总结很好,现在太多学校、同学以上来就搞面向对象,Windows 节目开发。或者 JAVA 里面
就搞 JSP。往往除了问题的时候都不知道怎么解决,往往要花很多时间来补最基础的东西。
面向过程都不懂,搞什么面向对象呢!

武汉交通职业学院 胡军(C/C++学生) :
谢谢老师,受益了!哈哈,我是学 VC 的,去年暑假开始学的,然后自己在寝室折腾了一个


月。因为当时听说有 VC,也有 VC++,我想,学 VC 的话,那就不用学 C++了吧?(我太懒,
就想学个 C) , 结果头弄晕了, 又跑去蹲图书馆, 总算把C++学的差不多了 (像老师您说的一
样,学了 C,C++确实很好学) 。现在在做MFC,也有模有样的。哈哈。

迷茫(C/C++学生) :
谢谢肖老师 这段时间一直在考虑怎么学 C 要学到什么程度 很多人说 C 是做底层开发的建
议深学 软件开发还是重点学 C++ 看来 C 还是不能囫囵吞枣的学 再次感谢

海南大学 张继兴(C/C++学生):
看了不少文章,我想这篇文章应该是很适合我了.
学了 c,c++,又了解一点 mfc.不知道下一步怎么走.
肖老师的这篇文章正好给了我方向
谢谢~~~

湖北大学 马刚(C/C++学生) :
今年刚毕业, 在做C 方面的开发, 记得开始学习C 的时候觉得 C 只能做些简单的工作, 不知
道在哪儿听说的用 C 语言开发的程序超过 5W 行就会出现很多问题, 后来学了C++,java 觉得
类的作用很强大, 呵呵, 今天看了肖老师的文章收获挺大, 其实很多东西不用类照样可以做
好,只是自己要做的工作就多了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值