`
阿尔萨斯
  • 浏览: 4206285 次
社区版块
存档分类
最新评论

系统程序员成长计划-背景知识

 
阅读更多

对于是否写这样一章,我犹豫了很久,最后考虑到这个系列是针对新手而写的,不应该对读者做过多假设,这些基础知识是必须掌握的,不能不介绍一下。如果你已经了解它们,可以放心的跳过本章。如果你是新手,请认真学习本章提到的内容。

基础知识

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语言写过程序,我会给两到四周时间学习上述内容。如果读者处于类似的水平,也不急着看后面的课程,好好学习一下这里提到的内容。

分享到:
评论

相关推荐

    程序员如何搞副业.docx

    程序员作为现代社会中的关键角色,他们所掌握的编程知识与技能不仅是自己职业发展的重要工具,也是可以分享、传播并帮助他人学习和成长的宝贵资源。在这样的背景下,程序员通过开设在线编程课程或提供一对一辅导,...

    skill-map:程序员技能图谱

    运营等领域学习技能图谱,帮助程序员梳理知识框架结构,并尝试提供路径指导和精华资源,方便技术人学习成长。 除非特别声明,本开源项目所有领域技能图谱内容均只代表其参与贡献的技术人员个人立场,与此相关的公司...

    SQL Server 2008之基础教程

    无论你是否拥有数据库知识,是否了解桌面数据库(如Microsoft Access),甚至是否具有服务器(如Oracle)的背景,本书都能为你提供SQL Server 2008入门和运行的知识。从现在开始,本书将使你的基础知识得以扩展,让...

    SQL_Server2008基础教程

    无论你是否拥有数据库知识,是否了解桌面数据库(如Microsoft Access),甚至是否具有服务器(如Oracle)的背景,本书都能为你提供SQL Server 2008入门和运行的知识。  从现在开始,本书将使你的基础知识得以扩展,...

    phper 这是由开源社区门户PHPChina与网上一些PHP技术爱好者共同制作的电子刊物

    然而,PHP技术人员的成长数量还不能满足市场的需求,尤其在中国,与其它计算机开发语言背景不一样的是,PHP语言的教学没有纳入到普通的高校课程中,大多数PHP程序员均依靠自学获取必要的知识和经验,所以,十分希望...

    Web程序设计(第7版)

    ◄ 本书介绍近年来新涌现出来的并已经成熟和得到广泛应用的工具和技术,有利于为学生将来从事Web开发打下坚实基础,同时也为初学人员快速成长为Web程序员提供了一条捷径。 ◄ 面向大学生安排内容,充分考虑了他们的...

    scalextric:第一性原则的音乐结构。 像Scala一样适合程序员

    作为一个具有多元文化背景的人,我发现这种偏见非常有限不仅对我自己的音乐成长,而且对世界音乐文化的自由传播都起到了积极的作用,在不断寻求新颖性和利润的同时,也为西方音乐产业提供了无限的传播(在这里我非常...

    windows程序设计第五版 chm 版本

    《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。 作为Windows开发人员的必备参考,涵盖基础知识和中高级主题,全面地介绍了...

    PortfolioWebsite:我们的任务是从头开始创建投资组合网站

    他们还可以看到程序员可能拥有什么样的背景,这可能会使他们更加胜任该职位或项目。 对于程序员来说,拥有一个投资组合既可以向雇主展示他们可以做什么,又可以让他们时刻了解自己的成长以及如何继续改进和学习,是...

    亮剑.NET深入体验与实战精要2

    4.12.4 设置窗口背景为渐变色 195 4.12.5 模态窗口和非模态窗口 196 4.12.6 屏蔽窗口右上角的关闭 操作 196 4.12.7 调用执行外部的程序 197 本章常见技术面试题 197 常见面试技巧之经典问题巧回答 198 本章小结 198 ...

    亮剑.NET深入体验与实战精要3

    4.12.4 设置窗口背景为渐变色 195 4.12.5 模态窗口和非模态窗口 196 4.12.6 屏蔽窗口右上角的关闭 操作 196 4.12.7 调用执行外部的程序 197 本章常见技术面试题 197 常见面试技巧之经典问题巧回答 198 本章小结 198 ...

Global site tag (gtag.js) - Google Analytics