100% found this document useful (2 votes)
14 views

Discovering Computer Science Interdisciplinary Problems Principles and Python Programming 2nd Edition Jessen Havill pdf download

The document provides information about the second edition of 'Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming' by Jessen Havill, published in 2021. It includes links to download the book and other related resources, along with a detailed table of contents outlining various chapters and topics covered. The book is part of the Chapman & Hall/CRC Textbooks in Computing series and addresses key computer science concepts using Python programming.

Uploaded by

rylkoboquec4
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
14 views

Discovering Computer Science Interdisciplinary Problems Principles and Python Programming 2nd Edition Jessen Havill pdf download

The document provides information about the second edition of 'Discovering Computer Science: Interdisciplinary Problems, Principles, and Python Programming' by Jessen Havill, published in 2021. It includes links to download the book and other related resources, along with a detailed table of contents outlining various chapters and topics covered. The book is part of the Chapman & Hall/CRC Textbooks in Computing series and addresses key computer science concepts using Python programming.

Uploaded by

rylkoboquec4
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Discovering Computer Science Interdisciplinary

Problems Principles and Python Programming 2nd


Edition Jessen Havill download

https://textbookfull.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-2nd-
edition-jessen-havill-2/

Download more ebook from https://textbookfull.com


We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!

Discovering Computer Science Interdisciplinary Problems


Principles and Python Programming 2nd Edition Jessen
Havill

https://textbookfull.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-2nd-
edition-jessen-havill-2/

Discovering Computer Science Interdisciplinary Problems


Principles and Python Programming 1st Edition Jessen
Havill

https://textbookfull.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-1st-
edition-jessen-havill/

Discovering Computer Science Interdisciplinary Problems


Principles and Python Programming First Edition Jessen
Havill

https://textbookfull.com/product/discovering-computer-science-
interdisciplinary-problems-principles-and-python-programming-
first-edition-jessen-havill/

Python Programming An Introduction to Computer Science


John M. Zelle

https://textbookfull.com/product/python-programming-an-
introduction-to-computer-science-john-m-zelle/
Python Programming An Introduction to Computer Science
3rd Edition John M. Zelle

https://textbookfull.com/product/python-programming-an-
introduction-to-computer-science-3rd-edition-john-m-zelle/

Data Science from Scratch First Principles with Python


2nd Edition Joel Grus

https://textbookfull.com/product/data-science-from-scratch-first-
principles-with-python-2nd-edition-joel-grus/

Data Science from Scratch First Principles with Python


2nd Edition Grus Joel

https://textbookfull.com/product/data-science-from-scratch-first-
principles-with-python-2nd-edition-grus-joel/

Practical Programming An Introduction to Computer


Science Using Python 3 6 3rd Edition Paul Gries

https://textbookfull.com/product/practical-programming-an-
introduction-to-computer-science-using-python-3-6-3rd-edition-
paul-gries/

Programming Interview Problems: Dynamic Programming


(with solutions in Python) 1st Edition Leonardo Rossi

https://textbookfull.com/product/programming-interview-problems-
dynamic-programming-with-solutions-in-python-1st-edition-
leonardo-rossi/
Discovering Computer Science
Chapman & Hall/CRC
Textbooks in Computing
Series Editors
John Impagliazzo
Andrew McGettrick

Pascal Hitzler, Markus Krötzsch, and Sebastian Rudolph, Foundations of Semantic Web Technologies
Henrik Bærbak Christensen, Flexible, Reliable Software: Using Patterns and Agile Development
John S. Conery, Explorations in Computing: An Introduction to Computer Science
Lisa C. Kaczmarczyk, Computers and Society: Computing for Good
Mark Johnson, A Concise Introduction to Programming in Python
Paul Anderson, Web 2.0 and Beyond: Principles and Technologies
Henry Walker, The Tao of Computing, Second Edition
Ted Herman, A Functional Start to Computing with Python
Mark Johnson, A Concise Introduction to Data Structures Using Java
David D. Riley and Kenny A. Hunt, Computational Thinking for the Modern Problem Solver
Bill Manaris and Andrew R. Brown, Making Music with Computers: Creative Programming in Python
John S. Conery, Explorations in Computing: An Introduction to Computer Science and Python Programming
Jessen Havill, Discovering Computer Science: Interdisciplinary Problems, Principles, and Python
Programming
Efrem G. Mallach, Information Systems: What Every Business Student Needs to Know
Iztok Fajfar, Start Programming Using HTML, CSS, and JavaScript
Mark C. Lewis and Lisa L. Lacher, Introduction to Programming and Problem-Solving Using Scala,
Second Edition
Aharon Yadin, Computer Systems Architecture
Mark C. Lewis and Lisa L. Lacher, Object-Orientation, Abstraction, and Data Structures Using Scala,
Second Edition
Henry M. Walker, Teaching Computing: A Practitioner’s Perspective
Efrem G. Mallach, Information Systems:What Every Business Student Needs to Know, Second Edition
Jessen Havill, Discovering Computer Science: Interdisciplinary Problems, Principles, and Python
Programming, Second Edition
For more information about this series please visit:
https://www.crcpress.com/Chapman--HallCRC-Textbooks-in-Computing/book-series/CANDHTEXCO
MSER?page=2&order=pubdate&size=12&view=list&status=published,forthcoming
Discovering Computer Science
Interdisciplinary Problems, Principles, and
Python Programming
Second Edition

Jessen Havill
Second edition published 2021
by CRC Press
2 Park Square, Milton Park, Abingdon, Oxon, OX14 4RN

and by CRC Press


6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742

© 2021 Jessen Havill

The right of Jessen Havill to be identified as author of this work has been asserted by him in accordance with sections
77 and 78 of the Copyright, Designs and Patents Act 1988.

All rights reserved. No part of this book may be reprinted or reproduced or utilised in any form or by any electronic,
mechanical, or other means, now known or hereafter invented, including photocopying and recording, or in any infor­
mation storage or retrieval system, without permission in writing from the publishers.

For permission to photocopy or use material electronically from this work, access www.copyright.com or contact the
Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. For works that are
not available on CCC please contact mpkbookspermissions@tandf.co.uk

Trademark notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation without intent to infringe.

British Library Cataloguing-in-Publication Data


A catalogue record for this book is available from the British Library

Library of Congress Cataloging-in-Publication Data

Names: Havill, Jessen, author.


Title: Discovering computer science : interdisciplinary problems,
principles, and Python programming / Jessen Havill.
Description: Second edition. | Boca Raton : CRC Press, 2021. | Series:
Chapman & Hall/CRC press textbooks in computing | Includes
bibliographical references and index.
Identifiers: LCCN 2020030144 | ISBN 9780367472498 (paperback) | ISBN
9780367613358 (hardback) | ISBN 9781003037149 (ebook)
Subjects: LCSH: Computer science--Textbooks. | Python (Computer program
language)--Textbooks.
Classification: LCC QA76 .H3735 2021 | DDC 005.13/3--dc23
LC record available at https://lccn.loc.gov/2020030144

ISBN: 9780367613358 (hbk)


ISBN: 9780367472498 (pbk)
ISBN: 9781003037149 (ebk)

Typeset in Computer Modern font


by Cenveo Publisher Services
Contents

Preface xv

Acknowledgments xxiii

About the author xxv

Chapter 1 ∎ How to Solve It 1


1.1 UNDERSTAND THE PROBLEM 3
A first problem: computing reading level 4
Functional abstraction 5
1.2 DESIGN AN ALGORITHM 6
Take it from the top 7
Pseudocode 10
Implement from the bottom 14
1.3 WRITE A PROGRAM 23
Welcome to the circus 23
What’s in a name? 28
Interactive computing 31
Looking ahead 32
1.4 LOOK BACK 36
Testing 37
Algorithm efficiency 39
1.5 SUMMARY AND FURTHER DISCOVERY 45

Chapter 2 ∎ Visualizing Abstraction 49


2.1 DATA ABSTRACTION 51
Turtle graphics 53
2.2 DRAWING FLOWERS AND PLOTTING EARTHQUAKES 55
Iteration 57
Tangent 2.1 Defining colors 60

v
vi • Contents

Data visualization 62
2.3 FUNCTIONAL ABSTRACTION 66
Function parameters 69
2.4 PROGRAMMING IN STYLE 77
Program structure 78
Documentation 79
Tangent 2.2 Global variables 80
Self-documenting code 83
2.5 A RETURN TO FUNCTIONS 87
The math module 88
Writing functions with return values 89
Return vs. print 92
2.6 SCOPE AND NAMESPACES 97
Local namespaces 98
The global namespace 101
2.7 SUMMARY AND FURTHER DISCOVERY 105

Chapter 3 ∎ Inside a Computer 107


3.1 COMPUTERS ARE DUMB 108
Tangent 3.1 High performance computing 109
Machine language 111
Tangent 3.2 Byte code 112
3.2 EVERYTHING IS BITS 112
Bits are switches 112
Bits can represent anything 113
Tangent 3.3 Hexadecimal notation 114
Computing with bits 114
3.3 COMPUTER ARITHMETIC 118
Limited precision 118
Tangent 3.4 Floating point notation 120
Error propagation 120
Division 121
Complex numbers 122
*3.4 BINARY ARITHMETIC ***
More limited precision

*
Sections with *** in lieu of a page number are available on the book website.
Contents • vii

Negative integers
Designing an adder
Implementing an adder
3.5 THE UNIVERSAL MACHINE 124
3.6 SUMMARY AND FURTHER DISCOVERY 126

Chapter 4 ∎ Growth and Decay 129


4.1 ACCUMULATORS 130
Managing a fishing pond 130
Measuring network value 136
Organizing a concert 139
4.2 DATA VISUALIZATION 150
4.3 CONDITIONAL ITERATION 155
When will the fish disappear? 155
When will your nest egg double? 157
*4.4 CONTINUOUS MODELS ***
Difference equations
Radiocarbon dating
Tradeoffs between accuracy and time
Simulating an epidemic
*4.5 NUMERICAL ANALYSIS ***
The harmonic series
Approximating π
Approximating square roots
4.6 SUMMING UP 161
Tangent 4.1 Triangular numbers 163
4.7 FURTHER DISCOVERY 164
*4.8 PROJECTS ***
4.1 Parasitic relationships
4.2 Financial calculators
4.3 Market penetration
4.4 Wolves and moose

