100% found this document useful (5 votes)
89 views

Instant download Introduction to Computation and Programming Using Python 3rd Edition John V. Guttag pdf all chapter

Using

Uploaded by

cemergotzeo7
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (5 votes)
89 views

Instant download Introduction to Computation and Programming Using Python 3rd Edition John V. Guttag pdf all chapter

Using

Uploaded by

cemergotzeo7
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Download the Full Version of textbook for Fast Typing at textbookfull.

com

Introduction to Computation and Programming Using


Python 3rd Edition John V. Guttag

https://textbookfull.com/product/introduction-to-
computation-and-programming-using-python-3rd-edition-john-v-
guttag/

OR CLICK BUTTON

DOWNLOAD NOW

Download More textbook Instantly Today - Get Yours Now at textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Introduction to Computation and Programming Using Python


3rd Edition John V. Guttag

https://textbookfull.com/product/introduction-to-computation-and-
programming-using-python-3rd-edition-john-v-guttag-2/

textboxfull.com

Introduction to Computation and Programming Using Python


With Application to Understanding Data Second Edition John
V. Guttag
https://textbookfull.com/product/introduction-to-computation-and-
programming-using-python-with-application-to-understanding-data-
second-edition-john-v-guttag/
textboxfull.com

Introduction to Computation and Programming Using Python


with Application to Understanding Data Guttag

https://textbookfull.com/product/introduction-to-computation-and-
programming-using-python-with-application-to-understanding-data-
guttag/
textboxfull.com

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/

textboxfull.com
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/
textboxfull.com

Python Programming An Introduction to Computer Science


John M. Zelle

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

textboxfull.com

Introduction to Scientific Programming with Python Joakim


Sundnes

https://textbookfull.com/product/introduction-to-scientific-
programming-with-python-joakim-sundnes/

textboxfull.com

Bite Size Python An Introduction to Python Programming 1st


Edition April Speight

https://textbookfull.com/product/bite-size-python-an-introduction-to-
python-programming-1st-edition-april-speight/

textboxfull.com

Introduction to Radar Using Python and MATLAB Lee Andrew


(Andy) Harrison

https://textbookfull.com/product/introduction-to-radar-using-python-
and-matlab-lee-andrew-andy-harrison/

textboxfull.com
Introduction to Computation
and Programming Using
Python
with Application to Computational Modeling
and Understanding Data
Introduction to Computation
and Programming Using
Python
with Application to Computational Modeling
and Understanding Data
third edition

John V. Guttag

The MIT Press


Cambridge, Massachusetts
London, England
© 2021 Massachusetts Institute of Technology

All rights reserved. No part of this book may be reproduced in any form by any electronic or
mechanical means (including photocopying, recording, or information storage and retrieval)
without permission in writing from the publisher.

This book was set in Minion Pro by New Best-set Typesetters Ltd.

Library of Congress Cataloging-in-Publication Data

Names: Guttag, John, author.


Title: Introduction to computation and programming using Python : with application to
computational modeling and understanding data / John V. Guttag.
Description: Third edition. | Cambridge, Massachusetts : The MIT Press, [2021] | Includes
index.
Identifiers: LCCN 2020036760 | ISBN 9780262542364 (paperback)
Subjects: LCSH: Python (Computer program language)—Textbooks. | Computer
programming—Textbooks.
Classification: LCC QA76.73.P98 G88 2021 | DDC 005.13/3—dc23
LC record available at https://lccn.loc.gov/2020036760

10 9 8 7 6 5 4 3 2 1

d_r0
To my family:

Olga
David
Andrea
Michael
Mark
Addie
Pierce
CONTENTS

PREFACE
ACKNOWLEDGMENTS
1: GETTING STARTED
2: INTRODUCTION TO PYTHON
3: SOME SIMPLE NUMERICAL PROGRAMS
4: FUNCTIONS, SCOPING, AND ABSTRACTION
5: STRUCTURED TYPES AND MUTABILITY
6: RECURSION AND GLOBAL VARIABLES
7: MODULES AND FILES
8: TESTING AND DEBUGGING
9: EXCEPTIONS AND ASSERTIONS
10: CLASSES AND OBJECT-ORIENTED PROGRAMMING
11: A SIMPLISTIC INTRODUCTION TO ALGORITHMIC
COMPLEXITY
12: SOME SIMPLE ALGORITHMS AND DATA STRUCTURES
13: PLOTTING AND MORE ABOUT CLASSES
14: KNAPSACK AND GRAPH OPTIMIZATION PROBLEMS
15: DYNAMIC PROGRAMMING
16: RANDOM WALKS AND MORE ABOUT DATA
VISUALIZATION
17: STOCHASTIC PROGRAMS, PROBABILITY, AND
DISTRIBUTIONS
18: MONTE CARLO SIMULATION
19: SAMPLING AND CONFIDENCE
20: UNDERSTANDING EXPERIMENTAL DATA
21: RANDOMIZED TRIALS AND HYPOTHESIS CHECKING
22: LIES, DAMNED LIES, AND STATISTICS
23: EXPLORING DATA WITH PANDAS
24: A QUICK LOOK AT MACHINE LEARNING
25: CLUSTERING
26: CLASSIFICATION METHODS
PYTHON 3.8 QUICK REFERENCE
INDEX

List of figures

