戒傲戒惰

2013年8月30日

高效程序的45个习惯---第七章 敏捷调试

摘要: 33 记录问题解决日志维护一个问题及其解决方案的日志。保留解决方案是修复问题过程的一部分,以后发生相同或类似问题时,就可以很快找到并使用了。解决方案日志应该作为思考的一个来源,可以在基中发现某些特定问题的细节。对某些类似但是有差异的问题,也能从中获得修复的指引。平衡的艺术1 记录问题的时间不能超过在解决问题上花费的时间。要保持轻量级和简单,不必达到对外发布式的质量。2 找到以前的解决方法非常关键。使用足够的关键字,可以帮助你在需要的时候发现需要的条目。3 如果通过搜索Web,发现没有曾经遇到同样的问题,也许搜索的方式有问题。4 要记录发生问题时应用程序,应用框架或平台的特定版本。同样的问题在不 阅读全文

posted @ 2013-08-30 17:56 戒傲戒惰 阅读(169) 评论(0) 推荐(0)
高效程序的45个习惯---第六章 敏捷编码

摘要: 25 代码要清晰地表达意图软件设计有两种方式,一种方式是设计得尽量简单,并且明显没有缺陷。另一种方式设计得尽量复杂,并且明显没有缺陷。开发代码时,应该更注重可读性,而不是只图自己方便。代码阅读的次数要远远超过编写的次数,所以在编写的时候值得花点功能让它读起来更加简单。实际上,从衡量标准上来看,代码清晰程序的优先级应该排在执行效率之前。在改动代码以修复bug或者添加新功能时,应该有条不紊地进行。首先,应该理解代码做了什么,它是如何做的。接下来,搞清楚将要改变哪些部分,然后着手修改并进行测试。作为第1步的理解代码,往往是最难的。如果别人给你的代码是很容易理解,接下来的工作就省心多了。明天地告诉阅读 阅读全文

posted @ 2013-08-30 17:55 戒傲戒惰 阅读(166) 评论(0) 推荐(0)
高效程序的45个习惯---第五章 敏捷反馈

摘要: 19 守护天使单元测试。用代码来测试变量的具体值。已经是非常的普遍的做法。你可以选择一个标准的测试框架,来帮忙你完成简单的编写和组织测试的工作,如Java的JUint, C# 或者.Net的NUit等。只要有了单元测试,就要让它们自动运行。也就是每次编译或者构建代码的时候,就运行一次。把单元测试的结果看作是和编译器一样,如果测试没有通过(或者没有测试),那就像编译没有通过一样糟糕。单元测试是最受欢迎者的一种敏捷实践,有很多图书和其他资料可以帮你起步。如果你是新手,建议阅读《单元测试之道》。如果想要自动化地连接单元测试,可以阅读《项目自动化之道》。如果仍然在寻找开始单元测试的理由,下面有很多:1 阅读全文

posted @ 2013-08-30 17:31 戒傲戒惰 阅读(147) 评论(0) 推荐(0)
高效程序的45个习惯---第四章 交互用户想要的软件

摘要: 为了让软件符合用户的需求,要一直做下面的准备工作。为了降低集成新代码带来的破坏性变化,你要提早集成,频繁集成。当然,你不想破坏已有的代码,想让代码一直保持可以发布。10 让客户做决定开发者(及项目经理)能做的一个最重要的决定就是:判断哪些是自己决定不了的,应该让企业主做决定。你不需要自己给业务上的关键问题做决定。平衡的艺术第3章 记录客户做出的决定,并注明原因。好记性不如烂笔头。可以使用工程师的工作日记或日志、Wiki、邮件记录或者问题跟踪数据库。但是也要注意,你选择的记录方法不能太笨重或者太繁琐。第4章 不要用低级别和没有价值的问题打扰繁忙的业务人员。如果问题对他们的业务没有影响,就应该是没 阅读全文

posted @ 2013-08-30 17:30 戒傲戒惰 阅读(171) 评论(0) 推荐(0)
高效程序的45个习惯---第三章 学无止境

摘要: 5 跟踪变化平衡的技术只要你在某些方面成为专家,就能使用同样的方法,很容易地成为新领域的专家。避免在一时冲动的情况下,只是因为想学习而将应用切换到新的技术,框架或者开发语言。在做决策之前,你必须评估新技术的优势。开发一个小的原型系统,是对付技术狂热者的一剂良药。6 对团投资午餐会议□ 读书小组逐章一起阅读一本书,会非常有用,但是要选好书。《7天用设计模式和UML精通…》也许不会是一本好书。□ 不是所有的讲座都能引人入胜,有些甚至显得很不合时宜。不管怎么样,都要未雨绸缪;诺亚在建造方舟的时候,可并没有开始下雨,谁能料到后来洪水泛滥呢?□ 尽量让讲座走入团队中。如果午餐会议在礼堂中进行,有餐饮公司 阅读全文