Chapter 5 ∎ Forks in the Road 165


5.1 RANDOM WALKS 166
Tangent 5.1 Interval notation 167
One small step 167
viii • Contents

Monte Carlo simulation 171


*5.2 PSEUDORANDOM NUMBER GENERATORS ***
Implementation
Testing randomness
*5.3 SIMULATING PROBABILITY DISTRIBUTIONS ***
The central limit theorem
5.4 BACK TO BOOLEANS 180
Predicate functions 182
Short circuit evaluation 183
DeMorgan’s laws 184
Thinking inside the box 187
Many happy returns 192
5.5 DEFENSIVE PROGRAMMING 199
Checking parameters 199
Assertions 202
Unit testing 204
Tangent 5.2 Unit testing frameworks 205
Testing floats 207
Catching exceptions 207
5.6 GUESS MY NUMBER 210
Ending the game nicely 212
Friendly hints 213
A proper win/lose message 214
5.7 SUMMARY AND FURTHER DISCOVERY 219
*5.8 PROJECTS ***
5.1 The magic of polling
5.2 Escape!

Chapter 6 ∎ Text, Documents, and DNA 221


6.1 FIRST STEPS 222
Normalization 223
Tangent 6.1 Natural language processing 224
Tokenization 228
Creating your own module 232
Testing your module 233
6.2 TEXT DOCUMENTS 238
Contents • ix

Reading from text files 239


Writing to text files 242
Reading from the web 243
6.3 ENCODING STRINGS 246
Computing checksums 246
Unicode 247
Tangent 6.2 Compressing text files 250
Indexing and slicing 251
6.4 A CONCORDANCE 256
Finding a word 257
A concordance entry 262
A complete concordance 263
6.5 WORD FREQUENCY TRENDS 266
Finding the frequency of a word 268
Getting the frequencies in slices 269
Plotting the frequencies 270
6.6 COMPARING TEXTS 272
Dot plots 274
*6.7 TIME COMPLEXITY ***
Best case vs. worst case
Asymptotic time complexity
*6.8 COMPUTATIONAL GENOMICS ***
A genomics primer
Basic DNA analysis
Transforming sequences
Comparing sequences
Reading sequence files
6.9 SUMMARY AND FURTHER DISCOVERY 281
*6.10 PROJECTS ***
6.1 Polarized politics
6.2 Finding genes

Chapter 7 ∎ Data Analysis 285


7.1 SUMMARY STATISTICS 286
Mean and variance 286
Minimum and maximum 288
x • Contents

7.2 WRANGLING DATA 293


Smoothing data 294
A more efficient algorithm 295
Modifying lists in place 297
List operators and methods 302
*List comprehensions 305
Tangent 7.1 NumPy arrays 306
7.3 TALLYING FREQUENCIES 310
Word frequencies 310
Dictionaries 311
Tangent 7.2 Hash tables 315
Finding the most frequent word 315
Bigram frequencies 317
Tangent 7.3 Sentiment analysis 318
7.4 READING TABULAR DATA 325
Earthquakes 326
*7.5 DESIGNING EFFICIENT ALGORITHMS ***
Removing duplicates
A first algorithm
A more elegant algorithm
A more efficient algorithm
*7.6 LINEAR REGRESSION ***
*7.7 DATA CLUSTERING ***
Defining similarity
A simple example
Implementing k-means clustering
Locating bicycle safety programs
7.8 SUMMARY AND FURTHER DISCOVERY 333
Tangent 7.4 Privacy in the age of big data 334
*7.9 PROJECTS ***
7.1 Climate change
7.2 Does education influence unemployment?
7.3 Maximizing profit
7.4 Admissions
7.5 Preparing for a 100-year flood
7.6 Voting methods
Contents • xi

7.7 Heuristics for traveling salespeople

Chapter 8 ∎ Flatland 335


8.1 TABULAR DATA 335
Reading a table of temperatures 336
Tangent 8.1 Pandas 339
8.2 THE GAME OF LIFE 342
Creating a grid 344
Initial configurations 345
Surveying the neighborhood 346
Performing one pass 347
Tangent 8.2 NumPy arrays in two dimensions 349
Updating the grid 349
8.3 DIGITAL IMAGES 353
Colors 353
Tangent 8.3 Additive vs. subtractive color models 354
Image filters 355
Tangent 8.4 Image storage and compression 356
Transforming images 358
8.4 SUMMARY AND FURTHER DISCOVERY 363
*8.5 PROJECTS ***
8.1 Modeling segregation
8.2 Modeling ferromagnetism
8.3 Growing dendrites
8.4 Simulating an epidemic

Chapter 9 ∎ Self-similarity and Recursion 365


9.1 FRACTALS 365
Trees 367
Snowflakes 369
9.2 RECURSION AND ITERATION 375
Solving a problem recursively 379
Palindromes 380
Guessing passwords 382
9.3 THE MYTHICAL TOWER OF HANOI 388
*Is the end of the world nigh? 390
9.4 RECURSIVE LINEAR SEARCH 392
xii • Contents

*Efficiency of recursive linear search 393


9.5 DIVIDE AND CONQUER 396
Buy low, sell high 397
Navigating a maze 400
*9.6 LINDENMAYER SYSTEMS ***
Formal grammars
L-systems
Implementing L-systems
9.7 SUMMARY AND FURTHER DISCOVERY 405
*9.8 PROJECTS ***
9.1 Lindenmayer’s beautiful plants
9.2 Gerrymandering
9.3 Percolation

Chapter 10 ∎ Organizing Data 407


10.1 BINARY SEARCH 408
Tangent 10.1 Databases 409
Efficiency of iterative binary search 412
A spelling checker 414
Recursive binary search 415
*Efficiency of recursive binary search 416
10.2 SELECTION SORT 418
Implementing selection sort 419
Efficiency of selection sort 422
Querying data 423
10.3 INSERTION SORT 427
Implementing insertion sort 428
Efficiency of insertion sort 430
10.4 EFFICIENT SORTING 433
Merge sort 433
Internal vs. external sorting 437
Efficiency of merge sort 437
*10.5 TRACTABLE AND INTRACTABLE ALGORITHMS ***
Hard problems
10.6 SUMMARY AND FURTHER DISCOVERY 441
*10.7 PROJECTS ***
Contents • xiii

10.1 Creating a searchable database


10.2 Binary search trees

Chapter 11 ∎ Networks 443


11.1 MODELING WITH GRAPHS 444
Making friends 446
11.2 SHORTEST PATHS 451
Breadth-first search 451
Finding the actual paths 455
11.3 IT’S A SMALL WORLD. . . 458
Small world networks 458
Clustering coefficients 459
Scale-free networks 461
11.4 RANDOM GRAPHS 464
11.5 SUMMARY AND FURTHER DISCOVERY 467
*11.6 PROJECTS ***
11.1 Diffusion of ideas and influence
11.2 Slowing an epidemic
11.3 The Oracle of Bacon

Chapter 12 ∎ Object-oriented Design 469


12.1 SIMULATING AN EPIDEMIC 470
Object design 471
Person class 472
Augmenting the Person class 477
World class 479
The simulation 481
12.2 OPERATORS AND POLYMORPHISM 486
Designing a Pair ADT 487
Pair class 488
Arithmetic methods 489
Special methods 491
Comparison operators 493
Indexing 494
*12.3 A FLOCKING SIMULATION ***
The World
Boids
xiv • Contents

*12.4 A STACK ADT ***


Stack class
Reversing a string
Converting numbers to other bases
*12.5 A DICTIONARY ADT ***
Hash tables
Implementing a hash table
Indexing
ADTs vs. data structures
12.6 SUMMARY AND FURTHER DISCOVERY 499
*12.7 PROJECTS ***
12.1 Tracking GPS coordinates
12.2 Economic mobility
12.3 Slime mold aggregation
12.4 Boids in space

Bibliography 501

Appendix A ∎ Python Library Reference ***

Appendix B ∎ Selected Exercise Solutions ***

Index 505
Preface

I nthree
my view, an introductory computer science course should strive to accomplish
things. First, it should demonstrate to students how computing has become
a powerful mode of inquiry, and a vehicle of discovery, in a wide variety of disciplines.
This orientation is also inviting to students of the natural and social sciences, and the
humanities, who increasingly benefit from an introduction to computational thinking,
beyond the limited “black box” recipes often found in manuals and “Computing
for X” books. Second, the course should engage students in computational problem
solving, and lead them to discover the power of abstraction, efficiency, and data
organization in the design of their solutions. Third, the course should teach students
how to implement their solutions as computer programs. In learning how to program,
students more deeply learn the core principles, and experience the thrill of seeing
their solutions come to life.
Unlike most introductory computer science textbooks, which are organized around
programming language constructs, I deliberately lead with interdisciplinary problems
and techniques. This orientation is more interesting to a more diverse audience, and
more accurately reflects the role of programming in problem solving and discovery.
A computational discovery does not, of course, originate in a programming language
feature in search of an application. Rather, it starts with a compelling problem which
is modeled and solved algorithmically, by leveraging abstraction and prior experience
with similar problems. Only then is the solution implemented as a program.
Like most introductory computer science textbooks, I introduce programming skills
in an incremental fashion, and include many opportunities for students to practice
them. The topics in this book are arranged to ease students into computational
thinking, and encourage them to incrementally build on prior knowledge. Each
chapter focuses on a general class of problems that is tackled by new algorithmic
techniques and programming language features. My hope is that students will leave
the course, not only with strong programming skills, but with a set of problem
solving strategies and simulation techniques that they can apply in their future work,
whether or not they take another computer science course.
I use Python to introduce computer programming for two reasons. First, Python’s
intuitive syntax allows students to focus on interesting problems and powerful
principles, without unnecessary distractions. Learning how to think algorithmically
is hard enough without also having to struggle with a non-intuitive syntax. Second,
the expressiveness of Python (in particular, low-overhead lists and dictionaries)
expands tremendously the range of accessible problems in the introductory course.

xv
xvi • Preface

Teaching with Python over the last fifteen years has been a revelation; introductory
computer science has become fun again.

Changes in the second edition


