编程匠艺:编写卓越的代码

编程匠艺:编写卓越的代码
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: , ,
2011-11
版次: 1
ISBN: 9787121143472
定价: 85.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 613页
字数: 897千字
正文语种: 简体中文
原版书名: The Practice of Writing Excellent Code
57人买过
  • 如果你可以编写出合格的代码,但是想更进一步、创作出组织良好而且易于理解的代码,并希望成为一名真正的编程专家或提高现有的职业技能,那么本书都会为你给出答案。《编程匠艺:编写卓越的代码》的内容涵盖编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。《编程匠艺:编写卓越的代码》各章的末尾均提供一些思考问题,这些问题回顾了各章中的一些关键概念,可以促使你像专家一样思考,从而使本书成为那些渴望作为团队的一分子,职业并高效地编程的新手们的一本绝佳的参考书。 Pete Goodliffe是一位软件开发专家,他在软件“食物链”上从未驻足不前。他在各种各样的项目中使用过许多种语言。他还在教授和指导程序员方面有着丰富的经验,并且常年为ACCU的C Vu杂志(www.accu.org)撰写栏目“编程的职业化”。Pete痴迷于编写出色的、没有错误的代码,这使得他有更多的时间与自己的孩子共度好时光 第1篇代码表面第一部分
    第1章善于防守:健壮代码的防御性编程技巧
    1.1向优秀的代码前进
    1.2设想:最坏的选择
    1.3什么是防御性编程?
    1.4又大又坏的世界
    1.5防御性编程技巧
    1.5.1使用好的编码风格和合理的设计
    1.5.2不要仓促地编写代码
    1.5.3不要相信任何人
    1.5.4编码的目标是清晰,而不是简洁
    1.5.5不要让任何人做他们不该做的修补工作
    1.5.6编译时打开所有警告开关
    1.5.7使用静态分析工具
    1.5.8使用安全的数据结构
    1.5.9检查所有的返回值
    1.5.10审慎地处理内存(和其他宝贵的资源)
    1.5.11在声明位置初始化所有变量
    1.5.12尽可能推迟一些声明变量
    1.5.13使用标准语言工具
    1.5.14使用好的诊断信息日志工具
    1.5.15审慎地进行强制转换
    1.5.16细则
    1.6约束
    1.6.1约束的内容
    1.6.2移除约束
    1.7总结
    1.8另请参见
    1.9思考
    1.9.1深入思考
    1.9.2结合自己
    第2章精心布局:源代码的版面和样式
    2.1什么是关键
    2.2了解你的读者
    2.3什么是好的样式
    2.4使用括号
    2.4.1K&R括号风格
    2.4.2悬挂式的括号风格
    2.4.3缩进的括号风格
    2.4.4其他的括号风格
    2.5主宰一切的风格
    2.6内部风格(以及在哪里使用它们)
    2.7设立标准
    2.8正义的战争
    2.9总结
    2.10另请参见
    2.11思考
    2.11.1深入思考
    2.11.2结合自己
    第3章名正言顺:为有意义的事物起有意义的名称
    3.1为什么我们应该恰当地命名呢
    3.2我们对什么进行命名
    3.3名字游戏
    3.3.1描述性
    3.3.2技术上正确
    3.3.3符合语言习惯
    3.3.4恰当
    3.4具体细节
    3.4.1命名变量
    3.4.2命名函数
    3.4.3命名类型
    3.4.4命名名字空间
    3.4.5命名宏
    3.4.6命名文件
    3.5玫瑰不叫玫瑰
    3.5.1保持前后一致
    3.5.2利用上下文
    3.5.3使用对你有利的名称
    3.6总结
    3.7另请参见
    3.8思考
    3.8.1深入思考
    3.8.2结合自己
    第4章不言自明:编写“自文档化”代码的技巧
    4.1自文档化的代码
    4.2编写自文档化代码的技术
    4.2.1使用好的样式编写简单的代码
    4.2.2选择有意义的名称
    4.2.3分解为原子函数
    4.2.4选择描述性的类型
    4.2.5命名常量
    4.2.6强调重要的代码
    4.2.7分组相关信息
    4.2.8提供文件头
    4.2.9恰当地处理错误
    4.2.10编写有意义的注释
    4.3实用的自文档化方法
    4.3.1文学性编程
    4.3.2文档化工具
    4.4总结
    4.5另请参见
    4.6思考
    4.6.1深入思考
    4.6.2结合自己
    第5章随篇注释:如何编写代码注释
    5.1什么是代码注释
    5.2注释看上去是什么样的
    5.3多少注释是恰当的
    5.4注释中应该有些什么
    5.4.1解释为什么,而不是怎么样
    5.4.2不要描述代码
    5.4.3不要取代代码
    5.4.4确保注释有用
    5.4.5避免分心
    5.5实践
    5.6从审美的角度看注释
    5.6.1一致性
    5.6.2清晰的块注释
    5.6.3缩进的注释
    5.6.4行尾注释
    5.6.5帮助你阅读代码
    5.6.6选择一种维护成本较低的风格
    5.6.7分隔板
    5.6.8标志
    5.6.9文件头注释
    5.7使用注释
    5.7.1帮助你编写例行程序
    5.7.2错误修正通告
    5.7.3注释过时
    5.7.4维护和空洞无物的注释
    5.8总结
    5.9另请参见
    5.10思考
    5.10.1深入思考
    5.10.2结合自己
    第6章人非圣贤:处理不可避免的情况——代码中的错误情形
    6.1从何而来
    6.2错误报告机制
    6.2.1不报告
    6.2.2返回值
    6.2.3错误状态变量
    6.2.4异常
    6.2.5信号
    6.3检测错误
    6.4处理错误
    6.4.1何时处理错误
    6.4.2可能的反应
    6.4.3代码示例
    6.5使地狱浮现
    6.6管理错误
    6.7总结
    6.8另请参见
    6.9思考
    6.9.1深入思考
    6.9.2结合自己

    第2篇代码的神秘生命
    第7章欲善其事,先利其器:使用工具构建软件
    7.1什么是软件工具
    7.2为什么要在意工具
    7.3使工具发挥作用
    7.3.1了解它能做些什么
    7.3.2学习如何驾驭它
    7.3.3了解它适合什么任务
    7.3.4检查它是否可用
    7.3.5找到了解更多信息的途径
    7.3.6查明新版本何时出现
    7.4哪个工具
    7.4.1源代码编辑工具
    7.4.2代码构建工具
    7.4.3调试和调查工具
    7.4.4语言支持工具
    7.4.5其他工具
    7.5总结
    7.6另请参见
    7.7思考
    7.7.1深入思考
    7.7.2结合自己
    第8章测试时代:测试代码的魔术
    8.1反思现实
    8.2谁、是什么、何时以及为什么
    8.2.1我们为什么要测试
    8.2.2谁来进行测试
    8.2.3测试的内容有些什么
    8.2.4何时进行测试
    8.3测试并不难……
    8.4测试的类型
    8.5选择单元测试用例
    8.6为测试而设计
    8.7看!不要用手
    8.8面对故障该怎么办
    8.9你能管理它吗
    8.9.1缺陷跟踪系统
    8.9.2bug审查
    8.10总结
    8.11另请参见
    8.12思考
    8.12.1深入思考
    8.12.2结合自己
    第9章寻找缺陷(调试):当事情进展得不顺利时该怎么办
    9.1生活的真相
    9.2bug的种类
    9.2.1从远处看
    9.2.2从近处看
    9.2.3从更近处看
    9.3消灭害虫
    9.3.1地下之路
    9.3.2地上之路
    9.4搜寻bug
    9.4.1编译时错误
    9.4.2运行时错误
    9.5如何修正缺陷
    9.6预防
    9.7除蜂剂、驱虫剂、捕蝇纸
    9.7.1调试器
    9.7.2内存访问校验器
    9.7.3系统调用跟踪
    9.7.4内核转储
    9.7.5日志
    9.8总结
    9.9另请参见
    9.10思考
    9.10.1深入思考
    9.10.2结合自己
    第10章代码构建:将源代码转换为可执行代码的过程
    10.1语言障碍
    10.1.1解释型语言
    10.1.2编译型语言
    10.1.3字节编译型语言
    10.2小题大做
    10.3构建软件版本
    10.4怎样才算是一个优秀的构建系统
    10.4.1简洁
    10.4.2一致
    10.4.3可重复和可靠
    10.4.4原子性
    10.4.5能够应付错误
    10.5技术细节
    10.5.1目标的选择
    10.5.2内务处理
    10.5.3依赖关系
    10.5.4自动构建
    10.5.5构建配置
    10.5.6递归地使用make
    10.6请发布我吧
    10.7构建大师是全能的吗
    10.8总结
    10.9另请参见
    10.10思考
    10.10.1深入思考
    10.10.2结合自己
    第11章追求速度:优化程序和编写高效的代码
    11.1优化是什么
    11.2是什么使代码不尽如人意
    11.3为什么不进行优化呢
    11.4为什么要进行优化
    11.5优化的具体细节
    11.5.1证明你需要进行优化
    11.5.2找出运行得最慢的代码
    11.5.3测试代码
    11.5.4优化代码
    11.5.5优化之后
    11.6优化的技术
    11.6.1设计更改
    11.6.2代码更改
    11.7编写高效的代码
    11.8总结
    11.9另请参见
    11.10思考
    11.10.1深入思考
    11.10.2结合自己
    第12章不安全感综合征:编写安全的程序
    12.1危险
    12.2敌人
    12.3借口,都是借口
    12.4感到很脆弱
    12.4.1不安全的设计和体系结构
    12.4.2缓冲溢出
    12.4.3嵌入的查询字符串
    12.4.4竞争状况
    12.4.5整数溢出
    12.5防范措施
    12.5.1系统安装技术
    12.5.2软件设计技术
    12.5.3代码实现技术
    12.5.4规程技术
    12.6总结
    12.7另请参见
    12.8思考
    12.8.1深入思考
    12.8.2结合自己
    第3篇代码的形成过程
  • 内容简介:
    如果你可以编写出合格的代码,但是想更进一步、创作出组织良好而且易于理解的代码,并希望成为一名真正的编程专家或提高现有的职业技能,那么本书都会为你给出答案。《编程匠艺:编写卓越的代码》的内容涵盖编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。《编程匠艺:编写卓越的代码》各章的末尾均提供一些思考问题,这些问题回顾了各章中的一些关键概念,可以促使你像专家一样思考,从而使本书成为那些渴望作为团队的一分子,职业并高效地编程的新手们的一本绝佳的参考书。
  • 作者简介:
    Pete Goodliffe是一位软件开发专家,他在软件“食物链”上从未驻足不前。他在各种各样的项目中使用过许多种语言。他还在教授和指导程序员方面有着丰富的经验,并且常年为ACCU的C Vu杂志(www.accu.org)撰写栏目“编程的职业化”。Pete痴迷于编写出色的、没有错误的代码,这使得他有更多的时间与自己的孩子共度好时光
  • 目录:
    第1篇代码表面第一部分
    第1章善于防守:健壮代码的防御性编程技巧
    1.1向优秀的代码前进
    1.2设想:最坏的选择
    1.3什么是防御性编程?
    1.4又大又坏的世界
    1.5防御性编程技巧
    1.5.1使用好的编码风格和合理的设计
    1.5.2不要仓促地编写代码
    1.5.3不要相信任何人
    1.5.4编码的目标是清晰,而不是简洁
    1.5.5不要让任何人做他们不该做的修补工作
    1.5.6编译时打开所有警告开关
    1.5.7使用静态分析工具
    1.5.8使用安全的数据结构
    1.5.9检查所有的返回值
    1.5.10审慎地处理内存(和其他宝贵的资源)
    1.5.11在声明位置初始化所有变量
    1.5.12尽可能推迟一些声明变量
    1.5.13使用标准语言工具
    1.5.14使用好的诊断信息日志工具
    1.5.15审慎地进行强制转换
    1.5.16细则
    1.6约束
    1.6.1约束的内容
    1.6.2移除约束
    1.7总结
    1.8另请参见
    1.9思考
    1.9.1深入思考
    1.9.2结合自己
    第2章精心布局:源代码的版面和样式
    2.1什么是关键
    2.2了解你的读者
    2.3什么是好的样式
    2.4使用括号
    2.4.1K&R括号风格
    2.4.2悬挂式的括号风格
    2.4.3缩进的括号风格
    2.4.4其他的括号风格
    2.5主宰一切的风格
    2.6内部风格(以及在哪里使用它们)
    2.7设立标准
    2.8正义的战争
    2.9总结
    2.10另请参见
    2.11思考
    2.11.1深入思考
    2.11.2结合自己
    第3章名正言顺:为有意义的事物起有意义的名称
    3.1为什么我们应该恰当地命名呢
    3.2我们对什么进行命名
    3.3名字游戏
    3.3.1描述性
    3.3.2技术上正确
    3.3.3符合语言习惯
    3.3.4恰当
    3.4具体细节
    3.4.1命名变量
    3.4.2命名函数
    3.4.3命名类型
    3.4.4命名名字空间
    3.4.5命名宏
    3.4.6命名文件
    3.5玫瑰不叫玫瑰
    3.5.1保持前后一致
    3.5.2利用上下文
    3.5.3使用对你有利的名称
    3.6总结
    3.7另请参见
    3.8思考
    3.8.1深入思考
    3.8.2结合自己
    第4章不言自明:编写“自文档化”代码的技巧
    4.1自文档化的代码
    4.2编写自文档化代码的技术
    4.2.1使用好的样式编写简单的代码
    4.2.2选择有意义的名称
    4.2.3分解为原子函数
    4.2.4选择描述性的类型
    4.2.5命名常量
    4.2.6强调重要的代码
    4.2.7分组相关信息
    4.2.8提供文件头
    4.2.9恰当地处理错误
    4.2.10编写有意义的注释
    4.3实用的自文档化方法
    4.3.1文学性编程
    4.3.2文档化工具
    4.4总结
    4.5另请参见
    4.6思考
    4.6.1深入思考
    4.6.2结合自己
    第5章随篇注释:如何编写代码注释
    5.1什么是代码注释
    5.2注释看上去是什么样的
    5.3多少注释是恰当的
    5.4注释中应该有些什么
    5.4.1解释为什么,而不是怎么样
    5.4.2不要描述代码
    5.4.3不要取代代码
    5.4.4确保注释有用
    5.4.5避免分心
    5.5实践
    5.6从审美的角度看注释
    5.6.1一致性
    5.6.2清晰的块注释
    5.6.3缩进的注释
    5.6.4行尾注释
    5.6.5帮助你阅读代码
    5.6.6选择一种维护成本较低的风格
    5.6.7分隔板
    5.6.8标志
    5.6.9文件头注释
    5.7使用注释
    5.7.1帮助你编写例行程序
    5.7.2错误修正通告
    5.7.3注释过时
    5.7.4维护和空洞无物的注释
    5.8总结
    5.9另请参见
    5.10思考
    5.10.1深入思考
    5.10.2结合自己
    第6章人非圣贤:处理不可避免的情况——代码中的错误情形
    6.1从何而来
    6.2错误报告机制
    6.2.1不报告
    6.2.2返回值
    6.2.3错误状态变量
    6.2.4异常
    6.2.5信号
    6.3检测错误
    6.4处理错误
    6.4.1何时处理错误
    6.4.2可能的反应
    6.4.3代码示例
    6.5使地狱浮现
    6.6管理错误
    6.7总结
    6.8另请参见
    6.9思考
    6.9.1深入思考
    6.9.2结合自己

    第2篇代码的神秘生命
    第7章欲善其事,先利其器:使用工具构建软件
    7.1什么是软件工具
    7.2为什么要在意工具
    7.3使工具发挥作用
    7.3.1了解它能做些什么
    7.3.2学习如何驾驭它
    7.3.3了解它适合什么任务
    7.3.4检查它是否可用
    7.3.5找到了解更多信息的途径
    7.3.6查明新版本何时出现
    7.4哪个工具
    7.4.1源代码编辑工具
    7.4.2代码构建工具
    7.4.3调试和调查工具
    7.4.4语言支持工具
    7.4.5其他工具
    7.5总结
    7.6另请参见
    7.7思考
    7.7.1深入思考
    7.7.2结合自己
    第8章测试时代:测试代码的魔术
    8.1反思现实
    8.2谁、是什么、何时以及为什么
    8.2.1我们为什么要测试
    8.2.2谁来进行测试
    8.2.3测试的内容有些什么
    8.2.4何时进行测试
    8.3测试并不难……
    8.4测试的类型
    8.5选择单元测试用例
    8.6为测试而设计
    8.7看!不要用手
    8.8面对故障该怎么办
    8.9你能管理它吗
    8.9.1缺陷跟踪系统
    8.9.2bug审查
    8.10总结
    8.11另请参见
    8.12思考
    8.12.1深入思考
    8.12.2结合自己
    第9章寻找缺陷(调试):当事情进展得不顺利时该怎么办
    9.1生活的真相
    9.2bug的种类
    9.2.1从远处看
    9.2.2从近处看
    9.2.3从更近处看
    9.3消灭害虫
    9.3.1地下之路
    9.3.2地上之路
    9.4搜寻bug
    9.4.1编译时错误
    9.4.2运行时错误
    9.5如何修正缺陷
    9.6预防
    9.7除蜂剂、驱虫剂、捕蝇纸
    9.7.1调试器
    9.7.2内存访问校验器
    9.7.3系统调用跟踪
    9.7.4内核转储
    9.7.5日志
    9.8总结
    9.9另请参见
    9.10思考
    9.10.1深入思考
    9.10.2结合自己
    第10章代码构建:将源代码转换为可执行代码的过程
    10.1语言障碍
    10.1.1解释型语言
    10.1.2编译型语言
    10.1.3字节编译型语言
    10.2小题大做
    10.3构建软件版本
    10.4怎样才算是一个优秀的构建系统
    10.4.1简洁
    10.4.2一致
    10.4.3可重复和可靠
    10.4.4原子性
    10.4.5能够应付错误
    10.5技术细节
    10.5.1目标的选择
    10.5.2内务处理
    10.5.3依赖关系
    10.5.4自动构建
    10.5.5构建配置
    10.5.6递归地使用make
    10.6请发布我吧
    10.7构建大师是全能的吗
    10.8总结
    10.9另请参见
    10.10思考
    10.10.1深入思考
    10.10.2结合自己
    第11章追求速度:优化程序和编写高效的代码
    11.1优化是什么
    11.2是什么使代码不尽如人意
    11.3为什么不进行优化呢
    11.4为什么要进行优化
    11.5优化的具体细节
    11.5.1证明你需要进行优化
    11.5.2找出运行得最慢的代码
    11.5.3测试代码
    11.5.4优化代码
    11.5.5优化之后
    11.6优化的技术
    11.6.1设计更改
    11.6.2代码更改
    11.7编写高效的代码
    11.8总结
    11.9另请参见
    11.10思考
    11.10.1深入思考
    11.10.2结合自己
    第12章不安全感综合征:编写安全的程序
    12.1危险
    12.2敌人
    12.3借口,都是借口
    12.4感到很脆弱
    12.4.1不安全的设计和体系结构
    12.4.2缓冲溢出
    12.4.3嵌入的查询字符串
    12.4.4竞争状况
    12.4.5整数溢出
    12.5防范措施
    12.5.1系统安装技术
    12.5.2软件设计技术
    12.5.3代码实现技术
    12.5.4规程技术
    12.6总结
    12.7另请参见
    12.8思考
    12.8.1深入思考
    12.8.2结合自己
    第3篇代码的形成过程
