文档章节

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

 四彩
发布于 2016/02/04 13:15
字数 1616
阅读 123
收藏 2
点赞 1
评论 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
懒懒好闲
懒懒好闲
太逗了
C++学习建议

// 转载 C++学习建议 C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此...

heartfly ⋅ 2010/10/03 ⋅ 0

由“吸血鬼数字”引发的关于算法的思考

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

joying华 ⋅ 2014/05/07 ⋅ 2

(转)java学习之路

JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用。为什么他们能达到如此...

beidao-ai ⋅ 2011/12/13 ⋅ 0

浅谈python基础与初学者

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

Python爱好者 ⋅ 2017/01/12 ⋅ 0

【实验】给指定的并且已登陆系统的用户发信息

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

林洁伟 ⋅ 2012/12/01 ⋅ 0

初识shell【运算符与判断】

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

Morning晨丿 ⋅ 04/27 ⋅ 0

我的安全之路——二进制与逆向篇

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

u012763794 ⋅ 2017/07/23 ⋅ 0

【实验】给指定的并且已登陆系统的用户发信息

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

Aram ⋅ 2012/12/16 ⋅ 0

程序员高薪之路的五大误区

转载:中国IT实验室 我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许...

刘利民 ⋅ 2009/08/25 ⋅ 0

Java学习之路:不走弯路,就是捷径

1.如何学习程序设计? Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++等其他程序设计语言也一样管用。有编程高手认为,JAVA也好C也好没什么分别,拿来就用...

捂风挽笑 ⋅ 2017/06/02 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 28分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 34分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部