In this comprehensive, cover-to-cover update, some sections were entirely rewritten
while others saw only minor revisions. Here are the highlights:

Problem solving The new first chapter, How to Solve It, sets the stage by focusing on
Polya’s elegant four-step problem solving process, adapted to a computational frame­
work. I introduce informal pseudocode, functional decomposition, hand-execution
with informal trace tables, and testing, practices that are now carried on throughout
the book. The introduction to Python (formally Chapter 2) is integrated into this
framework. Chapter 7, Designing Programs, from the first edition has been elimi­
nated, with that material spread out more naturally among Chapters 1, 5, and 6 in
the second edition.
Chapter 2, Visualizing Abstraction (based on the previous Chapter 3), elaborates on
the themes in Chapter 1, and their implementations in Python, introducing turtle
graphics, functions, and loops. The new Chapter 3, Inside a Computer (based on
the previous Sections 1.4 and 2.5), takes students on a brief excursion into the simple
principles underlying how computers work.

Online materials To reduce the size of the printed book, we have moved some
sections and all of the projects online. These sections are marked in the table of
contents with ***. Online materials are still indexed in the main book for convenience.

Exercises I’ve added exercises to most sections, bringing the total to about 750.
Solutions to exercises marked with an asterisk are available online for both students
and self-learners.

Digital humanities The interdisciplinary problems in the first edition were focused
primarily in the natural and social sciences. In this edition, especially in Chapters 1,
6, and 7, we have added new material on text analysis techniques commonly used in
the “digital humanities.”

Object-oriented design Chapter 12 begins with a new section to introduce object-


oriented design in a more concrete way through the development of an agent-based
simulation of a viral epidemic. The following sections flesh out more details on how
to implement polymorphic operators and collection classes.
Preface • xvii

Book website
Online materials for this book are available at

https://www.discoveringCS.net.
Here you will find

• additional “optional” sections, marked with an asterisk in the main text,


• over thirty interdisciplinary programming projects,
• solutions to selected exercises,
• programs and data files referenced in the text, exercises, and projects, and
• pointers for further exploration and links to additional documentation.

To students
Active learning Learning how to solve computational problems and implement
them as computer programs requires daily practice. Like an athlete, you will get
out of shape and fall behind quickly if you skip it. There are no shortcuts. Your
instructor is there to help, but he or she cannot do the work for you.
With this in mind, it is important that you type in and try the examples throughout
the text, and then go beyond them. Be curious! There are numbered “Reflection”
questions throughout the book that ask you to stop and think about, or apply,
something that you just read. Often, the question is answered in the book immediately
thereafter, so that you can check your understanding, but peeking ahead will rob
you of an important opportunity.

Further discovery There are many opportunities to delve into topics more deeply.
“Tangent” boxes scattered throughout the text briefly introduce related, but more
technical or applied, topics. For the most part, these are not strictly required to
understand what comes next, but I encourage you to read them anyway. In the
“Summary and Further Discovery” section of each chapter, you can find both a
high-level summary of the chapter and additional pointers to explore chapter topics
in more depth.

Exercises and projects At the end of most sections are several programming exercises
that ask you to further apply concepts from that section. Often, the exercises assume
that you have already worked through all of the examples in that section. Solutions
to the starred exercises are available on the book website. There are also more
involved projects available on the book website that challenge you to solve a variety
of interdisciplinary problems.

No prerequisites The book assumes no prior knowledge of computer science. How­


ever, it does assume a modest comfort with high school algebra. In optional sections,
xviii • Preface

trigonometry is occasionally mentioned, as is the idea of convergence to a limit, but


these are not relevant to understanding the main topics in the book.

Have fun! Programming and problem solving should be a fun, creative activity. I
hope that this book sparks your curiosity and love of learning, and that you enjoy
the journey as much as I have enjoyed writing this book.

To instructors
This book is appropriate for a traditional CS1 course for majors, a CS0 course for
non-majors (at a slower pace and omitting more material), or a targeted introductory
computing course for students in the natural sciences, social sciences, or humanities.
The approach is gentle and holistic, introducing programming concepts in the context
of interdisciplinary problems. We start with problem-solving, featuring pseudocode
and hand-execution with trace tables, and carry these techniques forward, especially
in the first half of the book.

Problem focus Most chapters begin with an interesting problem, and new concepts
and programming techniques are introduced in the context of solving it. As new
techniques are introduced, students are frequently challenged to re-solve old problems
in different ways. They are also encouraged to reuse their previous functions as
components in later programs.

Reflection questions, exercises, and projects “Reflection” questions are embedded


in every section to encourage active reading. These may also be assigned as “reading
questions” before class. The end-of-section exercises are appropriate for regular home­
work, and some more complex ones may form the basis of longer-term assignments.
The book website also hosts a few dozen interdisciplinary projects that students may
work on independently or in pairs over a longer time frame. I believe that projects
like these are crucial for students to develop both problem solving skills and an
appreciation for the many fascinating applications of computer science.

Additional instructor resources All of the reflection questions and exercises are
available to instructors as Jupyter notebooks. Solutions to all exercises and projects
are also available. Please visit the publisher’s website to request access.

Python coverage This book is not intended to be a Python manual. Some features
of the language were intentionally omitted because they would have muddled the core
problem solving focus or are not commonly found in other languages that students
may see in future CS courses (e.g., simultaneous swap, chained comparisons, zip,
enumerate in for loops).

Topic coverage There is more in this book than can be covered in a single semester,
giving instructors the opportunity to tailor the content to their particular situation
Preface • xix

Chapter 2 Chapter 3 Chapter 4


Chapter 1
Visualizing Inside a Growth and
How to Solve It
Abstraction Computer Decay

Chapter 6
Chapter 7 Chapter 5
Text, Documents,
Data Analysis Forks in the Road
and DNA

Chapter 9
Chapter 8 Chapter 10
Self-similarity and
Flatland Organizing Data
Recursion

Chapter 12
Chapter 11
Object-oriented
Networks
Design

Figure 1 An overview of chapter dependencies.

and interests. As illustrated in Figure 1, Chapters 1–7 form the core of the book, and
should be covered sequentially. The remaining chapters can be covered, partially or
entirely, at your discretion, although I would expect that most instructors will cover
at least parts of Chapters 8–10, and 12 if the course covers object-oriented design.
Chapter 11 introduces social network graphs and small-world and scale-free networks
as additional powerful applications of dictionaries, and may come any time after
Chapter 7. Sections marked with an asterisk are optional, in the sense that they are
not assumed for future sections in that chapter. When exercises and projects depend
on optional sections, they are also marked with an asterisk, and the dependency is
stated at the beginning of the project.

Chapter outlines The following tables provide brief overviews of what is available
in each chapter. Each table’s three columns, reflecting the three parts of the book’s
subtitle, provide three lenses through which to view the chapter.

1 How to Solve It
Sample problems Principles Programming
● reading level ● problems, input/output ● int, float, str types
● counting syllables, words ● functional abstraction ● arithmetic
● sphere volume ● functional decomposition ● assignment

● digital music ● top-down design ● variable names

● search engines ● bottom-up implementation ● calling built-in functions

● GPS devices ● algorithms and programs ● using strings

● phone trees ● pseudocode ● string operators

● wind chill ● names as references ● print and input

● compounding interest ● trace tables


● Mad Libs ● constant- vs. linear-time
xx • Preface

2 Visualizing Abstraction

Sample problems Principles Programming


● visualizing earthquakes ● using abstract data types ● using classes and objects
● drawing flowers ● creating functional ● turtle module
● random walks abstractions ● for loops (range and lists)
● ideal gas ● functional decomposition ● using and writing functions
● groundwater flow ● bottom-up implementation ● return vs. print

● demand functions ● turtle graphics ● namespaces and scope


● reading level ● trace tables with loops ● docstrings and comments
● self-documenting code
● program structure

3 Inside a Computer

Principles Programming
● computer organization ● int and float types
● machine language ● arithmetic errors
● binary representations ● true vs. floor division
● computer arithmetic
● finite precision, error propagation
● Boolean logic, truth tables, logic gates

● Turing machines, finite state machines

4 Growth and Decay

Sample problems Principles Programming


● population models ● accumulators ● for loops, range
● network value ● list accumulators ● format strings
● demand and profit ● data visualization ● matplotlib.pyplot

● loans and investing ● conditional iteration ● appending to lists


● bacterial growth ● classes of growth ● while loops
● radiocarbon dating ● continuous models
● epidemics (SIR, SIS) ● accuracy vs. time
● diffusion models ● numerical approximation

5 Forks in the Road


Sample problems Principles Programming
● random walks ● random number generators ● random module
● Monte Carlo simulation ● simulating probabilities ● if/elif/else
● guessing games ● flag variables ● comparison operators
● polling and ● using distributions ● Boolean operators

sampling ● DeMorgan’s laws ● short circuit evaluation

● particle escape ● defensive programming ● predicate functions


● pre- and post-conditions ● assert, isinstance

● unit testing ● catching exceptions


● histograms
● while loops
Preface • xxi

6 Text, Documents, and DNA


Sample problems Principles Programming
● text analysis ● functional decomposition ● str class and methods
● word frequency trends ● unit testing ● iterating over strings, lists
● checksums ● ASCII, Unicode ● indexing and slicing

● concordances ● linear-time algorithms ● iterating over indices


● dot plots, plagiarism ● time complexity ● creating a module
● congressional votes ● linear search ● text files and the web
● genomics ● string accumulators ● break
● nested loops

7 Data Analysis

Sample problems Principles Programming


● word, bigram frequencies ● histograms ● list class
● smoothing data ● hash tables ● indexing and slicing
● 100-year floods ● tabular data files ● list operators and methods
● traveling salesman ● efficient algorithm design ● reading CSV files
● meteorite sites ● linear regression ● modifying lists in place
● zebra migration ● k-means clustering ● list parameters
● tumor diagnosis ● heuristics ● tuples
● supply and demand ● list comprehensions
● voting methods ● dictionaries

8 Flatland
Sample problems Principles Programming
● earthquake data ● 2-D data ● lists of lists
● Game of Life ● cellular automata ● nested loops
● image filters ● digital images ● 2-D data in a dictionary

● racial segregation ● color models


● ferromagnetism
● dendrites
● epidemics
● tumor growth

9 Self-similarity and Recursion