Chapter 1
Figure 1-1 Flowchart of getting dinner
Chapter 2
Figure 2-1 Anaconda startup window
Figure 2-2 Spyder window
Figure 2-3 Operators on types int and float
Figure 2-4 Binding of variables to objects
Figure 2-5 Flowchart for conditional statement
Figure 2-6 Flowchart for iteration
Figure 2-7 Squaring an integer, the hard way
Figure 2-8 Hand simulation of a small program
Figure 2-9 Using a for statement
Chapter 3
Figure 3-1 Using exhaustive enumeration to find the cube root
Figure 3-2 Using exhaustive enumeration to test primality
Figure 3-3 A more efficient primality test
Figure 3-4 Approximating the square root using exhaustive
enumeration
Figure 3-5 Using bisection search to approximate square root
Figure 3-6 Using bisection search to estimate log base 2
Figure 3-7 Implementation of Newton–Raphson method
Chapter 4
Figure 4-1 Using bisection search to approximate square root
of x
Figure 4-2 Summing a square root and a cube root
Figure 4-3 A function for finding roots
Figure 4-4 Code to test find_root
Figure 4-5 Nested scopes
Figure 4-6 Stack frames
Figure 4-7 A function definition with a specification
Figure 4-8 Splitting find_root into multiple functions
Figure 4-9 Generalizing bisection_solve
Figure 4-10 Using bisection_solve to approximate logs
Chapter 5
Figure 5-1 Two lists
Figure 5-2 Two lists that appear to have the same value, but
don't
Figure 5-3 Demonstration of mutability
Figure 5-4 Common methods associated with lists
Figure 5-5 Applying a function to elements of a list
Figure 5-6 Common operations on sequence types
Figure 5-7 Comparison of sequence types
Figure 5-8 Some methods on strings
Figure 5-9 Translating text (badly)
Figure 5-10 Some common operations on dicts
Chapter 6
Figure 6-1 Iterative and recursive implementations of factorial
Figure 6-2 Growth in population of female rabbits
Figure 6-3 Recursive implementation of Fibonacci sequence
Figure 6-4 Palindrome testing
Figure 6-5 Code to visualize palindrome testing
Figure 6-6 Using a global variable
Chapter 7
Figure 7-1 Some code related to circles and spheres
Figure 7-2 Common functions for accessing files
Chapter 8
Figure 8-1 Testing boundary conditions
Figure 8-2 Not the first bug
Figure 8-3 Program with bugs
Chapter 9
Figure 9-1 Using exceptions for control flow
Figure 9-2 Control flow without a try-except
Figure 9-3 Get grades
Chapter 10
Figure 10-1 Class Int_set
Figure 10-2 Using magic methods
Figure 10-3 Class Person
Figure 10-4 Class MIT_person
Figure 10-5 Two kinds of students
Figure 10-6 Class Grades
Figure 10-7 Generating a grade report
Figure 10-8 Information hiding in classes
Figure 10-9 New version of get_students
Figure 10-10 Mortgage base class
Figure 10-11 Mortgage subclasses
Chapter 11
Figure 11-1 Using exhaustive enumeration to approximate
square root
Figure 11-2 Using bisection search to approximate square root
Figure 11-3 Asymptotic complexity
Figure 11-4 Implementation of subset test
Figure 11-5 Implementation of list intersection
Figure 11-6 Generating the power set
Figure 11-7 Constant, logarithmic, and linear growth
Figure 11-8 Linear, log-linear, and quadratic growth
Figure 11-9 Quadratic and exponential growth
Chapter 12
Figure 12-1 Implementing lists
Figure 12-2 Linear search of a sorted list
Figure 12-3 Recursive binary search
Figure 12-4 Selection sort
Figure 12-5 Merge sort
Figure 12-6 Sorting a list of names
Figure 12-7 Implementing dictionaries using hashing
Chapter 13
Figure 13-1 A simple plot
Figure 13-2 Contents of Figure-Jane.png (left) and Figure-
Addie.png (right)
Figure 13-3 Produce plots showing compound growth
Figure 13-4 Plots showing compound growth
Figure 13-5 Another plot of compound growth
Figure 13-6 Strange-looking plot
Figure 13-7 Class Mortgage with plotting methods
Figure 13-8 Subclasses of Mortgage
Figure 13-9 Compare mortgages
Figure 13-10 Generate mortgage plots
Figure 13-11 Monthly payments of different kinds of mortgages
Figure 13-12 Cost over time of different kinds of mortgages
Figure 13-13 Balance remaining and net cost for different kinds
of mortgages
Figure 13-14 Simulation of spread of an infectious disease
Figure 13-15 Function to plot history of infection
Figure 13-16 Produce plot with a single set of parameters
Figure 13-17 Static plot of number of infections
Figure 13-18 Interactive plot with initial slider values
Figure 13-19 Interactive plot with changed slider values
Chapter 14
Figure 14-1 Table of items
Figure 14-2 Class Item
Figure 14-3 Implementation of a greedy algorithm
Figure 14-4 Using a greedy algorithm to choose items
Figure 14-5 Brute-force optimal solution to the 0/1 knapsack
problem
Figure 14-6 The bridges of Königsberg (left) and Euler's
simplified map (right)
Figure 14-7 Nodes and edges
Figure 14-8 Classes Graph and Digraph
Figure 14-9 Depth-first-search shortest-path algorithm
Figure 14-10 Test depth-first-search code
Figure 14-11 Breadth-first-search shortest path algorithm
Chapter 15
Figure 15-1 Tree of calls for recursive Fibonacci
Figure 15-2 Implementing Fibonacci using a memo
Figure 15-3 Table of items with values and weights
Figure 15-4 Decision tree for knapsack problem
Figure 15-5 Using a decision tree to solve a knapsack problem
Figure 15-6 Testing the decision tree-based implementation
Figure 15-7 Dynamic programming solution to knapsack
problem
Figure 15-8 Performance of dynamic programming solution
Chapter 16
Figure 16-1 An unusual farmer
Figure 16-2 Location and Field classes
Figure 16-3 Classes defining Drunks
Figure 16-4 The drunkard's walk (with a bug)
Figure 16-5 Distance from starting point versus steps taken
Figure 16-6 Subclasses of Drunk base class
Figure 16-7 Iterating over styles
Figure 16-8 Plotting the walks of different drunks
Figure 16-9 Mean distance for different kinds of drunks
Figure 16-10 Plotting final locations
Figure 16-11 Where the drunk stops
Figure 16-12 Tracing walks
Figure 16-13 Trajectory of walks
Figure 16-14 Fields with strange properties
Figure 16-15 A strange walk
Chapter 17
Figure 17-1 Roll die
Figure 17-2 Flipping a coin
Figure 17-3 Regression to the mean
Figure 17-4 Illustration of regression to mean
Figure 17-5 Plotting the results of coin flips
Figure 17-6 The law of large numbers at work
Figure 17-7 The law of large numbers at work
Figure 17-8 Variance and standard deviation
Figure 17-9 Helper function for coin-flipping simulation
Figure 17-10 Coin-flipping simulation
Figure 17-11 Convergence of heads/tails ratios
Figure 17-12 Absolute differences
Figure 17-13 Mean and standard deviation of heads - tails
Figure 17-14 Coefficient of variation
Figure 17-15 Final version of flip_plot
Figure 17-16 Coefficient of variation of heads/tails and
abs(heads – tails)
Figure 17-17 A large number of trials
Figure 17-18 Income distribution in Australia
Figure 17-19 Code and the histogram it generates
Figure 17-20 Plot histograms of coin flips
Figure 17-21 Histograms of coin flips
Figure 17-22 PDF for random.random
Figure 17-23 PDF for Gaussian distribution
Figure 17-24 A normal distribution
Figure 17-25 Plot of absolute value of x
Figure 17-26 Checking the empirical rule
Figure 17-27 Produce plot with error bars
Figure 17-28 Estimates with error bars
Figure 17-29 Exponential clearance of molecules
Figure 17-30 Exponential decay
Figure 17-31 Plotting exponential decay with a logarithmic axis
Figure 17-33 A geometric distribution
Figure 17-32 Producing a geometric distribution
Figure 17-34 Simulating a hash table
Figure 17-35 World Series simulation
Figure 17-36 Probability of winning a 7-game series
Chapter 18
Figure 18-1 Checking Pascal's analysis
Figure 18-2 Craps_game class
Figure 18-3 Simulating a craps game
Figure 18-4 Using table lookup to improve performance
Figure 18-5 Unit circle inscribed in a square
Figure 18-6 Estimating π
Chapter 19
Figure 19-1 The first few lines in bm_results2012.csv
Figure 19-2 Read data and produce plot of Boston Marathon
Figure 19-3 Boston Marathon finishing times
Figure 19-4 Sampling finishing times
Figure 19-5 Analyzing a small sample
Figure 19-6 Effect of variance on estimate of mean
Figure 19-7 Compute and plot sample means
Figure 19-8 Sample means
Figure 19-9 Estimating the mean of a continuous die
Figure 19-10 An illustration of the CLT
Figure 19-11 Produce plot with error bars
Figure 19-12 Estimates of finishing times with error bars
Figure 19-13 Standard error of the mean
Figure 19-14 Sample standard deviation vs. population
standard deviation
Figure 19-15 Sample standard deviations
Figure 19-16 Estimating the population mean 10,000 times
Chapter 20
Figure 20-1 A classic experiment
Figure 20-2 Extracting the data from a file
Figure 20-3 Plotting the data
Figure 20-4 Displacement of spring
Figure 20-5 Fitting a curve to data
Figure 20-6 Measured points and linear model
Figure 20-7 Linear and cubic fits
Figure 20-8 Using the model to make a prediction
Figure 20-9 A model up to the elastic limit
Figure 20-10 Data from projectile experiment
Figure 20-11 Plotting the trajectory of a projectile
Figure 20-12 Plot of trajectory
Figure 20-13 Computing R2
Figure 20-14 Computing the horizontal speed of a projectile
Figure 20-15 Fitting a polynomial curve to an exponential
distribution
Figure 20-16 Fitting an exponential
Figure 20-17 An exponential on a semilog plot
Figure 20-18 Using polyfit to fit an exponential
Figure 20-19 A fit for an exponential function
Chapter 21
Figure 21-1 Finishing times for cyclists
Figure 21-2 January 2020 temperature difference from the
1981-2010 average145
Figure 21-3 Plotting a t-distribution
Figure 21-4 Visualizing the t-statistic
Figure 21-5 Compute and print t-statistic and p-value
Figure 21-6 Code for generating racing examples
Figure 21-7 Probability of p-values
Figure 21-8 Lyndsay's simulation of games
Figure 21-9 Correct simulation of games
Figure 21-10 Impact of sample size on p-value
Figure 21-11 Comparing mean finishing times for selected
countries
Figure 21-12 Checking multiple hypotheses
Figure 21-13 Has the sun exploded?
Chapter 22
Figure 22-1 Housing prices in the U.S. Midwest
Figure 22-2 Plotting housing prices
Figure 22-3 A different view of housing prices
Figure 22-4 Housing prices relative to $200,000
Figure 22-5 Comparing number of Instagram followers
Figure 22-6 Do Mexican lemons save lives?
Figure 22-7 Statistics for Anscombe's quartet
Figure 22-8 Data for Anscombe's quartet
Figure 22-9 Welfare vs. full-time jobs
Figure 22-10 Sea ice in the Arctic
Figure 22-11 Growth of Internet usage in U.S.
Figure 22-12 Professor puzzles over students' chalk-throwing
accuracy
Figure 22-13 Probability of 48 anorexics being born in June
Figure 22-14 Probability of 48 anorexics being born in some
month
Chapter 23
Figure 23-1 A sample Pandas DataFrame bound to the variable
wwc
Figure 23-2 An example CSV file
Figure 23-3 Building a dictionary mapping years to
temperature data
Figure 23-4 Building a DataFrame organized around years
Figure 23-5 Produce plots relating year to temperature
measurements
Figure 23-6 Mean and minimum annual temperatures
Figure 23-7 Rolling average minimum temperatures
Figure 23-8 Average temperatures for select cities
Figure 23-9 Variation in temperature extremes
Figure 23-10 Global consumption of fossil fuels
Chapter 24
Figure 24-1 Two sets of names
Figure 24-2 Associating a feature vector with each name
Figure 24-3 Feature vector/label pairs for presidents
Figure 24-4 Name, features, and labels for assorted animals
Figure 24-5 Visualizing distance metrics
Figure 24-6 Minkowski distance
Figure 24-7 Class Animal
Figure 24-8 Build table of distances between pairs of animals
Figure 24-9 Distances between three animals
Figure 24-10 Distances between four animals
Figure 24-11 Distances using a different feature representation
Chapter 25
Figure 25-1 Height, weight, and shirt color
Figure 25-2 Class Example
Figure 25-3 Class Cluster
Figure 25-4 K-means clustering
Figure 25-5 Finding the best k-means clustering
Figure 25-6 A test of k-means
Figure 25-7 Examples from two distributions
Figure 25-8 Lines printed by a call to contrived_test(1, 2, True)
Figure 25-9 Generating points from three distributions
Figure 25-10 Points from three overlapping Gaussians
Figure 25-11 Mammal dentition in dentalFormulas.csv
Figure 25-12 Read and process CSV file
Figure 25-13 Scaling attributes
Figure 25-14 Start of CSV file classifying mammals by diet
Figure 25-15 Relating clustering to labels
Chapter 26
Figure 26-1 Plots of voter preferences
Figure 26-2 Confusion matrices
Figure 26-3 A more complex model
Figure 26-4 Functions for evaluating classifiers
Figure 26-5 First few lines of bm_results2012.csv
Figure 26-6 Build examples and divide data into training and
test sets
Figure 26-7 Finding the k-nearest neighbors
Figure 26-8 Prevalence-based classifier
Figure 26-9 Searching for a good k
Figure 26-10 Choosing a value for k
Figure 26-11 Linear regression models for men and women
Figure 26-12 Produce and plot linear regression models
Figure 26-13 Using linear regression to build a classifier
Figure 26-14 Using sklearn to do multi-class logistic regression
Figure 26-15 Example of two-class logistic regression
Figure 26-16 Use logistic regression to predict gender
Figure 26-17 Construct ROC curve and find AUROC
Figure 26-18 ROC curve and AUROC
Figure 26-19 Class Passenger
Figure 26-20 Read Titanic data and build list of examples207
Figure 26-21 Test models for Titanic survival
Figure 26-22 Print statistics about classifiers
PREFACE

