文档章节

业余爱好者的C程序设计学习之路

 四彩
发布于 2016/02/04 13:15
字数 1616
阅读 239
收藏 3

    我学习和工作的方向都是化工,和 IT 专业一点边都不搭,属于程序设计爱好者一类。坚持了很多年了,谈谈我的认识。

一、为什么是C

汇编太难,直接下手会吓死宝宝的。

basic 不能考虑,因为“对于一个之前接触过BASIC语言的学生,你基本上不可能教会他如何正确的编程:因为作为一个程序员苗子,他们已经脑残,无可救药。”——戴克斯特拉(图灵奖获得者)语。

面向对象的语言像 java 等,太高级,掩藏的太深了,屏蔽了底层和细节,不适合理解计算机的实际运行机制。

面向过程的语言中,pascal 很严谨,可是中国不流行。我们是爱好者,不是专业的,不用去了解了。

C既强大又好用流行,就从C下手。流行了几十年的东西啊,资料丰富。


二、怎么开始

1、从“文字编辑器 + gcc 命令”开始,不要用集成开发环境

TC、BC 就不用说了。

VC 也不要用,cb 都不要用了。自动化的编译会严重影响你对编译参数、细节的理解。

建议 ConEmu、Notepad++ 和 MinGW 搭配。


三、从哪里开始

开始只学C语言语法基础,不要涉及指针等他东西,包括:

基本数据类型

数组

运算符

基本表达式

条件语句

循环语句

简单函数

建议《C程序设计语言》第2版的第1到第4章就够了,程度到能理解编写结构化程序是怎么回事就行。


四、学些汇编

要理解计算机的运行,必须学汇编!

1、从建议王爽的《汇编语言》第2版开始。重点是指令、内存分段、寻址。中断部分理解就行,那些 bios 中断号不用记,dos 中断看都不用看了。这些其实都还简单。

2、转到 32 位下的 Nasm。好像没有 Nasm 的专门教材,上网找个伍星翻译的《PC汇编语言》看看吧。

3、接着用李忠的《x86 汇编语言 从实模式到保护模式》,这本书的重点是代码。对着书从头到尾自己敲一遍,或者对着代码看书。要知道怎么控制硬件,搞清楚保护模式。这个就很难了,知识点又多又难理解。业余爱好者的整个学习过程中,这是最艰难的时候。放慢脚步,一点一滴来吧。


五、回身深入C语言

这次就要把C语言学通了,指针啊、内存管理啊都要搞得清清楚楚、明明白白的。有了汇编的基础,理解起C语言的最难点——指针,其实没难度了,有悟性的人能秒懂也不奇怪。

1、还是《C程序设计语言》第2版,这次要沉下心看完,书很薄的。

2、《C和指针》,这本书的作者其实是标题党,这也是本入门书,书里不光是指针,内容很全面。

看完这两本书——要看懂,例子都能自己敲出来,C语言已经入门了!

3、入门书还有本《C Primer plus》第五版,据说也不错,不过我没看过。

4、下面的书是进阶用的,可以一边继续学新的一边看:

《C专家编程》、《C陷阱与缺陷》、《C标准库》。

前两本都不厚,写的也有意思。

第三本比较枯燥,不过学习C语言是一定要熟悉标准库的,标准库不是C语言的内容,但是是不可分割的内容!不看《C标准库》也要从其他途径熟悉C标准库!起码要知道有哪些常用库函数,怎么用。其实标准库的实现代码就是最好的C语言范例!


六、数据结构与算法必学

实际上,因为有指针和结构,用C语言学数据结构比其他任何语言都爽快!

1、程杰的《大话数据结构》,书很厚,但是讲得很轻松幽默。

2、清华大学严蔚敏的《数据结构(C语言版)》,配套还有本习题。

从哪本开始都可以,两本同时看疗效更好。

3、算法内容很多,学些简单的就可以了。《数据结构与算法分析——C语言描述》第2版就不错,继续深入就是《算法导论》了。


七、复习下

编程重在实践,代码是敲出来的。实战中,兼顾汇编与C语言的,最好就是操作系统,从学习写操作系统复习下汇编和C语言吧。

1、一个日本人写的《30天自制操作系统》。写书的人大包大揽,提供全部自己的工具,跟着写起来简单。