Sample problems Principles Programming


● fractals ● self-similarity ● writing recursive functions
● cracking passwords ● recursion ● divide and conquer
● Tower of Hanoi ● linear search ● backtracking
● maximizing profit ● recurrence relations
● navigating a maze ● divide and conquer

● Lindenmayer systems ● depth-first search


● gerrymandering ● grammars
● percolation
xxii • Preface

10 Organizing Data

Sample problems Principles Programming


● spell check ● binary search ● nested loops
● querying data sets ● quadratic-time sorting ● writing recursive functions
● parallel lists
● merge sort
● recurrence relations

● intractability, P=NP?

11 Networks
Sample problems Principles Programming
● social media, web graphs ● graphs ● dictionaries
● diffusion of ideas ● adjacency list, matrix
● epidemics ● breadth-first search

● Oracle of Bacon ● queues


● shortest paths
● depth-first search
● small-world networks
● scale-free networks

● uniform random graphs

12 Object-oriented Design

Sample problems Principles Programming


● epidemic simulation ● abstract data types ● object-oriented design
● data sets ● encapsulation ● writing classes
● genomic sequences ● polymorphism ● special methods

● rational numbers ● data structures ● overriding operators


● flocking behavior ● stacks ● modules
● slime mold aggregation ● hash tables
● agent-based simulation
● swarm intelligence

Software assumptions
To follow along in this book and complete the exercises, you will need to have
installed Python 3.6 or later on your computer, and have access to IDLE or another
programming environment. The book also assumes that you have installed the
matplotlib.pyplot and numpy modules. The easiest way to get this software is to
install the free open source Anaconda distribution from http://www.anaconda.com.

Errata
While I (and my students) have ferreted out many errors, readers will inevitably find
more. You can find an up-to-date list of errata on the book website. If you find an error
in the text or have another suggestion, please let me know at havill@denison.edu.
Acknowledgments

In addition to those who provided their support and expertise for the first edition,
I wish to thank Janet Davis (Whitman College), Jim Deverick (The College of
William and Mary), David Goodwin (Denison University), and Ashwin Lall (Denison
University) for their valuable feedback on drafts of the second edition.
I would also like to thank Dee Ghiloni, Mary Lucas-Miller, and Tony Silveira for
their steadfast support, Mike Brady and my Data Analytics colleagues for reminding
me how much fun it can be to learn new things, and the Book Group for reminding
me to not take life too seriously. A Bowen Fellowship awarded by Denison University
gave me the time needed to complete this project.
Finally, my family has once again provided me with seemingly infinite patience and
love during this intensive period of writing. I am an extraordinarily lucky husband
and father.

xxiii
About the author

Jessen Havill is a Professor of Computer Science at Denison University. He has


been teaching courses across the computer science curriculum for almost thirty years,
and was awarded the College’s highest teaching honor, the Charles A. Brickman
Teaching Excellence Award, in 2013. Although his primary expertise is in the
development and analysis of online algorithms, Dr. Havill has spent many years
collaborating with colleagues across the curriculum to develop interdisciplinary
academic opportunities for students. From 2016–2019, he became the founding
Director of Denison University’s interdisciplinary Data Analytics program. Dr. Havill
earned his bachelor’s degree from Bucknell University and his Ph.D. in computer
science from The College of William and Mary.

xxv
CHAPTER 1

How to Solve It

We need to do away with the myth that computer science is about computers. Computer
science is no more about computers than astronomy is about telescopes, biology is about
microscopes or chemistry is about beakers and test tubes. Science is not about tools, it is
about how we use them and what we find out when we do.

Michael R. Fellows and Ian Parberry


Computing Research News (1993)

It has often been said that a person does not really understand something until after teaching
it to someone else. Actually a person does not really understand something until after
teaching it to a computer, i.e., expressing it as an algorithm.

Donald E. Knuth
American Scientist (1973)

C consciously
omputers now touch almost every facet of our daily lives, whether we are
aware of them or not. Computers have changed the way we learn,
communicate, shop, travel, receive healthcare, and entertain ourselves. They are
embedded in virtually everything, from major feats of engineering like airplanes,
spaceships, and factories to everyday items like microwaves, cameras, and tooth­
brushes. In addition, all of our critical infrastructure—utilities, transportation,
finance, communication, healthcare, law enforcement—relies upon computers.
Since computers are the most versatile tools ever invented, it should come as
no surprise that they are also employed throughout academia in the pursuit of
new knowledge. Social scientists use computational models to better understand
social networks, epidemics, population dynamics, markets, and auctions. Humanists
use computational tools to gain insight into literary trends, authorship of ancient
texts, and the macroscopic significance of historical records. Artists are increasingly
incorporating digital technologies into their compositions and performances. Natural

1
2 • 1 How to Solve It

Look back at
Understand the Design an Write a
your algorithm
problem algorithm program
and results

Figure 1.1 A simplified view of the problem solving process.

scientists use computers to collect and analyze immense quantities of data to


make discoveries in environmental science, genomics, particle physics, neuroscience,
pharmacology, and medicine.
But computers are neither productive nor consequential on their own. All of the
computers now driving civilization, for good or ill, were taught by humans. Computers
are amplifiers of human ingenuity. Without us, they are just dumb machines.
The goal of this book is to empower you to teach computers to solve problems and
make discoveries. Computational problem solving is a process that you will find both
familiar and new. We all solve problems every day and employ a variety of strategies
in doing so. Some of these strategies, like breaking big problems into smaller, more
manageable ones, are also fundamental to solving problems with a computer. Where
computational problem solving is different stems from computers’ lack of intellect
and intuition. Computers will only do what you tell them to and nothing more.
They cannot tolerate ambiguity or intuit your intentions. Computational problem
solving, by necessity, must be more precise and intentional than you may be used to.
The payoff though, paraphrasing Donald Knuth1 , is that teaching a computer to do
something can also dramatically deepen our understanding of that thing.
The problem solving process that we will outline in this chapter is inspired by How to
Solve It, a short book written by mathematician George Polya [50] in 1945. Polya’s
problem solving framework, having withstood the test of time, consists of four steps:

1. First, understand the problem. What is the unknown? What are the data?
What is the condition?
2. Second, devise a plan to solve the problem.
3. Third, carry out your plan, checking each step.
4. Fourth, look back. Check the result. Can you derive the result differently?

These four steps, with some modifications, can be applied just as well to compu­
tational problem solving, as illustrated in Figure 1.1. In the first step, we make

1
You can learn more about Donald Knuth at the end of this chapter.
Another Random Document on
Scribd Without Any Related Topics
— Hyvää yötä!

— Mitä — yötä? Mitä sanoit?

Myrskyn ja meren pauhinan ja ukkosen myllerryksen takia oli


vaikea erottaa sanoja.

— Ei mitään! — huusi eläintieteilijä ja riensi kotia.


XVII.

Jos hänet huomenaamulla tapetaan tai jos häntä pilkataan,


annetaan hänen pitää henkensä, niin hän joka tapauksessa on
mennyttä miestä. Jos tämä häväisty nainen epätoivosta ja häpeästä
surmaa itsensä, tai jos hän jää tänne kurjaa eloansa jatkamaan, on
hänkin joka tapauksessa mennyttä…

Näin ajatteli Lajevski, istuessaan pöydän ääressä myöhään illalla ja


yhä vielä hieroen käsiään. Ikkuna tempautui äkkiä auki ja rämähti
jälleen kiinni, tuulenpuuska puhalsi huoneeseen ja lennätti papereita
pöydältä. Lajevski sulki ikkunan ja kumartui nostamaan papereita
lattialta. Hän tunsi ruumiissaan jotakin uutta, jotakin kömpelyyttä,
jota ei ollut ennen ollut, ja hänen liikkeensä tuntuivat hänestä
itsestäänkin oudoilta; hän asteli arasti, huitoi sivulle kyynärpäillään ja
nyki hartioitaan, ja istuuduttuaan pöydän ääreen hän alkoi jälleen
hieroa käsiään. Hänen ruumiinsa oli kadottanut joustavuutensa.

Kuoleman aattona täytyy kirjoittaa likeisimmille omaisille. Lajevski


muisti sen. Hän tarttui kynään ja kirjoitti vapisevalla käsialalla:

"Rakas äiti!"
Hän tahtoi kirjoittaa äidille, että tämä laupiaan Jumalan nimessä,
johon hän uskoo, soisi turvaa ja lempeytensä lämmön säteilyä
onnettomalle naiselle, jonka kunnian hän oli riistänyt, yksinäiselle,
köyhälle ja heikolle, että hän unhottaisi ja antaisi anteeksi kaikki,
kaikki, kaikki, ja uhrillaan vaikkapa osaksikin sovittaisi poikansa
julman rikoksen; mutta hän muisti, kuinka äiti, lihava, ruumiikas
vanha nainen, pitsimyssy päässä, aamulla astuu ulos puutarhaan,
jäljestä vanha elättimuori, pikkunen pörrökoira sylissä, kuinka äiti
huutaa valtiaan äänellä puutarhurille ja rengille, ja kuinka ylpeät,
kopeat olivatkaan hänen kasvonsa, — hän muisti sen ja vetäisi viivan
piirtämänsä otsikon yli.

Kaikissa kolmessa ikkunassa leimahti kirkas salama, ja sitten


seurasi korvia lukkoon lyövä pitkälti jyrisevä ukkosenisku, kaikuen
ensinnä kumeasti, mutta sitten ryskien ja jyskyen ja pauhaten niin
voimakkaasti, että ikkunanruudut tärisivät. Lajevski nousi, astui
ikkunan ääreen ja painoi otsansa ruutuun. Ulkona oli valtava, kaunis
ukonilma. Taivaanrannalla sinkoilivat salamat valkoisina vöinä yhtä
mittaa pilvistä mereen ja valaisivat laajalla alalla korkeita, mustia
aaltoja. Ja oikealla ja vasemmalla ja luultavasti talon päälläkin
leimahteli salamia.

— Ukonilma! — kuiskasi Lajevski; hän tunsi halua rukoilla jotakuta


tai jotakin, vaikkapa salamaa tai pilviä. — Herttainen ukonilma!

Hän muisti, kuinka oli lapsena ukonilmalla juossut avopäin


