-- 作者:tonyxiaohome
-- 发布时间:12/16/2009 10:12:00 PM
-- 《0 bug ---- C/C++商用工程之道》介绍
《0 bug ---- C/C++商用工程之道》介绍 各位朋友,我是肖舸,在西安高新区软件园工作,我的新作《0 bug ---- C/C++商用工程之道》已经由电子工业出版社出版,目前全国各大书店,当当,china-pub等网点有售,欢迎大家选购。 本书主要针对C/C++语言在商用工程开发中的程序实战进行论述,从需求出发,从商用解决方案的角度来理解C和C++语言的程序设计技巧。首先讨论商用开发的原则,然后是基础知识、基本技巧,接着是无错化方法,最后提升到世界观层面论述并行开发的正确理念。商用程序员在实际工作中最为关注的无错化、并行、时间片、内存池、线程池、任务池、工程库和跨平台等相关问题,在本书中都有宝贵的经验总结和理念梳理。本书不是教科书,更多的是在开发技巧、测试调试、工程代码库等方面给出实例与总结。本书可以帮助你摆脱“Training”式编程与开发思维与方法,培养“商用”和“产品”标准的工程开发方法。 本书适合作为C和C++的程序员进行“商用化开发”和“工程化开发”的参考。 适合读者群: ×如果你是一名初次进入职场的软件专业学生,本书可以助你迅速掌握企业商业化开发的思路和技巧。 ×如果你是一名C和C++的学习者和爱好者,本书可以助你掌握很多实际的技巧,并获得一个现成可用的工程库。 ×如果你是一名商业公司的程序员,已经掌握了很多商用开发的思维和技巧,本书能给你一点新的、意想不到的提示。 ×如果你是一名网络游戏公司的开发人员,本书的多任务工程库可能会对你很有帮助。 ×如果你是一名商用服务器的开发人员,本书可以助你掌握如何利用C和C++实现7×24小时稳定性的服务器的技巧。 ×如果你是一名嵌入式开发人员,本书中严格的代码规范和数据边界意识,对嵌入式之类资源较少且有长期运行要求的设备开发很有帮助。 ×如果你是一名使用其他语言的程序员,本书中很多基本模块的实现,如内存池、线程池等,对Java等程序员理解自己平台的相同模块,很有帮助,并且,本书提出的商用开发思想,是跨语言跨平台的,也很有参考价值。 ×如果你是一名产品经理、项目经理或者架构师,本书中提出的很多商用系统工程的设计理念,是作者多年开发的经验结晶,对于系统的设计、商用项目的风险管控,有很好的参考作用。 简介: 目前,在IT职场上,甚至在整个社会上,普遍存在一种现象,就是刚刚毕业的大学生,不好找工作。究其原因,我们很多人在大学中,虽然学到了很好知识,但是缺乏运用知识的技能,无法满足企业用人的要求,导致就业困难,很多人因此甚至“回炉重造”,以参加各种培训班来弥补这种经验上的缺失,以期尽快找到工作,获得社会的认可。这究竟是广大学生的学习能力出了问题,还是大学的教育出了问题呢? 另外,很多年轻的朋友即使顺利进入到企业中,也会由于经验的缺失,无法快速融入企业商业化开发的氛围,尽管大多数年轻的程序员已经很努力地在学习和工作,但做出来的产品就是无法满足市场的需求,这令他们很苦恼,用他们的企业也很苦恼,这究竟又是怎么一回事呢? 还有个问题,程序员作为一种创造性极强的社会职业,已经获得了大家的认可,但是,大家也几乎公认,程序员是一门非常辛苦的工作。在商业公司中,由于市场竞争的压力,程序员经常面临的环境是任务紧,压力大,加班成为家常便饭,同时,新技术层出不穷,程序员在完成本职工作的前提下,还要不断努力学习,稍有懈怠,即有因知识老化被淘汰的危险。虽然我们说,市场化的竞争社会,各行各业都压力,但是无疑,程序员这个职业是压力较大的一种。那么,我们程序员究竟有没有办法,通过自己的一点努力,让自己的生活变得轻松一点,压力小一点,更多一点时间来陪伴家人,共享天伦之乐呢? 笔者从事IT程序开发几十年,被人招聘,也招聘过人,有压力,也有心得,看过很多书籍,也做过一些工程项目,很多时候,笔者和朋友们也都面临上述的问题。不过,经过这么多年的思考,笔者发现,上述问题其实并非无解,简单说来,无非是一个年轻人,从学校出来,需要迅速扭转学生思维,做工程不搞科研,做项目不做学问,以务实的态度,迅速进入商用软件开发领域,并在成本和质量意识的基础上,不断对自己的技能精益求精,高质量地完成各种商用软件工程项目,最终也使自己成为企业合用的人才。 但是很遗憾,笔者看了很多计算机软件编程方面的教科书,这些书虽然都讲解了很好的知识,但是,也许是笔者孤陋寡闻,几乎没有一本书,是站在商用软件开发,站在企业、市场化的角度,来论述软件开发的原则和道理,同时,很多教科书上,讲解了很多正确的开发知识,但对于如何开发正确的程序,如何杜绝程序中的bug,如何开发出高安全度,高可用性的商用软件,论述甚少,尤其在近年来32位多任务操作系统大行其道时,如何以一种简便、安全的方式,开发出合用的并行商用工程,更是很少有书籍涉及。这几乎已经成为IT软件全行业的一块“短板”。简单说来,目前的软件开发书籍,正确的多,实用的少,对于商业企业中的职业化开发,缺乏指导资料。 笔者有鉴于此,决定写这本书,一方面,笔者希望把自己这么多年的开发经验做个总结,并share给各位读者,另一方面,笔者也希望从另外一个角度,从纯粹商业化的,务实的角度,论述一点商用工程开发的道理,希望能帮助更多的朋友,能迅速掌握商用开发的基本原则,迅速掌握企业开发的基本原则,最终,成为企业合用的人才。 本书不仅仅是一本技术类书籍,虽然本书给出了很多诸如内存池、线程池、任务池、锁、队列、debug和日志系统等常见商用软件开发的范例,也给大家展示了一个可用度较高的工程库,但笔者认为这并不是本书的重点,贯穿本书始终的以需求为主导的系统分析方法,实用主义的开发态度,以及务实的程序实践理念,才是本书的精华所在,因此,笔者请各位读者在阅读本书时,不要就技术谈技术,尽量多思考技术之外的东西,这样的话,各位读者的收获可能更多。 前言 1.1 为什么要写本书? 在本书定名的时候,笔者做了很多思考。本书究竟想说什么?关注的重点在哪里。看起来,本书所讲述的知识、经验和技巧,在很多书上都有讲,那么,我们的差别在哪里呢? 笔者看过无数的年轻学子,兴高采烈地从学校出来,走向职场,但是,通常立即会遇到两个问题: 1、他们虽然在学校中学到了很好的知识,但是到了企业中,却没有办法投入实用,甚至找不到工作。是他们学习的书不对?还是他们的老师没有教对?很多人陷入迷茫之中。 2、另外一方面,即使一个学子,顺利进入了企业,成为一名程序员,但无穷无尽的加班,和做不完的项目任务,使生活充满了压力,也充满了苦闷。即使能赚取高薪,但生活毫无乐趣可言。这又是为什么呢? 笔者在IT研发领域工作了十几年,在这里有一点心得。 首先,笔者认为,学生即使学会了基本的程序开发技能,但是,还不能算作一个标准的商用程序员,其工作习惯,做事的思路和方法,特别是在具体程序工作中,所秉持的设计思想,系统性思维,与企业需求相差甚远,这导致了就业上的困难,因此需要学习和调整。 其次,笔者认为程序员生活压力大,很多时候并不是任务量的压力,做过一些程序设计工作的朋友大概都有印象,“程序好写,bug难追”。真正导致我们大量加班的,往往不是程序的设计和书写过程,更多的,是debug。而企业中开发商用程序,由于对bug有着几乎0的容忍度,这导致了商用程序员压力很大。 笔者一直在企业中做事,自己也深有体会,笔者曾经在2000年左右自己做过一个统计,发现工作中bug的查找,占据了自己大约60%~80%左右的工作量。当时笔者就思考,如果能有一种方法,使程序一写出来就没有bug,那该是多么美妙的一件事情。 由于笔者一直从事C和C++语言方面的开发工作,于是笔者就着这个熟悉的领域,开始了一点探索和研究工作,期间也参考了很多大师写的书籍。慢慢地,笔者自己形成了一套程序书写原则和方式,笔者将其定名为“C/C++无错化程序设计方法”。经过实际工程试用这套方法,发现效果不错,很多程序项目出来之后bug很少,也得到了一些好评。 但是,随之笔者发现了另外一个问题,商用工程,是为客户需求服务的,一段程序,如果不能满足客户需求,即使写得再正确也毫无意义。同时,一个系统的设计,如果脱离了需求分析,即使采用再精妙的算法,再优秀的设计,也是毫无意义的。 这使得笔者不得不思考一个更深层次的问题,商用软件工程,其实已经不仅仅涵盖程序设计的领域,仅仅就程序谈程序,其实并无异议。一个商用程序员,不仅仅要是程序设计的专家,也必须是商务沟通的专家,客户需求理解的专家。这大大扩展了“程序员”这个职业的内涵和外延。 笔者发现目前有很多关于程序设计的书籍,也有很多职业训练方面的书籍,但是,却从来没有人(也许是笔者孤陋寡闻),以程序开发的角度,讲述一个程序员,进入企业后,应该学习的商业开发思维和设计思想。 因此,笔者希望能根据自己的经验,写一本书来,帮助大家快速掌握一些工程化的开发技巧,并和自己过去所学相结合,快速成长为一个企业合用的人才。 1.2 本书包括哪些内容 本书的内容,主要针对C/C++语言在商用工程开发中的程序实战进行论述。 本书无意重复无数书籍都已经写过的一些C和C++语言的基础知识,而是试图从另外一个角度,从需求出发,以商用解决方案的角度,去理解C和C++语言的程序设计技巧。 因此,本书更多的,以一种实用主义的态度,从需求出发去挑选需要的技术,并针对需求做出相应的优化,最终形成合用的商用解决方案。 本书可以说是一本教科书,因为里面有大量的经验和技巧,更有笔者多年积累的解决方案思路,但本书也可以说不是教科书。如果出于一种系统全面地学习知识的角度来看本书,可能会有一点点失望,因为本书的知识已经打乱,完全在为需求服务。 本书还是一本C和C++语言的开发类书籍,里面讲述了大量开发的技巧,比如如何实现无错化的程序设计,使程序在写出来的时候,就已经具有较高的鲁棒性,接近0bug的地步。 本书还是一本兼顾了调试、debug、测试的书籍,本书讲述了大型工程开发中,一些基本的白盒测试技巧,也讲述了工程实战中,性能测试的重要性和方法,本书可以作为一些大型商用工程的测试参考。 本书也是一本实践类书籍,本书内附大量的工程代码,其中就包括笔者历经差不多10年时间总结出来的一套工程库,这套代码库已经在多个商用工程中获得实践,稳定可靠,并取得了可观的经济效益。所有本书附有的源代码,均执行BSD License,即大家可以免费使用,开源或者闭源发布产品,唯一的要求是,请大家保留笔者的原作者信息。 由于笔者近年来主要从事数据传输,分布式数据库以及服务器集群方面的研发工作,本书中很多举出的具体实例,与这类应用开发有关,但笔者认为,这并不重要。贯穿于本书始终的商用化开发思维,以需求为导向的开发思路,实用主义的开发态度,才是最重要的。 笔者希望通过本书,给大家传递一个信息,商用开发和学校内的程序设计,根本就是两个概念,大家可能使用同一种工具,同一个平台,但是,好比一个修理自行车的个体户老板,和汽车4S店的维护工人比较,二者有着本质的度的差别。提供的服务品质是完全不一样的。 从这个意义上说,不仅仅是C和C++的程序员,其他领域的程序员,建议也可以看看本书,进而从自己的专业领域出发,理解一下商用工程开发的魅力所在。 1.3 商用工程开发和软件编程的区别 首先,我们要讨论一下何谓商用。 在学校中,大家是学生,第一任务是学习更多的先进知识,因此,求知是第一要务,对于一个问题,要求不厌其烦,精益求精,知其然,还要知其所以然。 而在企业中,大家是公司的一份子,要不断为企业赚取利润,同时赚取自己的薪水,因此,对于工作,一方面要能做到,另一方面还要以尽可能低的成本实现,才能赚取更多的利润。这其实已经说明了二者最大的差异性:“严格的成本意识和质量意识”,在商用程序员眼中,没有程序,只有产品。 既然是产品,就要严格地控制产品的质量,将bug率降到接近0的地步,还要严格地控制成本,商用程序员深刻理解自己工作的价值,能用一天完成的工作,绝对不用两天,万事从需求出发,满足需求即可,既不会不求甚解,也不会过犹不及,商用程序员善于把握平衡。 商用程序员,工作的目的是为产品质量负责,更是为产品的市场表现负责,但最终目的,还是为公司赚取的利润负责。因此,贯穿于商用程序员思维的核心,应该是最大限度地满足客户需求,创造企业价值,至于具体使用什么技术,技术是否很高深,是否很能显示自己的水平,其实商用程序员并不关心。 就笔者个人理解,这也是目前很多企业倡导的:“研发工作,市场为主导,不要搞科研”,的真实含义。 体现在实际的工作中,传统的程序员,往往以自我为中心,评判产品正确与否的标准,是自己的程序是否有bug,会不会挂死,只要自己的程序ok,就视为自己已经完成任务了。 而拥有商用程序开发思维的程序员,会更加关心工程项目的中心思想,核心的客户需求,随时随地判断自己所做的工作,对整个项目的实现是否起到正面的作用,一切的优化方向,是否贴合需求所需要的业务数据类型以及使用方向。 商用程序员不会仅仅关心自己的程序是否ok,而更加关心,整体系统的品质、性能,能否满足客户需求,同时,自己的开发工作,消耗了公司多少人力和时间成本,在同等品质的条件下,有没有更快、更廉价的解决方案,等等。 最终,商用数据传输程序员的这些思考,将直接导致工程项目能否为公司赚取到利润。说句俗一点的话:一般程序员,关心技术,商用程序员,关心成本,关心利润,关心“钱”。 1.4 商用程序员的核心思想 软件编程是一个技术性很强的工作,同时,软件开发发展这么多年,产业结构也逐渐细分,一个人的精力,不太可能面面俱到,精通所有的技术。 一个传统思维的程序员,更多的是站在技术的角度上思考问题,遇到问题,首先想到的是利用自己熟悉的技术,来实现方案。 而一个商用程序员,更多的是站在一个客观的立场,理智地分析客户需求实现方案,需要用到哪些技术,或者说哪些技术更加合适,成本更低。 同时,商用程序员也不迷信最新的技术,最前沿的技术,事实上,很多时候,商用程序员偏保守,因为他知道尊重商用工程最为核心的需求:稳定! 举个例子,一个普通的Windows程序员,在接到一个C/S类型的工程项目后,往往会首先思考如何利用Windows搭建服务器和客户端,迅速实现。一个普通的Linux程序员,可能也是如此,仅仅是操作系统换成Linux而已。 而实际中,大家都知道,客户端开发,大多数是Windows平台,因为这个操作系统市场占有率最高,而服务器平台,最好是使用Linux,因为不花钱,可以有效降低公司的运营成本。 一个商用程序员,不管自己精通的是Windows开发,还是Linux开发,首先就会针对上述市场上的具体情况做出分析,提出合适的解决方案。 另外,即使这个商用程序员,是C或者C++的高手,但在Server端的方案设计时,除了特殊的一些保证效率的需求,大多数需求会建议放到Apache上,利用PHP或者JavaScript之类的脚本语言完成。因为众所周知,C和C++语言是底层语言,其开发和测试成本,远高于PHP之类的脚本语言。 ======================================================= 样章试读:http://book.51cto.com/art/200912/168496.htm 如果大家希望网购我的新书《0 bug ---- C/C++商用工程之道》,建议去当当和china-pub购买 ,据朋友们反应,这两家网店信誉度好,发货快捷,而且打折很多,比较实惠。 当当:http://product.dangdang.com/product.aspx?product_id=20738772 china-pub:http://www.china-pub.com/196191 如果大家看了,觉得我的书好,有帮助,麻烦去这两家写点书评,我需要大家的鼓励,也希望这本书能帮助更多的人。 如果大家看了,觉得不好,是垃圾,我也为大家准备了一个出气发飙的地方,就在我的读者俱乐部: http://student.csdn.net/space.php?do=room&ac=detail&roomid=27 大家有什么不满,请尽管发泄,我会一直改这本书,改到大家满意为止。 作者:肖舸
|