posted @ 2013-08-30 17:29 戒傲戒惰 阅读(160) 评论(0) 推荐(0)
高效程序的45个习惯---第二章 心态决定一切

摘要: 1 做事出了问题,第一要点,应该是解决问题。清晰的表达你的目的是解决问题,而不是追究责任,这样会消除他的顾虑。指责是会修复bug.平衡的艺术1 ”这不是我的错”这句话不对,“这就是你的错”,这句话更不对2 如果你没有犯过任何错误,就说明你可能没有努力去工作。3 如果一个团队成员的行为一再伤害屯团队,则他的表现得很不职业,那么他不是在帮助团队,这种情况下必须要求他离开 这个团队,但不一定解雇他。2 欲事则不达优秀的程序员会挖掘更深一层,尽力去理解为什么这里必须要加1,更重要的是,他会想明白产生什么样的影响。通过几年的积累,代码中会成千上万的+1或-1修正,在这样的代码中添加新的功能或者修复bug 阅读全文

posted @ 2013-08-30 17:28 戒傲戒惰 阅读(177) 评论(0) 推荐(0)
高效程序的45个习惯--- 第一章 敏捷--高效软件的开发之道

摘要: 敏捷开发的宣言:一种把以人为本,团队合作、快速响应和可工作的软件作为宗旨的开发方法。它要求团队中的每一个人具备职业精神,并积极的期望项目上能够获得成功的,这并要求所有人都是有经验的专业人员,但必须具有专业的工作态度——每个人都希望尽最大可能做好自己的工作。越早越发现问题,就越早容易修复。敏捷开发就是在一个高度协作的环境中,不断地使用反馈进行自我调整和完善。敏捷团队往往是一个小型团队。在功能有不变的情况下,重新设计部分代码,改善代码的质量,这就是所谓的重构。这是软件开发中不可或缺的一部分,编码永远没有真正意义上的“结束”。要以迭代的方式进行,一般为一周左右的时间进行。 阅读全文

posted @ 2013-08-30 17:27 戒傲戒惰 阅读(136) 评论(0) 推荐(0)
windows核心编程---第九章 同步设备IO与异步设备IO之同步IO

摘要: 同步设备IO所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行。异步IO是指:线程发起IO请求后并不会挂起而是继续执行。IO完毕后会得到设备的通知。而IO完成端口就是实现这种通知的很好的一种方式。线程是我们开发高性能、响应性好的一个必不可少的工具。这样在多处理器上就可以同时执行多个操作,从而提高吞吐量。当线程发出一个同步设备IO请求的时候,它会被临时挂起,直到设备完成IO请求为止。但线程阻塞会损害性能,这里有个问题是我们如何让线程不被挂起。让线程始终进行有用的工作就需要它们相互通信,鼎力配合。Windows经过数年的研究和测试,开发出了一种被称为IO完成端口的机制的技术。它可以帮 阅读全文

posted @ 2013-08-30 17:20 戒傲戒惰 阅读(230) 评论(0) 推荐(0)
windows核心编程---第八章 使用内核对象进行线程同步

摘要: 使用内核对象进行线程同步。前面我们介绍了用户模式下线程同步的几种方式。在用户模式下进行线程同步的最大好处就是速度非常快。因此当需要使用线程同步时用户模式下的线程同步是首选。但是用户模式下的线程同步也存在缺点。如InterLocked系列函数只能对一个值进行操作。关键段虽然可以对一段代码进行操作,但是只能对同一个进程内的线程进行同步。为了解决上述问题,我们将会讨论使用内核对象进行线程同步。与用户模式下的速度快相比较,使用内核对象进行线程同步性能很低。原因就是:在创建或清除内核对象时调用线程必须从用户态切换到内核模式。这种切换非常耗时。除此之外还会造成刷新高速缓存以及未命中。这将耗费更多的cpu时 阅读全文

posted @ 2013-08-30 17:19 戒傲戒惰 阅读(209) 评论(0) 推荐(0)
windows核心编程---第七章 用户模式下的线程同步

摘要: 用户模式下的线程同步 系统中的线程必须访问系统资源,如堆、串口、文件、窗口以及其他资源。如果一个线程独占了对某个资源的访问,其他线程就无法完成工作。我们也必须限制线程在任何时刻都能访问任何资源。比如在一个线程读内存时要限制其他线程对此块内存进行写入。 线程之间的通信很重要,尤其是在以下两种情况下: 1:需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性。 2:一个线程需要通知其他线程某项任务已经完成。 线程同步包括许多方面,windows提供了许多基础设施使线程同步变得容易。 用户模式下的线程同步:方法一,原子访问 线程同步... 阅读全文