puutarhaan, ja silloin häntä ajoi takaa kaksi valkotukkaista
sinisilmäistä tyttöstä, ja heidät kasteli sade; tytöt nauroivat
ihastuksissaan, mutta kun jyrähti kova ukkonen, painautuivat
tyttöset turvallisesti hänen kupeeseensa, hän risti silmiään ja luki
kiireimmän kautta: "Pyhä, pyhä, pyhä…" Oi, minne hävisitte, mihin
meren syvyyteen hukuitte te kauniin, puhtaan elämän alkiot?
Ukonilmaa hän ei enää pelkää, luontoa hän ei rakasta, Jumalaa ei
hänellä ole, kaikki luottavaiset tytöt, joita hän jolloinkin on tuntenut,
ovat hän ja hänen ikätoverinsa saattaneet hunningolle, kotinsa
puutarhaan hän ei koko elämänsä aikana ole istuttanut ainoatakaan
puuta eikä kasvattanut siellä ainoatakaan ruohoa, ja eläen elävien
keskellä hän ei ole pelastanut ainoatakaan kärpästä, vaan ainoastaan
hävittänyt, turmellut ja valehdellut, valehdellut…

"Mikä menneisyydessäni onkaan vapaata paheesta?" kysyi hän


itseltään, kokien tarttua johonkin valoisaan muistelmaan, niinkuin
kuiluun suistuva takertuu pensaisiin.

Kimnaasi? Yliopisto? Mutta se on petosta. Hän oli opiskellut


huonosti ja unhottanut senkin, mitä oli oppinut. Yhteiskunnan
palvelus? Sekin on petosta, sillä virka-ajallaan hän ei mitään tehnyt,
nautti palkkaa ilmaiseksi, ja hänen palveluksensa oli häpeällistä
valtionvarojen varastamista, josta ei jouduta syytteeseen.

Totuus oli hänelle tarpeeton eikä hän sitä etsinyt, hänen


omatuntonsa, paheen ja valheen lumoamana, nukkui tai oli ääneti;
ihan kuin vieraana tai toisesta kiertotähdestä lainattuna hän ei
ottanut osaa ihmisten yleiseen elämään, oli kylmäkiskoinen heidän
kärsimyksiään, aatteitaan, uskontoaan, tietojaan, etsimistään,
taisteluitaan kohtaan, ei puhunut ihmisille ainoatakaan hyvää sanaa,
ei ollut kirjoittanut ainoatakaan hyödyllistä tai kehnoa riviä, ei ollut
tehnyt ihmisille penninkään edestä hyvää, vaan ainoastaan söi
heidän leipäänsä, joi heidän viiniänsä, viekoitteli heidän vaimojaan,
eli heidän ajatuksillaan sekä puolustaakseen heidän ja oman itsensä
edessä halveksittavaa loiselämäänsä koetti aina esiintyä sen
muotoisena kuin olisi heitä korkeampi ja parempi. Valhe, valhe ja
valhe…

Hän muisti selvästi sen, mitä oli illalla nähnyt Myridovin talossa, ja
hänen oli inhosta ja ikävästä tuskastuttavan tukala olla. Kirilin ja
Atshmianov ovat ilettävät, mutta hehän vain jatkoivat sitä, mitä hän
oli aloittanut; he ovat hänen rikostovereitaan ja oppilaitaan.
Nuorelta, heikolta naiselta, joka luotti häneen enemmän kuin
veljeen, hän oli riistänyt miehen, tuttavapiirin ja kotiseudun ja
kuljettanut hänet tänne — paahteeseen, kuumetaudin helmaan ja
ikävään: päivästä päivään oli naisen täytynyt itsessään kuvastaa
hänen joutilaisuuttaan, paheellisuuttaan ja valheellisuuttaan — ja
tämä, vain tämä täytti hänen elämänsä, tuon heikon, hauraan,
kurjan; sitten hän oli saanut tästä naisesta kyllänsä, oli alkanut
häntä vihata, mutta ei ollut kylliksi miehekäs hylkäämään, vaan
koetti yhä lujemmin kietoa hänet valheillaan ikäänkuin
hämähäkinverkkoon… Lopun tekivät sitten nämä ihmiset.

Lajevski milloin istuutui pöydän ääreen, milloin astui ikkunaan;


milloin hän sammutti kynttilän, milloin taas sytytti sen. Hän kirosi
itseään ääneen, itki, vaikeroi, pyysi anteeksi; monta kertaa hän oli
epätoivoissaan juossut pöydän luo ja kirjoittanut: "Rakas äiti!"

Paitsi äitiä ei hänellä ollut ketään muita omaisia tai läheisiä: mutta
kuinka voi äiti auttaa häntä? Ja missä hän on? Hän tahtoi juosta
Nadeshda Feodorovnan luo langetaksensa hänen jalkojensa juureen,
suudellakseen hänen käsiään ja jalkojaan, rukoillakseen anteeksi,
mutta Nadeshda Feodorovna oli hänen uhrinsa ja herätti hänessä
pelkoa, kuin makaisi jo ruumiina.

— Hukkaan mennyt elämä! — jupisi hän hieroen käsiään. — Miksi


olen vielä elossa, oi, Jumala!…
Hän sysäsi taivaalta alas himmeän tähtensä, se putosi ja sen jälki
peittyi pimeään yöhön; se ei enää palaa taivaalle, sillä elämä
annetaan vain yhden kerran eikä uudistu Jos voisi palauttaa menneet
päivät ja vuodet, korvaisi hän valheen totuudella, joutilaisuuden
työteliäisyydellä, ikävän riemulla, palauttaisi puhtauden niille, joilta
oli sen riistänyt, löytäisi Jumalan ja totuuden, mutta se on yhtä
mahdotonta kuin palauttaa pudonnut tähti takaisin taivaalle. Ja
sentähden, että se on mahdotonta, hän joutui epätoivoon.
Ukonilman tauottua hän istui avonaisen ikkunan luona ja ajatteli
tyynesti, kuinka hänen käy. Von Coren arvatenkin surmaa hänet.
Tämän miehen selvä maailmankatsomus sallii heikkojen ja
kelvottomien hävittämisen; jos se ratkaisevalla hetkellä pettäisi,
auttavat häntä viha ja inhontunne, jollaisia Lajevski hänessä herätti.
Jos ei luoti osu, tahi jos von Coren, pilkatakseen vihattua
vastustajaa, vain haavoittaa häntä tai ampuu ilmaan, mitä silloin on
tehtävä? Minne pitää lähteä?

— Pietariinko? — kysyi itseltään Lajevski. — Mutta se olisi


kiroamani entisen elämän uudestaan alkamista. Ja joka tavoittelee
pelastusta muuttamalla paikasta toiseen kuin muuttolintu, ei saavuta
mitään, sillä maa on hänelle kaikkialla samanlainen. Etsisikö
pelastusta ihmisistä? Mutta kenestä ja miten? Samoilenkon hyvyys ja
jalomielisyys tarjoavat yhtä vähän pelastusta kuin diakonin
naurunherkkyys tahi von Corenin viha. Pelastus on etsittävä vain
omasta itsestään, ja ellei sitä löydä, niin miksi hukata aikaa, on
päätettävä päivänsä, siinä kaikki…

Kuului ajoneuvojen tärinää. Alkoi jo sarastaa. Rattaat ajoivat ohi


pyöräin naristessa märässä hiekassa, ja pysähtyivät talon kohdalle.
Siellä oli kaksi miestä.
— Odottakaa, minä tulen heti! — sanoi heille Lajevski ikkunasta.

Minä en nuku. Joko on aika?

— Jo. Kello on neljä. Ennenkuin ehdimme perille…

Lajevski puki ylleen päällystakin ja hatun, pisti taskuunsa


savukkeita ja pysähtyi miettiväisenä; hänestä näytti kuin olisi vielä
pitänyt tehdä jotakin. Kadulla puhelivat sekundantit hiljaa keskenään
ja hevoset korskuivat, ja nämä äänet varhaisena, kosteana aamuna,
kun kaikki vielä nukkuivat ja päivä tuskin sarasti taivaalla, täyttivät
Lajevskin sydämen pahan aavistuksen kaltaisella alakuloisuudella.
Hän seisoi hetkisen mietteissään ja meni makuuhuoneeseen.

Nadeshda Feodorovna makasi vuoteessa pitkänään, matkavaippa


korvissa; hän ei liikkunut, vaan oli varsinkin päänsä puolesta
egyptiläisen muumion kaltainen. Katsoessaan häneen Lajevski pyysi
ajatuksissaan häneltä anteeksi ja ajatteli, että ellei taivas ole tyhjä ja
siellä todellakin on Jumala, hän kyllä suojelee Nadeshda
Feodorovnaa; ellei Jumalaa ole, niin hukkukoon Nadeshdakin, —
eihän kannata elää.

Äkkiä Nadeshda Feodorovna kavahti istualleen vuoteessa.


Kohottaen kalpeat kasvonsa ja katsoen peloissaan Lajevskiin hän
kysyi:

— Sinäkö se olet? Joko ukonilma on tauonnut?

— Jo.

Nadeshda Feodorovna muisti, painoi molemmat kädet kasvoilleen


ja vavahti koko ruumiissaan.
— Kuinka minun on raskasta! — virkkoi hän. — Jospa tietäisit,
kuinka minun on raskasta! Minä odotin, että tappaisit minut tai
ajaisit pois kotoa sateeseen ja ukonilmaan, mutta sinä vitkastelet …
vitkastelet…

Lajevski syleili rajusti Nadeshda Feodorovnaa, suuteli hänen


polviaan ja käsiään ja sitten, kun Nadeshda Feodorovna jotakin
sanoa lepersi ja värisi muistellessaan, silitteli hän hänen tukkaansa ja
katsoen häntä kasvoihin ymmärsi, että tämä onneton, rikollinen
nainen on ainoa hänelle läheinen, rakas ja korvaamaton ihminen.

Kun hän ulos tultuaan nousi rattaille, toivoi hän palaavansa


elävänä kotiin.
XVIII.

Diakoni nousi, pukeutui, tarttui paksuun, mykyräiseen


