Get Programming and Mathematical Thinking A Gentle Introduction to Discrete Math Featuring Python 1st Edition Allan M. Stavely PDF ebook with Full Chapters Now
Get Programming and Mathematical Thinking A Gentle Introduction to Discrete Math Featuring Python 1st Edition Allan M. Stavely PDF ebook with Full Chapters Now
com
https://ebookname.com/product/programming-and-mathematical-
thinking-a-gentle-introduction-to-discrete-math-featuring-
python-1st-edition-allan-m-stavely/
OR CLICK BUTTON
DOWNLOAD EBOOK
https://ebookname.com/product/programming-in-python-3-a-complete-
introduction-to-the-python-language-2nd-edition-summerfield/
ebookname.com
https://ebookname.com/product/a-gentle-introduction-to-
optimization-1st-edition-b-guenin/
ebookname.com
https://ebookname.com/product/a-gentle-introduction-to-stata-2018th-
edition-alan-c-acock/
ebookname.com
https://ebookname.com/product/experimental-approaches-to-diabetic-
retinopathy-frontiers-in-diabetes-vol-20-1st-edition-h-p-hammes/
ebookname.com
Building High Performance Business Relationships Rescue
Improve and Transform Your Most Valuable Assets 1st
Edition Tony Lendrum
https://ebookname.com/product/building-high-performance-business-
relationships-rescue-improve-and-transform-your-most-valuable-
assets-1st-edition-tony-lendrum/
ebookname.com
https://ebookname.com/product/in-rivers-lakes-and-ponds-under-the-
microscope-1st-edition-sabrina-crewe/
ebookname.com
https://ebookname.com/product/elements-of-set-theory-enderton/
ebookname.com
https://ebookname.com/product/nanomedicine-design-of-particles-
sensors-motors-implants-robots-and-devices-mark-j-schulz/
ebookname.com
https://ebookname.com/product/israel-jordan-and-palestine-the-two-
state-imperative-asher-susser/
ebookname.com
The Phenomenon of Obama and the Agenda for Education Can
Hope Audaciously Trump Neoliberalism 1st Edition Paul R.
Carr
https://ebookname.com/product/the-phenomenon-of-obama-and-the-agenda-
for-education-can-hope-audaciously-trump-neoliberalism-1st-edition-
paul-r-carr/
ebookname.com
Programming and Mathematical
Thinking
A Gentle Introduction to Discrete Math
Featuring Python
Allan M. Stavely
First Edition
Content of this book available under the Creative Commons Attribution-Noncommercial-ShareAlike License. See
http://creativecommons.org/licenses/by-nc-sa/4.0/ for details.
Stavely, Allan M
Programming and mathematical thinking: a gentle introduction to discrete
math featuring Python / Allan M. Stavely.
xii, 246 p.: ill. ; 28 cm
ISBN 978-1-938159-00-8 (pbk.) — 978-1-938159-01-5 (ebook)
1. Computer science — Mathematics. 2. Mathematics — Discrete
Mathematics. 3. Python (Computer program language).
Published by The New Mexico Tech Press, a New Mexico nonprofit corporation
i
ii
Table of Contents
Preface ........................................................................................................ vii
1. Introduction ............................................................................................. 1
1.1. Programs, data, and mathematical objects ..................................... 1
1.2. A first look at Python .................................................................... 3
1.3. A little mathematical terminology ................................................ 10
2. An overview of Python ........................................................................... 17
2.1. Introduction ................................................................................. 17
2.2. Values, types, and names ............................................................. 18
2.3. Integers ........................................................................................ 19
2.4. Floating-point numbers ................................................................ 23
2.5. Strings .......................................................................................... 25
3. Python programs .................................................................................... 29
3.1. Statements ................................................................................... 29
3.2. Conditionals ................................................................................ 31
3.3. Iterations ..................................................................................... 35
4. Python functions ..................................................................................... 41
4.1. Function definitions ..................................................................... 41
4.2. Recursive functions ...................................................................... 43
4.3. Functions as values ...................................................................... 45
4.4. Lambda expressions ..................................................................... 48
5. Tuples ..................................................................................................... 51
5.1. Ordered pairs and n-tuples .......................................................... 51
5.2. Tuples in Python .......................................................................... 52
5.3. Files and databases ...................................................................... 54
6. Sequences ............................................................................................... 57
6.1. Properties of sequences ................................................................ 57
6.2. Monoids ...................................................................................... 59
6.3. Sequences in Python ..................................................................... 64
6.4. Higher-order sequence functions .................................................. 67
6.5. Comprehensions .......................................................................... 73
6.6. Parallel processing ....................................................................... 74
7. Streams ................................................................................................... 83
7.1. Dynamically-generated sequences ................................................ 83
7.2. Generator functions ..................................................................... 85
iii
Programming and Mathematical Thinking
iv
List of Examples
1.1. Finding a name ...................................................................................... 4
1.2. Finding an email address ....................................................................... 7
1.3. Average of a collection of observations .................................................. 8
6.1. Finding a name again, in functional style ............................................. 71
6.2. Average of observations again, in functional style ................................ 72
7.1. Combinations using a generator function ............................................ 89
8.1. Finding job candidates using set operations ....................................... 117
8.2. Job candidates again, with different input files .................................. 122
9.1. Finding given words in a document ................................................... 139
9.2. A memoized function: the nth Fibonacci number ................................ 144
9.3. Number of students in each major field ............................................. 149
10.1. Distances using symmetry and reflexivity ......................................... 159
11.1. The MovingAverage class .................................................................. 191
11.2. The MovingAverage class, version 2 ................................................. 193
11.3. The Pushbutton class ....................................................................... 204
11.4. A state machine for finding fields in a string .................................... 206
11.5. Code that uses a FieldsStateMachine ............................................. 207
11.6. A state machine for finding fields, version 2 .................................... 209
v
vi
Preface
My mission in this book is to encourage programmers to think mathematically
as they develop programs.
1
This paragraph and the example that follows are adapted from a previous book: Allan M. Stavely,
Toward Zero-Defect Programming (Reading, Mass.: Addison Wesley Longman, 1999), 142–143.
vii
First I'll read the first web page and store all the URLs I find in a list.
Then I'll read the second web page and, every time I find a URL, search
the list for it. But wait: I don't want to include the same URL in my
result more than once. I'll keep a second list of the URLs that I've
already found in both web pages, and search that before I search the
list of URLs from the first web page.
The URLs in a web page are a set. I'll read each web page and build
up the set of URLs in each using set insertion. Then I can get the URLs
common to both web pages by using set intersection.
Either approach will work, but the second is conceptually simpler, and it will
probably be more straightforward to implement. In fact, once the problem is
described in mathematical terms, most of the design work is already done.
viii
programmers never learn, and we'll see how to use them to create simple and
elegant solutions to programming problems.
For example, one recurring theme in the book is the concept of a monoid. It
turns out that monoids (more than, for example, groups and semigroups) are
ubiquitous in the data types and data structures that programmers use most
often. I emphasize the extent to which all monoids behave alike and how
concepts and algorithms can be transferred from one to another.
Otherwise, the ideal reader is someone who has had at least some experience
with programming, using either Python or another programming language.
In fact, I hope that some of my readers will be quite experienced programmers
who may never have been through a modern, mathematically-oriented program
of study in computer science. If you are such a person, you'll see many ideas
that will probably be new to you and that will probably improve your
programming.
At the end of most chapters is a set of exercises. Instructors can use these
exercises in laboratory sessions or as homework exercises, and some can be
used as starting points for class discussions. Many instructors will want to
supplement these exercises with their own extended programming assignments.
ix
exception handling, parallel computing, distributed computing, various
advanced data structures and algorithms, object-oriented programming, and
state machines.
• the extensive standard library and the many other libraries that are
commonly available
x
• almost all “special” attributes and methods (those whose names start and
end with a double underbar) that expose internal details of objects
Any programmer who uses Python extensively should learn about all of these
features of the language. I recommend that such a person peruse a
comprehensive Python textbook or reference manual.2
In any case, there is more to Python than I present in this book. So whenever
you think to yourself, “I see I can do x with Python — can I do y too?”, maybe
you can. Again, you can find out in a Python textbook or reference manual.
This book will describe the most modern form of Python, called Python 3. It
may be that the version of Python that you have on your computer is a version
of Python 2, such as Python 2.3 or 2.7. There are only a few differences that
you may see as you use the features of Python mentioned in this book. Here
are the most important differences (for our purposes) between Python 3 and
Python 2.7, the final and most mature version of Python 2:
2
As of the time of writing, comprehensive Python documentation, including the official reference
manual, can be found at http://docs.python.org.
xi
• In Python 2, characters in a string are ASCII and not Unicode by default;
there is a separate Unicode type.
Versions of Python earlier than 2.7 have more incompatibilities than these:
check the documentation for the version you use.
In the chapters that follow I usually use the author's “we” for a first-person
pronoun, but I say “I” when I am expressing my personal opinion, speaking
of my own experiences, and so on. And I follow this British punctuation
convention: punctuation is placed inside quotation marks only if it is part of
what is being quoted. Besides being more logical (in my opinion), this treatment
avoids ambiguity. For example, here's how many American style guides tell
you to punctuate:
Is the “.” part of what you would write, or not? It can make a big difference,
as any programmer knows. There is no ambiguity this way:
I am grateful to all the friends and colleagues who have given me help,
suggestions, and support in this writing project, most prominently Lisa
Beinhoff, Horst Clausen, Jeff Havlena, Peter Henderson, Daryl Lee, Subhashish
Mazumdar, Angelica Perry, Steve Schaffer, John Shipman, and Steve Simpson.
3
Harold Abelson and Gerald Jay Sussman with Julie Sussman, Structure and Interpretation of Computer
Programs (Cambridge, Mass.: The MIT Press, 1985).
xii
Chapter 1
Introduction
1.1. Programs, data, and mathematical objects
A master programmer learns to think of programs and data at many levels of
detail at different times. Sometimes the appropriate level is bits and bytes and
machine words and machine instructions. Often, though, it is far more
productive to think and work with higher-level data objects and higher-level
program constructs.
Ultimately, at the lowest level, the program code that runs on our computers
is patterns of bits in machine words. In the early days of computing, all
programmers had to work with these machine-level instructions all the time.
Now almost all programmers, almost all the time, use higher-level
programming languages and are far more productive as a result.
The thesis of this book is that, very often, mathematical objects are exactly
the higher-level data objects we want. Some of these mathematical objects are
numbers, but many — the objects of discrete mathematics — are quite different,
as we will see.
So this book will present programming as done at a high level and with a
mathematical slant. Here's how we will view programs and data:
Programs will be text, in a form (which we call “syntax”) that does not look
much like sequences of machine instructions. On the contrary, our programs
will be in a higher-level programming language, whose syntax is designed for
1
Programs, data, and mathematical objects
The data in our programs will reside in a computer's main storage (which we
often metaphorically call “memory”) that may look like a long sequence of
machine words, but most of the time we will not be concerned with exactly
how our data objects are represented there; the data objects will look like
mathematical objects from our point of view. We assume that the main storage
is quite large, usually large enough for all the data we might want to put into
it, although not infinite in size.
We will assume that what looks simple in a program is also reasonably simple
at the level of bits and bytes and machine instructions. There will be a
straightforward correspondence between the two levels; a computer science
student or master programmer will learn how to construct implementations
of the higher-level constructs from low-level components, but from other
books than this one. We will play fair; we will not present any program
construct that hides lengthy computations or a mass of complexity in its low-
level implementation. Thus we will be able to make occasional statements
about program efficiency that may not be very specific, but that will at least
be meaningful. And you can be assured that the programming techniques that
we present will be reasonable to use in practical programs.
2
A first look at Python
Python falls into several categories of programming language that you might
hear programmers talk about:
• It's a scripting language. This term doesn't have a precise definition, but
generally it means a language that lends itself to writing little programs
called scripts, perhaps using the kinds of commands that you might type
into a command-line window on a typical computer system. For example,
some scripts are programs that someone writes on the spur of the moment
to do simple manipulations on files or to extract data from them. Some
scripts control other programs, and system administrators often use scripting
languages to combine different functions of a computer's operating system
to perform a task. We'll see examples of Python scripts shortly. (Other
scripting languages that you might encounter are Perl and Ruby.)
• It's a very high-level language, or at least it has been called that. This is
another concept that doesn't have a precise definition, but in the case of
Python it means that mathematical objects are built into the core of the
language, more so than in most other programming languages. Furthermore,
in many cases we'll be able to work with these objects in notation that
3
A first look at Python
Depending on how you use it, Python can be a language of any of these kinds
or all of them at once.
Let's look at a few simple Python programs, to give you some idea of what
Python looks like.
The first program is the kind of very short script that a Python programmer
might write to use just once and then discard. Let's say that you have just
attended a lecture, and you met someone named John, but you can't remember
his last name. Fortunately, the lecturer has a file of the names of all the
attendees and has made that file available to you. Let's say that you have put
that file on your computer and called it “names”. There are several hundred
names in the file, so you'd like to have the computer do the searching for you.
Example 1.1 shows a Python script that will display all the lines of the file
that start with the letters “John”.
You may be able to guess (and guess correctly) what most of the parts of this
script do, especially if you have done any programming in another
programming language, but I'll explain the script a line at a time. Let's not
bother with the fine points, such as what the different punctuation marks
mean in Python; you'll learn all that later. For now, I'll just explain each line
in very general terms.
file = open("names")
4
A first look at Python
This line performs an operation called “opening” a file on our computer. It's
a rather complicated sequence of operations, but the general idea is this: get
a file named “names” from our computer's file system and make it available
for our program to read from. We give the name file to the result.
Here and in the other examples in this book, we won't worry about what
might happen if the open operation fails: for example, if there is no file with
the given name, or if the file can't be read for some reason. Serious Python
programmers need to learn about the features of Python that are used for
handling situations like these, and need to include code for handling
exceptional situations in most programs that do serious work.1 In a simple
one-time script like this one, though, a Python programmer probably wouldn't
bother. In any case, we'll omit all such code in our examples, simply because
that code would only distract from the points that we are trying to make.
for line in file:
This means, “For each line in file, do what comes next.” More precisely, it
means this: take each line of file, one at a time. Each time, give that line the
name line, and then do the lines of the program that come next, the lines that
are indented.
if line.startswith("John"):
This means what it appears to mean: if line starts with the letters “John”, do
what comes next.
print(line)
Since the line of the file starts with “John”, it's one that we want to see, and
this is what displays the line. On most computers, we can run the program in
a window on our computer's screen, and print will display its results in that
window.
1
The term for such code is “exception handling”, in case you want to look up the topic in Python
documentation. Handling exceptions properly can be complicated, sometimes involving difficult design
decisions, which is why we choose to treat the topic as beyond the scope of the current book.
5
A first look at Python
If you run the program, here's what you might see (depending, of course, on
what is in the file names).
John Atencio
John Atkins
Johnson Cummings
John Davis
John Hammerstein
And so on. This is pretty much as you might expect, although there may be
a couple of surprises here. Why is this output double-spaced? Well, it turns
out that each line of the file ends with a “new line” character, and the print
operation adds another. (As you learn more details of Python, you'll probably
learn how to make output like this come out single-spaced if that's what you'd
prefer.) And why is there one person here with the first name “Johnson”
instead of “John”? That shouldn't be a surprise, since our simple little program
doesn't really find first names in a line: it just looks for lines in which the first
four letters are “John”. Anyway, this output is probably good enough for a
script that you're only going to use once, especially if it reminds you that the
person you were thinking of is John Davis.
Now let's say that you'd like to get in touch with John Davis. Your luck
continues: the lecturer has provided another file containing the names and
email addresses of all the attendees. Each line of the file contains a person's
name and that person's email address, separated by a comma.
Suppose you transfer that file to your computer and give it the name “emails”.
Then Example 1.2 shows a Python script that will find and display John
Davis's email address if it's in the file.
6
A first look at Python
These lines are very much like the first two lines of the previous program; the
only difference is the name of the file in the first line. In fact, this pattern of
code is common in programs that read a file and do something with every line
of it.
name, email = line.split(",")
The part line.split(",") splits line into two pieces at the comma. The result
is two things: the piece before the comma and the piece after the comma. We
give the names “name” and “email” to those two things.
if name == "John Davis":
This says: if name equals (in other words, is the same as) “John Davis”, do
what comes next. Python uses “==”, two adjacent equals-signs, for this kind
of comparison. You might think that just a single equals-sign would mean
“equals”, but Python uses “=” to associate a name with a thing, as we have
seen. So, to avoid any possible ambiguity, Python uses a different symbol for
comparing two things for equality.
print(email)
As our final example, let's take a very simple computational task: finding the
average of a collection of numbers. They might be a scientist's measurements
7
A first look at Python
Let's say, for the sake of the example, that they are temperatures. You have
a thermometer outside your window, and you read it at the same time each
day for a month. You record each temperature to the nearest degree, so all
your observations are whole numbers (the mathematical term for these is
“integers”). You put the numbers into a file on your computer, perhaps using
a text-editing or word-processing program; let's say that the name of the file
is “observations”. At the end of the month, you want to calculate the average
temperature for the month.
Example 1.3 shows a Python program that will do that computation. It's a
little longer than the previous two programs, but it's still short and simple
enough that we might call it a “script”.
file = open("observations")
for line in file:
n = int(line)
sum += n
count += 1
print(sum/count)
To compute the average of the numbers in the file, we need to find the sum
of all the numbers and also count how many there are. Here we give the names
8
A first look at Python
sum and count to those two values. We start both the sum and the count at
zero.
file = open("observations")
for line in file:
As in the previous two programs, these lines say: open the file that we want
and then, for each line of the file, do what comes next. Specifically, do the
lines that are indented, the next three lines.
n = int(line)
In Python, “+=” means “add the thing on the right to the thing on the left”.
So, “sum += n” means “add n to sum” and “count += 1” means “add 1 to
count”. This is the obvious way to accumulate the running sum and the running
count of the numbers that the program has seen so far.
print(sum/count)
This step is done after all the numbers in the file have been summed and
counted. It displays the result of the computation: the average of the numbers,
which is sum divided by count.
Notice, by the way, that we've used blank lines to divide the lines of the
program into logical groups. You can do this in Python, and programmers
often do. This doesn't affect what the program does, but it might make the
program a little easier for a person to read and understand.
So now you've seen three very short and simple Python programs. They aren't
entirely typical of Python programs, though, because they illustrate only a
few of the most basic parts of the Python language. Python has many more
9
A little mathematical terminology
features, and you'll learn about many of them in the remaining chapters of
this book. But these programs are enough examples of Python for now.
The first term is set. A set is just an unordered collection of different things.
For example, we can speak of the set of all the people in a room, or the set of
all the books that you have read this year, or the set of different items that
are for sale in a particular shop.
For example, we can speak of the sequence of digits in your telephone number
or the sequence of letters in your surname. Unlike a set, a sequence doesn't
have the property that all the things in it are necessarily different. For example,
many telephone numbers contain some digit more than once.
You may have heard the word “set” used in a mathematical context, or you
may know the word just from its ordinary English usage. It may seem strange
to call the word “sequence” a mathematical term, but it turns out that
10
A little mathematical terminology
sequences have some mathematical properties that we'll want to be aware of.
For now, just notice the differences between the concepts “set” and “sequence”.
Let's try applying these mathematical concepts to the sample Python programs
that we've just seen. In each of them, what kind of mathematical object is the
data that the program operates on?
First, notice that each program operates on a file. A file, at least as a Python
program sees it, is a sequence of lines. Code like this is very common in Python
programs that read files a line at a time:
file = open("observations")
for line in file:
Let's take the file of names in our first example (Example 1.1). In terms of the
information that we want to get from it, the file is a collection of names. What
kind of collection? We don't care about the order of names in it; we just want
to see all the names that start with “John”. So, assuming that our lecturer
hasn't included any name twice by mistake, the collection is a set as far as
we're concerned.
In fact, both the input and the output of this program are sets. The input is
the set of names of people who attended the lecture. The output is the set of
members of that input set that start with the letters “John”. In mathematical
terminology, the output set is a subset of the input set.
11
Random documents with unrelated
content Scribd suggests to you:
John Philip Sousa
In the closing years of the 19th century, and in the first part of the
20th, America was undergoing expansion in many directions: art,
science, literature, commerce, finance, world affairs. Hand in hand
with this development and growth came an aroused patriotism and
an expanding chauvinism. Sousa’s marches were the voice of this
new and intense national consciousness.
Among Sousa’s other marches are The Bride Elect (1897) from the
comic opera of the same name; The Fairest of the Fair (1908);
Hands Across the Sea (1899); Invincible Eagle (1901); and Saber
and Spurs (1915) dedicated to the United States Cavalry.
It was long maintained that Sousa was the composer of the famous
hymn of the Artillery branch of the United States armed services,
“The Caisson Song.” Sousa played this march in his own brilliant new
band arrangement at a Liberty Loan Drive at the Hippodrome, in
New York, in 1918. For some time thereafter Sousa was credited as
being the composer. But further research revealed the fact that the
words and music had been written in 1908 by Edmund L. Gruber,
then a lieutenant with the 5th Artillery in the Philippines.
285
Oley Speaks
Oley Speaks was born in Canal Winchester, Ohio, on June 28, 1874.
He received his musical training, principally in voice, from various
teachers including Armour Galloway and Emma Thursby. He then
filled the post of baritone soloist at churches in Cleveland, Ohio, and
New York City, including the St. Thomas Church in New York from
1901 to 1906. He also filled numerous engagements in song recitals
and performances of oratorios. He died in New York City on August
27, 1948.
Speaks was the composer of more than 250 published art songs
which have placed him in a front rank among American song
composers. Three have become outstandingly popular; there is
hardly a male singer anywhere who has not sung such all-time
favorites as “Morning,” “On the Road to Mandalay” and “Sylvia,” each
of which is among the most widely circulated and most frequently
heard art songs by an American. “Morning,” words by Frank L.
Stanton, was published in 1910. Where “Morning” is lyrical, “On the
Road to Mandalay” (published in 1907) is dramatic, a setting of the
famous poem by Rudyard Kipling. The persistent rhythmic
background suggesting drum beats, and the effective key change
from verse to chorus, have an inescapable effect on listeners.
“Sylvia,” poem by Clinton Scollard, published in 1914, is in a
sentimental mood, and like “Morning” reveals the composer’s
marked gift for sensitive lyricism.
286
Robert Stolz
Robert Stolz was born in Graz, Austria, on August 25, 1882. His
parents were musical, his father being a successful conductor and
teacher, and his mother a concert pianist. Robert’s music study took
place first with his father, then with Robert Fuchs in Vienna and
Humperdinck in Berlin. In 1901 he assumed his first post as
conductor, at an opera house in Brunn. When he was twenty-five he
was appointed conductor of the Theater-an-der-Wien in Vienna
where he remained twelve years, directing most of the masterworks
in the field of Austrian and German operettas. His own career as
composer of operettas had begun in 1903 with Schoen Lorchen
produced in Salzburg. Since then Stolz has written music for about
sixty operettas, scores for more than eighty films, and a thousand
songs in all. His music is in the light, graceful, ebullient style that has
characterized Viennese operetta music since the time of Johann
Strauss II. His most famous operettas are: Die lustigen Weiber von
Wien (1909), Die Gluecksmaedel (1910), Die Tanzgraefin (1921),
Peppina (1931), Zwei Herzen in dreiviertel Takt (1933), Fruehling im
Prater (1949) and Karneval in Wien (1950). In 1938 Stolz came to
the United States where for several years he worked in Hollywood.
After the end of World War II he returned to Vienna, remaining
active as a composer not only in that city but also in Berlin and
London.
Stolz’ most famous song is “Im Prater bluehn wieder die Baeume”
(“In the Prater the Trees Are Again Blooming”), a glowing hymn not
only to a district in Vienna famous for its frolic and amusement but
even more so to the city of Vienna itself.
A waltz from his operetta, Two Hearts in Three-Quarter Time (Zwei
Herzen in dreiviertel Takt) is perhaps one of the most celebrated
pieces in three-quarter time written in Vienna since Lehár, and it is
loved the world over. This operetta originated in 1931 as a German
motion-picture which won accolades around the world for its charm
and freshness, for which Stolz wrote a score that included his
famous waltz. It was then adapted for the stage by Paul Knepler and
J. M. Willeminsky and introduced in Zurich, Switzerland, in 1933.
This delightful text concerns the trials and tribulations of producing
an operetta. That operetta is accepted for production on the 287
condition that a good waltz melody is written for it, and the
composer Toni Hofer gets his inspiration for that tune from lovely
Hedi, the young sister of the librettist. This waltz, of course, is the
title number, which, in its lilt and buoyancy and Viennese love of life,
is in the best tradition of Viennese popular music.
Oscar Straus
The main musical selection from this operetta is the title number, a
waltz which first appears as a duet between Niki and a fellow officer
in the first act, then recurs throughout the operetta, and finally
brings it to a close. Two sprightly march excerpts, from the second
and third acts respectively, and the duet, “Piccolo, piccolo, tsin, tsin,
tsin” are also popular.
Eduard Strauss
Eduard Strauss, the younger brother of Johann Strauss II, was born
in Vienna on March 15, 1835. He studied music in Vienna with G.
Preyer following which he made his café-house debut in 1862 289
by conducting his father’s orchestra at the Dianasaal. He
continued to lead his father’s orchestra at the Volksgarten and
Musikverein as well as at various leading café-houses in Vienna. He
also made many tours, including two of the United States in 1892
and 1901. In 1902 he dissolved the musical organization which his
father had founded three-quarters of a century earlier and which all
that time had dominated the musical life of Vienna. Besides
conducting this orchestra, he also substituted from time to time for
his famous brother, Johann Strauss II, and in 1870 he succeeded
him as conductor of the court balls. Eduard Strauss died in Vienna
on December 28, 1916.
Johann Strauss I was one of the two waltz kings of Vienna bearing
that name. The more famous one, the composer of “The Blue
Danube” was the son. But the father was also one of Vienna’s most
popular composers and café-house conductors. He was born in
Vienna on March 14, 1804, and as a boy he studied both the violin
and harmony. His love for music, combined with the decision of his
parents to make him a bookbinder, led him to run away from home.
When he was fifteen he joined Michael Pamer’s orchestra which
played at the Sperl café; another of its members was Josef Lanner,
soon also to become a major figure in Vienna’s musical life. As
Lanner’s star rose, so did Johann Strauss’. First Strauss 290
played in the Lanner Quartet at the Goldenen Rebbuhn and
other cafés; after that he was a member of the Lanner Orchestra
which appeared in Vienna’s leading cafés. When Lanner’s mounting
success made it necessary for him to create two orchestras, he
selected Johann Strauss to conduct one of them. Then, in 1826,
Johann Strauss formed an orchestra of his own which made its
debut at the Bock Café. For the next two decades he was the idol of
Vienna, Lanner’s only rival. By 1830 he had two hundred musicians
under him. His major successes as a café-house conductor came at
the Sperl and the Redoutensaal. But his fame spread far beyond
Vienna. In 1833 he toured all Austria, and in 1834 he appeared in
Berlin. After that he performed in all the major European capitals,
achieving formidable successes in London and Paris. Meanwhile, in
1833, he had become bandmaster of the first Vienna militia
regiment, one of the highest honors a performer of light music could
achieve in Austria. In 1845 he was appointed conductor of the
Viennese court balls. He died in Vienna on September 25, 1849.
Not much of the father Strauss’ library of music has survived. The
exceptions are the following waltzes: Caecilien, Donaulieder, the
Kettenbruecken, and the Lorelei Rheinsklaenge. To the waltz, the
older Johann Strauss brought a symphonic dimension it had
heretofore not known, particularly in his spacious introductions of
which the thirty-bar prelude of the Lorelei Rheinsklaenge is an
outstanding example. He also carried over to the waltz a variety of
mood and feeling and a lightness of touch new for this peasant
dance. “This demon of the ancient Viennese folk spirit,” wrote
Richard Wagner after hearing Strauss perform one of his own
waltzes in Vienna, “trembled at the beginning of a new waltz like a
python preparing to spring, and it was more the ecstasy produced
by the music than the drinks among the enchanted audience that
stimulated that magical first violin to almost dangerous flights.”
Of his other music the most famous is the Radetzky March. Count
Radetzky was an Austrian military hero, victor over the 291
Italians in 1848-1849. In honor of his Italian triumphs and
suppression of the Italian nationalist movement, Strauss wrote the
spirited, sharply accented march in 1848 which almost at once
became the musical symbol of Hapsburg Vienna and Austrian
military power. The following programmatic interpretation of this
music by H. E. Jacob is of interest: “Drunk with triumph, the
Generalissimo’s battalions hurl themselves down into Lombardy.
They are close on the heels of the fleeing troops of King Albert, the
King of Sardinia. And then comes a new phase of the march to
accompany the victorious troops. A different sun shines down on
this, a memory of Vienna, a lingering trace of the feel of girls’ arms;
scraps of a dance song with a backward glance at three-quarter
time. But on they go, still forward. There are no more shots, there is
laughter. The trio follows. The ... superdominant ... hoisted as if it
were a flag.... Finally comes the return of the principal theme with
the laurels and gaiety of victory.”
Johann Strauss II
Johann Strauss II, son of the first Johann Strauss, was born in
Vienna on October 25, 1825. Though he showed an unmistakable
bent for music from his childhood on, he was forbidden by his father
to study music or to indulge in any musical activity whatsoever. The
young Johann Strauss, encouraged by his mother, was forced to
study the violin surreptitiously with a member of his father’s
orchestra. Only after the father had deserted his family, to set up
another home with his mistress, did young Johann begin to devote
himself completely and openly to music. After studying the violin
with Kohlmann and counterpoint with Joseph Drechsler, he made his
debut as a café-house conductor and composer at Dommayer’s
Casino in Hietzing, near Vienna, on October 15, 1844. The event was
widely publicized and dramatized in Vienna, since the son 292
was appearing as a rival to his father. For this momentous
debut, the son wrote the first of his waltzes—the Gunstwerber and
the Sinngedichte—which aroused immense enthusiasm. He had to
repeat the last-named waltz so many times that the people in the
café lost count. “Ah, these Viennese,” reported the editor of The
Wanderer. “A new waltz player, a piece of world history. Good night,
Lanner. Good evening, Father Strauss. Good morning, Son Strauss.”
The father had not attended this performance, but learned of his
son’s triumph from one of his cronies.
Thus a new waltz king had arisen in Vienna. His reign continued until
the end of the century. For fifty years Johann Strauss II stood alone
and unequalled as the musical idol of Vienna. His performances were
the talk of the town. His own music was on everyone’s lips. After the
death of father Strauss in 1849, he combined members of the older
man’s orchestra with his own, and toured all of Europe with the
augmented ensemble. From 1863 to 1870 he was conductor of the
Viennese balls, a post once held by his father. In 1872 he made
sensational appearances in Boston and New York. All the while he
was writing some of the most famous waltzes ever written, as well
as quadrilles and polkas and other dance pieces. And in 1871, with
the première in Vienna of Indigo he entered upon a new field, that
of the operetta, in which once again he was to become a dominating
figure. He was admired not merely by the masses but also by some
of the greatest musicians of his generation—Brahms, Wagner, Verdi,
Hans von Buelow, Offenbach, Goldmark, Gounod, all of whom
expressed their admiration for his music in no uncertain terms. In
1894, Vienna celebrated the 50th anniversary of his debut with a
week of festive performances; congratulations poured into Vienna
from all parts of the civilized world. He died five years after that—in
Vienna on June 3, 1899—and was buried near Schubert, Beethoven,
and Brahms.
If the epoch of “old Vienna” died with Johann Strauss, it was 293
also born with him. After 1825, the social and intellectual
climate in the imperial city changed perceptibly. The people, always
gay, now gave themselves up to frivolity. For this, political conditions
had been responsible. The autocratic rule of Francis I brought on
tyranny, repression, and an army of spies and informers. As a result,
the Viennese went in for diversions that were safe from a political
point of view: flirtation, gossip, dancing. They were partial to light
musical plays and novels. Thus, an attitude born out of expediency,
became, with the passing of time, an inextricable part of everyday
life in Vienna.
Johann Strauss II was the genius of the Viennese waltz. More than
anybody before him or since he lifted the popular dance to such
artistic importance that his greatest waltzes are often performed at
symphony concerts by the world’s greatest orchestras under the
foremost conductors. Inexhaustible was his invention; richly
inventive, his harmonic writing; subtle and varied his gift at
orchestration; fresh and personal his lyricism; aristocratic his
structure. To the noted 20th century German critic, Paul Bekker, the
Strauss waltz contained “more melodies than a symphony of
Beethoven, and the aggregate of Straussian melodies is surely
greater than the aggregate of Beethoven’s.”
The following are the most popular of the Johann Strauss waltzes:
The Blue Danube (An der schoenen blauen Donau), op. 314, is
perhaps the most famous waltz ever written, and one of the
greatest. It is now a familiar tale how Brahms, while autographing a
fan of Strauss’ wife, scribbled a few bars of this waltz and wrote
underneath, “alas, not by Brahms.” Strauss wrote The Blue Danube
at the request of John Herbeck, conductor of the Vienna Men’s
Singing Society; thus the original version of the waltz is for chorus
and orchestra, the text being a poem by Karl Beck in praise of
Vienna and the Danube. Strauss wrote this waltz in 1867, and it was
introduced on February 15 of the same year at the Dianasaal by
Strauss’ orchestra, supplemented by Herbeck’s singing society. The
audience was so enthusiastic that it stood on the seats and
thundered for numerous repetitions. In the Spring of 1867, Strauss
introduced his waltz to Paris at the International Exposition where it
was a sensation. A tremendous ovation also greeted it when Strauss
performed it for the first time in London, at Covent Garden in 1869.
When Johann Strauss made his American debut, in Boston in 1872,
he conducted The Blue Danube with an orchestra numbering a
thousand instruments and a chorus of a thousand voices! Copies of
the music were soon in demand in far-off cities of Asia and Australia.
The publisher, Spina, was so deluged by orders he had to have a
hundred new copper plates made from which to print over a million
copies.
Tales from the Vienna Woods (G’schichten aus dem Wiener Wald),
op. 325—performed for the first time by the Strauss orchestra at the
Neue Welt café in 1868—is a bucolic picture of Nature’s beauty in
the forests skirting Vienna. The beauty of Nature is suggested in the
stately introduction with its open fifths and its serene melody for
cello followed by a flute cadenza. All the loveliness of the Vienna
woods is then represented by a waltz melody (originally scored for
zither, but now most often presented by strings), a loveliness that is
carried on with incomparable grace and charm by the ensuing waltz
tunes.
Vienna Blood (Wiener Blut), op. 354, like so many other Strauss
waltzes, is a hymn of praise to Strauss’ native cities; but where other
waltzes are light and carefree, this one is more often moody,
dreamy, and at times sensual. After the introduction come four waltz
melodies, the first full of fire and the last one touched with
sentimentality. The second and third waltz tunes are interesting for
their rhythmic vitality and marked syncopations.
Wine, Woman and Song (Wein, Weib und Gesang), op. 333, opens
with an eloquent mood picture that is virtually an independent
composition, even though it offers suggestions of later melodies.
This is a spacious ninety-one bar introduction that serves as an
eloquent peroration to the four waltz melodies that follow—each
graceful, vivacious, and at times tender and contemplative. Richard
Wagner, upon hearing Anton Seidl conduct this music, was so moved
by it that at one point he seized the baton from Seidl’s hand and
conducted the rest of the piece himself.
Beyond being Vienna’s waltz king, Johann Strauss II was also one of
its greatest composers of operettas. Indeed, if a vote were to be
cast for the greatest favorite among all Vienna operettas the chances
are the choice would fall on Strauss’ Die Fledermaus (The Bat), first
produced in Vienna on April 5, 1874, book by Carl Haffner and
Richard Genée based on a French play by Meilhac and Halévy. This
work is not only a classic of the light theater, but even a staple in the
repertory of the world’s major opera houses. It is a piece of dramatic
intrigue filled with clever, bright and at times risqué humor, as well
as irony and gaiety. The plot, in line with operetta tradition, involves
a love intrigue: between Rosalinda, wife of Baron von Eisenstein,
and Alfred. The Baron is sought by the police for some slight
indiscretion, and when they come to the Baron’s home and find
Alfred there, they mistake him for the Baron and arrest him. 297
Upon discovering he is supposed to be in jail, the Baron
decides to take full advantage of his liberty by attending a masked
ball at Prince Orlovsky’s palace and making advances there to the
lovely women. But one of the masked women with whom he flirts is
his own wife. Eventually, the identity of both is uncovered, to the
embarrassment of the Baron, and this merry escapade ends when
the Baron is compelled to spend his time in jail.
298
Josef Strauss
Gilbert and Sullivan came to the parting of the ways in 1890, the
final rift precipitated by a silly argument over the cost of a carpet for
the Savoy Theater. But the differences between them had long been
deep rooted. An attempt to revive the partnership was made in 1893
with Utopia Limited, and again with The Grand Duke in 1896. Both
comic operas were failures.
It is irony fitting for a Gilbert and Sullivan comic opera that the music
on which Sullivan lavished his most fastidious attention and of which
he was most proud has been completely forgotten (except for one or
two minor exceptions). But the music upon which he looked with
such condescension and self apology is that which has made him an
immortal—in the theater if not in the concert world. For where
Sullivan was heavy-handed, pretentious, and often stilted in his
oratorios, serious operas, and orchestral compositions, he was
consistently vital, fresh, personal, and vivacious in his lighter 301
music. In setting Gilbert’s lyrics to music, Sullivan was always
capable of finding the musical mot juste to catch every nuance of
Gilbert’s wit and satire. So neatly, even inevitably, does the music fit
the words that it is often difficult to think of one without the other.
Like Gilbert, Sullivan was a master of parody and satire; he liked
particularly to mock at the pretensions of grand opera, oratorio, and
the sentimental ballad, pretensions of which he himself was a victim
when he endeavored to work in those fields. Like Gilbert, he had a
pen that raced with lightning velocity in the writing of patter music
to patter verses. Sullivan, moreover, had a reservoir of melodies
seemingly inexhaustible—gay tunes, mocking tunes, and tunes filled
with telling sentiment—and he was able to adapt the fullest
resources of his remarkable gift at harmony, rhythm and
orchestration to the manifold demands of the stage. He was no
man’s imitator. Without having recourse to experimentation or
unorthodox styles and techniques, his style and manners were so
uniquely his that, as T. F. Dunhill has said, “his art is always
recognizable.... The Sullivan touch is unmistakable and can be felt
instantly.”
The Gondoliers was the last of the Gilbert and Sullivan comic operas
to survive in the permanent repertory. It was produced on December
7, 1889. After the operatic pretension of the Yeomen of the Guard
which had preceded it, The Gondoliers represented a welcome
return by the authors to the world of paradox, absurdity, and
confusion. It has aptly been described as a “farce of errors.” The
setting is Venice in the middle of the 18th century. The Duke and
Duchess of Plaza-Toro come to Venice accompanied by their
daughter, Casilda, and a drummer boy, Luiz, who loves her. In her
childhood, Casilda had married the infant heir to the throne of
Barataria. This heir had then been stolen and entrusted to the care
of a gondolier who raised him as one of his two sons. In time the
gondolier himself has forgotten which of his two boys is of royal
blood. To complicate matters even further, the two gondolier boys,
Marco and Giuseppe, are married. Thus it seems impossible to solve
the problem as to who really is the heir to Barataria’s throne and by
the same token Gasilda’s husband. But when this problem is finally
unscrambled it turns out that the heir is neither Marco nor Giuseppe,
but none other than Luiz.
In its own day much of its appeal was due to its exotic 304
setting of Japan and strange Japanese characters. Such a
novelty for the English stage was the strong spice that endowed the
play with much of its succulent flavor. Gilbert’s inspiration had been
a miniature Japanese village set up in the Knightsbridge section of
London which aroused and stimulated the interest of the English
people in all things Japanese. Gilbert was one of those who became
fascinated by this Oriental exhibit, and his fascination led him to
conceive a comic opera with a Japanese background.