出版时间:2010年9月6日 出版社:科学出版社 作者:黄凯波 页数:456
Tag标签:无
前言
早就答应给这本书写篇序,但~直忙于别的事情,写序的事就被拖下来。凯波很淡定,也不催我。时间一长,我倒不好意思了,见到凯波就绕开走。终于,凯波的耐心赢了。五年前我回国,进入了软件外包行业,因此跟凯波成为了同事。我还记得第一次同凯波开会,他跟我谈了很多工程中的事。那时越来越多的微软工程被放到中国来做.每一个工程都需要有经验的软件工程师。虽然国内每年有大量的软件专业的毕业生,但马上就能上手的并不多,即使是那些有几年编程经验的也未必能胜任微软的工作。凯波在如何培训新员工、如何组织项目团队、提高工作效率等方面有很多建议。他是个肯动脑子、很有想法的人。我有时在想,凯波思想活跃应该跟他酷爱摄影有关。摄影能教会人去观察、比较、总结。更不要说,在野外摄影时随时会遇到困难,要能随机应变、迅速解决问题,才能坚持到最后。十几年前我也编写了一本介绍C语言的书,在美国出版,我深知写作的艰辛。有时作者一不留神。由着自己的性子,信马由缰,那边读者就不高兴了。记得最初我高估了老美的数学基础,书中用了很多国内中学就学到的数学知识,结果被编辑打回,告知要重写。凯波比我要幸运多了,他的读者群在数学方面的功底一定比较强。更重要的是.凯波通过模拟的工程,不但把C#和.NET Framework的基本概念介绍给读者,而且把实际工作中的流程以及团队的协作在书中做了一番演示,以便大家在实际的工作中能很快上手,很快出成绩。
内容概要
本书通过一个模拟的实例,逐步介绍解决问题的思路、方法和良好的习惯,帮助刚入行的人员拿起手边简单的武器解决所遇到的问题。同时采用比较的方法介绍.NET Framework 4.0(C#4.0)的一些重要知识点。 本书分为主辅两大部分:第一部分为主线,讲述一个足够“大”(同时也是足够“小”)的模拟工程;第二部分为辅线,介绍C#以及.NET Framework的基础和特性,采用结合实际工程的方式来引入这些重要的知识点,说明为什么用它们以及怎么使用,并且阐述这些技术的限制,以帮助读者形成自己的技术判断能力,这些知识也是公司比较喜欢的面试题。两个部分相互索引,相辅相成,让读者了解实际工作中可能遇到的问题和所需的知识点,也可以反过来学习这些技术在实际工作中是如何选择和应用的。 最重要的是,本书将作者工作时的心得体会穿插在章节之中。书中所有的关键技术术语也会在括号中给出对应的英文单词,以方便读者阅读及搜索外文资料。 本书针对因工作等需要使用C#(.NET Framework)来完成软件项目的人群,可供C#编程人员参考,也可作为大中专院校使用C#进行编程课程的教材。
书籍目录
PART 01 工程实战Chpater 01 工程开始(Project Kickoff) 1.1 —个工作上的小问题 1.2 问题的快速分析 1.3 关键技术调研 1.3.1 查找已存在的方案 1.3.2 动手写第一个程序(第一个原型) 1.3.3 进一步研究的成果(第二个原型) 1.3.4 代码整理 1.4 本章总结Chpater 02 需求分析和工程计划 2.1 头脑风暴法(Brainstorming) 2.2 把功能归类 2.3 关键路径法(Critical Path Method) 2.4 本章总结Chpater 03 粮草先行 3.1 命名规范(Naming Notations) 3.2 编码约定(Codjng Conventions) 3.3 版本控制(Revision Control) 3.4 本章总结Chpater 04 快速原型 4.4 计划变更及分析 4.2 实现搜索局域网内机器的功能 4.3 单元测试与调试基础 4.3.1 使用MbUnit 4.3.2 使用NUnit 4.3.3 组合参数测试 4.4 功能整合 4.4.1 设计简单的用户界面 4.4.2 整合搜寻局域网内机器的功能 4.4.3 整合发消息功能 4.5 本章总结Chapter 05 重构之上:多线程 5.1 .NET Framework的多线程编程 5.2 使用子线程来搜索IP地址 5.3 依据CPU个数创建多线程 5.4 使用线程池(Thread P001) 5.5 使用异步编程模型(APM) 5.6 使用并行扩展(Parallel Extensions) 5.7 优化算法 5.8 本章总结Chapter 06 重构之下:设计 6.1 程序设计简述 6.2 Object-oriented思想 6.2.1 封装(Encapsulation) 6.2.2 继承(Inheritance) 6.2.3 多态(Polymorphism) 6.3 O-O设计的原则 6.3.1 Open-closed Principle(OCP) 6.3.2 Liskov Substitution Principle(LSP) 6.3.3 Dependency Inversion Principle(DIP) 6.3.4 Interface Segregation Principle(ISP) 6.3.5 Single-Responsibility Principle(SRP) 6.3.6 Composition/Aggregation Principle(CARP) 6.3.7 Law of Demeter(LoD) 6.3.8 Inversion of Control(IoC) 6.4 设计模式基础 6.4.1 Designing from Context(依据应用设计) 6.4.2 动机A.(工厂方法模式) 6.4.3 动机B.(抽象工厂模式) 6.4.4 动机C.(生成器) 6.4.5 动机D.(单件) 6.4.6 动机E.(反射对单件的扩展) 6.4.7 动机F.(配置对工厂的扩展) 6.4.8 动机G.(IDisposable) 6.4.9 动机H.(泛型扩展) 6.5 本章总结Chapter 07 .NET的诊断(Diagnostics) 7.1 简要介绍 7.2 Debugger类 7.3 Debug类 7.4 Trace类 7.5 定制化诊断信息 7.5.1 TraceSource类 7.5.2 配置监听器(TraceListeners) 7.6 用Trace还是TraceSource 7.7 设计更灵活的监听机制 7.7.1 OutputDebugString的运行机制 7.7.2 程序实现 7.8 本章总结PART 02 .NET Framework基础Chapter 08 C#语言基础 8.1 字符串操作(String Operation) 8.1.1 String 8.1.2 StringBuilder 8.1.3 字符串操作的效率 8.1.4 正则表达式(Regular Expression) 8.2 C#的数据类型 8.2.1 值类型(Value Type) 8.2.2 引用类型(Reference Type) 8.2.3 类型的赋值与参数传递 8.2.4 装箱、拆箱(Boxing/Unboxing) 8.2.5 可为空类型(Nullable Types) 8.2.6 匿名类型(Anonymous Types) 8.3 自定义类型 8.3.1 命名空间(namespace) 8.3.2 结构(struct) 8.3.3 接口(interface) 8.3.4 类(class) 8.3.5 枚举(enum) 8.3.6 自定义扩展方法 8.4 集合(CoIIections) 8.4.1 System.Array 8.4.2 System.Collections 8.4.3 System.Collections.Generic 8.4.4 容器使用的算法 8.4.5 多核线程中的集合 8.5 文件I/O与流 8.5.1 文件及目录操作 8.5.2 文件读写 8.5.3 异步文件读写 8.5.4 MemoryMappedFiles 8.5.5 文件压缩 8.5.6 Environment 8.6 预处理器指令 8.6.1 分隔代码段落 8.6.2 条件编译指令 8.6.3 开/关编译信息 8.6.4 Conditional与#if/#end比较Chapter 09 .NET Framework的特性 9.1 C#板的支持 9.1.1 模板类型和模板方法 9.1.2 模板的优势 9.1.3 C#模板的约束 9.1.4 C#模板的类型转换 9.2 平台调用服务 9.2.1 调用非托管的DLL函数 9.2.2 托管与非托管的数据类型映射 9.2.3 映射非托管的结构(struct) 9.2.4 MarshalAs辅助类 9.2.5 PIatform lnvoke的错误处理 9.2.6 (U)IntPtr和SafeHandIe 9.2.7 CER(执行区域) 9.2.8 小结 9.3 Object的生命周期 9.3.1 垃圾回收器(Garbage Collector) 9.3.2 构造器(Constructor) 9.3.3 析构器(Destructor) 9.3.4 影响和控制GC 9.3.5 GC的性能 9.3.6 优化Object的使用 9.4 应用程序域 9.4.1 创建应用程序域 9.4.2 创建沙箱(SandBox)程序域 9.5 特性(Attribute) 9.5.1 特性的简化符号 9.5.2 定制自己的特性 9.6 反射(RefIection) 9.6.1 加载托管程序集 9.6.2 实例化Object和访问类成员(私有,优化) 9.6.3 Reflection.Emit 9.6.4 序列化 9.7 委托和事件 9.7.1 委托(deIegate)的使用 9.7.2 匿名方法(Arlonymous Method)和Lambda表达式 9.7.3 事件的使用 9.7.4 委托的协变与反变 9.8 XML 9.8.1 XML DOM 9.8.2 用XPath查询 9.8.3 使用LlNQ to XML 9.8.4 XML序列化(XML SerializatiorI) 9.9 动态语言支持(DLR) 9.9.1 用dynamic代替var 9.9.2 dynamic的原理 9.9.3 自定义dynamlc的派发过程 9.10 WinForm与WPF的消息 9.10.1 WinForm的消息机制 9.10.2 WPF的“消息机制”参考资源 参考书目(排名不分先后) 网络资源
章节摘录
插图:本章介绍笔者在实践过程中最朴素实用的计划制定的原则和一些方法的细节。当读者进入一个公司并到特定的小组开始工作就会发现,每个公司甚至小组所采用的具体细节都会有差别。小的差别可能是术语的称谓,大的会涉及到范畴。有的可能不会把技术纳入工程计划考虑的范畴。也许是因为技术架构已经很完善而无须考虑,这是件好事。比较糟糕的情况是工程经理不太懂技术,他汉法预测,工程中的高级技术人员(做了门,年技术,自以为厉害的)也无法预估时间,或者懒得预估时间,又或者怕估错时间到时候被责难。一旦工程延期,大家都会拿所有武器“自卫”。这也是为什么笔者强调时间预估不是承诺。作为刚加入公司的新血液。我们是无法改变这些现状。这套方法可以用来评估自己的工作量。看自己的任务是否合理:自己是否能在限期之内完成任务:看自己是不是在关键路径上:看整个团队是不是有潜在的风险等。可以对计划提供一些有益的建议,最糟糕的情况也能做到心中有数,早做准备。
编辑推荐
《NET实践之旅:C#篇》介绍一个刚刚入行的职场新人如何拿起手边简单的武器解决所遇到的问题,度过第一年的“黑暗”时光。同时采用比较的方法介绍.NET Framework 4.0(C#4.0)的一些重要知识。《NET实践之旅:C#篇》介绍每个关键环节中一些非常简单、实用的技巧,对问题的分析以及最终解决的思路针对新手的特点,采用实例的方式,结合实际项目来引入.NET Framework重要的知识点,说明为什么用它们,怎么使用,并且阐述这些技术的限制,以帮助读者形成自己的技术判断能力。全球外包100强企业文思创新资深副总裁张涛帮你应对最新开发平台的挑战VisualStudio2010+C#4.0足够“大”又足够“小”的实例完整开发流程,进行思维训练结合必备知识与解决问题的方法《NET实践之旅:C#篇》帮助你解决的问题。作为团队的新丁,我该做什么,不该做什么?遇到一个解决不了的技术问题,该怎么办?技术发展得太快,我该怎么学习?我最怕被问及什么时候能完成某个任务!我最烦做计划!编写原则:学习应该从某个工具的缺陷开始,称为“边际学习法”The Law of Leaky Abstract|ons(抽象缺失定律,由Joel Spolsky于2002年提出)软件开发周期的关键环节|关键技术调研|计划制定|架构设计|需求变更|重构|软件测试|错误诊断。
图书封面
图书标签Tags
无
评论、评分、阅读与下载