kävelykeppiinsä ja poistui melua synnyttämättä asunnostaan. Oli
pimeä, ja ensi hetkinä ei diakoni katua astuessaan nähnyt edes
valkoista kävelykeppiäänkään; taivaalla ei ollut ainoatakaan tähteä,
ja näytti siltä kuin taas olisi ollut tulossa sade. Tuoksui märälle
hiekalle ja merelle.

"Kunpa eivät tshetshentsit hyökkäisi niskaan", ajatteli diakoni,


kuullessaan kuinka hänen keppinsä kolkahteli kivikatuun ja kuinka
räikeästi ja yksinäisesti tämä kolkahtelu kaikui yön hiljaisuudessa.

Päästyään kaupungin ulkopuolelle hän alkoi erottaa tietäkin ja


kävelykeppinsä; mustalla taivaalla alkoi paikka paikoin näkyä sameita
täpliä, ja ennen pitkää pilkahti näkyviin yksi tähti ja vilkutti arasti
toista silmäänsä. Diakoni kulki korkeaa kivikkoista rantaa pitkin eikä
nähnyt merta; se nukkui alempana, ja sen näkymättömät laineet
loiskahtelivat veltosti ja raskaasti rantaan ikäänkuin huokaisten: uh!
Ja kuinka verkkaan! Loiskahti yksi laine, diakoni ennätti lukea
kahdeksan askelta, sitten loiskahti toinen, kuuden askelen perästä
kolmas. Muuten ei voinut nähdä mitään, ja pimeässä kuului meren
veltto, uninen pauhina, henkäili äärettömän kaukainen, ajatukselta
salattu aika, jolloin Jumala liikkui kaaoksen yllä.

Diakonista alkoi tuntua kaamealta. Hän ajatteli sitä, että kunpa


Jumala ei rankaisisi häntä, vaikka hän pitää seuraa epäuskoisten
kanssa, vieläpä menee katsomaan heidän kaksintaisteluaan.
Kaksintaistelu kyllä tulee olemaan leikinasia, veretön, naurettava,
mutta kuinka olikaan — se on pakanallinen nähtävä eikä
hengenmiehen ole soveliasta olla siinä läsnä. Hän pysähtyi ja
ajatteli: kääntyisinköhän takaisin? Mutta voimakas, levoton
uteliaisuus voitti epäilykset, ja hän kulki edemmäs.

"Vaikka epäuskoisiakin, he ovat sittenkin hyviä ihmisiä ja


pelastuvat", lohdutti hän itseään. — Pelastuvat varmasti! — lausui
hän ääneen, sytyttäen savukkeen.

Millä mitalla on ihmisten ansioita mitattava, jotta heitä voisi


arvostella oikein? Diakoni muisti vihamiehensä, hengellisen opiston
johtajan, joka kylläkin uskoi jumalaan, ei otellut kaksintaisteluissa ja
eli siveydessä, mutta joka jolloinkin oli antanut diakonille
hiekansekaista leipää syödä sekä kerran ollut reväistä häneltä korvan
irti. Jos kerran ihmiselämä on säännöstelty niin mutkattomasti, että
tätä julmaa, epärehellistä johtajaa, joka varasti valtion jauhoja,
kaikki kunnioittivat ja rukoilivat opistossa hänen terveytensä ja
pelastuksensa puolesta, niin onko silloin oikein karttaa sellaisia
ihmisiä kuin von Corenia ja Lajevskia vain siitä syystä, että he ovat
epäuskoisia? Diakoni ryhtyi ratkaisemaan tätä kysymystä, mutta
muisti samassa Samoilenkon naurettavan muodon tänään, ja se
katkaisi hänen ajatusjuoksunsa. Kuinka paljon huomenna tullaan
nauramaan! Diakoni kuvitteli, kuinka hän istuutuu pensaan juurelle
katselemaan, ja kun von Coren huomenna päivällispöydässä alkaa
kehua, niin hän, diakoni, nauraen kertoo hänelle kaikki
kaksintaistelun yksityiskohdat.

"Mistä te kaikki tiedätte?" kysyy eläintieteilijä. — "Siinäpä se juuri


onkin. Kotona olen kyyhöttänyt ja tiedän kumminkin."

Hyvä olisi kuvata kaksintaistelu naurettavassa muodossa. Appi


lukisi ja nauraisi, apelle ei ole pajunköyttä syöttäminen, pitää kertoa
vain tai kirjoittaa jotakin naurettavaa.

Aukeni eteen Keltaojan laakso. Sateesta oja oli paisunut


leveämmäksi ja käynyt vuolaammaksi eikä se enää kohissut kuin
ennen, nyt se oikein ärjyi. Aamu alkoi sarastaa. Harmaa, valju aamu
ja pilvet, jotka kiitivät länttä kohden tavoittaakseen ukkospilven ja
vuoret, sumun ympäröimät, ja märät puut — kaikki näytti diakonista
rumalta ja äkäiseltä. Hän pesi kasvonsa ojassa, luki aamurukouksen,
ja hänen teki mieli teetä ja lämpimiä munkkeja hapankerman kera,
joita appelassa joka aamu tarjottiin. Muistipa hän vaimonsakin sekä
"Mennyt" nimisen kappaleen, jota hän soitti pianolla. Millainen
nainen hän oikeastaan on? Diakonin tutustuttivat häneen, kihlasivat
ja naittivat yhdessä viikossa; elettyään vaimonsa kanssa vajaan
kuukauden hänet määrättiin tänne virantekoon, joten ei vielä ollut
päässyt selville, millainen ihminen hänen vaimonsa on. Ilman häntä
tuntuu olo kuitenkin ikävältä.

"Pitääpä kirjoittaa hänelle pikkuinen kirje…" tuumi hän.

Tataarin mökin katolla oli lippu sateesta liuonnut ja riippui rentona,


ja itse mökki märkine kattoineen näytti matalammalta ja
pimeämmältä kuin ennen. Oven edustalla oli kaksipyöräiset rattaat;
Kerbalai, pari abhasialaista ja nuori tataarilaisnainen roimahousuissa,
luultavasti Kerbalain vaimo tai tytär, kantoivat kapakasta ulos säkkejä
ja nostivat ne rattaille maissiolkien päälle. Rattaiden vieressä seisoi
päät painuksissa pari aasia. Pantuaan säkit rattaille abhasialaiset ja
tataarilaisnainen rupesivat peittämään kuormaa oljilla ja Kerbalai
kaikella kiireellä valjastamaan aaseja.

"Salakuljetustavaraa kaiketi", ajatteli diakoni.

Tuossa makasi viimekertainen tuulenkaatama puukin, tuossa


musta laikka osoittamassa nuotion paikkaa. Muistui mieleen kekkerit
kaikkine yksityiskohtineen, tuli, abhasialaisten laulu, mieluiset
haaveet piispanvirasta ja kirkollisesta kulkueesta… Musta oja oli
sateesta käynyt leveämmäksi ja mustemmaksi. Diakoni astui
varovasti ojan poikki huojuvaa siltaa myöten, jota jo likaiset laineet
harjoillaan pyyhkielivät, ja kiipesi portaita myöten kuivuuvajaan.

"Erinomainen pää!" ajatteli hän laskeutuen pitkäkseen oljille ja


muistellen von Corenia. — "Selvä pää, suokoon Jumala terveyttä.
Julmuutta vain hänessä on…"

Minkätähden hän vihaa Lajevskia ja tämä häntä? Minkätähden he


ryhtyvät kaksintaisteluun? Jos he olisivat lapsuudesta asti tunteneet
sellaista puutetta kuin diakoni, jos heidät olisi kasvatettu raakojen,
sydämeltään tylyjen, voitonahnasten, leipäpalasta soimaavien,
käytökseltään töykeiden ja epähienojen, lattialle syljeskelevien,
päivällispöydässä ja rukouksen aikana röyhtäisevien seassa, jos heitä
ei olisi lapsuudesta pitäen hemmoiteltu elämän mukavuuksilla ja
valittujen ihmisten seuralla, niin kuinka kiinteästi he liittyisivätkään
toinen toiseensa, kuinka mielellään antaisivatkaan toisilleen anteeksi
molemminpuoliset puutteensa ja pitäisivät arvossa sitä, mitä heissä
kummassakin on. Onhan ulkonaisestikin siivoja ihmisiä niin kovin
vähän maailmassa! Tosin Lajevski oli tolkuton, irstas,
eriskummainen, mutta eihän hän varasta, ei sylkeä lopsauta lattialle,
ei morkkaa vaimoaan: "halkeat, mutta työtä et tahdo tehdä", ei
pieksisi lapsia ohjaksilla eikä syöttäisi palkollisille haisevaa silavaa —
eikö siinä jo kyllin, jotta häneen voisi suhtautua suopeasti? Sitäpaitsi
hän ensi sijassa itse kärsii puutteellisuuksistaan, kuten sairas
haavoistaan. Sen sijaan, että ikävissään ja joidenkin väärinkäsitysten
johdosta etsitään toinen toisessaan rappeutumista, sukupuuttoon
kuolemista, perinnöllisyyttä ynnä muuta, mikä on vähän
ymmärrettävää, niin eikö heidän olisi parempi laskeutua alemmas ja
suunnata viha ja kiukku sinne, missä kokonaiset kadut kaikuvat
törkeän raakuuden, voitonpyynnön, soimausten, saastaisuuden,
sättimisten, naisten kirkunan kamalasta sekamelskasta…

Rattaiden jyrinä keskeytti diakonin ajatukset. Hän katsahti ulos


ovesta ja näki ajoneuvoissa kolme miestä: Lajevskin, Sheshkovskin
sekä posti- ja lennätinkonttorin päällikön.

— Seis! — sanoi Sheshkovski.

Kaikki kolme kömpivät maahan ja katsoivat toinen toiseensa.

— Heitä ei vielä ole, — virkkoi Sheshkovski ja pudisteli päältään


likaa. — No entä sitten? Kun kerran asia on tällainen, niin etsitään
sopiva paikka. Tässä ei mahdu edes kääntymään.

He kulkivat kauemmas jokea ylöspäin ja häipyivät pian näkyvistä.


