We introduce some of the core syntax of Java in the context ofsimulating the motion of falling particles near the Earth's surface. Asimple algorithm for solving first-order differential equations numericallyalso is discussed.

We discuss several numerical methods needed to simulate the motion of particles using Newton's laws and introduce interfaces, an important Java construct that makes it possible for unrelated objects to declare that they perform the same methods.

Random processes are introduced in the context of several simple physical systems, including random walks on a lattice, polymers, and diffusion controlled chemical reactions. The generation of random number sequences also is discussed.

We simulate the dynamical behavior of many particle systems such as dense gases, liquids, and solids and observe their qualitative features. Some of the basic ideas of equilibrium statistical mechanics and kinetic theory are introduced.

We introduce several geometrical concepts associated with percolation, including the percolation threshold, clusters, and cluster finding algorithms. We also introduce the ideas of critical phenomena in the context of the percolation transition, including critical exponents, scaling relations, and the renormalization group.

We introduce cellular automata, neural networks, genetic algorithms, and growing networks to explore the concepts of self-organization and complexity. Applications to sandpiles, fluids, earthquakes, and other areas are discussed.

We discuss how to simulate thermal systems using a variety of Monte Carlo methods including the traditional Metropolisalgorithm. Applications to the Ising model and various particle systems are discussed and more efficient Monte Carlo algorithms are introduced.