This book is based on courses that have been offered at MIT since
2006, and as “Massive Online Open Courses” (MOOCs) through edX
and MITx since 2012. The first edition of the book was based on a
single one-semester course. However, over time I couldn't resist
adding more material than could be fit into a semester. The current
edition is suitable for either a two-semester or a three-quarter
introductory computer science sequence.
The book is aimed at 1) readers with little or no prior
programming experience who have a desire to understand
computational approaches to problem solving, and 2) more
experienced programmers who want to learn how to use
computation to model things or explore data.
We emphasize breadth rather than depth. The goal is to provide
readers with a brief introduction to many topics, so that they will
have an idea of what's possible when the time comes to think about
how to use computation to accomplish a goal. That said, this is not a
“computation appreciation” book. It is challenging and rigorous.
Readers who wish to really learn the material will have to spend a lot
of time and effort learning to bend the computer to their will.
The main goal of this book is to help readers become skillful at
making productive use of computational techniques. They should
learn to use computational modes of thoughts to frame problems, to
build computational models, and to guide the process of extracting
information from data. The primary knowledge they will take away
from this book is the art of computational problem solving.
We chose not to include problems at the end of chapters. Instead
we inserted “finger exercises” at opportune points within the
chapters. Some are quite short, and are intended to allow readers to
confirm that they understood the material they just read. Some are
more challenging, and are suitable for exam questions. And others
are challenging enough to be useful as homework assignments.
Chapters 1-13 contain the kind of material typically included in
an introductory computer science course, but the presentation is not
conventional. We braid together four strands of material:

The basics of programming,


The Python 3 programming language,
Computational problem solving techniques, and
Computational complexity.

We cover most of Python's features, but the emphasis is on what


one can do with a programming language, not on the language itself.
For example, by the end of Chapter 3, the book has covered only a
small fraction of Python, but it has already introduced the notions of
exhaustive enumeration, guess-and-check algorithms, bisection
search, and efficient approximation algorithms. We introduce
features of Python throughout the book. Similarly, we introduce
aspects of programming methods throughout the book. The idea is to
help readers learn Python and how to be a good programmer in the
context of using computation to solve interesting problems. These
chapters have been revised to proceed more gently and include more
excercises than the corresponding chapters in the second edition of
this book.
Chapter 13 contains an introduction to plotting in Python. This
topic is often not covered in introductory courses, but we believe that
learning to produce visualizations of information is an important
skill that should be included in an introductory computer science
course. This chapter includes material not covered in the second
edition.
Chapters 14-26 are about using computation to help understand
the real world. They cover material that we think should become the
usual second course in a computer science curriculum. They assume
no knowledge of mathematics beyond high school algebra, but do
assume that the reader is comfortable with rigorous thinking and is
not intimidated by mathematical concepts.
This part of the book is devoted to topics not found in most
introductory texts: data visualization and analysis, stochastic
programs, simulation models, probabilistic and statistical thinking,
and machine learning. We believe that this is a far more relevant
body of material for most students than what is typically covered in
the second computer science course. Except for Chapter 23, the
material in this section of the book focuses on conceptual issues
rather than programming. Chapter 23 is an introduction to Pandas, a
topic not covered in earlier editions.
The book has three pervasive themes: systematic problem
solving, the power of abstraction, and computation as a way of
thinking about the world. When you have finished this book you
should have:

Learned a language, Python, for expressing computations,


Learned a systematic approach to organizing, writing, and
debugging medium-sized programs,
Developed an informal understanding of computational
complexity,
Developed some insight into the process of moving from an
ambiguous problem statement to a computational formulation of
a method for solving the problem,
Learned a useful set of algorithmic and problem reduction
techniques,
Learned how to use randomness and simulations to shed light on
problems that don't easily succumb to closed-form solutions, and
Learned how to use computational tools (including simple
statistical, visualization, and machine learning tools) to model
and understand data.

Programming is an intrinsically difficult activity. Just as “there is


no royal road to geometry,” 1 there is no royal road to programming.
If you really want to learn the material, reading the book will not be
enough. At the very least you should complete the finger excercises
that involve coding. If you are up for trying more ambitious tasks, try
some of the problem sets available through
https://ocw.mit.edu/courses/electrical-engineering-and-
computer-science/6-0001-introduction-to-computer-science-
and-programming-in-python-fall-2016/

and
https://ocw.mit.edu/courses/electrical-engineering-and-
computer-science/6-0002-introduction-to-computational-
thinking-and-data-science-fall-2016/.

1 This was Euclid's purported response, circa 300 BCE, to King


Ptolemy's request for an easier way to learn mathematics.
ACKNOWLEDGMENTS

The first edition of this book grew out of a set of lecture notes that I
prepared while teaching an undergraduate course at MIT. The
course, and therefore this book, benefited from suggestions from
faculty colleagues (especially Ana Bell, Eric Grimson, Srinivas
Devadas, Fredo Durand, Ron Rivest, and Chris Terman), teaching
assistants, and the students who took the course. David Guttag
overcame his aversion to computer science, and proofread multiple
chapters of the first edition.
Like all successful professors, I owe a great deal to my graduate
students. In addition to doing great research (and letting me take
some of the credit for it), Guha Balakrishnan, Davis Blalock, Joel
Brooks, Ganeshapillai Gartheeban, Jen Gong, Katie Lewis, Yun Liu,
Jose Javier Gonzalez Ortiz, Anima Singh, Divya Shanmugam, Jenna
Wiens, and Amy Zhao all provided useful comments on various
versions of this manuscript.
I owe a special debt of gratitude to Julie Sussman, P.P.A., who
edited the first two editions of this book, and Lisa Ruffolo who edited
the current edition. Both Julie and Lisa were collaborators who read
the book with the eyes of a student, and told me what needed to be
done, what should be done, and what could be done if I had the time
and energy to do it. They buried me in “suggestions” that were too
good to ignore.
Finally, thanks to my wife, Olga, for pushing me to finish and for
excusing me from various household duties so that I could work on
the book.
1
GETTING STARTED

A computer does two things, and two things only: it performs


