Subject: Eight suggestions for Python books (long) - DN [1]


gvwilson@nevex.com - 30 Jan 2000 - comp.lang.python

 One of the most exciting things for me about the 8th Int'l Python
 Conference in Washington last week was the growing number of books on
 Python.  When I had to choose a language to use in a software
 engineering course two years ago, I felt I had to choose Perl, because
 there was so much more documentation for it than for any other Open
 Source scripting language.  Last October, I finally felt that I could
 switch to Python, and feedback since then has been pretty positive.

 I heard several people at the conference say that they were also
 excited and that they were thinking about doing a book.  That got me
 thinking about what books the community really needs, and that got me
 thinking about the list of unwritten books that I wrote for "Doctor
 Dobb's Journal".  I started doing book reviews for DDJ a few years
 ago.  After a while, I decided that the best way to get the books I
 really wanted was to write the reviews first, and hope that someone
 would come along and fill in the book later.  The result was posted at
 http://www.ercb.com/feature/feature.0012.html, and got a very (very)
 enthusiastic response from publishers, most of whom stay awake at
 night trying to figure out what we're all going to want to buy a year
 from now.

 So, here's my first cut at what books Python needs, and why.  My main
 interests are books that will help new Python programmers be
 productive in a hurry, and help make Python look like a credible
 solution in both academia and industry.  Your mileage may vary...

 1. The Python Cookbook

 The most frequent question in my classes is, "How do I do XYZ in
 Python?"  Most of the time, the people asking the questions know how
 to do what they wants in C or Perl; we need to make it easy for them
 to find out what the answer is in Python.  The easiest way to write
 this book would be to go through O'Reilly's "Perl Cookbook", throw
 away those examples that exist only to help people get around Perl's
 syntax and execution model, and re-write the rest in Python.

 2. Algorithms and Data Structures in Python

 This book complements "The Python Cookbook" by showing how classic
 algorithms and data structures are implemented in Python, rather than
 how to open a secure socket.  Again, the quickest way to tackle this
 would be to take inspiration from books such as Orwant et al's
 "Mastering Algorithms with Perl", or any of Mark Weiss's DS&A books.
 One caution: remember that CPython and JPython manage memory
 differently.  Try to show the best solution for each, rather than
 trying to accommodate weaknesses that are specific to one or the
 other.  Also try to include more theoretical analysis of algorithm
 performance than Orwant et al did --- the long-term goal for this book
 is to be usable in a second-year DS&A course.

 3. Computer Science Python Style

 Logo is to children's computing what C is to systems programming, and
 Brian Harvey's three-volume series "Computer Science Logo Style" is to
 Logo what Kernighan and Ritchie's "The C Programming Language" is to
 C.  Anyone who wants to teach children to program, in any language,
 will find "CSLS" a rich source of ideas, and a good guide to what
 children (and their teachers) can actually understand.  In particular,
 if anything is longer or harder to explain in Python than in Logo,
 it's a good sign that an extension library is needed...

 4. Software Tools in Python

 Unix might not be the most widely-used operating system today, but it
 has certainly been the most influential.  One reason for its success
 is the ease with which different tools can be combined, and one reason
 for that is that most Unix tools use a common data format: tokens
 separated by whitespace, terminated by newline characters.  Another
 reason was Kernighan's book "Software Tools" (and later "Software
 Tools in Pascal"), which explained why and how to build small things
 that did one job well.

 The advent of XML means that there is now another universal data
 format that a wide variety of tools could operate on.  Unlike flat
 text, this format is hierarchical, but the principle of connecting
 many tools together using pipes is still the same.  That raises three
 questions: what are the equivalents of 'wc', 'head', 'grep', and 'sed'
 for tree-structured data, what language will those tools be written
 in, and who is going to write the best-selling book that explains all
 of this?  As with (3) above, a lot of work would have to be done on
 software to make this book possible, but anyone thinking about writing
 usable XML filters in Python would do well to think about how to
 explain them before laying down any code.

 5. Case Studies in User Interface Design

 Some philosophers distinguish between knowing that, and knowing
 how. The former is mostly facts, such as the airspeed of an unladen
 African swallow. The latter consists of techniques, like how to ride a
 bicycle, or how to design a user interface. Unfortunately, knowledge
 of the second type is hard to put into books, since every general rule
 has exceptions, and none of the important ideas can be given exact
 definitions.

 This book on user interfaces would try to teach the "how" by working
 through a series of examples. The starting point for each would be
 either an existing interface that needs improvement, or a set of
 requirements and a blank canvas.  Each design would be iterated
 several times, or try to satisfy different constraints (e.g. hand-held
 vs. desktop platforms).  The focus would not be on Python per se, but
 implicit in the book would be the message that Python facilitates
 rapid experimentation, prototyping, and evolution.

 6. C for Python Programmers

 As many people have pointed out, Python is an excellent teaching
 language.  It runs almost everywhere, is used in industry, is
 object-oriented, and checks for a lot of simple errors, including bad
 type casts, dangling pointers, and out-of-bounds array indices.  If
 Python becomes widely used in grade schools, and if highbrow features
 like generic programming and type inference are added, it will start
 to look very attractive as a college-level language.

 The problem, however, is what to do with students in their second
 year. As a sophomore, I took two courses: one on data structures and
 algorithms, and one on machine architecture and assembly-language
 programming. The first is easy to translate into Python, but what
 about the second? Going from Pascal to PDP-11 assembler was bad
 enough; going from an interpreted, garbage-collected language to
 today's pipelined RISC architectures would be impossible.

 This book's premise would be that C has always really been a
 high-level assembly language, and that we should teach it to students
 in relation to Python as we taught assembler in relation to Pascal. It
 would show readers how to build a simple Python interpreter using C,
 and would cover pointer arithmetic and array indexing, allocating and
 freeing memory, garbage collection, signed vs. unsigned arithmetic,
 and machine-dependent data sizes. Along the way, students would be
 introduced to the quirks of C, including the use of preprocessor
 directives to handle platform-dependent code.  By the time they were
 done, students would be ready to tackle higher-level courses in
 networking, operating systems, computer graphics, and other topics.
 They would also have learned how to structure complex software systems
 in layers and modules, and how to deal with a variety of real-world
 software engineering issues.

 (Note that this book would teach C, rather than C++, so that students
 would learn what computers really do --- C++ sweeps far too much under
 the rug for this purpose.)

 7. Object-Oriented Analysis and Design Using Python and UML

 The aim of this book is to teach analysis, design, and patterns as if
 they were as important as language syntax or basic data structures.
 The book would be aimed at sophomores who have learned an
 object-oriented language (not necessarily Python) in a first-year
 course. It would introduce both the idea of design patterns, and the
 basic elements of the Unified Modeling Language (UML), and then show
 how to apply both to a variety of web-enabled applications.  The
 emphasis of the book would be how to analyze a problem methodically,
 and how to design a program, or set of programs, to meet users'
 needs.  Liberty's "Beginning Object-Oriented Analysis and Design", and
 Rosenberg and Scott's "Use-Case Driven Object Modeling with UML",
 would both be good inspirations, but in order to really be successful,
 this book would have to include many more examples, sample questions,
 and back-of-the-book answers than either.

 8. Software Tools for Scientists and Engineers

 I have a confession to make.  I sat down to start writing this book
 four years ago, and found that I couldn't, because existing software
 engineering tools were so hard to learn.  I found out the hard way
 that most scientists and engineers have better things to do with their
 time (like science and engineering) than learning how to write
 non-trivial makefiles, or re-installing Gnats.  They're not stupid ---
 many of them really are rocket scientists --- but they can tell the
 difference between intrinsic and accidental complexity, and don't have
 a lot of respect for how much of the latter there is in modern
 computing.

 The aim of the Software Carpentry project (www.software-carpentry.com)
 is to create tools that are worth describing.  If it succeeds, I hope
 that someone will take those tools, and Python itself, and use them to
 show computational scientist and engineers how to capture software
 requirements, write up designs, create test plans, accommodate special
 features of different platforms, and everything else that makes up the
 "other 90%" of programming.

 ----------------

 Greg Wilson is an independent software developer and author.  He is
 currently managing the Software Carpentry project on behalf of Los
 Alamos National Laboratory and CodeSourcery, LLC.  You can find out
 more about the project at http://www.software-carpentry.com, or reach
 Greg at gvwilson@nevex.com.

 Sent via Deja.com http://www.deja.com/
 Before you buy.

Last modified
2000-02-10

(195.108.246.50)

Note: you are looking at
the snapshot of an old wiki
- much of this information
is likely to be very outdated