My Account Log in

2 options

The art of Unix programming / Eric Steven Raymond.

LIBRA QA76.76.O63 R395 2004
Loading location information...

Available from offsite location This item is stored in our repository but can be checked out.

Log in to request item
LIBRA QA76.76.O63 R395 2004
Loading location information...

Available from offsite location This item is stored in our repository but can be checked out.

Log in to request item
Format:
Book
Author/Creator:
Raymond, Eric S.
Contributor:
Benjamin Franklin Library Fund.
Phi Beta Kappa Library Trust Fund.
Series:
Addison-Wesley professional computing series
Language:
English
Subjects (All):
UNIX (Computer file).
Operating systems (Computers).
Physical Description:
xxxii, 525 pages : illustrations ; 24 cm.
Place of Publication:
Boston : Addison-Wesley, [2004]
Summary:
In this book, five years in the making, the author encapsulates three decades of unwritten, hard-won software engineering wisdom. Raymond brings together for the first time the philosophy, design patterns, tools, culture, and traditions that make UNIX home to the world's best and most innovative software, and shows how these are carried forward in Linux and today's open-source movement. Using examples from leading open-source projects, he shows UNIX and Linux programmers how to apply this wisdom in building software that's more elegant, more portable, more reusable, and longer-lived.
Contents:
I Context 1
1 Philosophy: Philosophy Matters 3
1.1 Culture? What Culture? 3
1.2 The Durability of Unix 4
1.3 The Case against Learning Unix Culture 5
1.4 What Unix Gets Wrong 6
1.5 What Unix Gets Right 7
1.8 Applying the Unix Philosophy 26
1.9 Attitude Matters Too 26
2 History: A Tale of Two Cultures 29
2.1 Origins and History of Unix, 1969-1995 29
2.2 Origins and History of the Hackers, 1961-1995 43
2.3 The Open-Source Movement: 1998 and Onward 49
2.4 The Lessons of Unix History 51
3 Contrasts: Comparing the Unix Philosophy with Others 53
3.1 The Elements of Operating-System Style 53
3.2 Operating-System Comparisons 61
3.3 What Goes Around, Comes Around 78
II Design 81
4 Modularity: Keeping It Clean, Keeping It Simple 83
4.1 Encapsulation and Optimal Module Size 85
4.2 Compactness and Orthogonality 87
4.3 Software Is a Many-Layered Thing 95
4.4 Libraries 99
4.5 Unix and Object-Oriented Languages 101
4.6 Coding for Modularity 103
5 Textuality: Good Protocols Make Good Practice 105
5.1 The Importance of Being Textual 107
5.2 Data File Metaformats 112
5.3 Application Protocol Design 123
5.4 Application Protocol Metaformats 127
6 Transparency: Let There Be Light 133
6.1 Studying Cases 135
6.2 Designing for Transparency and Discoverability 148
6.3 Designing for Maintainability 154
7 Multiprogramming: Separating Processes to Separate Function 157
7.1 Separating Complexity Control from Performance Tuning 159
7.2 Taxonomy of Unix IPC Methods 160
7.3 Problems and Methods to Avoid 176
7.4 Process Partitioning at the Design Level 181
8 Minilanguages: Finding a Notation That Sings 183
8.1 Understanding the Taxonomy of Languages 185
8.2 Applying Minilanguages 187
8.3 Designing Minilanguages 206
9 Generation: Pushing the Specification Level Upwards 215
9.1 Data-Driven Programming 216
9.2 Ad-hoc Code Generation 225
10 Configuration: Starting on the Right Foot 231
10.1 What Should Be Configurable? 231
10.2 Where Configurations Live 233
10.3 Run-Control Files 234
10.4 Environment Variables 238
10.5 Command-Line Options 242
10.6 How to Choose among the Methods 248
10.7 On Breaking These Rules 252
11 Interfaces: User-Interface Design Patterns in the Unix Environment 253
11.1 Applying the Rule of Least Surprise 254
11.2 History of Interface Design on Unix 256
11.3 Evaluating Interface Designs 257
11.4 Tradeoffs between CLI and Visual Interfaces 259
11.5 Transparency, Expressiveness, and Configurability 264
11.6 Unix Interface Design Patterns 266
11.7 Applying Unix Interface-Design Patterns 280
11.8 The Web Browser as a Universal Front End 281
11.9 Silence Is Golden 284
12 Optimization 287
12.1 Don't Just Do Something, Stand There! 287
12.2 Measure before Optimizing 288
12.3 Nonlocality Considered Harmful 290
12.4 Throughput vs. Latency 291
13 Complexity: As Simple As Possible, but No Simpler 295
13.1 Speaking of Complexity 296
13.2 A Tale of Five Editors 302
13.3 The Right Size for an Editor 309
13.4 The Right Size of Software 316
III Implementation 319
14 Languages: To C or Not To C? 321
14.1 Unix's Cornucopia of Languages 321
14.2 Why Not C? 323
14.3 Interpreted Languages and Mixed Strategies 325
14.4 Language Evaluations 325
14.5 Trends for the Future 344
14.6 Choosing an X Toolkit 346
15 Tools: The Tactics of Development 349
15.1 A Developer-Friendly Operating System 349
15.2 Choosing an Editor 350
15.3 Special-Purpose Code Generators 352
15.4 make: Automating Your Recipes 357
15.5 Version-Control Systems 364
15.6 Runtime Debugging 369
15.7 Profiling 370
15.8 Combining Tools with Emacs 370
16 Reuse: On Not Reinventing the Wheel 375
16.1 The Tale of J. Random Newbie 376
16.2 Transparency as the Key to Reuse 379
16.3 From Reuse to Open Source 380
16.4 The Best Things in Life Are Open 381
16.5 Where to Look? 384
16.6 Issues in Using Open-Source Software 385
16.7 Licensing Issues 386
IV Community 391
17 Portability: Software Portability and Keeping Up Standards 393
17.1 Evolution of C 394
17.2 Unix Standards 398
17.3 IETF and the RFC Standards Process 403
17.4 Specifications as DNA, Code as RNA 405
17.5 Programming for Portability 408
17.6 Internationalization 413
17.7 Portability, Open Standards, and Open Source 414
18 Documentation: Explaining Your Code to a Web-Centric World 417
18.1 Documentation Concepts 418
18.2 The Unix Style 420
18.3 The Zoo of Unix Documentation Formats 422
18.4 The Present Chaos and a Possible Way Out 426
18.5 DocBook 427
18.6 Best Practices for Writing Unix Documentation 434
19 Open Source: Programming in the New Unix Community 437
19.1 Unix and Open Source 438
19.2 Best Practices for Working with Open-Source Developers 440
19.3 The Logic of Licenses: How to Pick One 456
19.4 Why You Should Use a Standard License 457
19.5 Varieties of Open-Source Licensing 457
20 Futures: Dangers and Opportunities 461
20.1 Essence and Accident in Unix Tradition 461
20.2 Plan 9: The Way the Future Was 464
20.3 Problems in the Design of Unix 466
20.4 Problems in the Environment of Unix 473
20.5 Problems in the Culture of Unix 475
20.6 Reasons to Believe 478
D Rootless Root: The Unix Koans of Master Foo 499.
Notes:
Includes bibliographical references (pages 483-493 and index.
Local Notes:
Acquired for the Penn Libraries with assistance from the Phi Beta Kappa Library Trust Fund.
Acquired for the Penn Libraries with assistance from the Benjamin Franklin Library Fund.
ISBN:
0131429019
OCLC:
52638755

The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.

Find

Home Release notes

My Account

Shelf Request an item Bookmarks Fines and fees Settings

Guides

Using the Find catalog Using Articles+ Using your account