2、于渊的《Orange‘s 一个操作系统的实现》。于渊是学院派的,书很严谨,讲的又细又完整,也没有用专门的工具,所以学起来难度颇大。

如果仅为了复习,看前面几章介绍语言、硬件的就行,后面操作系统专门的东西不用看了。


C语言作为语言本身,已经学完了。


八、选择你感兴趣的平台吧

 继续当屌丝,留在windows的话,Win API 要熟练了:《Windows 程序设计 》和《Windows核心编程》。

 要融入世界,转 linux 吧:《Unix高级环境编程》和《Unix网络编程》。

 安卓下还有个 C4droid、cppdroid、cctools 三种集成编译环境。


九、还想深入的话。。。。

1、编译原理、操作系统设计、TCP/IP。。。。。。东西很多,难度加大了。到了这一步,可以自己挑教材了。实在太难的(像编译原理,我等业余爱好者一般都被卡在这里一辈子!),学不来就跳过吧。。。。。。我们是爱好者,不靠这个吃饭!耶!

2、根据你的需要和兴趣,可以学习使用一些现成的库

什么都从零开始建设,固然勇气可嘉,不过可以用别人写好的库更有优越性。

多媒体库可以选 SDL(最新SDL2)——编写游戏用,强力推荐!跨平台、开源、小巧!

控件库可以选 GTK(最新GTK+3)——编写通用软件界面用。

数据库可以选 MySQL





© 著作权归作者所有

粉丝 26
博文 49
码字总数 77226
作品 0
茂名
私信 提问
加载中

评论(2)

Lion。
Lion。
呵呵1
懒懒好闲
懒懒好闲
太逗了
自学与转行程序员,必学计算机专业课 - 知乎

接触过很多自学或者转行到程序员行业的同学。发现很多的同学,虽然能够完成功能模块的代码,但却对计算机专业的基础很不扎实。并不能理解代码设计的意义,久而久之,就沦为了业务代码的搬运工...

编程教室
2019/10/21
0
0
程序员之路起始篇──如何学习C语言

学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多...

王君
2009/09/07
0
0
由“吸血鬼数字”引发的关于算法的思考

今天看Thing in java的第四章有个小练习是找出4位数的所有吸血鬼数字( 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)自己写了个递归的实现,虽然是正确的,但感觉不满意,效率太低...

绝影jy
2014/05/07
1.5K
2
浅谈python基础与初学者

     Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。   Python是纯粹的自由软件,源代码和解释器CPython遵...

Python爱好者
2017/01/12
0
0
我的安全之路——二进制与逆向篇

我的安全之路——二进制与逆向篇 write in my dormitory at ‏‎11:23:35 Saturday, May 20th, 2017 by giantbranch(一个当初想横跨web跟二进制的菜鸡) ————致即将毕业的自己。 上一篇...

u012763794
2017/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis+lua 实现分布式令牌桶,高并发限流

方案一、在提供给业务方的Controller层进行控制。 1、使用guava提供工具库里的RateLimiter类(内部采用令牌捅算法实现)进行限流 2、使用Java自带delayqueue的延迟队列实现(编码过程相对麻烦,...

stys35
13分钟前
13
0
socket编程之websocket实现

主要实现私聊和群聊两个功能,要在web端实现想微信QQ那样的即时通讯的功能,我们需要了解一下websocket。 websocket是一种可以双向通讯的长连接协议,http是获取完数据就关闭,websocket则可以...

php开源社区
20分钟前
28
0
这款Mac视频下载神器,轻松解决1000多个视频网站下载难题!

Mac视频下载工具哪款好用?号称Mac届经典的网页视频下载神器,支持 1000 多个流媒体网站的视频下载,包括YouTube,优酷,Bilibili,Vimeo等,,让你轻松解决视频下载难题! Downie 4 Mac版值...

mac小叮当
22分钟前
22
0
基于三维GIS技术的矢量地图动态LOD渲染方法

本文从地图操作和要素可见性入手分析地图简化的影响因素,并基于分析的结果设计相应的缓存结构以加速地图的渲染。研究GPU环境下梯形格网的高效LOD方法,探讨简化前后节点的重组和显存中EBO数...

ZTMAP
25分钟前
21
0
Docker安装MySQL&Redis

Docker安装MySQL 下载 mysql 镜像 docker pull mysql:5.7 启动容器 docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysq......

农夫三拳有点疼-_-
26分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部