posted @ 2013-08-30 17:17 戒傲戒惰 阅读(219) 评论(0) 推荐(0)
windows核心编程---第六章 线程的调度

摘要: 每个线程都有一个CONTEXT结构,保存在线程内核对象中。大约每隔20mswindows就会查看所有当前存在的线程内核对象。并在可调度的线程内核对象中选择一个,将其保存在CONTEXT结构的值载入cpu寄存器。这被称为上下文切换。大约又过20mswindows将当前cpu寄存器存回内核对象,线程被挂起。Windows再次检查内核对象,并在可调度的内核对象中选择一个进行调度。此过程不断重复直到系统关闭。Windows被称为抢占式多线程系统,系统可以在任何时刻停止一个线程而另行调度另外一个线程。我们对此可以有一些控制,但是权限很小。我们无法保证线程总在运行或者获得整个处理器。由于windows并. 阅读全文

posted @ 2013-08-30 15:30 戒傲戒惰 阅读(269) 评论(0) 推荐(0)
windows核心编程---第五章 线程的基础

摘要: 与前面介绍的进程一样,线程也有两部分组成。一个是线程内核对象。它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息。另一个是线程栈,用于维护线程执行时所需的所有函数参数和局部变量。位于同一个进程的线程共享进程的地址空间且它们共享进程句柄表。因为句柄表是针对进程的。进程需要很多的系统资源,而线程仅仅需要一个线程内核对象和线程栈就可以了,因此线程比进程的开销要小得多。采用多线程来处理问题也是理所当然的了。采用多线程可以提高程序的执行效率,但是多线程也存在很多问题。在尝试使用多线程时如果处理不当还可能会引入新的问题。如同步问题。每个线程都需要一个入口点函数。这是线程执行的起点.. 阅读全文

posted @ 2013-08-30 15:25 戒傲戒惰 阅读(168) 评论(0) 推荐(0)
windows核心编程---第四章 进程

摘要: 上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了。首先要给大家介绍的是进程内核对象。进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构。操作系统内核通过它管理进程,也就是操作系统原理上介绍的进程控制块(PCB)。举个例子,它就相当于每个学生都有的学籍,学校管理我们都是通过学籍,什么记过了,处分了,开除学籍了,都是在学籍上做文章。进程一般被定义为一个正在运行的程序的一个实例,它由两部分组成:1:内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。2:一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。Windows支 阅读全文

posted @ 2013-08-30 15:24 戒傲戒惰 阅读(218) 评论(0) 推荐(0)
windows核心编程---第三章 内核对象及句柄本质

摘要: 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性。首先让我们来了解一下什么是内核对象。内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的。内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问。调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象。它可以由进程的任何线程使用。在32位系统中,句柄是一个32位值。64位系统中则是64位值。很多人对句柄到. 阅读全文

posted @ 2013-08-30 15:23 戒傲戒惰 阅读(230) 评论(0) 推荐(0)
windows核心编程---第二章 字符和字符串处理

摘要: 使用vc编程时项目--》属性--》常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集。一般情况下说Unicode都是指UTF-16。也就是说每个字符编码为两个字节。65535个字符可以表示世界上大部分的语言。为了软件使国际化大家再编程时应该使用unicode字符集。由于原来学过c语言,不习惯使用Unicode,为了省事而直接在配置属性里调为多字节字符集,这是个不好的习惯。C语言的字符串,以及对这些字符串操作的函数都是不安全的。很容易导致缓冲区溢出错误,有时这会导致很严重的后果。所以极力建议大家要使用Unicode字符串,对它们进行的操作要使用接.. 阅读全文

posted @ 2013-08-30 15:18 戒傲戒惰 阅读(208) 评论(0) 推荐(0)
windows核心编程---第一章 谈谈windows中的错误处理机制

摘要: 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错。Bool类型标识true时为真,false时为假。其他类型根据需要可以定义成不同意义。 Windows除了使用返回值标识函数执行情况,外还引入了错误代码机制。返回值指出函数已发生一个错误。要查看具体是什么错误,就应该使用错误代码。如当我们调用函数打开一个文件,如果打开失败,可能出现多种原因。一是:文件不存在,另一种是该文件被其他程序互斥使用。在这两种情况下都导致文件打开失败,返回值仅仅标识打开失败,但我们不知道原因。这时错误代码就派上用场了。 Windows将错误代码存储于独立于线程的,线程局部存储区中... 阅读全文

posted @ 2013-08-30 15:17 戒傲戒惰 阅读(165) 评论(0) 推荐(0)