summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam T. Carpenter <atc@53hor.net>2023-05-01 08:05:56 -0400
committerAdam T. Carpenter <atc@53hor.net>2023-05-01 08:05:56 -0400
commit1d47abf9bc3925bb49db0c770cab35183ab50dcb (patch)
tree70147b4404f84b3125e1296e18de76b0a87b8de6
parenta4dc687eb213a424547c933716e7e1578f48a6e2 (diff)
downloadcps-rust-1d47abf9bc3925bb49db0c770cab35183ab50dcb.tar.xz
cps-rust-1d47abf9bc3925bb49db0c770cab35183ab50dcb.zip
finished up 00, almost done with 01
-rwxr-xr-x[-rw-r--r--]00.md39
-rwxr-xr-x[-rw-r--r--]01.md191
2 files changed, 184 insertions, 46 deletions
diff --git a/00.md b/00.md
index 659077c..893a935 100644..100755
--- a/00.md
+++ b/00.md
@@ -7,17 +7,15 @@ author: Adam T. Carpenter, Carpenter Tutoring
## Introduction
```
- __________
-< Welcome! >
- ----------
- \
- \
- _~^~^~_
- \) / o o \ (/
- '_ - _'
- / '-----' \
+~~~fsays
+Welcome!
+~~~
```
+[practice of computing using python](https://www.pearson.com/en-us/subject-catalog/p/practice-of-computing-using-python-the/p200000003329/9780137524839)
+
+[rust book](https://doc.rust-lang.org/book/)
+
---
# What is this course?
@@ -79,29 +77,6 @@ language content comes from the [Rust Book](https://doc.rust-lang.org/book/).
---
-# Why the Rust programming language?
-
-- enables writing useful programs that are easy to share
-- prevents beginners from making mistakes (in other languages)
-- has a friendly compiler and helpful borrow checker
-- provides good documentation
-- offers great standard library and third-party libraries
-
-Thanks to middle school math, most folks have the prerequisite knowledge to
-understand variables, functions, and types.
-
----
-
-# Why not C, Java, Python, etc.?
-
-- C forces you to think about computer organization (more)
-- Java forces you to think Object-Oriented
-- Python forces you to think dynamic type conversion
-
-These languages contain many foot guns for novice programmers!
-
----
-
# Setup and resources
[The playground](https://play.rust-lang.org)
diff --git a/01.md b/01.md
index 14edc28..0949931 100644..100755
--- a/01.md
+++ b/01.md
@@ -7,22 +7,185 @@ author: Adam T. Carpenter, Carpenter Tutoring
## The study of computer science
```
- __________
-< Welcome! >
- ----------
- \
- \
- _~^~^~_
- \) / o o \ (/
- '_ - _'
- / '-----' \
+~~~fsays
+Not just for computer scientists
+~~~
```
+[practice of computing using python](https://www.pearson.com/en-us/subject-catalog/p/practice-of-computing-using-python-the/p200000003329/9780137524839)
+
+[rust book](https://doc.rust-lang.org/book/)
+
+---
+
+# Why computer science?
+
+Computers are "more universally applicable than any other commodity in history."
+(Punch & Enbody)
+
+There is no other machine with as many diverse uses as the computer. A
+reprogrammable machine is a machine that works for _you_.
+
+## Not just computer programming
+
+- theory of computation
+- efficiency
+- algorithms and data structures
+- parallelism
+- software engineering
+
+_Computer programming is a great way to begin exploring these fields_
+
+---
+
+# Difficulty in first-time programming
+
+It's like learning how to write poetry in a foreign language. You need:
+
+- fluency: the vocabulary and grammar to read and write the language
+- ability: the skill to rhyme, write in verse, _make poetry_
+
+Learning to program has similar roadblocks. You need:
+
+- syntax and semantics: the structure of Rust as a language
+- problem solving: the skill to transform your problem into a solution
+
+---
+
+# Good programs are essays
+
+Programming is writing how _you_ think a problem should be solved.
+
+A program is your thoughts!
+
+## 1. Think before you program
+
+Writing a program should describe your thoughts well.
+
+Not just for computers, but for other human beings! You're going to read your
+program over and over again. Eventually you'll inevitably write programs in a
+group. Then others will need to read it too.
+
+## 2. A program is a human-readable essay on problem solving (that also runs on a computer)
+
+---
+
+# The promise
+
+A program, or an essay on problem-solving, has impact because it can be executed
+on a computer. Your problem-solving thoughts
+
+- are executable
+- are repeatable
+- are independent of you
+
+Programming is a leap forward in the way the printing press was hundreds of
+years ago.
+
+---
+
+# Choosing a language
+
+The variety of languages is enormous, each one with a specific intended purpose.
+
+## Why Rust? "performance, reliability, productivity"
+
+- useful types and memory guarantees
+- makes it easy to write concurrent programs
+- has a friendly compiler and helpful borrow checker
+- provides good documentation
+- offers great standard library and third-party libraries
+
+Thanks to middle school math, most folks have the prerequisite knowledge to
+understand variables, functions, and types.
+
+## Why not C, Java, Python, etc.?
+
+Some of these languages force you to think about computer organization. Others
+may direct you into an object-oriented programming mindset. Still others promote
+dynamic type conversion or make it easy to dereference null values.
+
+The most important reason for using Rust is it helps prevent you from making
+mistakes, regardless of your skill level.
+
+---
+
+# Is Rust the best language?
+
+If you don't already know you'll soon learn there is no "best language."
+
+All languages compromise on something; Each has its strengths and weaknesses.
+
+Rust is a good, _general-purpose_ programming language with _broad_
+_applications_.
+
+Once you've gotten started, you'll be better equipped to explore other languages
+that may be better suited to solving your specific problems.
+
+---
+
+# Computation and computers
+
+_Computation_ is the manipulation of data by humans or machines
+
+...be that data numbers, letters, or other symbols.
+
+A _computer_ is something that does computation
+
+Note this does not specify _how_ the computation is accomplished. However, there
+are some things that every computer needs in order to do its job.
+
+- accept data as input
+- manipulate data (do computation on the input)
+- output data
+
---
-# Rules
+# Mechanical and electronic computers
+
+_Computer_ used to be a job description for human beings!
+
+General-purpose, reprogrammable, electronic digital computers first appeared in
+the 20th century.
+
+The basis of every digital computer is an on-off switch. The technology behind
+these "switches" has evolved from mechanical relays to vacuum tubes to
+transistors.
+
+_Transistors_, the tiny electronic switches powering modern computers, are
+either on or off. Just like a light switch, when turned on, they allow
+electricity to flow. Using switches to power other switches, you can create
+circuits that represent logic.
+
+---
+
+# Example: a three-pole light switch
+
+```
+~~~graph-easy --as boxart
+[hall switch] .. off ..> [ceiling lamp]
+[den switch] - on -> [ceiling lamp]
+[hall switch] <-> [den switch]
+~~~
+```
+
+```
+~~~graph-easy --as boxart
+[hall switch] - on -> [*ceiling lamp*] { border: bold; }
+[den switch] - on -> [*ceiling lamp*] { border: bold; }
+[hall switch] <-> [den switch]
+~~~
+```
+
+Note: this is actually an XNOR gate, but we'll talk more about logical operators
+later.
+
+---
+
+# Replace light with truth
+
+Off: false, 0
+
+On: true, 1
-1. Think before you program
-2. A program is a human-readable essay on problem-solving that also executes on
- a computer
-3. Practice!
+Both switches off: light off, false, 0