传世经典书丛:UNIX编程艺术

传世经典书丛:UNIX编程艺术 pdf epub mobi txt 电子书 下载 2025

[美] Eric S.Raymond 著,姜宏,何源,蔡晓骏 译
图书标签:
  • UNIX
  • 编程
  • 技术
  • 经典
  • 计算机
  • 书籍
  • 传世经典
  • 开发
  • 系统编程
  • Linux
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121176654
版次:1
商品编码:11075445
品牌:Broadview
包装:平装
丛书名: 传世经典书丛
开本:16开
出版时间:2012-08-01
用纸:胶版纸
页数:530
字数:650000
正文语种:中文

具体描述

编辑推荐

  

《传世经典书丛:UNIX编程艺术》内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。

内容简介

  《传世经典书丛:UNIX编程艺术》主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S.Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为本书贡献了宝贵的内容。本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。

作者简介

  Eric S.Raymond,从1982年开始就是UNIX开发者。作为开源社区文化的倡导和呼吁者,他在《大教堂与市集》中写下了这场运动的宣言,同时他还是《新黑客词典》的编辑。

目录


Part I
第1章 哲学
1.1 文化?什么文化
1.2 Unix的生命力
1.3 反对学习Unix文化的理由
1.4 Unix之失
1.5 Unix之得
1.5.1 开源软件
1.5.2 跨平台可移植性和开放标准
1.5.3 Internet和万维网
1.5.4 开源社区
1.5.5 从头到脚的灵活性
1.5.6 Unix Hack之趣
1.5.7 Unix的经验别处也可适用
1.6 Unix哲学基础
1.6.1 模块原则:使用简洁的接口拼合简单的部件
1.6.2 清晰原则:清晰胜于机巧
1.6.3 组合原则:设计时考虑拼接组合
1.6.4 分离原则:策略同机制分离,接口同引擎分离
1.6.5 简洁原则:设计要简洁,复杂度能低则低

1.6.6 吝啬原则:除非确无它法,不要编写庞大的程序
1.6.7 透明性原则:设计要可见,以便审查和调试
1.6.8 健壮原则:健壮源于透明与简洁
1.6.9 表示原则:把知识叠入数据以求逻辑质朴而健壮
1.6.10 通俗原则:接口设计避免标新立异
1.6.11 缄默原则:如果一个程序没什么好说的,就保持沉默
1.6.12 补救原则:出现异常时,马上退出并给出足量错误信息
1.6.13 经济原则:宁花机器一分,不花程序员一秒
1.6.14 生成原则:避免手工hack,尽量编写程序去生成程序
1.6.15 优化原则:雕琢前先得有原型,跑之前先学会走
1.6.16 多样原则:决不相信所谓“不二法门”的断言
1.6.17 扩展原则:设计着眼未来,未来总比预想快
1.7 Unix哲学之一言以蔽之
1.8 应用Unix哲学
1.9 态度也要紧

第2章 历史——双流记
2.1 Unix的起源及历史,1969-1995
2.1.1 创世纪:1969-1971
2.1.2 出埃及记:1971-1980
2.1.3 TCP/IP 和Unix内战:1980-1990
2.1.4 反击帝国:1991-1995
2.2 黑客的起源和历史:1961-1995
2.2.1 游戏在校园的林间:1961-1980
2.2.2 互联网大融合与自由软件运动:1981-1991
2.2.3 Linux 和实用主义者的应对:1991-1998
2.3 开源运动:1998年及之后

2.4 Unix的历史教训

第3章 对比:Unix哲学同其他哲学的比较
3.1 操作系统的风格元素
3.1.1 什么是操作系统的统一性理念
3.1.2 多任务能力
3.1.3 协作进程
3.1.4 内部边界
3.1.5 文件属性和记录结构
3.1.6 二进制文件格式
3.1.7 首选用户界面风格
3.1.8 目标受众
3.1.9 开发的门坎
3.2 操作系统的比较
3.2.1 VMS
3.2.2 MacOS
3.2.3 OS/2
3.2.4 Windows NT
3.2.5 BeOS
3.2.6 MVS
3.2.7 VM/CMS
3.2.8 Linux
3.3 种什么籽,得什么果


