系统程序员成长计划-背景知识
转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>
对于是否写这样一章,我犹豫了很久,最后考虑到这个系列是针对新手而写的,不应该对读者做过多假设,这些基础知识是必须掌握的,不能不介绍一下。如果你已经了解它们,可以放心的跳过本章。如果你是新手,请认真学习本章提到的内容。
基础知识
C语言。千万不要认为C语言过时了,它始终是开源社区,特别是系统软件和嵌入式系统中的王者,在可以预见的未来,C语言将持续焕 发出生命力。有些外行认为C语言不适合开发大型软件,这是大错特错了,操作系统内核,虚拟机,数据库管理系统,图形引擎和WEB服务器等大型软件几乎都是 用C语言开发的。相反C语言不适合开发小程序,这时候脚本语言更能显出威力。C语言能经久不衰,自有它的道理:
C语言是最简单的语言之一,大部分编程语言在出现时都以其简单而获得好评,几乎全部都随着时间的推移变得越来越复杂,C语言经过数十年的发展,却始 终保持其简洁和优美。初学者认为C语言难学,其实主要是对计算机本身不理解,花点时间去学习一下计算机组成原理和操作系统原理,再来学习C语言就很简单 了。一旦掌握了它,你会发现C语言的每项特性都是必须,常用的,根本不需要记忆任何不必要的东西,它的特性真是减无可减了。
C语言是运行时效率最高的编程语言之一。同样的算法,C语言通常比其它语言更高效,这也它作为系统软件主流编程语言的原因之一。有些动态语言号称比较C语言更快,那都是骗人的,拿一个特定算法作为例子不足为证。选择是高效的算法是根本,但C语言更能把高效发挥到极致。
C语言是最直观的语言之一。C语言能够直观的表达程序员的想法,不像其它一些语言,一行简单的代码,你不清楚里面到底做了什么,不清楚它将花多少时 间执行。C语言的直观性很好的满足了程序员好奇心,使用C语言你更能感觉编程是一种艺术。一切尽在掌握之中,更能满足你的成就感。
在系统程序员炼成计划中,前面部分都是使用C语言作为示例,读者应该找本C语言入门书籍看看,可以先通读一遍,不求甚解都可以,随着后面的课程而深入的学习。
数据结构与算法。不管使用什么设计方法和开发过程,数据结构与算法都是软件开发的基石。打好基础在以后的工作中会事半功倍。后继 课程也都是这些基本数据结构和算法为中心,讲述如何用这些基本的材料构建大型系统。读者暂时无需精通数据结构和算法,先找本书看看,了解一下像双向链表、 动态数组、队列、堆、栈、hash表、排序和查找的基本原理就行了,后面我们会以这些数据结构题材反复的练习。
开发环境
本系列文章重点讲解软件开发的基础知识,这些知识不依赖于特定的平台和开发环境,读者可以根据自己喜好来选择,我们推荐读者使用下列开发环境:
操作系统使Linux。Linux是最适合程序员使用的操作系统,它是开源的,有多种不同的发行版可以免费使用,这些发行版默认安装就带了开发工具。学习Linux本身就需要一本书,如果你从来没接触过Linux,也不用惊慌,花几个小时学会十来个常用的命令就够了,其它的以后慢慢再学。
编辑器使用VIM。编辑器的功能是创建源文件,也就是把我们编写的代码输入到电脑中。vim和emacs是Linux下最流行的 代码编辑器,vim入门更简单,功能也很强大。它支持查找剪切替换等基本编辑功能,也支持符号跳转和代码补全等高级编辑特性。vimtutor是最好的入 门教材,初学者跟着这个tutor学习一遍就可以用它来编程了,等用得比较熟练之后,再去掌握那些高级功能。你掌握得越熟练,你就能更高效的工作,这个投 资是值得的。
编译器使用gcc。编译器的功能是把源代码翻译成计算机可以“读懂”的机器语言。在Linux下可用的C编译器有好几个,gcc 是其中最流行的,大多数发行版都默认安装了gcc。gcc的参数很多,看起来很复杂,我们只掌握最简单的用法就好了,大概像这样的:gcc -g test.c -o test。
调试器使用gdb。调试器的功能是帮助程序员定位错误,这是最后一招,也是最不期望的一招,使用调试器越多通常说明你的水平越 差,不过对初学者来说,掌握这个工具必不要可少的。gdb的功能强大,推荐读者使用命令行的gdb,它更灵活更方便。读者先掌握如何设置断点、显示变量和 继续执行等基本操作就行了。
工程管理使用make。make是Linux下最流行的工程管理工具,Makefile是make的输入文件,它本身就相当于一
种编程语言,执行make相当于调用其中的函数。编写Makefile是一件繁琐无趣的工作,幸好我们不用学习它,后面我们会讲解make的改进版
automake,现在你能写出下面这种简单的Makefile就行了:
all:
gcc -g test.c -o test
clean:
rm -f test
在这里,你可以把all看作一个函数名,gcc -g test.c -o test是函数体(前面加tab),它的功能是编译test.c成test,在命令行运行make all就相当于调用这个函数。clean是另外一个函数,它的功能是删除test。如果你有时间学习一下Makefile当然更好,如果没有时间,了解这 么多也够了。
我在培训初学者时,如果他从来没用过Linux,没有用C语言写过程序,我会给两到四周时间学习上述内容。如果读者处于类似的水平,也不急着看后面的课程,好好学习一下这里提到的内容。