Books: A User's Report
Many readers send me email expressing opinions about books, CD-ROMs, and reviews, and posing questions about books I have reviewed or information about the best book on a certain topic. I endeavor to answer all requests, either by email, or in a subsequent review. Some of these reviews are in answer to questions sent to me. This month, I reviewed Mastering Regular Expressions by Jeffrey E. F. Friedl (O'Reilly & Associates, Inc.); 1001 Programming Resources by Edward J. Renehan, Jr. (Jamsa Press); and Who's Afraid of C++? by Steve Heller (Academic Press Professional).
I seldom recommend publications in this column. However, The Perl Journal is an excellent quarterly publication about Perl that addresses the technical issues and problems (with little advertising) from the programmer's viewpoint. The Perl Journal's Web site is http://tpj.com/tpj.
Mastering Regular Expressions
by Jeffrey E. F. Friedl
O'Reilly & Associates, Inc.
The use of regular expressions can simplify a programmer's or administrator's routine tasks immensely. Most computer users employ the pattern matching capabilities to detect grammatical errors and eliminate tedious searches.
However, a thorough knowledge and use of regular expression programming can add a grace and elegance to ordinarily mediocre solutions. In Mastering Regular Expressions, Friedl demonstrates the power and potential of using regular expression (regex) tools. He examines regex concepts through the following topics: Introduction to Regular Expressions, Extended Introductory Examples, Overview of Regular Expression Features and Flavors, The Mechanics of Expression Processing, Crafting a Regular Expression, Tool-Specific Information, and Perl Regular Expressions. The Appendices include (A) Online Information and (B) Email Regex Program. The advantages of regular expression expertise are as numerous as the programs and platforms that support it. Surprisingly, documentation about regular expression programming has been limited.
Friedl suggests reading Mastering Regular Expressions first as a story and then utilizing it as a reference. The reader will discover questions throughout the text pertaining to the individual subjects covered. To encourage the reader to think about the question, the author has provided answers within the turn of a page. The first chapter, Introduction to Regular Expressions, describes the fundamentals of regular expressions programming using egrep. Friedl presents problems and their corresponding solutions, illustrates various ways to match expressions, and defines regex vocabulary. Extended Introductory Examples progresses from egrep to Perl and explains the Perl programs versus the egrep scripts. The author discusses some of the other regex tools (awk, GNU Emacs, Tcl, and vi) in Chapter 3, Overview of Regular Expression Features and Flavors. He illustrates the different implementations to provide the reader with a better understanding of the abstract concepts used with regular expressions, rather than detailing the particular syntax of each separate tool. The most important sections of Mastering Regular Expressions appear in Chapters 4 and 5. In The Mechanics of Expression Processing, Friedl features an engine analogy, complete with socket wrench, and analyzes how regex really works. Crafting a Regular Expression describes how to fine tune an expression for its most efficient performance. Chapter 6, Tool-Specific Information, addresses the specific attributes that differ among regex utilities. Friedl discusses Perl Regular Expressions in Chapter 7.
Mastering Regular Expressions is a superior book. Author Jeffrey Friedl has produced a current, well-written, precise addition to the O'Reilly repertoire, with a volume completely devoted to text and data manipulation. It provides the perfect complement to CGI scripting, HTML, Perl, Tcl, awk, sed, Expect, Python, Emacs, vi, and Delphi programs and their accompanying texts. The descriptions and explanations feature an easily readable style and many practical examples. The conventions used in the book to designate regular expressions are subtle, but the examples are well described in the text. I had actually forgotten how much I enjoy working with regular expressions. The importance of creating regular expressions cannot be over emphasized. Many new programmers don't realize its power or know how to create expressions. Friedl's book demonstrates these seldom discussed concepts. This is an effective and valuable text. I highly recommend it for anyone and everyone involved with regular expression manipulation.
1001 Programming Resources
by Edward J. Renehan, Jr.
Finding technical information, references, and programs throughout the Internet was once a relatively simple procedure. With the poplularity explosion of the Internet, the World Wide Web, and personal home pages, the process has become more difficult. A search for a particular topic yields both the desired information and many other sites that happen to use the original search phrase in various contexts. With 1001 Programming Resources, Renehan endeavors to simplify the technical professional's quest for information. He evaluates a site by five primary characteristics: strong content, covers details, open to all, free software, and excellent references. Each entry in this directory has fulfilled at least one of the author's criteria, and the accompanying icons indicate which attributes each site possesses. Renehan organized the book according specific subjects, including: AI Programming; Assembly Language Programming; C/C++ Programming; Client/ Server Systems; Communications/ Network Technologies; Corporate Resources; Cross-Platform Programming; Database Programming; Delphi Programming, Games Programming; Graphics, Chaos, and Virtual Reality; Internet and Web Tools; Java Programming; Mac, PowerMac, and PowerPC Computing; Organizations and Standards; PowerBuilder Programming; Publications; Sites Too Cool to Pass Up; UNIX System Resources; Visual Basic Programming; and Windows 3.1, NT, and Windows 95 Resources. The author concludes the book with an excellent and complete index. Each entry occupies a half-page of the approximately 8 1/2 by 10 1/2 inch directory. When applicable, Renehan provides additional sites and resources pertaining to the preceding chapter topic. In addition to an in-depth survey of the sites, he also furnishes a snapshot of at least one, and usually two, of its pages. The accompanying CD-ROM includes Java, Perl, and an electronic version of the book. The electronic version contains links to the sites for the Windows 95 version. For Windows 3.1 and 3.11 users, the online edition can be accessed and read, but the links are not functional.
Whether the reader utilizes the printed or the electronic version, 1001 Programming Resources demonstrates an outstanding reference or utility. Renehan features the most valuable sites for the technical traveler. His chosen range of topics addresses both general computing concepts (i.e., Client/Server Systems) and specific implementations (i.e., Visual Basic and C/C++ Programming.) The author also examines information about all of the topics in Corporate Resources and Publications. (Renehan's appraisal of Sys Admin Magazine appears on page 726.) 1001 Programming Resources is a superb and well-written review of available resources. Every technical professional should read this excellent reference, regardless of their specific operating system or platforms.
Who's Afraid of C++?
by Steve Heller
Academic Press Professional
Many computer professionals who either are not programmers or no longer program regularly want to learn C++. They don't require a specialized text detailing every exception of the language; however, they do need a thorough approach to its concepts and practices. Heller's Who's Afraid of C++? is an excellent choice. The author presents a Prologue, Hardware Fundamentals, Basics of Programming, More Basics, Functional Literacy, Taking Inventory, Stringing Along, Down the Garden Path, and an Appendix, Tying Up Loose Ends. He discusses the fundamentals of programming plus the elements of the C++ programming language. Two qualities distinguish this book from other introductory or review texts: Heller's sense of humor, which becomes most evident in the chapter and section titles and his footnotes. (Do not bypass the footnotes; they are informative and whimsical.) Susan, a novice at the beginning of the book, shares her reflections, trials, triumphs, and enthusiasm through the email dialogue that Heller employs. Through Susan's analysis, the reader vicariously experiences the problems and the solutions that she did. Each chapter begins with an introduction, definitions, and chapter objectives. Exercises appear throughout the chapter, and a review and answers to the exercises complete the chapters' format.
Who's Afraid of C++? is an outstanding book and effective on many different levels. Whether the reader is first learning C++ with no prior programming experience, learning C++ with programming knowledge in another language, reviewing C++ concepts, or expanding current C++ techniques, Heller's book is an excellent selection. The email dialogue between the author and Susan clarifies many of the procedures, both by alternative phrasing and reiteration. Anyone interested in learning or teaching C++ should examine this superb book.
About the Author
Elizabeth Zinkann has been involved in the UNIX and C environment for the past 12 years. She is currently a UNIX and C consultant, and one of her specialties is UNIX education. In addition to her computer science background, she also has a degree in English. Elizabeth can be reached via America Online (firstname.lastname@example.org).