Part II

第4章 模块性:保持清晰,保持简洁
4.1 封装和最佳模块大小
4.2 紧凑性和正交性
4.2.1 紧凑性
4.2.2 正交性
4.2.3 SPOT原则
4.2.4 紧凑性和强单一中心
4.2.5 分离的价值
4.3 软件是多层的
4.3.1 自顶向下和自底向上
4.3.2 胶合层
4.3.3 实例分析:被视为薄胶合层的C语言

4.4 程序库
4.4.1 实例分析:GIMP插件
4.5 Unix和面向对象语言
4.6 模块式编码

第5章 文本化:好协议产生好实践
5.1 文本化的重要性
5.1.1 实例分析:Unix口令文件格式
5.1.2 实例分析:.newsrc格式
5.1.3 实例分析:PNG图形文件格式
5.2 数据文件元格式
5.2.1 DSV 风格
5.2.2 RFC 822 格式
5.2.3 Cookie-Jar格式
5.2.4 Record-Jar格式
5.2.5 XML
5.2.6 Windows INI 格式
5.2.7 Unix文本文件格式的约定
5.2.8 文件压缩的利弊
5.3 应用协议设计
5.3.1 实例分析:SMTP,一个简单的套接字协议
5.3.2 实例分析:POP3,邮局协议
5.3.3 实例分析:IMAP,互联网消息访问协议
5.4 应用协议元格式
5.4.1 经典的互联网应用元协议
5.4.2 作为通用应用协议的HTTP
5.4.3 BEEP:块可扩展交换协议
5.4.4 XML-RPC,SOAP和Jabber

第6章 透明性:来点儿光
6.1 研究实例
6.1.1 实例分析:audacity
6.1.2 实例分析:fetchmail的-v选项
6.1.3 实例分析:GCC
6.1.4 实例分析:kmail
6.1.5 实例分析:SNG
6.1.6 实例分析:Terminfo数据库
6.1.7 实例分析:Freeciv数据文件

6.2 为透明性和可显性而设计
6.2.1 透明性之禅
6.2.2 为透明性和可显性而编码
6.2.3 透明性和避免过度保护
6.2.4 透明性和可编辑的表现形式
6.2.5 透明性、故障诊断和故障恢复
6.3 为可维护性而设计

第7章 多道程序设计:分离进程为独立的功能
7.1 从性能调整中分离复杂度控制
7.2 Unix IPC 方法的分类
7.2.1 把任务转给专门程序
7.2.2 管道、重定向和过滤器
7.2.3 包装器
7.2.4 安全性包装器和Bernstein链
7.2.5 从进程
7.2.6 对等进程间通信
7.3 要避免的问题和方法
7.3.1 废弃的Unix IPC方法
7.3.2 远程过程调用
7.3.3 线程——恐吓或威胁
7.4 在设计层次上的进程划分

第8章 微型语言:寻找歌唱的乐符
8.1 理解语言分类法
8.2 应用微型语言
8.2.1 案例分析:sng
8.2.2 案例分析:正则表达式
8.2.3 案例分析:Glade
8.2.4 案例分析:m4
8.2.5 案例分析:XSLT
8.2.6 案例分析:The Documenter's Workbench Tools
8.2.7 案例分析:fetchmail的运行控制语法
8.2.8 案例分析:awk
8.2.9 案例分析:PostScript
8.2.10 案例分析:bc和dc
8.2.11 案例分析:Emacs Lisp
8.2.12 案例分析:JavaScript
8.3 设计微型语言
8.3.1 选择正确的复杂度
8.3.2 扩展和嵌入语言
8.3.3 编写自定义语法
8.3.4 宏-慎用
8.3.5 语言还是应用协议

