系统程序员成长计划(CSDN专家全新力作)(china-pub首发)
基本信息
- 作者: 李先静 [作译者介绍]
- 丛书名: 图灵程序设计丛书 IT人文
- 出版社:人民邮电出版社
- ISBN:9787115224019
- 上架时间:2010-3-31
- 出版日期:2010 年4月
- 开本:16开
- 页码:272
- 版次:1-1
- 所属分类:
计算机 > 软件工程及软件方法学 > 综合
编辑推荐
结合代码详细讲解程序开发方法
汇集丰富的软件开发思想
CSDN专家全新力作
推荐阅读
内容简介回到顶部↑
在学习程序开发的过程中,你是否总是为自己遇到的一些问题头疼不已,你是否还在为写不出代码而心急如焚?作为软件开发人员,你是否时时为自己如何成为一名合格的程序员而困惑不已?没关系,本书将为你排忧解难。
这是一本介绍系统程序开发方法的书。书中结合内容详尽的代码细致讲述了不少底层程序开发基础知识,并在逐步深入的过程中介绍了一些简单实用的应用程序,最后还讲述了一些软件工程方面的内容,内容全面,语言生动,尤其适合初涉系统程序开发的人来读,有利于他们成长为更加专业的程序员。
虽然本书以“系统程序员”为名,但书中所蕴含的软件开发思想和方法也同样适用于其他的软件开发领域。各种软件开发人员、相关专业的在校学生以及软件开发爱好者也都不妨读读本书,来分享作者多年来在学习和实践中所总结的开发方法与所领悟的开发思想。
这是一本介绍系统程序开发方法的书。书中结合内容详尽的代码细致讲述了不少底层程序开发基础知识,并在逐步深入的过程中介绍了一些简单实用的应用程序,最后还讲述了一些软件工程方面的内容,内容全面,语言生动,尤其适合初涉系统程序开发的人来读,有利于他们成长为更加专业的程序员。
虽然本书以“系统程序员”为名,但书中所蕴含的软件开发思想和方法也同样适用于其他的软件开发领域。各种软件开发人员、相关专业的在校学生以及软件开发爱好者也都不妨读读本书,来分享作者多年来在学习和实践中所总结的开发方法与所领悟的开发思想。
作译者回到顶部↑
本书提供作译者介绍
CSDN开源专家,有着十年Linux开发经验、五年手机开发经验。擅长嵌入式程序员培训,软件架构设计和技术写作。近几年负责Broncho Linux智能手机项目,致力于基于Linux的嵌入式系统的学习和研究。其CSDN博客http://blog.csdn.net/absurd)连续三年被CSDN提名为最有价值的技术博客(MVB),他先后发表了近500篇技术类博文,博客文章被各大技术网站转载。在《程序员》杂志上发表过多篇文章。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第0 章 背景知识 1
0.1 基础知识 2
0.2 开发环境 3
第1 章 从双向链表学习设计 5
1.1 走近专业程序员 6
1.2 谁动了你的隐私 9
1.3 write once, run anywhere(wora) 12
1.4 拥抱变化 15
1.5 don’t repeat yourself(dry) 17
1.6 你的数据放在哪里 20
第2 章 写得又快又好的秘诀 27
2.1 好与快的关系 28
2.2 代码阅读法 31
2.3 避免常见错误 33
2.4 自动测试 42
2.5 save your work 47
第3 章 从动态数组学习设计 51
3.1 动态数组与双向链表 52
3.2 排序 55
3.3 有序数组的两个应用 61
0.1 基础知识 2
0.2 开发环境 3
第1 章 从双向链表学习设计 5
1.1 走近专业程序员 6
1.2 谁动了你的隐私 9
1.3 write once, run anywhere(wora) 12
1.4 拥抱变化 15
1.5 don’t repeat yourself(dry) 17
1.6 你的数据放在哪里 20
第2 章 写得又快又好的秘诀 27
2.1 好与快的关系 28
2.2 代码阅读法 31
2.3 避免常见错误 33
2.4 自动测试 42
2.5 save your work 47
第3 章 从动态数组学习设计 51
3.1 动态数组与双向链表 52
3.2 排序 55
3.3 有序数组的两个应用 61
序言回到顶部↑
写作背景
在经历过几个大型的、失败的项目之后,我终于认识到了:没有什么比高素质的程序员更能决定项目的成功。无论采用什么开发过程,什么编程语言和开发工具,离开了高素质的程序员,都是白费力气。毫无疑问,人是软件开发中最重要的因素。但并非每个人都重要,也不是什么样的人都重要,在软件开发中,只有那些高素质的程序员和那些对项目有突出贡献的人才是重要的。
不过高素质的程序员并不多见,所以从我开始带人起,就一直在思考团队成员培养的问题。我做过很多尝试,从小组内学习到整个部门一起上大课,最后又回到对个人做单独的辅导;从通过Code Review(代码评审)做现场教育到制定一个宏伟的培训计划,最后又回到一个朴素的培训过程。其中遇到了很多问题,开始是培训不够系统,效果不甚理想,后来又因为计划过于“宏伟”而无法实施,等到最后形成一个朴素的、切实可行的培训方案,已经经过了好几年时间,直到去年,整个计划才趋于完善。我把这个培训计划称为系统程序员成长计划,而这正是我在本书中所要介绍的。
培训内容不是来源于某本书,毕业八年来,我坚持不懈地阅读有关书籍,所读过的300多本不同类型的著作装满了家中的7个大储物箱,而这些著作囊括了大部分经典的IT图书。当然培训的内容也不是全部源于书本,这几年我在开发开源软件的过程中所收获的感悟和积累的经验也融入其中。我的培训计划并不是要阐述什么高深的道理,相反,我这本书主要是针对应届毕业生和业余爱好者写的,目的就是为了让初学者进阶为一个专业的程序员。
为什么把这个培训计划叫做“系统程序员成长计划”,而不是“程序员成长计划”呢?程序员的范围太广了,虽然软件开发有很多相似之处,但是隔行如隔山,比如对于目前炙手可热的Web开发,我完全是外行。为了不造成“想什么都讲一点,结果是什么都没有讲清楚”的尴尬,我得把培训计划限定在我熟悉的范围之内。而所谓系统程序员,是指从事操作系统内核、DBMS、GUI系统、基础函数库、应用程序框架、编译器和虚拟机等基础软件开发的程序员。不过虽说这个培训计划叫“系统程序员成长计划”,其实这些内容同样适用于桌面软件和智能手机软件开发,对其他软件开发也多少会有一些启发作用。
第一次在温伯格的《咨询的奥秘》 中看到草莓酱定律和果酱定律 时,我觉得非常有意思。当然《系统程序员成长计划》也无法脱离草莓酱定律的魔法,利用本书所讲的内容,我手把手地教了十多个同事,取得了良好的效果。但当有成百上千的读者读这些文章时,我不敢期望有同样的效果。不过在果酱定律的鼓励下,我相信本书中至少有部分内容的价值不会因为读者群的增大而消失,所以我最终决定写这本书,来分享我这些年来所积累下的经验。
中心思想
软件开发的困难在哪里?对于这个问题,不同的人有不同的答案,同一个人在不同职业阶段也会有不同的答案。作为一个系统程序员来说,我认为软件开发有两大难点。
一是控制软件的复杂度。软件的复杂度越来越高,而人类的智力基本保持不变,如何以有限的智力去控制无限膨胀的复杂度?在经历过几个大型项目,也分析过不少现有的开源软件后,我得出一个结论:单个难题和技术细节我们总是可以搞定的,而所有这些问题出现在一个项目中时,其呈指数增长的复杂度往往让我们束手无策。
二是隔离变化。用户需求在变化,应用环境在变化,新技术不断涌现,所有这些都要求软件开发能够射中移动的目标。即使是开发基础平台软件,在超过几年时间的开发周期之后,需求的变化也是相当惊人的。需求变化并不可怕,关键在于变化对系统的影响,有时这种变化会牵一发而动全身,一点小小的变化都可能对系统造成致命的影响。
为了解决这两个问题,方法学家们几十年来不断努力,他们改进或发明软件的开发过程和设计方法。系统程序员所面对的基础软件通常都是复杂的大型软件,其通用性也要求能容纳更多变化,解决这两个问题也是系统程序员成长计划的主要目标。
文章特色
以引导读者思考为主。培训可以制造合格的程序员,却无法造就一流的高手。因为培训是一个相对被动的过程,很难保证学习效果(我们都知道在大学里听课的效果),所以我不希望本书被视作一本单纯的培训教材,我们要做到变被动为主动,最大限度地提高学习的效果。大多数情况下,我会先提出问题让读者去思考,让读者尝试自行解决问题。能不能解决这个问题其实并不重要,重要的是在思考中提升自己。如果读者在一定时间内找不到解决问题的方法,本书也提供了专业程序员的参考解决方案(或许不是最优的)。
以简单的例子讲述复杂的设计方法。我曾经制定过一个宏伟的培训计划,但不幸的是这个计划并没有带来成功的结果,原因很简单:我忘记了我在学会走路之前也曾艰难地爬行过。这次我吸取了教训,用简单的示例来讲述复杂的设计方法,而且不要求读者掌握许多背景知识。书中不会出现复杂的数据结构和算法,也不会引入大型软件来唬人。既包含足够的挑战,不会让读者感到乏味;又一切尽在掌握之中,不会让读者因为挫折而打击积极性。
技术能力与工作态度并重。古人云:“德才兼备真君子。”同样,一流的程序员也应该是德才兼修的。当我手把手教别人的时候,我希望他不仅能学会我讲的知识点,更希望他能对我的工作态度和作为程序员的道德素养有所感悟。虽然有些东西只可意会不可言传,但我仍希望大家能成为德才兼备的程序员。
读者群
本书主要是针对初学者写的,这里所说的初学者,包括在校学生、应届毕业生和其他业余爱好者。拿我面试过的应届毕业生来说吧,他们大多数并不具备工作所需要的编程能力,只是对基本理论多少有一些了解。本书中的文章就是为需要提升编程能力的初学者们量身定制的。书中的内容经历了十余人的实践,取得过令人满意的效果:大多数参与过我的培训的人最开始可能连一行代码都写不出,但到了培训结束时,他们一般都能独立开发/维护一些有着几千行代码的小模块。不过学习效果还是要看个人的领悟能力和努力程度,但不管怎样,只要读完这些文章,你都能从中取得不少收获。
如何使用本书
温伯格说过,医生的药方包括需要服用的药物和服药的方法,两者缺一不可。同样的教材,如果使用不同的学习方法,最终效果也有很大差别。那么该如何学习本书中的文章呢?我建议大家先自己想办法去解决文中提出的问题,在思考的过程中可以自己查阅资料,至少经过两三个小时的思考之后,再继续阅读下去,最后再按学到的方法自己独立地将程序写一遍。要记住:学习编程一定要多写多练,否则效果会大打折扣。
Enjoy it!
在经历过几个大型的、失败的项目之后,我终于认识到了:没有什么比高素质的程序员更能决定项目的成功。无论采用什么开发过程,什么编程语言和开发工具,离开了高素质的程序员,都是白费力气。毫无疑问,人是软件开发中最重要的因素。但并非每个人都重要,也不是什么样的人都重要,在软件开发中,只有那些高素质的程序员和那些对项目有突出贡献的人才是重要的。
不过高素质的程序员并不多见,所以从我开始带人起,就一直在思考团队成员培养的问题。我做过很多尝试,从小组内学习到整个部门一起上大课,最后又回到对个人做单独的辅导;从通过Code Review(代码评审)做现场教育到制定一个宏伟的培训计划,最后又回到一个朴素的培训过程。其中遇到了很多问题,开始是培训不够系统,效果不甚理想,后来又因为计划过于“宏伟”而无法实施,等到最后形成一个朴素的、切实可行的培训方案,已经经过了好几年时间,直到去年,整个计划才趋于完善。我把这个培训计划称为系统程序员成长计划,而这正是我在本书中所要介绍的。
培训内容不是来源于某本书,毕业八年来,我坚持不懈地阅读有关书籍,所读过的300多本不同类型的著作装满了家中的7个大储物箱,而这些著作囊括了大部分经典的IT图书。当然培训的内容也不是全部源于书本,这几年我在开发开源软件的过程中所收获的感悟和积累的经验也融入其中。我的培训计划并不是要阐述什么高深的道理,相反,我这本书主要是针对应届毕业生和业余爱好者写的,目的就是为了让初学者进阶为一个专业的程序员。
为什么把这个培训计划叫做“系统程序员成长计划”,而不是“程序员成长计划”呢?程序员的范围太广了,虽然软件开发有很多相似之处,但是隔行如隔山,比如对于目前炙手可热的Web开发,我完全是外行。为了不造成“想什么都讲一点,结果是什么都没有讲清楚”的尴尬,我得把培训计划限定在我熟悉的范围之内。而所谓系统程序员,是指从事操作系统内核、DBMS、GUI系统、基础函数库、应用程序框架、编译器和虚拟机等基础软件开发的程序员。不过虽说这个培训计划叫“系统程序员成长计划”,其实这些内容同样适用于桌面软件和智能手机软件开发,对其他软件开发也多少会有一些启发作用。
第一次在温伯格的《咨询的奥秘》 中看到草莓酱定律和果酱定律 时,我觉得非常有意思。当然《系统程序员成长计划》也无法脱离草莓酱定律的魔法,利用本书所讲的内容,我手把手地教了十多个同事,取得了良好的效果。但当有成百上千的读者读这些文章时,我不敢期望有同样的效果。不过在果酱定律的鼓励下,我相信本书中至少有部分内容的价值不会因为读者群的增大而消失,所以我最终决定写这本书,来分享我这些年来所积累下的经验。
中心思想
软件开发的困难在哪里?对于这个问题,不同的人有不同的答案,同一个人在不同职业阶段也会有不同的答案。作为一个系统程序员来说,我认为软件开发有两大难点。
一是控制软件的复杂度。软件的复杂度越来越高,而人类的智力基本保持不变,如何以有限的智力去控制无限膨胀的复杂度?在经历过几个大型项目,也分析过不少现有的开源软件后,我得出一个结论:单个难题和技术细节我们总是可以搞定的,而所有这些问题出现在一个项目中时,其呈指数增长的复杂度往往让我们束手无策。
二是隔离变化。用户需求在变化,应用环境在变化,新技术不断涌现,所有这些都要求软件开发能够射中移动的目标。即使是开发基础平台软件,在超过几年时间的开发周期之后,需求的变化也是相当惊人的。需求变化并不可怕,关键在于变化对系统的影响,有时这种变化会牵一发而动全身,一点小小的变化都可能对系统造成致命的影响。
为了解决这两个问题,方法学家们几十年来不断努力,他们改进或发明软件的开发过程和设计方法。系统程序员所面对的基础软件通常都是复杂的大型软件,其通用性也要求能容纳更多变化,解决这两个问题也是系统程序员成长计划的主要目标。
文章特色
以引导读者思考为主。培训可以制造合格的程序员,却无法造就一流的高手。因为培训是一个相对被动的过程,很难保证学习效果(我们都知道在大学里听课的效果),所以我不希望本书被视作一本单纯的培训教材,我们要做到变被动为主动,最大限度地提高学习的效果。大多数情况下,我会先提出问题让读者去思考,让读者尝试自行解决问题。能不能解决这个问题其实并不重要,重要的是在思考中提升自己。如果读者在一定时间内找不到解决问题的方法,本书也提供了专业程序员的参考解决方案(或许不是最优的)。
以简单的例子讲述复杂的设计方法。我曾经制定过一个宏伟的培训计划,但不幸的是这个计划并没有带来成功的结果,原因很简单:我忘记了我在学会走路之前也曾艰难地爬行过。这次我吸取了教训,用简单的示例来讲述复杂的设计方法,而且不要求读者掌握许多背景知识。书中不会出现复杂的数据结构和算法,也不会引入大型软件来唬人。既包含足够的挑战,不会让读者感到乏味;又一切尽在掌握之中,不会让读者因为挫折而打击积极性。
技术能力与工作态度并重。古人云:“德才兼备真君子。”同样,一流的程序员也应该是德才兼修的。当我手把手教别人的时候,我希望他不仅能学会我讲的知识点,更希望他能对我的工作态度和作为程序员的道德素养有所感悟。虽然有些东西只可意会不可言传,但我仍希望大家能成为德才兼备的程序员。
读者群
本书主要是针对初学者写的,这里所说的初学者,包括在校学生、应届毕业生和其他业余爱好者。拿我面试过的应届毕业生来说吧,他们大多数并不具备工作所需要的编程能力,只是对基本理论多少有一些了解。本书中的文章就是为需要提升编程能力的初学者们量身定制的。书中的内容经历了十余人的实践,取得过令人满意的效果:大多数参与过我的培训的人最开始可能连一行代码都写不出,但到了培训结束时,他们一般都能独立开发/维护一些有着几千行代码的小模块。不过学习效果还是要看个人的领悟能力和努力程度,但不管怎样,只要读完这些文章,你都能从中取得不少收获。
如何使用本书
温伯格说过,医生的药方包括需要服用的药物和服药的方法,两者缺一不可。同样的教材,如果使用不同的学习方法,最终效果也有很大差别。那么该如何学习本书中的文章呢?我建议大家先自己想办法去解决文中提出的问题,在思考的过程中可以自己查阅资料,至少经过两三个小时的思考之后,再继续阅读下去,最后再按学到的方法自己独立地将程序写一遍。要记住:学习编程一定要多写多练,否则效果会大打折扣。
Enjoy it!


点击看大图






加载中...
