diff options
author | Adam T. Carpenter <atc@53hor.net> | 2023-05-01 08:05:56 -0400 |
---|---|---|
committer | Adam T. Carpenter <atc@53hor.net> | 2023-05-01 08:05:56 -0400 |
commit | 1d47abf9bc3925bb49db0c770cab35183ab50dcb (patch) | |
tree | 70147b4404f84b3125e1296e18de76b0a87b8de6 | |
parent | a4dc687eb213a424547c933716e7e1578f48a6e2 (diff) | |
download | cps-rust-1d47abf9bc3925bb49db0c770cab35183ab50dcb.tar.xz cps-rust-1d47abf9bc3925bb49db0c770cab35183ab50dcb.zip |
finished up 00, almost done with 01
-rwxr-xr-x[-rw-r--r--] | 00.md | 39 | ||||
-rwxr-xr-x[-rw-r--r--] | 01.md | 191 |
2 files changed, 184 insertions, 46 deletions
@@ -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) @@ -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 |