第9章 生成:提升规格说明的层次
9.1 数据驱动编程
9.1.1 实例分析:ascii
9.1.2 实例分析:统计学的垃圾邮件统计
9.1.3 实例分析:fetchmailconf中的元类改动
9.2 专用代码的生成
9.2.1 实例分析:生成ascii显示的代码
9.2.2 实例分析:为列表生成HTML代码

第10章 配置:迈出正确的第一步
10.1 什么应是可配置的
10.2 配置在哪里
10.3 运行控制文件
10.3.1 实例分析:.netrc文件
10.3.2 到其它操作系统的可移植性
10.4 环境变量
10.4.1 系统环境变量
10.4.2 用户环境变量
10.4.3 何时使用环境变量
10.4.4 到其它操作系统的可移植性
10.5 命令行选项
10.5.1 从-a到-z的命令行选项
10.5.2 到其它操作系统的可移植性
10.6 如何挑选方法
10.6.1 实例分析:fetchmail
10.6.2 实例分析:XFree86服务器
10.7 论打破规则

第11章 接口:Unix环境下的用户接口设计模式
第12章 优化
第13章 复杂度:尽可能简单,但别简单过了头


Part Ⅲ
第14章 语言:C还是非C
第15章 工具:开发的战术
第16章 重用:论不要重新发明轮子


Part Ⅳ
第17章 可移植性:软件可移植性与遵循标准
第18章 文档:向网络世界阐释代码
第19章 开放源码:在Unix新社区中编程
第20章 未来:危机与机遇
附录A 缩写词表
附录B 参考文献
附录C 贡献者
附录D 无根的根:无名师的Unix心传
Colophon
索引
读者评论

精彩书摘

  terminfo本身使用文件系统作为一个简单的层级数据库。这种偷懒相当具有建设性,符合经济性原则和透明性原则。这意味着对文件系统进行浏览、检查和修改的所有普通工具都可以用于对terminfo数据库进行浏览、检查和修改;无需编写和调试专用工具(用于打包和解包单个记录的tic(1)和infocmp(1)工具除外)。这也意味着要加速数据库的访问就得要加速文件系统本身,知道这一点可以使更多应用程序受益,而不仅仅是curses(3)的用户。
  这种结构还有另外一种优点,但在terminfo例子中没有展示出来:你开始使用Unix的授权机制而不用自己编写带来额外bu9的访问控制层。这也是采纳而不是对抗Unix“一切皆文件”基本原则的结果。
  terminfo目录的布局在大多数Unix文件系统上都很浪费空间。每条目长度通常在400~1400字节之间,但是文件系统通常为每一个非空磁盘文件至少分配4k的空间。出于选择压缩二进制格式的同一个原因,即为了把terminfo使用的程序的启动延时降到最小,设计者接受了这个代价。同一价格所能买到的磁盘容量已经猛增了一千倍,更能证明这个决定的正确。
  比较这种格式和Microcsoft Windows的注册表文件所用的格式很有启发意义。注册表是Windows本身及应用程序都使用的属性数据库。所有注册记录都存放在一个大文件中。注册记录既包含文本也包含二进制数据,需要专用的编辑工具。别的不说,这种“一个大文件”的方法还导致了臭名昭著的“注册表蠕变”现象;平均访问时间随着新记录的加入而无限上升。因为系统没有提供标准APl来编辑注册表,应用程序本身使用专用代码编辑注册表,使得注册表极易受损,甚至能够锁定整个系统。
  使用Unix文件系统作为数据库是一种策略,对数据库要求简单的其它应用程序可以效仿并从中受益。不这样做的充分理由通常与性能问题无关,更可能的情形是数据库关键字不太适合做文件名。无论如何,这是在原型设计时非常有用的一种很好的快速编程方法。
  6.1.7 实例分析:Freeciv数据文件
  Freeciv是一款受到Sid Meier经典的Civilization H启发而制作的开源策略游戏。在该游戏中,每个玩家从一群到处流浪的新石器游牧民开始缔造一个文明。玩家的文明可以探索并拓殖世界,参与战争,从事贸易和研究先进技术。有些玩家实际上可能是人工智能;和这些电脑玩家玩单机游戏很有挑战性。如果谁统治了整个世界,或者第一个研制出先进技术从而获得宇宙飞船飞往半人马座阿尔法星(Alpha Centauri),谁就是游戏的胜利者。源码和文档可以在处获得。
  ……

