Skip to content

Commit 978f8c0

Browse files
committed
Website build
0 parents  commit 978f8c0

File tree

111 files changed

+28300
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+28300
-0
lines changed

.buildinfo

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Sphinx build info version 1
2+
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3+
config: c2c1b334e2eda2af5fafd35879626589
4+
tags: 645f666f9bcd5a90fca523b33c5a78b7

0_introduction.html

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
2+
<!DOCTYPE html>
3+
4+
<html>
5+
<head>
6+
<meta charset="utf-8" />
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8+
<title>1. Introduction: abstraction in mathematics and programming &#8212; Object oriented programming in Python for mathematicians 2020.0 documentation</title>
9+
<link rel="stylesheet" href="_static/fenics.css" type="text/css" />
10+
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
11+
<link rel="stylesheet" type="text/css" href="_static/proof.css" />
12+
<link rel="stylesheet" type="text/css" href="_static/graphviz.css" />
13+
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
14+
<script src="_static/jquery.js"></script>
15+
<script src="_static/underscore.js"></script>
16+
<script src="_static/doctools.js"></script>
17+
<script src="_static/language_data.js"></script>
18+
<script src="_static/proof.js"></script>
19+
<script async="async" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
20+
<link rel="index" title="Index" href="genindex.html" />
21+
<link rel="search" title="Search" href="search.html" />
22+
<link rel="next" title="2. Programs in files" href="1_programs_in_files.html" />
23+
<link rel="prev" title="Object oriented programming in Python for mathematicians" href="index.html" />
24+
<!--[if lte IE 6]>
25+
<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
26+
<![endif]-->
27+
28+
<link rel="stylesheet" href="_static/featured.css">
29+
30+
31+
<link rel="shortcut icon" href="_static/icon.ico" />
32+
33+
34+
</head><body>
35+
<div class="wrapper">
36+
<a href="index.html"><img src="_static/banner.png" width="900px" alt="FInAT Project Banner" /></a>
37+
<div id="access">
38+
<div class="menu">
39+
<ul>
40+
<li class="page_item"><a href="https://github.com/finite-element/finite-element-course" title="GitHub">GitHub</a></li>
41+
</ul>
42+
</div><!-- .menu -->
43+
</div><!-- #access -->
44+
</div><!-- #wrapper -->
45+
46+
47+
<div class="document">
48+
<div class="documentwrapper">
49+
<div class="bodywrapper">
50+
<div class="body" role="main">
51+
52+
<div class="section" id="introduction-abstraction-in-mathematics-and-programming">
53+
<h1><span class="section-number">1. </span>Introduction: abstraction in mathematics and programming<a class="headerlink" href="#introduction-abstraction-in-mathematics-and-programming" title="Permalink to this headline"></a></h1>
54+
<p>A core tool of mathematics is to define abstract objects and the
55+
operations which apply to them. This approach defines all the basic
56+
building blocks which enable us to reason mathematically and perform
57+
calculations. We start off with basic objects like numbers and define
58+
arithmetic operations on them. As we become more sophisticated, we
59+
define more and more complex objects, with appropriately more involved
60+
operations: matrices, polynomials, sets, groups, algebras. Being able
61+
to reason at the level of abstract objects is essential in making
62+
mathematics comprehensible. Consider matrices: linear algebra would be
63+
highly impractical at best if we could not define matrix addition and
64+
multiplication, and had instead to work directly with sums of products
65+
of scalars. More generally, without abstraction the edifice of higher
66+
mathematics would rapidly collapse under the weight of its own
67+
complexity.</p>
68+
<p>The situation in computer programming is strikingly similar. At the
69+
simplest level, the central processing unit of a computer is capable
70+
only of a limited set of rather primitive arithmetic and logical
71+
operations on a few finite subsets of the integers, and of the
72+
floating point numbers. However, on this tiny foundation is built
73+
every piece of software in existence, including very sophisticated
74+
programs for text manipulation, higher mathematics, sound and
75+
video. Moreover, this software is routinely created by ordinary people
76+
using relatively modest amounts of effort. How is this possible? It is
77+
possible because of the same principle of abstraction which underpins
78+
mathematics: more abstract objects and the operations on them are
79+
defined in terms of simpler ones.</p>
80+
<p>Think about plotting a graph on a computer. As a 21st century
81+
mathematician you don’t write loops over arrays to compute the pixel
82+
values that will result in the right curve appearing on a screen, you
83+
use a high-level language such as Python which has plotting objects
84+
which take in data and perform all of those calculations for
85+
you. Where did those plotting objects come from? They are the result
86+
of the manipulation of lower-level abstract objects in a chain that
87+
eventually ends up with primitive operations on integers and floating
88+
point numbers. But, critically, as the person wanting to plot some
89+
data <em>you don’t care</em>.</p>
90+
<p>Why, then, as a mathematician should you care about abstraction in
91+
programming? There are two key reasons. First, because an
92+
understanding of the abstractions on which software is built will give
93+
you a better understanding of how that software works and will
94+
therefore make you a better user of that software. The second is that
95+
making appropriate use of abstractions will make you a better
96+
programmer of mathematics and other software. Applied well, objects
97+
and abstraction produce software which is easier to write, easier to
98+
understand, easier to debug and easier to extend. Indeed, as with
99+
abstraction in mathematics, abstraction in coding is a form of
100+
constructive laziness: it simultaniously allows the mathematician to
101+
achieve more and do less work.</p>
102+
<p>This course is a second course in programming, building a previously
103+
acquired basic understanding of programming in Python. In covering
104+
more advanced programming, we will pay particular attention to objects
105+
and abstraction as they occur in Python. Furthermore, we will do so
106+
from a mathematician’s perspective, understanding programming as a
107+
process of defining and manipulating mathematical objects, and
108+
scientifically testing and debugging the results.</p>
109+
</div>
110+
111+
112+
<div class="clearer"></div>
113+
</div>
114+
</div>
115+
</div>
116+
<div class="clearer"></div>
117+
</div>
118+
<div class="footer" role="contentinfo">
119+
&#169; Copyright 2019-2020, David A. Ham.
120+
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
121+
</div>
122+
</body>
123+
</html>

0 commit comments

Comments
 (0)