Re: [问题] c程式学习步骤

楼主: Feis (永远睡不着 @@)   2015-05-15 18:56:18
之前从事了 C/C++ 相关基础课程的教学大概有五六年,
接触到大部分都是有心想学但是非本科系的学生。
如果你只是想学一个程式语言,我觉得 C/C++ 不是个好选择。
如果你不知道为什么想彻底的学会 C/C++,建议的曲线大概是:
[C 语言]
* 计算机概论
- 基础知识, 主要是对于电脑结构运作抽象化、资料数位化以及运算有基础认识
- 通常会带一点编译器和作业系统的观念
* C 语言程式基础
- 学会自己看懂标准函式库的文件并可自由应用为目标
* C 语言程式进阶
- 这阶段就是学习怎么学会使用第三方函式库, 例如 SDL, OpenGL, OpenCV, GTK+
之类, 应该牵涉到比较进阶的概念跟使用惯例, 例如 C 风格封装、函式指标与位
元运算
* 算法和资料结构以 C 语言实作
- 我觉得算法不太应该跟资料结构分开学
- 语言方面主要是加强递回使用、指标和动态内存配置的概念
[C++ 语言]
* 计算机概论
- 所需要的基础可以比 C 语言再少一点,因为有更强大的标准库。
* C++ 语言中与 C 较接近的部分
- 虽然我相信很多人会觉得应该直接学 C++ 风格的设计,
但是教学实务上我还是觉得有很大的困难。
同时我也信奉 C 风格设计是 C++ 使用上的一种可能,
要透彻了解 C++ 在 "目前" 我觉得了解 C 跟 C++ 的差异还是有必要。
* 基于物件的 C++ 程式设计
- 主要学 C++ 风格封装。
* C++ 与物件导向
- 主要学物件导向的语法,建议是实作某些大型系统,例如 GUI。
* 设计模式与 C++ 程式设计
- 主要学物件导向在实务系统上的应用
* C++ 泛型程式设计
- 用 C++ 实作资料结构 (泛型容器) 跟泛型算法
- 之前的教学经验就是直接自己实作 STL
* 其他学不完的东西
- 例如例外之类的,但是实务上重要性目前还是不够高,这类的东西在
之后的 C++ 可能又会有些改动,因此重要性就往后一点。
作者: johnpage (johnpage)   2015-05-15 23:31:00
写程式是需要毅力与耐心
作者: Bencrie   2015-05-16 15:26:00
OpenGL 拿来练 C ... 好像有点怪吧 XD
楼主: Feis (永远睡不着 @@)   2015-05-16 15:40:00
怎么说? 我觉得 OpenGL 是蛮标准的 C 风格函式库设计神秘的全域函数, callback, 雾一般的内存配置, 猜不透的堆叠实作. 各种 MACRO真的通透的话, 以后用其他函式库应该都不会怕 xD
作者: EdisonX (卡卡兽)   2015-05-16 22:31:00
!! @Feis , 言下之意 , 您是否认为 global variable 是种C++ 使用 C 的风格之一?
作者: Bencrie   2015-05-16 23:44:00
OpenGL 没有 callback,glut 不能算
楼主: Feis (永远睡不着 @@)   2015-05-16 23:44:00
EdisonX: 有点难回答. 这问题是同等于 C++ 用 globalvariable 是否万恶吗 ?Bencrie: 抱歉. 也许我该严格定义他也许我们应该先定义好什么是 OpenGL XD
作者: Bencrie   2015-05-16 23:53:00
我发现我好像会错意 ... 以为是要拿他当 API 设计参考
楼主: Feis (永远睡不着 @@)   2015-05-16 23:54:00
Bencrie: 我不想再学一个像 OpenGL 家族的东西了 Orz..
作者: Bencrie   2015-05-16 23:55:00
OpenAL 跟 libdevil XD
楼主: Feis (永远睡不着 @@)   2015-05-16 23:58:00
感谢. 我会记得离他们远点的 (握拳)
作者: Bencrie   2015-05-17 00:01:00
这两个其实没那么复杂,只是写起来很像(命各种名也是各种命名
楼主: Feis (永远睡不着 @@)   2015-05-17 00:04:00
楼上这是个 1A3B 阿.
作者: Killercat (杀人猫™)   2015-05-18 14:02:00
OpenGL跟DX都是同一个设计风格啦... XD真的要说完全C++风格的 只有在wrap一层 比方说Ogre但是事实是这就是红不起来...
作者: gary841208   2015-05-18 17:53:00
推 算法跟资料结构是一体的 不该分开学

Links booklink

Contact Us: admin [ a t ] ucptt.com