2 options
The art of Unix programming / Eric Steven Raymond.
LIBRA QA76.76.O63 R395 2004
Available from offsite location
LIBRA QA76.76.O63 R395 2004
Available from offsite location
- Format:
- Book
- Author/Creator:
- Raymond, Eric S.
- 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.