Tataarilaiskuski istuutui rattaille, kallisti päänsä olkapäätä vasten ja
nukkui. Odotettuaan kymmenisen minuuttia diakoni tuli ulos
kuivuuvajasta ja otettuaan päästään mustan huopahatun, ettei häntä
huomattaisi, lähti kyyryksissä ja ympärilleen vilkuillen hiipimään
rantaa pitkin pensaiden ja maissisarkojen välitse; puista ja pensaista
rapisi hänen päälleen suuria vesipisaroita, ruoho ja maissi olivat
märkiä.
— Rietasta! — jupisi hän, kokoillen märkiä ja likaisia helmojaan. —
Jos olisin tiennyt, en olisi lähtenyt.

Kohta hän kuuli ääniä ja näki ihmisiä. Lajevski asteli, kädet


hihansuihin työnnettyinä ja kumaraisena, kiivaasti edestakaisin
saranreunaa pitkin; hänen sekundanttinsa seisoivat joen rannalla ja
kiersivät paperista savukkeita.

"Kummallista…" ajatteli diakoni, oudoksuen Lajevskin astuntaa. —


"Ihan kuin ukko."

— Kuinka epäkohteliasta heidän puoleltaan! — sanoi


postivirkamies, katsoen kelloa. — Myöhästyminen saattanee olla
oppineiden kannalta hyvinkin kiitettävä asia, mutta minusta se on
sikamaista.

Sheshkovski, paksu, mustapartainen, mies kuunteli ja virkkoi:

— Jo kuuluvat tulevan!
XIX.

Ensi kerran eläissäni näen! Kuinka ihanaa! — sanoi von Coren, tullen
näkyviin kedolla ja ojentaen molemmat kätensä itää kohti. —
Katsokaahan: vihreitä säteitä!

Idässä vuorten takaa sojotti kaksi vihreätä sädettä, ja se oli


todellakin hyvin kaunista. Aurinko teki nousuaan.

— Päivää! — jatkoi eläintieteilijä, nyökäyttäen päätään Lajevskin


sekundanteille. — En kai myöhästynyt?

Häntä seurasivat hänen sekundanttinsa, kaksi hyvin nuorta


yhdenkokoista upseeria, Boiko ja Govorovski, yllä valkoiset
sotilasmekot, sekä laiha, juro tohtori Ustimovitsh, joka toisessa
kädessä kantoi jotakin myttyä, toista piti selkänsä takana: tapansa
mukaan hänellä oli kävelykeppi ojennettuna pitkin selkää. Laskien
mytyn maahan ja tervehtimättä ketään, hän pani toisenkin kätensä
selän taakse ja alkoi astella edestakaisin.

Lajevski tunsi uupumusta ja pahaa oloa kuten ihminen, joka vähän


ajan perästä mahdollisesti on kuoleman oma ja sentähden herättää
yleistä huomiota. Hän olisi suonut, että hänet tapettaisiin niin pian
kuin suinkin tai vietäisiin kotiin. Hän näki nyt auringonnousun
ensimmäisen kerran eläissään; tämä varhainen aamu, vihreät säteet
ja kosteus ynnä miehet märkine saappaineen näyttivät liikanaisilta
hänen elämässään, tarpeettomilta, ja vaivasivat häntä; kaikella tällä
ei ollut minkäänlaista yhteyttä eletyn yön, hänen ajatustensa ja
syyllisyydentuntonsa kanssa, ja sentähden hän olisi kernaasti
lähtenyt pois kaksintaistelua odottamatta.

Von Coren oli huomattavasti kiihtynyt ja koetti salata sitä, ollen


panevinaan kaikkein enimmin huomiota vihreisiin säteisiin.
Sekundantit olivat hämillään ja katsoivat toinen toiseensa, ikäänkuin
kysyen, mitä varten he ovat täällä ja mitä heidän on tehtävä.

— Minusta näyttää, herrat, ettei meillä ole syytä mennä tästä


edemmäksi, — virkkoi Sheshkovski. — Sopiihan tässäkin.

— Kyllä tietenkin, — myönsi von Coren.

Seurasi vaitiolo. Ustimovitsh käveli edestakaisin, kääntyi äkkiä


Lajevskin puoleen ja sanoi puoliääneen, puhuen vasten hänen
kasvojaan:

— Ei kai vielä ole ehditty ilmoittaa teille minun ehtojani. Kumpikin


riitapuoli maksaa minulle 15 ruplaa, mutta jos toinen kaatuu,
maksaa eloonjäänyt koko summan 30 ruplaa.

Lajevski oli ennestään tuttu tämän miehen kanssa, mutta nyt


vasta hän ensi kerran selvästi näki hänen sameat silmänsä, karheat
viiksensä ja laihan, keuhkotautisen kaulansa: koronkiskuri, mutta ei
tohtori! Hänen hengityksellään oli vastenmielinen lihan haju.

"Pitäähän olla kaikenlaisia ihmisiä maailmassa", ajatteli Lajevski ja


vastasi:
— Hyvä on.

Tohtori nyökkäsi ja alkoi jälleen astella, ja ilmeistä oli, ettei hän


laisinkaan välittänyt rahasta, vaan oli esittänyt asian pelkästä vihasta
heitä vastaan. Kaikki tunsivat, että oli jo aika aloittaa tai lopettaa se,
mikä oli jo aloitettu, mutta eivät kuitenkaan aloittaneet eivätkä
lopettaneet, vaan käyskentelivät, seisoivat ja polttelivat. Nuoret
upseerit, jotka ensi kerran eläissään olivat läsnä kaksintaistelussa,
eivät nytkään paljoa uskoneet tähän siviilimiesten heidän mielestään
tarpeettomaan kaksintaisteluun, tarkastelivat huolellisesti
palttinamekkojaan ja silittelivät hihoja. Sheshkovski lähestyi heitä ja
virkkoi hiljaa:

— Herrat, meidän täytyy koettaa kaikkia keinoja estääksemme


tämän kaksintaistelun. Täytyy sovittaa heidät.

Hän punastui ja jatkoi:

— Eilen kävi Kirilin luonani ja valitti, että Lajevski oli tavannut


hänet Nadeshda Feodorovnan seurassa ja sen semmoista.

— Niin, sen olemme mekin kuulleet, — lausui Boiko.

— Siinä sen näette… Lajevskilla vapisevat kädet ja niin edespäin…


Hänessä ei ole miestä kohottamaan asetta. Kaksintaistelu häntä
vastaan on yhtä epäinhimillinen kuin taistelu juopunutta tai
lavantautista vastaan. Ellei sovintoa saada aikaan, on taistelu, hyvät
herrat, ainakin lykättävä, vai mitä… Tämä on sellaista pirun
hommaa, etten viitsisi nähdä.

— Puhukaa siitä von Corenille.


— Minä en tiedä kaksintaistelun sääntöjä, lempo soikoon, enkä
välitä tietääkään; hän voisi luulla, että Lajevski on alkanut pelätä ja
lähettänyt minut hänen luokseen. Mutta luulkoon mitä hyvänsä, minä
sittenkin puhun hänelle.

Sheshkovski suuntasi askelensa epävarmasti ja hieman ontuen,


ikäänkuin toinen jalka olisi puutunut, von Corenia kohden, ja hänen
astuessaan ja rykiessään huokui koko hänen olentonsa laiskuutta.

— Kuulkaas, mitä minun on sanottava teille, herraseni, — aloitti


hän ja tähysteli tarkasti eläintieteilijän paidan kuvioita. — Se on
meidän keskeistä… Minä en tunne kaksintaistelun sääntöjä, lempo
soikoon, enkä niistä välitäkään, ja nyt minä puhun — en
sekundanttina, tahtoisin sanoa, vaan ihmisenä ja niin edespäin.

— No niin, mitä?

— Kun sekundantit kehoittavat sopimaan, ei heitä tavallisesti


kuulla, vaan katsotaan heidän välitystarjoustaan pelkäksi
muodollisuudeksi. Itserakkaus ja niin edespäin. Mutta nyt minä
nöyrimmin pyydän teitä kiinnittämään huomiotanne Ivan
Andreitshiin. Hän ei tänään ole normaalitilassa, ei ole täydessä
järjessään, niin sanoakseni, kurjan näköinen. Hänelle on tapahtunut
onnettomuus. En voi suvaita juoruja, — Sheshkovski punastui ja
vilkaisi taaksensa, — mutta koska on hankkeissa kaksintaistelu,
katson tarpeelliseksi ilmoittaa teille. Eilen illalla hän Myridovin talossa
yllätti naisensa … erään mieshenkilön seurassa.

— Ilettävää! — jupisi eläintieteilijä, kalpeni, rypisti otsaansa ja


sylkäistä läiskäytti: — Hyi!
Hänen alahuulensa vavahti; hän loittoni Sheshkovskin luota,
tahtomatta kuulla enempää, ja ikäänkuin hän vahingossa olisi saanut
suuhunsa jotakin kitkerää, hän taaskin sylkäistä läiskäytti ja katsahti
vihamielisesti ensi kerran koko aamuna Lajevskiin. Hänen
kiihtymyksensä ja paha olonsa olivat haihtuneet; nyt hän ravisti
päätään ja sanoi kovaa:

— Hyvät herrat, mitä me enää odotamme? Miksi emme ala jo?

Sheshkovski ja upseerit katsahtivat toisiinsa ja ensinmainittu


kohautti olkapäitään.

— Herrat! — sanoi hän kovalla äänellä, kääntymättä erikoisesti


kenenkään puoleen. — Herrat! Me kehoitamme teitä sopimaan.

— Lopettakaamme pikemmin nämä muodollisuudet, — lausui von


Coren. — Sovinnosta on jo puhuttu. Mikä on seuraava muodollisuus?
Pitäisihän koettaa joutua, herrat, muuten aika käy täpäräksi.

— Me pysymme sittenkin vaatimuksessamme, että koettaisitte


