文档章节

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

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

    我学习和工作的方向都是化工,和 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





© 著作权归作者所有

共有 人打赏支持
粉丝 25
博文 49
码字总数 77226
作品 0
茂名
加载中

评论(2)

Lion。
Lion。
呵呵1
懒懒好闲
懒懒好闲
太逗了
由“吸血鬼数字”引发的关于算法的思考

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

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

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

Python爱好者
2017/01/12
0
0
初识shell【运算符与判断】

小白的shell之路 系统版本 Red Hat Enterprise Linux Server release 7.0 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 ...

Morning晨丿
04/27
0
0
我的安全之路——二进制与逆向篇

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

u012763794
2017/07/23
0
0
【实验】给指定的并且已登陆系统的用户发信息

题目要求: 编写一个脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。 题目代码: #!/bin/bashecho if [ $# -eq 0 ];thenecho "no input!!"exit 1f...

林洁伟
2012/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
26分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
37分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
49分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部