Sunday, October 26th, 2008 | Author: admin

转载时请注明出处和作者联系方式
文章出处: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语言写过程序,我会给两到四周时间学习上述内容。如果读者处于类似的水平,也不急着看后面的课程,好好学习一下这里提到的内容。

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

10 Responses

  1. 专业需要,这学期开始学习汇编,学到现在,有种感觉c语言确实简单

  2. 2
    Joey.Huang 
    Monday, 27. October 2008

    来必顶

    VIM确实很好用,听到一句话,用一周的时间来熟悉它,然后用一辈子来享受它。如楼主前面的文章所讲的,加上CTAGS后,就成了非常强大的编程工具了。不过和WINDOWS下常用的SOURCE INSIGHT相比,还有以下不怎么习惯,或者说做得没有SOURCE INSIGHT好:
    1)查找引用。比如一个函数,我要找一下这个函数哪几个地方被引用了。在SOURCE INSIGHT里,只需要在那个函数的地方按CTRL+/,然后回车即可。但在VIM里要用vimgrep敲太多东西。
    2)打开文件。比如,要打开某个文件,在SOURCE INSIGHT下只需要按CTRL+O,然后输入文件名包含的几个字母,它会自动搜索,可在VIM里,我现在会用的,就是e .,打开目录,然后一级一级找到需要的文件。当然,LINUX下借助TAB的强大补齐功能,还是不错的。不过总体而言,效率上还是略低于SOURCE INSIGHT。

  3. 完蛋了,ctags还不会用

  4. 对于查找函数引用:
    可以使用cscope,:help csope和:cs help
    对于查找文件:
    可以使用lookupfile.vim这个插件

  5. 5
    Joey.Huang 
    Tuesday, 28. October 2008

    to vincent: 多谢分享。找时间试试。

  6. 谢谢大家补充。

  7. 调试ARM的AXD环境可以用gdb代替吗?如果用linux环境下开发的话。
    为了用这些开发软件我不得不用windows开发啊。。。

  8. to coldfire: 原理上可行的,gdb好像有个jtag扩展,没有用过。

  9. to vincent: 谢谢兄弟补充。

  10. 10
    Joey.Huang 
    Tuesday, 4. November 2008

    to vincent: 试了一下cscope及lookupfile,确实很爽。特别是lookupfile。这种东西用来看代码确实不错,可是如果是用来写代码,由于代码时时编辑,就得经常去手动Update一下tags和cscope.out文件。而且感觉有BUG,Update后有时找到的标签不对。

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

订阅 substack 体验古早写作:


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::