通过实战,讲C语言,谈编程,这是系列文章的两个主要内容。
一、学前要思考
从今天开始,我会按照我的想法一步一步地谈论如何编程。可能我的想法和你不太一样,和其他人不太一样,这不奇怪,每个人都有每个人做法和想法嘛。我从不是照书宣讲,但也不随便乱讲,我还是有系统的、有针对性的、把自己对编程的看法呈现给你们与你们交流。不要拒绝新的尝试、试试听听别人想法,说不定会有一些收获。
我想问一下读者,当你要学一门新的语言的时候,你应该首先考虑什么?你应该怎么学?你怎么才算学好了?。你会考虑这些问题吗?如果你从不考虑这些问题,不知道怎么去考虑,那我第一课就要告诉你,要学会思考。一个程序员不善于思考就不会是一个好的程序员,记住要学会思考,不习惯也要习惯。
如何思考?思考什么?学一门语言首先要把学习一门语言当做一个整体来思考。在学之前就要考虑好,为啥要学?怎么学?学什么?学多长时间?学到什么程度?
很多过来的程序员在学习语言的时候,由于没有很好考虑这些问题,急于编程序、急于看到程序运行出来的结果,或者一切顺其自然,没有急迫感,边学边做,若干年后也不知道自己到底学的怎么样。这些是我最不愿意看到的。
1、 为啥要学?
我认为这个问题一定要从实用主义出发,一定要学了有用。比如,工作需要、找工作需要、做自己项目的需要。总之能够在近期带来经济效益的,可以考虑去学。那些因好奇、因升级、因流行、因新品、因技术而去学则不要浪费时间去学,最多去了解就行了。而如果为了兴趣,这个就要考虑了,可以考虑比较一两个有用的程序语言去学习。人的时间本来不多,而程序员的时间更是不多而且珍贵,所以要珍惜使用。
2、 怎么学?
我看到大部分人都是找本书,先看,再试,不懂网上去查,是向书学习,向网学习的个人学习。这种方法一定学出来的是一个平均水平的程序员。我提倡的是不要看书(这个方法我在《程序员成长路线图:从入门到优秀》一书中专门说过),找人学。通过向别人学习,可以加快学习的进程、找到学习的重点、避免无谓的自己长时间查出错原因,更重要的是培养程序员团队意识,通过与其他人的交流,取长补短,共同进步。有些同学会说:“我找不会编程的人呀,向谁去学呀?”我只能说,现在会编程的人很多,只要你用心找,一定会找到的。至于人家肯不肯教你,那就要看你的了。
3、 学什么?
一个语言就像一个大海,你都不知道这个海有多大,有多深,所以,我们如果像平常一样,去喝几口海水,是喝不光的。因此,我们更重要的是要掌握喝海水的方法,而不是喝了那几口海水。学什么一般人很难说的清,因为,他们面对的无边的海水。我则更注重方法,我初步总结了一下要学会:
1) 语言环境的安装
2) 编辑源程序
3) 编译源程序
4) 运行程序
5) 语言的语法
6) 调试
7) 语言中的架构
8) 语言中重要的系统调用和引用
9) 打包安装程序制作
我希望能在文章全部发表完成之后,能把这个列成一个表格,便于记忆和学习。其他细节的东西可以不要过多考虑。
4、 学多长时间
学多长时间的确是因人而异,有的人基础好一些,经验多一些,脑筋活一些,有人带一些,学的就快一些。而有的人则相反,则要慢一些。一般情况下,一个月到二个月就能学的不错了。
5、 学到什么程度
语言学习无止境,学2年学10年都不能学透的。我还是提倡实用,只有学了以后,能满足工作要求就行了,就可以告一个段落了。以后,在工作中,可以随机地学,慢慢积累。
可能有些网友对上面要思考的问题,不太重视,感到学程序那需要考虑这些东西,学编程就是要学语法、学调用就行了。而根据多年的体会,我认为语言本身的语法、函数、调用反而不太重要,那是死的东西,跑不了。而学会思考,学会从流程上学习编程则是重中之重。
二、hello world编程
好吧,再说思考,大家可能会把我扁死不可。我把这次我的C语言的环境告诉大家:AIX操作系统、ORACLE数据库。AIX可以看成是传统的UNIX环境,是面向命令行编辑、编译、运行(不是面向windows)。其实,各行C语言的环境大同小异,大家可以根据自己的环境做适当的调整。如果网友准备好了C语言环境后,我们就可以开始C语言实战了。
我还是不能免俗,还是照顾到急于看到C语言程序的朋友们,开始我的helloworld编程。
我用vi 编辑了a.c 这个helloworld程序,编译,并运行。
其流程如下:
1、 编辑a.c
1.在系统命令行键入
Vi a.c
2.编辑a.c
#include “stdio.h”
main()
{
fprintf(stdout,”hello world!\n”);
exit(0);
}
2、 编译a.c
在系统命令行键入
cc a.c
3、 运行a.out
在系统命令行键入
./a.out
4、 显示结果
hello world!
好了。第一C语言程序编出来了,运行出来了。你们也可以试试。也算是会编C语言了。
接下来我们要对这个程序进行思考了:
1、 这个程序功能比较简单,但是,你的重点不要放在程序的功能上。而是放在一个语言的流程上。记住这个流程是:1、编辑 2、编译、3、运行。
2、 大家注意了没有我的源程序名是a.c,而不是取helloworld.c。这关系到源程序取名问题,下次抽空谈。
3、 大家注意了没有这个程序的可执行文件名为a.out,而不是a.exe或a
这个也值得谈一谈。这个和编译有关,下面在谈编译的时候,会详细谈的。
4、 大家注意了没有,运行这个程序的时候,a.out前加了./。这也是一个技巧。在有时候,明明看到目录下有这个可执行文件就是执行了别的文件。这是保证就是执行当前目录下的可执行文件的。因为,操作系统在接受命令行命令的时候,是会按照命令路径的顺序去找这个文件的,而当前目录一般是放在bin目录之后的。这个命令路径是放在path环境变量。
5、 关于a.c中每一行程序放在下次再谈吧。这次重点还是在流程,希望大家记住我们上学时候学到的东西:1、编辑 2、编译、3、运行
总之,通过本文,如果你记住了程序员要思考,要思考为啥要学?怎么学?学什么?学多长时间?学到什么程度?牢记编程流程:1、编辑 2、编译、3、运行 就算及格了。我对编程十分强调基础,强调原理,对编程要做到知其然,知其所以然。编程不要急,慢慢来,要克服自己自发的想当然的欲望,克服基于编程的那种冲动,多思考、多思考,这样你的编程基础才能打得牢,你今后的编程水平才能有很大的提高。
附:我在新浪微博开辟了名为“EOM与程序员之家”我的技术微博,记录着我每天在技术上点点滴滴,有想法、有编程,希望大家关注和交流。http://weibo.com/2311619842