calculations and it remembers the results of those calculations. But it
does those two things extremely well. The typical computer that sits
on a desk or in a backpack performs a 100 billion or so calculations a
second. It's hard to imagine how truly fast that is. Think about
holding a ball a meter above the floor, and letting it go. By the time it
reaches the floor, your computer could have executed more than a
billion instructions. As for memory, a small computer might have
hundreds of gigabytes of storage. How big is that? If a byte (the
number of bits, typically eight, required to represent one character)
weighed one gram (which it doesn't), 100 gigabytes would weigh
100,000 metric tons. For comparison, that's roughly the combined
weight of 16,000 African elephants.2
For most of human history, computation was limited by how fast
the human brain could calculate and how well the human hand could
record computational results. This meant that only the smallest
problems could be attacked computationally. Even with the speed of
modern computers, some problems are still beyond modern
computational models (e.g., fully understanding climate change), but
more and more problems are proving amenable to computational
solution. It is our hope that by the time you finish this book, you will
feel comfortable bringing computational thinking to bear on solving
many of the problems you encounter during your studies, work, and
even everyday life.
What do we mean by computational thinking?
All knowledge can be thought of as either declarative or
imperative. Declarative knowledge is composed of statements of
fact. For example, “the square root of x is a number y such that y*y =
x,”and “it is possible to travel by train from Paris to Rome.” These
are statements of fact. Unfortunately, they don't tell us anything
about how to find a square root or how to take trains from Paris to
Rome.
Imperative knowledge is “how to” knowledge, or recipes for
deducing information. Heron of Alexandria was the first3 to
document a way to compute the square root of a number. His
method for finding the square root of a number, call it x, can be
summarized as:

1. Start with a guess, g.


2. If g*g is close enough to x, stop and say that g is the answer.
3. Otherwise create a new guess by averaging g and x/g, i.e., (g +
x/g)/2.

4. Using this new guess, which we again call g, repeat the process
until g*g is close enough to x.

Consider finding the square root of 25.

1. Set g to some arbitrary value, e.g., 3.


2. We decide that 3*3 = 9 is not close enough to 25.
3. Set g to (3 + 25/3)/2 = 5.67.4

4. We decide that 5.67*5.67 = 32.15 is still not close enough to


25.

5. Set g to (5.67 + 25/5.67)/2 = 5.04

6. We decide that 5.04*5.04 = 25.4 is close enough, so we stop


and declare 5.04 to be an adequate approximation to the
square root of 25.

Note that the description of the method is a sequence of simple


steps, together with a flow of control that specifies when to execute
each step. Such a description is called an algorithm.5 The algorithm
we used to approximate square root is an example of a guess-and-
check algorithm. It is based on the fact that it is easy to check
whether or not a guess is good enough.
More formally, an algorithm is a finite list of instructions
describing a set of computations that when executed on a set of
inputs will proceed through a sequence of well-defined states and
eventually produce an output.
An algorithm is like a recipe from a cookbook:

1. Put custard mixture over heat.


2. Stir.
3. Dip spoon in custard.
4. Remove spoon and run finger across back of spoon.
5. If clear path is left, remove custard from heat and let cool.
6. Otherwise repeat.

The recipe includes some tests for deciding when the process is
complete, as well as instructions about the order in which to execute
instructions, sometimes jumping to a specific instruction based on a
test.
So how does one capture the idea of a recipe in a mechanical
process? One way is to design a machine specifically intended to
compute square roots. Odd as this may sound, the earliest computing
machines were, in fact, fixed-program computers, meaning they
were designed to solve a specific mathematical problem, e.g., to
compute the trajectory of an artillery shell. One of the first
computers (built in 1941 by Atanasoff and Berry) solved systems of
linear equations, but could do nothing else. Alan Turing's bombe
machine, developed during World War II, was designed to break
German Enigma codes. Some simple computers still use this
approach. For example, a four-function calculator6 is a fixed-
program computer. It can do basic arithmetic, but it cannot be used
as a word processor or to run video games. To change the program of
such a machine, one has to replace the circuitry.
The first truly modern computer was the Manchester Mark 1.7 It
was distinguished from its predecessors by being a stored-
program computer. Such a computer stores (and manipulates) a
sequence of instructions, and has components that execute any
instruction in that sequence. The heart of such a computer is an
interpreter that can execute any legal set of instructions, and thus
can be used to compute anything that can be described using those
instructions. The result of the computation can even be a new
sequence of instructions, which can then be executed by the
computer that generated them. In other words, it is possible for a
computer to program itself.8
Both the program and the data it manipulates reside in memory.
Typically, a program counter points to a particular location in
memory, and computation starts by executing the instruction at that
point. Most often, the interpreter simply goes to the next instruction
in the sequence, but not always. In some cases, it performs a test,
and on the basis of that test, execution may jump to another point in
the sequence of instructions. This is called flow of control, and is
essential to allowing us to write programs that perform complex
tasks.
People sometimes use flowcharts to depict flow of control. By
convention, we use rectangular boxes to depict a processing step, a
diamond to depict a test, and arrows to indicate the order in which
things are done. Figure 1-1 contains a flowchart depicting an
approach to getting dinner.

Figure 1-1 Flowchart of getting dinner


Returning to the recipe metaphor, given a fixed set of
ingredients, a good chef can make an unbounded number of tasty
dishes by combining them in different ways. Similarly, given a small
fixed set of primitive features, a good programmer can produce an
unbounded number of useful programs. This is what makes
programming such an amazing endeavor.
To create recipes, or sequences of instructions, we need a
programming language in which to describe them, a way to give
the computer its marching orders.
In 1936, the British mathematician Alan Turing described a
hypothetical computing device that has come to be called a
Universal Turing Machine. The machine had unlimited memory
in the form of a “tape” on which one could write zeroes and ones, and
a handful of simple primitive instructions for moving, reading, and
writing to the tape. The Church-Turing thesis states that if a
function is computable, a Turing Machine can be programmed to
compute it.
The “if” in the Church-Turing thesis is important. Not all
problems have computational solutions. Turing showed, for example,
that it is impossible to write a program that takes an arbitrary
program as input, and prints true if and only if the input program
will run forever. This is known as the halting problem.
The Church-Turing thesis leads directly to the notion of Turing
completeness. A programming language is said to be Turing
complete if it can be used to simulate a universal Turing Machine. All
modern programming languages are Turing complete. As a
consequence, anything that can be programmed in one programming
language (e.g., Python) can be programmed in any other
programming language (e.g., Java). Of course, some things may be
easier to program in a particular language, but all languages are
fundamentally equal with respect to computational power.
Fortunately, no programmer has to build programs out of
Turing's primitive instructions. Instead, modern programming
languages offer a larger, more convenient set of primitives. However,
the fundamental idea of programming as the process of assembling a
sequence of operations remains central.
Whatever set of primitives you have, and whatever methods you
have for assembling them, the best thing and the worst thing about
programming are the same: the computer will do exactly what you
Another Random Scribd Document
with Unrelated Content
Ma sin dalla seconda metà del V secolo, un quarto popolo era
venuto a turbare quella lenta fusione. I montanari dell’Abruzzo — i
Sanniti — erano discesi nella regione occupata da Greci e da
Etruschi; avevano strappato a questi ultimi le colonie più vicine e
proseguito verso Oriente, minacciando, da presso o da lungi, le città
greche della Campania [22]; quelle belle vive e ricche città, nelle quali
il partito aristocratico e il democratico combattevano tra loro con tal
furore da sollecitare gli aiuti, ogni qualvolta soggiacevano
all’avversario, dello straniero più vicino e potente. I Sanniti avevano
approfittato di queste discordie per allargarsi in Campania; ma
popolo, a quanto si sa, di rudi guerrieri, non avevano conosciuto la
civiltà etrusca e greca senza alterarsi profondamente. I Sanniti, che
avevano occupato città etrusche come Capua o città greche come
Cuma, si erano presto appropriati la lingua, i costumi e soprattutto i
vizi di quei popoli tanto più colti e civili; onde dalla contaminazione
della civiltà etrusca e greca con la rudezza sannitica era nato un
popolo nuovo e bastardo, che aveva rinnegato la stirpe materna.
Capua, ad esempio, la più ricca e la più potente tra le città della
Campania, che i Sanniti avessero presa agli Etruschi, la cui
aristocrazia era composta in gran parte di Sanniti, rinverniciati di
civiltà etrusca e greca, era in guerra continua con la confederazione
sannitica. Cosicchè, verso la metà del IV secolo a. C., questa, felice
tra tutte le terre d’Italia, era un caos. Gli Etruschi l’avevan ormai
quasi interamente sgombrata; ma l’ellenismo si lacerava in discordie
furiose, ed ora lottava contro la potenza sannitica, ora ricorreva a
questa per soddisfare i suoi odi e le sue ambizioni, soggiacendo
quasi sempre nell’un caso e nell’altro; per assimilar poi i barbari
vittoriosi, si imbastardiva, pur riuscendo a svegliare nelle loro rudi
anime un orgoglio, una sete di piaceri, una cupidigia di ricchezze,
che presto o tardi rinnegavano la madre patria. Insomma: l’ellenismo
in guerra perenne con sè medesimo e con i Sanniti; i Sanniti,
sempre in lotta con la propria stirpe, imbastardita dalla civiltà greco-
etrusca.
Roma sarebbe un giorno o l’altro costretta a intervenire nei confusi e
sempre inquieti affari della Campania. Quale fu la prima occasione e
la prima spinta non è chiaro; perchè il racconto che Tito Livio ce ne
ha trasmesso è oscuro; e sembra essere stato poeticamente
abbellito per nascondere eventi e fatti, di cui l’orgoglio romano non
aveva ragione di compiacersi. A ogni modo ecco quanto sembra
possa congetturarsi. Nel 343 [23] era nata di nuovo guerra tra la
confederazione sannitica e quelle che si potrebbero chiamare le sue
rivoltose colonie della pianura: i Sidicini e i Campani. La guerra era
scoppiata da principio tra i Sanniti e i Sidicini; ma i Sidicini avevano
poi ottenuto l’aiuto di Capua. Senonchè Sidicini e Campani, avendo
presto disperato di tener testa al Sannio, si rivolsero a Roma,
dimostrandole che essa doveva impedire ai Sanniti di stabilirsi nella
Campania. Roma, che era alleata dei Sanniti, esitò lungamente;
sinchè — se vogliamo credere a Tito Livio — Capua si offrì
addirittura come suddita a Roma. Non resistendo allora alla
tentazione dell’agro campano, Roma mandò un’ambasceria ai
Sanniti per avvertirli di rispettar Capua, che ormai le apparteneva;
onde nacque e fu combattuta nel 342 la prima guerra sannitica, o
quella che suol chiamarsi così, nelle storie.
Intorno alla quale gli storici moderni hanno disputato lungamente,
dubitando che sia stata mai combattuta. Che Tito Livio ce ne faccia
un racconto di fantasia, non è dubbio; perchè, a volergli credere,
dopo pericoli immensi, miracolosi scampi e straordinarie vittorie
dell’esercito romano, tutt’a un tratto, l’anno seguente, nel 341,
Sanniti e Romani fanno una pace ragionevole. I Sanniti restan liberi
di far la guerra ai Sidicini; i Romani si tengono la Campania, che i
Sanniti promettono di rispettare; di nuovo Romani e Sanniti si
alleano. Senonchè, se questo racconto è oscuro e confuso, non ci
par possibile cancellare dalla storia di Roma questa guerra, sia
perchè non è facile spiegare come e perchè la tradizione l’abbia
inventata, sia perchè non si riesce più a intendere come Capua e
Roma vengano la prima volta a toccarsi. Pare dunque verisimile
supporre che Capua sia riuscita, se non proprio assoggettandosi a
Roma, offrendole grandi vantaggi, a far nascere nel 342 serie
difficoltà e un principio di guerra tra il Sannio e Roma. Ma questa
guerra deve aver durato poco, perchè nè Roma nè i Sanniti
volevano impegnarsi fino all’ultimo sangue. Ad ambedue conveniva
più l’intendersi che il combattere.

21. La rivolta degli alleati latini e il nuovo ordinamento del Lazio


(340-338). — Senonchè — e a questo punto usciamo dalla
congettura per rientrare nella storia — questa pace era fatta a spese
dei Sidicini e dei Campani. I quali non l’intendevano allo stesso
modo. A Capua un partito — il partito democratico — non aveva
accettato l’alleanza con Roma, che per aiutare i Sidicini e
combattere i Sanniti. Questo partito giudicò dunque la pace tra
Roma e il Sannio come la giudicarono i Sidicini: un tradimento; e,
insieme con i Sidicini, fece un passo molto ardito: si rivolse alla Lega
latina e le offrì alleanza contro Roma. Questa mossa basta da sola a
dimostrare quanto profondo fosse il malcontento della Lega. Difatti la
Lega latina, spezzando il patto secolare che la legava a Roma,
accettò l’alleanza; e Roma, alleata al suo recente nemico, ebbe a
sostenere l’urto dei suoi alleati — antichi e nuovi — unitisi tutti contro
di lei.
La nuova guerra durò tre anni; ed ebbe anch’essa vicende di cui la
tradizione non ha conservato un ricordo molto chiaro. Forse fu
anch’essa una di quelle sorprese, che ogni tanto si ripetono nella
storia. Poche guerre sembrano aver da principio fatto più paura a
Roma; e si capisce. Non solo la rivolta degli alleati sconvolgeva tutto
l’ordinamento militare di Roma; ma nessun nemico poteva parere più
pericoloso di questo, che parlava la stessa lingua, adoperava le
stesse armi e da un secolo guerreggiava con i Romani. La tattica e
la strategia romana non potevano aver per lui nè misteri nè
sorprese. Invece la guerra fu facile e breve. Una sola battaglia, vinta
dai Romani a Trifano, sul confine del Lazio e della Campania, bastò
a rompere il fascio delle forze latine e campane, che ai Romani era
sembrato da principio così formidabile: prova manifesta, che era
debole, sebbene non sia possibile spiegare perchè sembrasse tanto
e fosse così poco forte. Sappiamo solo che Capua aveva aderito alla
Lega latina, spinta dal partito democratico; che l’aristocrazia
parteggiava per Roma e mandò a Trifano, in aiuto delle legioni, un
contingente di quella cavalleria capuana che era così famosa,
decidendo forse della vittoria; che la battaglia di Trifano, in una città
incerta e divisa, bastò a far pendere di nuovo la bilancia dalla parte
di Roma. Forse anche in molte città latine, accanto al partito della
rivoluzione, c’era un partito fedele. Comunque sia, la battaglia di
Trifano frantumò la lega latino-campana.
Questa facile vittoria, in una guerra che era apparsa così difficile e
pericolosa, ebbe effetti profondi su Roma. Non solo cancellò dalle
menti gli ultimi ricordi dell’incendio gallico; ma infuse nella politica
della repubblica, sino ad allora così timida, una insolita risolutezza.
Vedendo la lega latino-campana sfasciarsi, Roma non esitò ad
impadronirsi del Lazio e della Campania; e con due anni di guerra
ridusse tutte le città che non si arresero spontaneamente, dando a
tutte un ordinamento nuovo. Al maggior numero delle città latine non
fece subire nè violenze nè confische: lasciò il territorio e le leggi;
tolse solo a tutte connubia, commercia et concilia inter se; ossia
sciolse la federazione latina, vietando a ogni città di fare alleanza, di
commerciare e di contrarre matrimoni con le altre, obbligando
ciascuna a contrarre per proprio conto un’alleanza separata con
Roma. A questo modo, invece di trattare da pari a pari con una
potente confederazione, primeggiò come città egemone tra molti
piccoli potentati isolati, di cui ognuno era molto più debole. Nel
tempo stesso Roma provvide ad allargare intorno alla città il territorio
romano dalla parte di settentrione, di levante e di mezzodì. Lanuvio,
Aricia, Nomento, Pedo, Tuscolo, perdettero l’indipendenza e furono
annessi allo Stato romano, con la concessione della civitas cum
suffragio. Ad Anzio fu tolta la flotta e nel suo territorio fu dedotta una
colonia. Egual sorte toccò a Velletri e a Terracina. Altre città, come
Tivoli, Preneste, pur restando città latine, quindi indipendenti di
nome e alleate, furono per castigo spogliate di parte del territorio. A
Capua ne fu tolta una striscia sola, piccola e fertile. La stessa
Capua, Fondi, Formia, Cuma e parecchie altre città minori furono
sottoposte alla signoria romana con la civitas sine suffragio; il che
vuol dire che ebbero della cittadinanza romana tutti i diritti e tutti i
doveri, tranne il diritto di eleggere i magistrati e di essere eletti.
Questa guerra era, dopo la conquista di Veio, la più felice impresa
compiuta dalla repubblica. Dopo averla compiuta, Roma poteva
affrontare il paragone con gli anni più felici della monarchia. Al
trattato di Spurio Cassio con la lega latina, essa ha sostituito una
forte egemonia. Il territorio romano si stende ormai, comprese le
colonie del Lazio e della Campania, dai monti Cimini fin quasi al
Vesuvio, per circa 6000 kmq.; a cui occorre aggiungere i 5000 kmq.
degli alleati e delle colonie latine; in tutto, più di 10.000 kmq., di cui
la parte propriamente romana doveva contare oltre mezzo milione di
abitanti, e poco meno il paese indirettamente soggetto. Non è quindi
arbitrario argomentare che Roma potesse mettere in campo 50.000
uomini: gran forza, per quei tempi, se si pensa che, in questi stessi
anni, Alessandro il Grande moveva dalla Grecia a fondare il suo
impero con 30.000 uomini. Infine Roma è ormai in contatto con
l’ellenismo. Nella prima metà del IV secolo, la repubblica incominciò
dunque a raccogliere i frutti del suo lungo, ostinato e un po’ confuso
lavoro. Che i primi frutti siano maturati a un tratto, come per una
specie di miracolo, non è da stupire; perchè tutti i grandi mutamenti
della storia si preparano nel silenzio. È invece singolare che i Sanniti
abbiano lasciato Roma allargarsi e rafforzarsi a questo modo. Che i
due grandi Stati abbiano vissuto in pace, sinchè Roma aveva
adocchiato le coste del Lazio e l’Etruria meridionale, si capisce. Ma è
più difficile di spiegare come il Sannio lasciasse Roma insediarsi
tranquillamente nella Campania, che esso aveva ora conquistata,
ora perduta e sempre ambita. Eppure non solo dopo la guerra coi
Latini Roma si impadronisce definitivamente di Capua, di Formia, di
Fondi; ma negli anni seguenti deduce due colonie a Cales (Calvi) e a
Fregellae (Ceprano): sentinelle avanzate sui confini del Sannio. E la
confederazione non muove un dito....
22. La guerra tra Roma e Napoli (327). — Non c’è che un modo di
spiegar questa inerzia, se non si vuole — e non par che si possa —
apporla alla torpida lentezza della confederazione sannitica, più
valorosa che avveduta. Proprio in questi anni i Sanniti erano alle
prese con un altro nemico, apparso dal mare: Alessandro il Molosso,
zio di Alessandro il Grande, re di Epiro, che i Tarantini avevano
assoldato per combattere i Lucani ed i Bruzzi. Anche nell’estrema
Italia meridionale le città greche della costa guerreggiavano con le
popolazioni indigene dell’interno. I Sanniti, che avevano sempre
combattuto l’elemento greco e difeso l’elemento indigeno, furono
involti in questa guerra, che durò parecchi anni con diverse vicende
e che fu terminata dalla morte di Alessandro. Sembra che questa
guerra abbia costretto i Sanniti a lasciar mano libera a Roma. Ma,
morto Alessandro e ristabilita la pace nell’Italia del sud, alla prima
occasione, il torpido colosso montano dell’Italia centrale e l’agile
atleta del Lazio vennero alle mani. L’ellenismo — che sin dal
principio aveva cercato di prosperare in Italia sulle discordie degli
elementi indigeni — accese la grande guerra tra Roma e il Sannio.
Quel che sia accaduto tra Roma e Napoli non è chiaro [24]. Ma
Napoli era città greca, e perciò sempre ostile all’elemento italico che
prevalesse in Campania: a Roma dunque, l’ultima venuta, la più
intraprendente e fattiva. Che ci fosse a Napoli un partito avverso a
Roma è quindi cosa naturale. Ma come si venne ad una rottura tra
Roma e Napoli non si sa. Per un movimento spontaneo di tutta la
popolazione greca contro l’egemonia romana? Per accordi segreti
coi Sanniti? Per un rivolgimento politico interno?
Non siamo in grado di sciogliere questi quesiti. Certo è che, nel 327,
la guerra tra Napoli e Roma scoppiava; e Roma incaricava il console
Q. Publilio Filone di muovere all’assedio di Napoli. Ma quando il
console giunse sotto le sue mura Napoli aveva ricevuto notevoli
rinforzi sanniti. A Napoli Roma trovava dunque il Sannio, alleato
dell’ellenismo. Per quale scopo? Per disputargli forse le conquiste
campane? Roma, fatta ardita dalla vittoria sui Latini, non esitò a
voler chiarita la faccenda, a rischio di una nuova guerra; e, mentre
incominciava l’assedio di Napoli, mandò ambasciatori a chiedere che
i presidi fossero ritirati da Napoli. La confederazione cercò di eludere
la dimanda, allegando che i Sanniti accorsi alla difesa di Napoli
erano dei privati, arruolatisi per proprio conto. Roma allora ruppe gli
indugi e dichiarò la guerra al Sannio.

23. I principî della seconda guerra sannitica (327-326). — Il dado


era tratto. Incominciava il duello tra Roma e il Sannio per il dominio
dell’Italia meridionale; quel duello interminabile, che è uno dei tanti
indovinelli della più antica storia di Roma. Anche per questa guerra
bisogna cercar di leggere nelle lacune e nelle oscurità della
tradizione antica. Da principio i due avversari tentarono di
spaventarsi a vicenda con mosse diplomatiche e militari, ma senza
venire a un cimento decisivo. Roma occupò tre cittadine sulla linea
del Volturno — Aflife, Callife e Rufrio — e ne fece tre avamposti
romani, destinati a proteggere la Campania in pieno territorio
sannita; poi cercò alleati nell’Italia meridionale, e riuscì a indurre i
Lucani e gli Apuli a stringere con lei un patto e a promettere armi ed
uomini per la guerra, prendendo a rovescio i Sanniti; ciò fatto, si
restrinse a continuare l’assedio di Napoli. Alla loro volta i Sanniti
fanno scorrerie nei territori romani, cercano alleati tra i Tarantini e si
sforzano di staccare gli Apuli e i Lucani dall’alleanza romana; ma
non sembrano compiere alcuna seria operazione militare e non
muovono un braccio per soccorrere Napoli. Cosicchè in quell’anno
non si combattè che intorno a Napoli. E fidando nel soccorso
sannita, Napoli resistette per tutto il 327. La bella città, gemma
d’Italia e occhio della Campania, una delle pochissime della Magna
Grecia, non ancora sommerse dal flutto tempestoso degli elementi
indigeni, che conservava, come conserverà per secoli, tutti i caratteri
di metropoli ellenica; la bella città, le cui lunghe mura ricordavano al
viaggiatore quelle, ancor più gloriose, che congiungevano Atene alla
marina, per un intero anno costrinse la sua fiorente gioventù ad
abbandonare le opere della pace per far la guardia delle mura e
delle porte; per un anno prodigò le sue ricchezze per stipendiare
migliaia di mercenari sanniti, e vide di giorno in giorno diradarsi le
navi in partenza e in arrivo nel suo bel golfo. Gli opifici cittadini
ammutolirono, insieme con le liete feste cittadine e rionali, celebrate
dalle fratrie urbane. Non più le belle donne napolitane si
incoronarono di fiori al ricorrere di ogni maggio o assistettero agli
spettacoli e alle gare periodiche del teatro, dell’Odeon, dello Stadio.
Non più schiere di forestieri d’ogni foggia e d’ogni paese convennero
nella grande città, a commerciare, a sollazzarsi, ad oziare
mollemente, sotto il suo bel cielo. I ginnasi, palestre dello spirito e
del corpo, ove il pubblico in folla veniva ad ammirare gli atleti più
famosi, o ad ascoltare gli oratori più illustri e più brillanti; ove, fino a
pochi mesi prima, ferveva l’ardore di migliaia di giovani, bramosi di
tutte le cose belle, si erano vuotati. E l’alba del primo giorno del 326
vide Napoli ancora in armi, inviolata: cosicchè Roma, sorpresa da
questa resistenza, fu costretta ad adottare un provvedimento, che
doveva essere padre di molte conseguenze nell’avvenire: a
prorogare il comando al console che faceva l’assedio e a creare il
primo proconsolato romano.
Senonchè la lentezza e le incertezze della confederazione sannitica
resero vana questa tenacia. Sia che non volesse, sia che non
potesse, la confederazione sannitica non mosse al soccorso di
Napoli, non assalì le comunicazioni dell’esercito assediante, non
tentò diversioni sul territorio nemico. Napoli si stancò; il partito della
guerra perdette terreno; la popolazione, rovinata dal lungo assedio,
prese in odio i Sanniti, come alleati malfidi e impotenti. Un bel
giorno, i più cospicui cittadini e gli stessi magistrati intavolarono
trattative per la resa. Il proconsole impose loro, come prima
condizione, di licenziare le milizie mercenarie e di accogliere un
presidio romano; poi stipulò un trattato, che lasciava alla ricca città
tutto il suo territorio, e ne rispettava l’autonomia, salvo l’obbligo di
un’alleanza offensiva e difensiva [25].

24. L’abolizione del «nexum» (326) e le «forche caudine» (321).


— Non le armi sole, ma le armi ed il senno fondano gli imperi.
Concedendo condizioni così generose, Roma dava un bell’esempio
di senno politico. Nell’Italia meridionale le alleanze erano mobili
come la terra, sempre percossa dai terremoti. I Sanniti, infatti, eran
già riusciti a staccar dall’alleanza di Roma i Lucani; e a stringere un
patto con i Vestini. Era dunque miglior consiglio amicarsi i
Napoletani, che vendicarsene. Dopo la caduta di Napoli, la guerra
languì. Da quel poco che gli antichi ci raccontano, si ricava che i
Sanniti e i Romani continuarono negli anni seguenti a molestarsi con
incursioni, scorrerie, saccheggi, senza mai venire alla decisione.
Senonchè dovunque la milizia è un dovere civico di tutti i cittadini
ricchi e poveri, i poveri preferiscono le guerre violente ma brevi, alle
caute ma lunghe. La plebe non tardò a lagnarsi di queste lungaggini;
e le classi alte se ne impensierirono tanto, che in questi anni, nel
326, una legge abolì finalmente il nexum. La legge era un compenso
dei sacrifici, che la lunga guerra contro i Sanniti imponeva al popolo.
E difatti per un po’ la plebe, pur lagnandosi, ebbe pazienza; poi,
come di solito avviene, si stancò, non fu più paga dei compensi; e
incominciò a chiedere guerra più risoluta e più corta; sinchè nel 322
il partito della guerra ad oltranza soverchiò nei comizi il partito della
prudenza. Consoli per il 321 furono due uomini nuovi, Sp. Postumio
Albino e T. Veturio Calvino, i quali avevano promesso nei comizi
elettorali di passare all’offensiva, invadendo il paese nemico. Ben tre
o quattro legioni entrarono in quell’anno nel paese nemico dal
confine orientale della Campania, per quello stesso territorio, ove più
tardi doveva passare la via Appia. Ma la via Appia non era ancora
stata tracciata. La difficoltà delle comunicazioni, la precipitazione, la
ignoranza dei luoghi, forse anche la incapacità del comando furono
cagione di una calamitosa disfatta. Nella gola di Caudio, tra le attuali
borgate di Arienzo e Montesarchio [26], in un passo, che gli annalisti
avrebbero descritto coi colori più paurosi, l’esercito romano si trovò
d’ogni parte accerchiato dai Sanniti. Invano gli impeti di un valore
disperato tentarono spezzare quel cerchio di uomini e di ferro. Dopo
alcuni giorni, stremati di forze, scoraggiati, affamati i Romani
vennero a patti col nemico. I Sanniti non vollero trucidare i Romani,
provocando quella guerra mortale, di cui avevano paura: par che
qualcuno proponesse di rimandarli liberi, senza impegni di sorta,
sperando che questo atto generoso li riconcilierebbe durevolmente
con Roma. Prevalse alla fine un partito di mezzo. Il generale
supremo, Caio Ponzio Telesino, stipulò con l’esercito vinto un trattato
di pace, con cui Roma si impegnava a lasciar tranquillo il Sannio e a
sgombrare tutti i territori sanniti occupati e in particolar modo quello
di Fregelle; fece passare sotto il giogo l’esercito e lo rimandò libero,
trattenendo soltanto poche centinaia di ostaggi.
Ma quando l’esercito vinto ritornò a Roma con questo trattato, Roma
lo rinnegò. Il senato — come era suo diritto, del resto — rifiutò di
ratificare la pace accettata dai suoi generali. Esasperati, i Sanniti si
gettano, l’anno seguente, nel 320, su Fregelle e la prendono: a loro
volta i Romani fanno una spedizione in Apulia, assediano Lucera
presidiata dai Sanniti, l’occupano e ci mettono guarnigione, tentando
prendere il Sannio alle spalle e tagliare le comunicazioni con
l’Adriatico. Per un momento pare che i due popoli vogliano cercare
una decisione.... Quand’ecco una nuova sorpresa: la tregua di due
anni, che essi conchiudono nell’anno seguente. Per quale ragione?
Perchè i due avversari desideravano prepararsi meglio? È probabile.
Certo è invece che della tregua l’uno e l’altro approfittarono per
affilare le armi. Fino a quel momento Roma aveva combattuto in
aperta pianura, nel Lazio o in Campania; e perciò aveva potuto
servirsi di una unità tattica numerosa, compatta e armata
pesantemente, paragonabile in una certa misura alla falange
ellenica, quale era allora la legione. Per combattere i Sanniti nelle
montagne, occorrevano eserciti mobili e rapidi. La legione fu dunque
sciolta in 45 manipoli, ciascuno dei quali doveva porsi nella battaglia
ad una certa distanza dall’altro, pur procurando in genere che gli
intervalli della prima linea fossero coperti dai manipoli della seconda;
e quelli della seconda dai manipoli della terza. La distanza fra un
soldato e l’altro fu accresciuta; l’antica e pesante lancia abolita o
quasi, e distribuito in sua vece ai soldati il pilum o giavellotto, che era
un’arma doppia, da punta e da getto. Finalmente, in luogo del
pesante e piccolo scudo di bronzo, di cui sin allora erano state
armate solo le prime 98 centurie, tutto l’esercito imbracciò il grande
scudo quadrato di cuoio della seconda e della terza classe. Anche la
cavalleria e la istruzione furono riformate. Nel tempo stesso Roma
cerca di rinnovare gli accordi con gli Apuli; occupa Teano, Canusio e
Ferento, riesce a conchiudere alla fine un accordo con tutta l’Apulia;
cerca di far violenza ai Lucani, che respingono gli accordi,
occupando Nerula. I Sanniti a loro volta cercano di seminare la
ribellione nelle città campane e nelle vicine colonie, vacillanti dopo la
rotta di Caudio; e si preparano ad assaltare il Lazio, apprestando
una specie di leva universale.

25. Gli effetti politici della guerra e la censura di Appio Claudio


(315-308). — Nel 315 la guerra divampò di nuovo. I Sanniti
approfittarono di un attacco fatto dai Romani alla cittadina di Saticula
(S. Agata dei Goti), per tentare la offensiva contro il Lazio dal confine
meridionale, tagliare le comunicazioni con la Campania e impedire
che l’esercito romano, operante sul confine sannitico-campano,
tornasse indietro a impedire l’invasione. Di là, sollevando le contrade
che avrebbero attraversate, i Sanniti sarebbero mossi verso il cuore
del territorio romano. I due eserciti cozzarono a Lautule, sul confine
del Lazio. Non è dubbio che l’esercito romano, se non fu annientato,
ebbe però la peggio e dovè ritirarsi. I Sanniti poterono così porre
l’assedio a Terracina (315); il Lazio meridionale e la Campania
romana, Capua non esclusa, vacillarono; Lucera scacciò la
guarnigione romana.
Ma Roma non si perdè d’animo. I Sanniti, così impetuosi nel primo
slancio, non osarono arrischiarsi fra la fitta selva delle città e delle
colonie latine, nè riuscirono facilmente ad espugnare Terracina
assediata. Roma ebbe dunque il tempo di approntare nuove difese.
L’anno dopo, due eserciti romani erano già in campo ad operare
contro i Sanniti, l’uno, nel Lazio, di fronte a Terracina; l’altro, in
Apulia, contro Lucera. La battaglia di Terracina segnò la prima
riscossa. La valle del Liri, ancora in tumulto, ritornò in potere dei
Romani, e la Campania, grazie a un colpo di spalla della fedele
aristocrazia capuana, si sottomise di nuovo (314). Lucera fu ripresa;
e assicurata questa volta con una forte colonia di 2500 cittadini. I
prosperi eventi sembrano toglier animo ai Sanniti e ridarlo ai
Romani. Questi nel 313 pigliano Nola e ripigliano Fregelle; deducono
una colonia a Interamna sul Liri (Teramo) ed un’altra nelle isole
Pontine di faccia al golfo di Gaeta; nel 312 fanno una spedizione
contro i Marrucini. I Sanniti invece sembrano essersi di nuovo
rinchiusi nelle loro montagne e aver prestato un debole aiuto alle
città e ai popoli assaliti da Roma.
Così questa guerra di spossamento si protraeva e si ampliava,
alterando a poco a poco all’interno la composizione e lo spirito della
società romana. Durante la guerra sannitica maturò la conciliazione
delle leggi Licinie-Sestie. Lo spirito esclusivo delle antiche famiglie
patrizie cede finalmente alla forza dei tempi; un numero
considerevole di ricche famiglie plebee occupano le magistrature e il
consolato, entrano a far parte del senato, e nel senato cominciano a
mischiarsi con le antiche famiglie patrizie, formando
quell’aristocrazia patrizio-plebea che governerà la repubblica, per
molti secoli. Senonchè anche altri effetti, meno felici di questo,
generava la lunga guerra. Non è improbabile che con le guerre
sannitiche — e per effetto loro — incominci quella crisi della
agricoltura italica, che travaglierà per più di due secoli la repubblica
romana; e proprio il lento logorio della piccola possidenza e il
dilatarsi della grande proprietà a schiavi.
I soldati romani erano, in questo tempo, quasi tutti piccoli possidenti,
che alla chiamata del console lasciavano la vanga per la spada,
affidando le terre alle donne, ai vecchi, ai fanciulli. Le guerre lunghe
toglievano alla agricoltura, e proprio nelle stagioni in cui la terra ne
ha più bisogno, le braccia più vigorose: con quanto danno della
piccola possidenza è facile imaginare. Il soldo del legionario era un
bel magro compenso. A questo danno si aggiungevano le morti;
poichè ogni colpo nemico, che non andava a vuoto, orbava una
famiglia di un agricoltore nel pieno vigore delle forze, mentre le
bocche inutili non diminuivano. Non è dunque da meravigliare se in
questi anni crebbe il numero dei possidenti rovinati, che andavano a
cercare un pane a Roma, nelle colonie romane o latine; se ai ricchi
fu facile di unire in latifondi e di far coltivare da schiavi molti
campicelli, che erano stati coltivati sin allora da famiglie libere. In
quei tempi di guerre continue gli schiavi dovevano abbondare; nè il
nuovo padrone si curava che la terra, coltivata dagli schiavi,
producesse minor quantità di derrate, se egli ricavava, avendola
acquistata a vil prezzo, un buon profitto.
Ma la guerra, anche in quei tempi, se impoveriva gli uni, arricchiva
gli altri. Un soldato, che partecipasse a una spedizione fortunata in
un territorio ricco, sotto un console generoso, poteva portare a casa
un bel gruzzolo, come parte sua del bottino. Inoltre la guerra, anche
allora, faceva correre il denaro, promoveva certi commerci e certe
industrie, sia pur prendendo agli uni quello che dava agli altri. Ai
trentamila uomini, che quasi ogni anno Roma dovè mettere in campo
in questi anni, occorrevano molte cose: armi, viveri, vestiti. Tra
qualche anno, la guerra sannitica richiederà anche una armata
navale. Come squilleranno allora le incudini degli improvvisati
cantieri sulla costa del Lazio e della Campania! Quanto si
affaticheranno sui colli selvosi del Lazio, nuovo ed antico, le braccia
e le accette degli improvvisati legnaiuoli, per abbattere e spaccare le
querci, gli abeti e i pini della regione, i più belli d’Italia! [27]. È questo
infatti il momento, in cui, nel territorio romano, incomincia a circolare
la moneta d’argento; perchè quella di bronzo non basta più ai
cresciuti bisogni.
Roma insomma incomincia ad affrontare compiti più vasti, a
misurarsi con difficoltà più grandi, a meglio conoscere l’ellenismo.
Anche le sue idee si allargano. Ne è prova una singolare figura di
questo tempo, che apparisce proprio in mezzo alla aristocrazia
romana, sino allora così ligia alle sue tradizioni, così sollecita dei
suoi immediati interessi: Appio Claudio Cieco, che fu censore
appunto tra il 312 e il 308. In mezzo alle inquietudini, alle spese, alle
turbolenze della guerra sannitica, Appio Claudio inizia due costose
opere pubbliche: un grande acquedotto e una grande strada da
Roma a Capua, il primo tronco della futura e famosissima Via Appia.
Nel senato la maggioranza si spaventa. Roma, per lunghi anni,
aveva bevuto l’acqua del Tevere, delle cisterne o dei pozzi scavati
nella città, e nessuno aveva trovato a ridire. Le vecchie strade del
Lazio avevan pur servito alle legioni, che avevano conquistato prima,
difeso poi la Campania. Era quello il momento, quando lo Stato era
stremato dalle spese della guerra con il Sannio, di porre mano a
opere così grandiose e dispendiose? Ma Appio Claudio è, come
sono e saranno tutti i Claudi, un uomo orgoglioso, risoluto e testardo:
egli sa che i tempi cambiano e che Roma non è più la piccola città di
un tempo; capisce che non si può e non si deve lasciare inoperose
tante braccia, che non dissodano più la terra; e non ostante
l’opposizione del senato e le difficoltà dell’erario, rinnova la grande
tradizione edilizia della monarchia, interrotta da due secoli. Nè basta:
vuole anche ringiovanire la costituzione. Tra le famiglie, che le
guerre arricchivano, ce ne erano talune, che avrebbero potuto
servire utilmente lo Stato, rinforzando la nuova aristocrazia patrizio-
plebea. Questi arricchiti di fresco non erano dello stesso sangue e
della stessa carne di quei plebei, che da mezzo secolo, dopo le leggi
Licinie-Sestie, toccavano così agevolmente i fastigi del potere, e
sedevano sugli stalli del senato? Appio Claudio volle affrettare e
allargare quel rinnovamento dell’aristocrazia governante, che da una
generazione o due procedeva abbastanza rapido; e nel compilar
l’albo dei senatori inscrisse nel senato molti plebei ricchi e attivi, e
non esitò ad aggiungere nella lista, perfino qualcuno di quei liberti,
che cominciavano a formare il nerbo del nuovo ceto commerciale
romano. Nè, mentre pensava ai plebei ricchi, Appio Claudio
dimenticò la turba degli artigiani. Esclusa dalle centurie, perchè non
possedeva il censo richiesto ed iscritta tutta nelle quattro tribù
urbane, non poteva prender parte ai comizi centuriati e contava poco
o nulla nei comizi tributi: non aveva dunque diritti; ma aveva dei
doveri; perchè a dispetto delle disposizioni della costituzione
serviana, ancora in vigore in teoria, si ricorreva spesso anche a
questi proletari, che non avrebbero dovuto prestare il servizio
militare, quando c’era bisogno di soldati. Appio Claudio, concedendo
che ognuno potesse scegliersi la tribù, in cui essere ascritto senza
riguardo alla sua residenza, li distribuì in tutte le tribù rustiche, così
da accrescerne l’influenza politica [28].
Ma queste ardite riforme non passeranno lisce. L’aristocrazia
romana gridò allo scandalo contro l’audace novatore, che
sconvolgeva l’ordine civile e politico della repubblica. E come i
consoli dell’anno successivo si ricusarono di convocare il nuovo
senato, gli storiografi dell’aristocrazia condanneranno Appio Claudio
e l’opera sua, e chiameranno a confermare il proprio giudizio il
suffragio della divinità, la quale non avrebbe esitato a punire il
grande censore, privandolo della vista. Ma l’apparizione di questo
censore rivoluzionario, proprio nel bel mezzo della prima grande
guerra che Roma ebbe a combattere per la conquista del suo
impero, è un lampo di luce, che ci lascia intravedere quel che
accadeva, per effetto delle guerre esterne, nella società romana. La
forza delle tradizioni veniva meno; nuove idee e nuovi bisogni
nascevano; gli ordini politici e sociali si aprivano alla gente nuova e
al nuovo spirito; le classi si ravvicinavano, pur odiandosi ed
ingiuriandosi, nella fraternità delle armi. Due leggi che furono
proposte nel 311 da tre tribuni della plebe e approvate, ce lo
confermano. La prima disponeva che sedici dei ventiquattro tribuni
militari fossero ogni anno nominati non dal console o dal dittatore,
ma dal popolo. La seconda, che il popolo eleggesse pure i duoviri
navales classis ornandae reficiendaeque. Si incominciava a sentire
bisogno di un’armata più forte, e si disponeva che i magistrati
incaricati di approntarla, e di distribuire il lavoro e le commissioni,
fossero eletti dal popolo. Cresceva l’autorità dei comizi, anche nelle
cose militari.

26. La fine della guerra (311-304). — Ma in quei tempi, tutti pieni di


armi e di guerre, le riforme di Appio non potevano essere che un
episodio della storia civile. Proprio nel 311, mentre Appio Claudio
stava ringiovanendo la costituzione, un nuovo pericolo nasceva nel
settentrione. Da molto tempo la confederazione etrusca si era
rassegnata alla perdita dei territori meridionali. Neppure la guerra
sannitico-romana sembrò scuotere da principio l’accidia di quel
popolo; forse perchè, se i Romani gli avevano preso l’Etruria
meridionale, i Sanniti lo avevano spogliato della Campania: perdita
anche più dolorosa! Tuttavia, prolungandosi, la guerra tra Romani e
Sanniti mosse alla fine anche la confederazione etrusca. Alleati con i
Sanniti, gli Etruschi posero nel 311 l’assedio a Sutri, una città posta
fra i laghi Cimino (Lago di Vico) e Sabatino (Lago di Bracciano), che
Roma aveva conquistata al tempo della guerra di Veio, e che era
una delle più fedeli colonie latine.
L’Etruria era tuttavia uno dei maggiori potentati dell’Italia; e se
avesse conchiuso l’alleanza con i Sanniti più presto, allorchè la
fortuna delle armi era ancora favorevole a questi, avrebbe potuto
porre in serio pericolo la nascente potenza di Roma. Prendeva
invece le armi un po’ tardi, quando Roma incominciava a temprarsi
al nuovo cimento. Tuttavia, anche se tardivo, l’intervento dell’Etruria
non era un pericolo piccolo. I Romani furono costretti ad assottigliare
gli eserciti operanti contro il Sannio, ad armare nuove milizie e ad
accorrere alla difesa della città pericolante. Ma sloggiare i nemici dai
loro accampamenti apparve ben presto impresa difficile. Invano ci si
provarono gli eserciti romani: onde l’anno seguente il console Q.
Fabio Rulliano, rimasto in Etruria, deliberò di lasciar da parte Sutri e
gli Etruschi assedianti; e, mentre il suo collega andrebbe in Apulia
per trattenere i Sanniti, egli si getterebbe nel cuore della stessa
Etruria, cercando di costringere l’esercito etrusco di Sutri ad
accorrere in difesa della patria minacciata. Mossa arditissima, che,
riuscendo, poteva terminare in poco tempo la guerra, come, fallendo,
condurre a perdizione l’esercito. Ma la mossa riuscì: gli Etruschi,
raccozzatisi in fretta e furia d’ogni parte, furono sconfitti in un luogo,
che è diversamente indicato dagli antichi; le città dell’Etruria centrale
(Arezzo, Cortona, Perugia) si affrettarono a concludere la pace col
vincitore; e poco dopo, liberata Sutri dall’assedio, l’esempio fu
seguito da tutte le città dell’Etruria meridionale (310).
Invece le cose non andarono altrettanto bene nel Sannio, dove l’altro
console, Caio Marcio Rutilo, sembra essere stato in quell’anno
sconfitto. Certo ci fu a Roma un panico e si nominò dittatore Papirio
Cursore, il più provetto tra i generali che avevano combattuto contro
il Sannio. Nel 309 Papirio sembra aver restituito ai Sanniti il colpo da
questi inferto l’anno prima ai Romani; e Rulliano avere vinto
definitivamente, in una seconda battaglia presso Perugia, gli
Etruschi, che ancora non avevano fatto pace. Ma, pacificata l’Etruria,
ecco, nel 308, parecchie popolazioni dell’Italia centrale, alleate più
per forza che per amore, gli Umbri, i Marsi, i Peligni, e una parte
degli Ernici, approfittare delle strettezze, in cui Roma si dibatteva,
per ricuperare la indipendenza. Roma dovette affrontare anche
questi nuovi nemici, fra cui primeggiava la confederazione umbra. E
li affrontò non senza fortuna, nel tempo stesso in cui Nocera, l’altra
città della Campania ancora in possesso dei Sanniti, cadeva. Ormai
il Sannio era esausto e Roma vicina ad esaurirsi. Si avvicinava il
momento dello spossamento supremo, in cui quello dei due
belligeranti, che avesse conservato l’ultima riserva per l’ultimo
sforzo, potrebbe debellare il rivale. I consoli del 306, alla testa di
quattro legioni, ritentarono l’invasione del Sannio, fallita nel 321 con
la disfatta di Caudio. Il Sannio era proprio sfinito; e fu invaso,
percorso e devastato, senza seria resistenza. Non si arrese tuttavia
ancora; raccolse anch’esso le sue forze; e l’anno seguente, nel 305,
tentò una incursione in Campania. L’esercito fu vinto; il territorio di
nuovo invaso; Boviano, uno dei principali centri del Sannio, e lo
stesso generale supremo, Stazio Gellio, caddero nelle mani dei
Romani.
La guerra era finita e la pace, tanto desiderata ed attesa dalle due
parti, era conchiusa l’anno successivo. Le condizioni sono mal note;
ma da quel poco che se ne sa, non sembrano adeguate, per il
vincitore, alla lunghezza della guerra. L’antica alleanza romano-
sannitica dovette essere ristabilita con qualche clausola, forse, più
favorevole a Roma, ma senza subire alterazioni sostanziali.
Neanche un palmo del Sannio propriamente detto fu ceduto dai
Sanniti. Essi perdettero solo le loro conquiste migliori e tra queste la
Campania tutta, che del resto, al principio della guerra, già non era
più nelle loro mani.
Ma non ostante le poco dure condizioni di pace, la potenza sannitica
fu distrutta da questa guerra. Non solo i Sanniti furono ridotti entro i
confini del loro antico territorio; ma, separati dal Tirreno per la perdita
della Campania, non potevano ormai più evitare di essere esclusi tra
poco anche dall’Adriatico. Da questa parte, essi comunicavano
ancora con il mare per il territorio dei Frentani, amici o soggetti: ma
la loro debolezza e le arti romane chiuderanno tra poco, per sempre,
anche quella via. Altrettanto invece era cresciuta la potenza politica
e militare dei Romani. Non così forse per le vittorie campali, come
per la prova che avevano fatta della forza loro, e per i nuovi territori
acquistati. Roma era ormai, alla fine della prima guerra sannitica, il
più temuto e il più vasto degli Stati italici, poichè il suo territorio
aveva quasi raggiunto gli 8000 kmq. e, contando anche i territori
degli alleati, 28.000 kmq.
Note al Capitolo Quarto.

21. Cfr. Polyb., 3, 24; Liv., 7, 27; Diod., 16, 69, 1. Diodoro menziona per
quest’anno (348) un trattato romano-cartaginese, che, per errore, dice
primo.

22. Sulla Campania in questo tempo e sui rapporti tra Osci, Etruschi, Greci
e Sanniti, cfr. A. Sogliano, Sanniti ed Osci, in Rendiconti della R.
Accademia dei Lincei, 1912, pp. 208 sgg.

23. Questa prima guerra sannitica, la cui realtà storica è stata revocata in
dubbio da taluni moderni, ci è attestata da Dionys., 15, 3, 2; da App.,
Samn., 1; da Liv., 7, 29 sgg.

24. Secondo la tradizione, raccolta e diffusa dagli annalisti romani, la


guerra, non si sarebbe combattuta fra Napoli e Roma, ma tra Palepoli e
Roma. È forse più accettabile la versione di Dionys., 15, 5 sgg., che
parla solo di una guerra contro Napoli.

25. Su questo trattato, cfr. gli accenni sparsi che si ricavano da Strab., 5, 4,
7; Polyb., 6, 14, 8.

26. Cfr. E. Cocchia, I Romani alle Forche Caudine: questione di topografia


storica, in Studî filologici, Napoli, III, 378 sgg.

27. Cfr. Theophr., H. Pl., 5, 8, 1.

28. Diod., 20, 36, 3; Liv., 9, 46.


CAPITOLO QUINTO
LA GUERRA CON TARANTO E LA
CONQUISTA DELL’ITALIA

27. La coalizione degli Umbri, dei Galli, degli Etruschi e dei


Sanniti (299-290). — La pace del 304 non fu duratura. I Sanniti
erano stati vinti, non distrutti. Roma aveva vinto, ma non aveva
ancora riputazione di invincibile. I Sanniti si accinsero a preparare la
riscossa; e Roma cercò alleanze e fondò colonie. Due di queste,
Alba e Carseoli, furono dedotte nel territorio degli Equi; una, Sora,
nel territorio dei Volsci; una, Narni, nel territorio degli Umbri. Ma
queste cautele, accrescendo i sospetti e le paure, affrettarono la
nuova guerra. Nel 299 i Sanniti assalirono i Lucani per costringerli
all’alleanza; i Lucani ricorsero a Roma; Roma accordò il chiesto
aiuto e dichiarò di nuovo guerra al Sannio.
Sin dal principio era corsa voce che i Sanniti intendessero fare
alleanza con gli Etruschi, da qualche tempo inquieti. Tuttavia nei
primi due anni i Romani non ebbero da combattere che i Sanniti, i
quali parvero difendere, e mollemente, il territorio.... Ma doveva
essere una finta; perchè nel 296, all’imprevista, un esercito,
comandato da Gellio Egnazio, uscì dal Sannio; si congiunse in
Etruria con l’esercito etrusco ed avviò trattative con i Galli, mentre gli
Umbri aderivano, e i Lucani, per i quali Roma aveva preso le armi,
abbandonavano l’alleanza e si univano ai Sanniti. La coalizione,
preparata di lunga mano e in segreto, si manifestava ad un tratto e
formidabile: a settentrione, con il grosso esercito di Sanniti, di
Etruschi, di Galli e di Umbri, che si addensava; a mezzogiorno, con
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