前言/序言


《代码的灵魂:一段关于创新、坚持与优雅的编程史诗》 序言 在数字浪潮席卷全球的今天,代码已成为塑造我们生活方式、推动社会进步的核心驱动力。从掌上设备到庞大的服务器集群,无数行代码默默地运转着,支撑着现代文明的运行。然而,很少有人深入探究过这些代码的诞生过程,那些塑造了我们所熟悉的技术基石的智慧结晶。这本书,并非一本枯燥的技术手册,也不是一部充斥着抽象理论的学术专著。它是一段关于编程思想演进的史诗,一次对那些在技术发展史上留下深刻印记的先驱者们的致敬,一次对“代码之美”的深层探索。 我们将穿越时空的隧道,回溯到计算机科学的黎明时期,在那里,逻辑的火花在真空管和穿孔卡片中闪烁。我们会目睹那些早期编程语言的诞生,它们如同婴儿的牙牙学语,却孕育着无限的可能性。我们将深入了解那些塑造了现代软件工程范式的核心概念,理解为什么某些设计决策至今依然影响着我们开发软件的方式。这不是一场简单的技术回溯,而是一场关于思维方式、工程哲学以及人类在创造力驱动下如何解决复杂问题的深刻洞察。 第一章:孕育的种子——早期计算与编程的萌芽 想象一下,没有我们现在熟悉的图形界面,没有触手可及的键盘,只有冰冷的机器和遥远的抽象概念。计算机的诞生本身就是一个奇迹,而编程,则是赋予这些机器生命的关键。本章将带你回到那个充满原始力量的时代,探索机械计算的先驱者们如何构思出通用计算的概念。我们将审视那些早期的“程序”,它们可能只是机械臂的指令序列,或是继电器开关的组合。 接着,我们将目光聚焦于编程语言的诞生。我们不是要列举所有语言的语法,而是要理解为什么某些语言会应运而生。它们是为了解决特定的问题,还是为了表达更抽象的思想?我们将深入探讨那些奠定基础的早期语言,例如 Fortran、Lisp,以及那些在学术界和工业界产生深远影响的语言。理解这些语言的设计哲学,有助于我们认识到,每一种语言都承载着其创造者的智慧和对计算本质的理解。我们会思考,是什么让一种语言能够流传至今,又是什么导致了另一种语言的沉寂。 第二章:抽象的艺术——结构化编程与模块化的力量 随着计算能力的提升和项目复杂度的增加,原始的编程方法很快显得力不从心。“意大利面条式代码”的混乱局面,促使程序员们寻求更优雅、更易于管理的方式。本章将聚焦于结构化编程的革命。我们将探讨 GOTO 语句的滥用带来的问题,以及如何通过顺序、选择和循环等基本控制结构来构建清晰、可读的代码。 更重要的是,我们将深入理解模块化和抽象的巨大力量。如何将庞大复杂的系统分解成更小的、可管理的单元?什么是接口?什么是封装?我们将通过生动的例子,展示模块化设计如何提高代码的可维护性、可重用性和团队协作效率。你会意识到,那些看似简单的抽象概念,才是构建大型、稳定软件系统的基石。我们会探讨,在不同编程范式下,如何实现有效的模块化,以及这些方法如何影响我们对问题的思考方式。 第三章:逻辑的殿堂——面向对象与函数式编程的碰撞与融合 进入更现代的编程时代,我们见证了编程范式的巨大革新。面向对象编程(OOP)的出现,如同一场思维的革命。我们将深入理解类、对象、继承、多态等核心概念,并思考它们如何映射现实世界的概念,从而使得软件设计更加直观。我们会探讨 OOP 如何解决复杂系统的组织问题,以及它在大型项目中的优势。 然而,编程思想的演进从未停止。函数式编程(FP)以其独特的视角,挑战着传统的面向对象思维。我们将探索 FP 的核心理念,如纯函数、不可变数据、高阶函数等。你会发现,FP 如何通过函数组合和声明式编程,实现代码的简洁、优雅和高度并行性。我们会对比 OOP 和 FP 的优劣,并理解它们并非相互排斥,而是可以相互借鉴,甚至融合,创造出更强大的编程工具。本章的重点在于理解不同范式背后的哲学,以及它们如何提供解决问题的不同路径。 第四章:优雅的境界——代码的艺术性与可读性 代码不仅仅是机器能够理解的指令,它更是人与人之间交流的载体。优秀的代码,如同精美的艺术品,具有其内在的逻辑美和优雅。本章将不再聚焦于技术实现本身,而是探讨代码的“艺术性”。我们将讨论如何编写清晰、简洁、易于理解的代码。我们会分析“坏味道”的代码,并学习如何避免它们。 我们将深入探究命名规范、代码注释、代码风格的重要性。这些看似微不足道的细节,却能在很大程度上影响代码的可维护性和团队的协作效率。我们会思考,一个好的变量名、一个清晰的函数签名,能够传递多少信息?一个恰当的注释,又能在多大程度上帮助他人理解你的意图?我们会通过一些经典的编程案例,展示那些被奉为圭臬的优秀代码,分析它们的优点,并从中汲取经验。最终,你会明白,编写“好”的代码,是一门需要技巧、经验和思考的艺术。 第五章:永恒的追求——软件设计的原则与实践 优秀的代码,源于优秀的软件设计。本章将转向软件设计的宏观层面。我们将探讨一些被广泛认可的设计原则,例如 KISS (Keep It Simple, Stupid)、DRY (Don't Repeat Yourself)、SOLID 等。我们会深入理解这些原则的含义,并思考它们在实际项目中的应用。 我们会讨论如何进行系统架构设计,如何选择合适的设计模式来解决常见的软件开发问题。我们将通过实例,展示设计模式如何帮助我们构建灵活、可扩展、易于维护的软件系统。这本书不是一本设计模式的字典,而是旨在让你理解设计模式背后的思想,以及它们如何帮助我们写出更健壮、更具弹性的代码。我们会思考,什么是好的软件设计?它是否意味着复杂?又或者,它意味着一种大道至简的智慧? 第六章:测试的智慧——保障质量的基石 再完美的程序,也可能隐藏着意想不到的缺陷。测试,是确保软件质量不可或缺的一环。本章将深入探讨测试的重要性,以及不同的测试策略。我们将讨论单元测试、集成测试、端到端测试的各自作用,以及如何编写有效的测试用例。 我们会思考,为什么测试如此重要?它不仅仅是为了发现 bug,更是为了提高代码的可信度,减少未来的维护成本。我们会探讨测试驱动开发(TDD)的理念,以及它如何引导我们编写更易于测试、更清晰的代码。你会理解,测试不是事后补救,而是贯穿整个开发流程的“智慧”。它是一种对代码质量的承诺,一种对用户负责的表现。 第七章:演进的河流——开源社区与协作的力量 今天的软件世界,很大程度上是由开源社区驱动的。本章将聚焦于开源的力量,以及协作如何推动技术的发展。我们将探讨开源项目的运作模式,以及社区成员如何通过贡献代码、报告 bug、提供文档等方式,共同打造高质量的软件。 我们会思考,为什么开源项目能够如此成功?是透明度?是共享精神?还是集体智慧?我们会从个人的角度,思考如何在开源社区中贡献自己的力量,以及从中学习到什么。你将会明白,编程不再是孤立的个人行为,而是一种充满活力的协作过程。理解并参与开源,是现代程序员必不可少的一课。 第八章:思想的传承——编程哲学的演变与未来 回顾了编程发展的漫长历程,我们不禁要思考,编程的未来将走向何方?本章将是一个总结与展望。我们将梳理编程思想的演变脉络,并思考那些永恒不变的编程追求:效率、可读性、可维护性、创新性。 我们会探讨一些前沿的编程概念,例如声明式编程的进一步发展,或者人工智能在编程领域的应用。但更重要的是,我们将强调编程的“艺术”与“哲学”层面。理解代码背后的思想,培养批判性思维,以及对技术保持好奇心,将是未来任何技术变革中都不可或缺的品质。这本书并非一个终点,而是一个起点,鼓励读者在代码的世界里,不断探索,不断创新,寻找属于自己的那份“代码的灵魂”。 结语 “传世经典书丛:UNIX编程艺术”所探讨的,是一系列关于构建高质量软件的智慧结晶。它关乎逻辑的严谨,关乎抽象的优雅,关乎设计的精妙,关乎协作的和谐。这本书,希望能为你打开一扇通往更深层编程理解的大门,让你不仅仅能写出能运行的代码,更能写出真正优秀、隽永的代码。愿你在阅读之后,能对编程产生更深的敬畏,对代码的灵魂有更清晰的认识,并在自己的编程道路上,不断前行,创造出属于自己的辉煌篇章。

用户评价

评分

我对这本书的第一印象是它带来的那种“匠人精神”的联想。在如今快节奏、追求“速成”的时代,一本以“艺术”来命名编程的书,本身就显得格外有分量。这不仅仅是关于代码的堆砌,更像是一种对编程哲学、对系统设计思路的深入探讨。我猜想,这本书或许能带我窥见那些优秀程序员是如何思考问题、如何构建健壮而优雅的系统的,这对我来说是一种极具吸引力的学习方向。

评分

这本书的封面设计就有一种沉静而深邃的感觉,淡淡的古铜色搭配着烫金的字体,仿佛诉说着一种历史的厚重感。拿到手里,纸张的质感也相当不错,不是那种轻飘飘的合成纸,而是带着一丝温润的触感,翻阅起来页面的摩擦声都带着一种仪式感。我一直对那些能够沉淀下来、经久不衰的经典著作情有独钟,总觉得它们蕴含着超越时代的智慧和经验。

评分

这本书的书名让我想起了小时候在书店里看到的那些大部头的技术书籍,封面朴实无华,但翻开来却能学到很多实在的东西。虽然我接触计算机的时间不算特别长,但听闻过很多关于 UNIX 的传说,它就像是计算机世界里的“老祖宗”,很多现代操作系统都能看到它的影子。这本书的名字听起来就有一种“传世”的感觉,仿佛是前人留下的宝贵财富,等着我们去挖掘和学习。

评分

这本书的名字引起了我对 UNIX 历史的好奇。它不仅仅是一个操作系统,更是一种文化,一种哲学。我一直对那些奠定行业基础的技术充满了敬意,因为它们往往蕴含着最根本的原理和最精妙的设计。这本书的标题让我觉得,它可能不仅仅是教你如何写代码,更重要的是让你理解 UNIX 的设计思想,以及这些思想是如何影响了后来的整个计算机科学领域。

评分

当我看到这本书的标题时,脑海中立刻浮现出那些历经时间考验的经典作品。它们往往不是最时髦的,但却是最实在、最能解决根本问题的。我尤其喜欢那种能够将复杂概念讲得清晰透彻,并且能引发读者深入思考的书。这本书的名字给我一种预感,它可能会是一本打开我技术视野的书,让我从更宏观、更本质的角度去理解编程和系统设计。

评分

给个好评,参考书籍

评分

经典书籍,适合经常翻翻。

评分

非常好的书,需要很多时间读完

评分

还不错啊啊啊啊啊啊啊啊

评分

正版专业的计算机书籍,质量很好!

评分

98孙7i88现在9级

评分

反正便宜,买了先屯着,早晚用得上。

评分

很好用很好用很好用很好用

评分

经典书籍,推荐推荐

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有