查看详情
12
系列丛书 / 更多
编程匠艺:编写卓越的代码
程序员修炼之道:从小工到专家
[美]亨特(Andrew Hunt)、[美]托马斯(Daid Thomas) 著;马维达 译
编程匠艺:编写卓越的代码
Essential C++中文版
[美]Stanley B.Lippman 著;侯捷 译
编程匠艺:编写卓越的代码
More Effective C++(中文版):35个改善编程与设计的有效方法
[美]Scott Meyers 著;侯捷 译
编程匠艺:编写卓越的代码
Effective C++ 改善程序与设计的55个具体做法(第3版)
[美]梅耶(Scott Meyers) 著;侯捷 译
编程匠艺:编写卓越的代码
UNIX编程艺术
[美]Eric S.Raymond 著;姜宏、何源、蔡晓骏 译
编程匠艺:编写卓越的代码
传世经典书丛·Effective STL中文版:50条有效使用STL的经验(双色)
[美]Scott Meyers 著;潘爱民、陈铭、邹开红 译
编程匠艺:编写卓越的代码
More Exceptional C++(中文版)
[美]舒特(Sutter H.) 著;於春景 译
编程匠艺:编写卓越的代码
提高C++性能的编程技术
[美]布尔卡、梅休 著;左飞 译
编程匠艺:编写卓越的代码
程序员修炼之道:从小工到专家
安德鲁·亨特(Andrew Hunt)、大卫·托马斯(David Thomas) 著;周爱民 译
编程匠艺:编写卓越的代码
Java编程思想(第4版)(评注版)
[美]Bruce Eckel 著
编程匠艺:编写卓越的代码
重构:改善既有代码的设计
[美]Martin Fowler 著
编程匠艺:编写卓越的代码
Effective C++:改善程序与设计的55个具体做法
[美]Scott meyers 著;云飞 注
相关图书 / 更多
编程匠艺:编写卓越的代码
编程女孩
刘钰卓;[美]Reshma Saujani(拉什玛·萨贾尼
编程匠艺:编写卓越的代码
编程卓越之道(卷2):运用底层语言思想编写高级语言代码(第2版)
[美]Randall Hyde(兰德尔·海德)
编程匠艺:编写卓越的代码
编程小百科 为孩子介绍了计算机及编程的发展史,以及基本的编程原理,让孩子从根本上了解编程 拼音标注、有声伴读
介于童书 凤凰含章 出品
编程匠艺:编写卓越的代码
编程王国:给孩子的编程启蒙绘本(全9册)
卢高林
编程匠艺:编写卓越的代码
编程王国:给孩子的编程启蒙绘本3——用流程图规划生活
卢高林;王落
编程匠艺:编写卓越的代码
编程宇宙:量子计算机科学家解读宇宙
赛斯·劳埃德 著;张文卓 译
编程匠艺:编写卓越的代码
编程基础——C语言学习指导与实训
赵淑娟
编程匠艺:编写卓越的代码
编程启蒙:从Python走进编程世界
李晋 著;清泉静读 出品
编程匠艺:编写卓越的代码
编程卓越之道(卷1):深入理解计算机(第2版)
[美]Randall Hyde(兰德尔海德)
编程匠艺:编写卓越的代码
编程逻辑及C语言实现
周春容;肖祥林;史宏宇
编程匠艺:编写卓越的代码
编程基础——Python语言
常祖国
编程匠艺:编写卓越的代码
编程江湖——Python篇(青少年版)
王爱胜
您可能感兴趣 / 更多
编程匠艺:编写卓越的代码
感觉的界限(分析哲学名著译丛)
Peter Frederick Strawson
编程匠艺:编写卓越的代码
刑事正义与税收(财税法译丛)
Peter Alldridge
编程匠艺:编写卓越的代码
肌肉骨骼超声诊断与介入治疗:实用指南
Peter Resteghini 编著
编程匠艺:编写卓越的代码
CIHA Journal of Art History (Volume 1, 2021): Terms of Engagement(国际艺术史学会学刊(第一卷,2021))
Peter J.Schneemann(彼得·施内曼)^
编程匠艺:编写卓越的代码
持续不懈的创新:艺术、文化与创意产业的发展(荔园文创译丛)
Peter Campbell
编程匠艺:编写卓越的代码
巴士底狱:一个国家监狱的秘密
Petitfils 著;闫素伟 译;[法]让-克里斯蒂安·珀蒂菲斯(Jean-Christian
编程匠艺:编写卓越的代码
英语语音学与音系学实用教程(第四版)(当代国外语言学与应用语言学文库升级版)
Peter Roach
编程匠艺:编写卓越的代码
有源感知系统波形设计算法/一种计算方法
Peter 著;Hao、He、Jian、Li、唐波、王海、师俊朋、黄中瑞、李志汇 译
编程匠艺:编写卓越的代码
古典分析导引(影印版)
Peter Duren
编程匠艺:编写卓越的代码
胸外科麻醉原理与实践(第2版)
Peter Slinger 编;吴镜湘、邱郁薇、朱宏伟 译
编程匠艺:编写卓越的代码
面部骨折治疗精要(原著第2版)
Peter Banks 著;[英]Michael Perry、Andrew Brown、田磊 译
编程匠艺:编写卓越的代码
物理化学(第11版)
Peter Atkins;Julio d