sopia, — sanoi Sheshkovski syyllisyyttä ilmaisevalla äänellä kuin
ihminen, jonka täytyy sekaantua vieraisiin asioihin; hän kävi
punaiseksi, pani käden sydämelleen ja jatkoi: — Herrat, me emme
huomaa johdonmukaista yhteyttä loukkauksen ja kaksintaistelun
välillä. Loukkauksella, jonka joskus inhimillisestä heikkoudesta
aikaansaamme toinen toisellemme, ja kaksintaistelulla ei ole mitään
yhteistä. Me olemme yliopiston käyneitä, sivistyneitä miehiä, ja
tietysti näette itsekin, että kaksintaistelu on vain vanhentunut, tyhjä
muodollisuus ja niin edespäin. Me otamme sen ainakin siltä kannalta,
muuten emme olisi tänne tulleet, koska emme voi sallia, että ihmiset
meidän läsnäollessamme ampuisivat toisiaan ja niin edespäin. —
Sheshkovski pyyhki hikeä otsaltaan ja jatkoi: — Tehkää nyt siis,
herrat, loppu erimielisyydestänne, ojentakaa toinen toisellenne kättä
ja lähdetään kotiin juomaan sovinnon malja.

Von Coren oli vaiti. Lajevski, huomattuaan, että häneen katsotaan,


virkkoi:

— Minulla ei ole mitään Nikolai Vasiljitshiä vastaan. Jos hän katsoo


minun olevan syyllisen, olen valmis pyytämään häneltä anteeksi.

Von Coren otti pahastuakseen.

— Nähtävästi, hyvät herrat, — sanoi hän, — teille olisi mieluista,


että herra Lajevski palaisi kotiin ylevämielisenä ja ritarina, mutta
minä en voi hankkia teille tai hänelle sitä mielihyvää. Ei olisi ollut
syytä nousta varhain ja matkata kaupungista kymmenen virstaa
ainoastaan sen vuoksi, että olisi voitu juoda sovinnon malja, haukata
päälle ja selittää minulle, että kaksintaistelu on vanhentunut
muodollisuus. Kaksintaistelu on kaksintaistelu, eikä sitä ole tehtävä
sen järjettömämmäksi ja valheellisemmaksi kuin se itsessään on.
Minä tahdon taistella!

Seurasi hiljaisuus. Upseeri Boiko otti laatikosta kaksi pistoolia:


toinen annettiin von Corenille, toinen Lajevskille, ja sitten seurasi
hämminki, joka kotvaksi aikaa tuotti huvia eläintieteilijälle ja
sekundanteille. Kävi näet ilmi, ettei kukaan läsnäolijoista ollut
koskaan eläissään ollut mukana kaksintaistelussa eikä varmasti
tietänyt, kuinka pitää asettua ja mitä sekundanttien on sanottava ja
tehtävä. Mutta sitten Boiko muisti ja alkoi huulet hymyssä selittää.

— Herrat, kuka muistaa, miten sitä Lermontov kuvaa? — kysyi von


Coren nauraen. — Turgenjevilla myöskin Basarov vaihtaa laukauksia
jonkun kanssa…
— Mitä siinä on muistelemista, — sanoi Ustimovitsh
kärsimättömäsi ja pysähtyi. — Mitatkaa välimatka — siinä kaikki.

Ja hän harppasi pari kolme kertaa ikäänkuin näyttääkseen, kuinka


on mitattava. Boiko luki askelet, ja hänen toverinsa veti miekan
tupesta ja piirsi maahan päätekohtiin rajaviivat.

Riitamiehet asettuivat paikoilleen yleisen äänettömyyden vallitessa.

"Myyrät", muisti diakoni kyyröttäessään pensaassa.

Taas Sheshkovski puhui jotakin, ja taas selitti jotakin Boiko, mutta


Lajevski ei kuullut mitään tai oikeammin sanoen kuuli, mutta ei
mitään ymmärtänyt. Kun tuli aika, viritti hän hanan ja kohotti
raskasta, kylmää pistooliaan suu ylöspäin. Hän oli unohtanut avata
päällyshuttunsa napit, ja häntä ahdisti olkapäästä ja kainalosta,
käsivarsi kohosi niin vastahakoisesti kuin olisi hiha ommeltu
lakkipellistä. Hän muisti eilisen vihansa tuota mustapintaista otsaa ja
kiharatukkaa vastaan ja ajatteli, ettei hän edes eilenkään, kovan
suuttumuksensa ja vihansa hetkellä, olisi voinut ampua ihmiseen.
Peläten, että luoti vahingossa voisi sattua von Coreniin, hän kohotti
pistoolia yhä ylemmäs ja tajusi, että tämä liian ilmeinen jalomielisyys
ei ole hienotuntoista eikä ylevää, mutta toisin hän ei voinut eikä
tahtonut. Katsoessaan von Corenin kalpeihin, pilkallisesti hymyileviin
kasvoihin, jotka ilmaisivat hänen olleen jo alusta saakka siinä
varmassa uskossa, että hänen vastustajansa ampuisi ilmaan,
Lajevski ajatteli, että tuossa paikassa, Jumalan kiitos, kaikki loppuu
ja että tarvitsee vain hiukan kovemmin painaa liipasinta…

Potkaisi kovasti olkapäähän, pamahti laukaus, ja vuorilta vastasi


kaiku: poks-poks!
Von Coren viritti vuorostaan hanan ja katsahti Ustimovitshin
puoleen, joka edelleen kulki edestakaisin, kädet selän takana ja
kiinnittämättä huomiota mihinkään.

— Tohtori, — virkkoi eläintieteilijä, — minä pyydän, älkää liikkuko


edestakaisin kuin heiluri. Se panee silmäni kipenöimään.

Tohtori pysähtyi. Von Coren alkoi tähdätä Lajevskiin.

"Nyt tulee loppu!" ajatteli Lajevski.

Suoraan kasvoja kohden suunnattu pistoolinsuu, vihan ja


ylenkatseen ilmaus von Corenin asennossa ja koko olemuksessa ja
tämä murha, jonka kunnon mies on aikeissa tehdä näin keskellä
päivää kunnon ihmisten läsnäollessa, ynnä tämä hiljaisuus ja
tuntematon voima, joka pakottaa Lajevskin seisomaan paikallaan,
estäen häntä juoksemasta pakoon — kuinka kaikki tämä on
salaperäistä ja käsittämätöntä ja hirveää! Aika, joka von Corenilta
meni tähdätessä, tuntui Lajevskista pitemmältä kuin yökausi. Hän
katsoi rukoilevasti sekundantteihin; nämä eivät hievahtaneetkaan ja
olivat kalpeat.

"Ammu sukkelammin!" ajatteli Lajevski ja tunsi, että hänen


kalpeiden, värisevien, säälittävien kasvojensa täytyy herättää von
Corenissa yhä enemmän vihaa.

"Minä surmaan hänet tuossa paikassa", ajatteli von Coren,


tähdäten otsaan ja tunnustellen jo sormellaan liipasinta. — "Tietysti
surmaan…"

— Hän tappaa! — kuului äkkiä aivan läheltä epätoivoinen


huudahdus.
Samassa pamahti laukaus. Nähtyään, että Lajevski seisoi
paikallaan eikä ollut kaatunut, kaikki kääntyivät katsomaan sille
taholle, mistä päin huuto oli kuulunut, ja näkivät diakonin. Hän seisoi
kalpeana, märät hiukset takeltuneina otsaan ja poskiin, yltyleensä
märkänä ja liassa joen toisella rannalla, hymyili eriskummaisesti ja
heilutti märkää hattuaan. Sheshkovski naurahti ilosta, ratkesi itkuun
ja astui syrjään…
XX.

Kotvan kuluttua von Coren ja diakoni yhtyivät joen sillan luona.


Diakonin mieli oli kuohuksissa, hän hengitti raskaasti ja karttoi
katsomasta silmiin. Häntä hävetti oma pelkonsa sekä likainen ja
märkä pukunsa.

— Minusta näytti, että teillä oli aikomuksena surmata hänet …


jupisi hän. — Kuinka se on ihmisluonnolle vastenmielistä! Kuinka
peräti luonnonvastaista se on!

— Mitä teitä te tänne jouduitte? — kysyi eläintieteilijä.

— Älkää kysykö, — sanoi diakoni, huitaisten kädellään. —


Pahahenki sai eksytetyksi: lähde ja lähde… Ja minä lähdin ja olin
maissipellossa istuessani kuolla pelosta. Mutta nyt, Jumalan kiitos,
Jumalan kiitos… Olen teihin hyvin tyytyväinen, — puheli diakoni. —
Sitä vain pyytämällä pyytäisin, ettei kenellekään puhuttaisi minun
olleen täällä, muuten voisin saada aika ripin esimiehiltäni. Sanoisivat,
että diakoni on ollut sekundanttina.

— Hyvät herrat, — sanoi von Coren. — Diakoni pyytää, ettette


kenellekään virkkaisi nähneenne hänet täällä. Hänelle voi seurata
siitä ikävyyttä.
— Kuinka se on ihmisluonnolle vastenmielistä! — huokasi diakoni.
— Suokaa minulle jalomielisesti anteeksi, mutta teillä oli sellainen
muoto, että luulin teidän ehdottomasti surmaavan hänet.

— Olin kovassa kiusauksessa tehdä lopun tuosta konnasta, —


sanoi von Coren, — mutta te huusitte juuri parahiksi, ja minulta meni
luoti ohitse. Koko tämä menetelmä on kuitenkin tottumattomalle
vastenmielinen, ja minä väsyin aika lailla. Olen kovasti heikontunut.
Lähdetään ajamaan…

— Ei, sallikaa minun kulkea jalan. Minun on vilu ja olen läpimärkä,


kävelen tästä lämpimikseni.

— Niinkuin tahdotte, — virkkoi raukealla äänellä uupunut


eläintieteilijä, istuutui rattaille ja sulki silmänsä. — Niinkuin
tahdotte…

Sillä välin kun häärättiin ajoneuvojen ympärillä ja istuuduttiin,


seisoi Kerbalai tien vieressä ja pidellen molemmin käsin vatsaansa
kumarteli syvään ja väläytteli hampaitaan; hän luuli herrojen tulevan
nauttimaan luonnosta ja juomaan teetä eikä ymmärtänyt, miksi he
istuutuivat ajoneuvoihin. Yleisen äänettömyyden vallitessa saattue
läksi liikkeelle, ja mökin luo jäi diakoni yksin.

— Meni kapakka, joi tee, — virkkoi hän Kerbalaille. — Minun tahto


syö.

Kerbalai osasi hyvin venäjää, mutta diakoni luuli, että tataari


paremmin ymmärtää, jos puhuttelee häntä murtaen venäjänkieltä.

— Munakokkeli teki, juusto antoi…


Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like