Announcements
- Welcome to IDS-101-13: Thinking Machines!
 
- Opening Days: Day 2... Did you?
- Get ~8 hours of sleep
 
- Drink water
 
- Eat at least one vegetable
 
- Wash your hands
 
 
- I sure hope you have a computer today.
 - How about those machines that might be thinking, eh?
- Today's lecture loosely adapted from here.
 
 
Python
- This semester we will use Python
 
- Python is a language, but a novel kind of language.
- Languages like English, Mandarin, Arabic are natural languages
- They emerged as a result of historical and cultural processes.
 - They are ill-defined - it is ambigious whether a well-formed English sentence may terminate with a preposition.
 - They (usually) are well suited to vocalization or some other form of human communication, like sign language
 
 - Python is a constructed language
- Languages like Elvish, Klingon, and JavaScript are constructed by linguistics for some purpose.
 - They are designed, rather than evolved.
 - Often they are precisely defined by community groups of thinking humans maintain a ruleset followed by thinking machines.
 - Many constructed languages are programming or scripting languages.
- These languages are intended to be interpreted by computers rather than vocalized.
 
 
 
 
Python
- This semester we will use Python
 
- Python is a language, but a novel kind of language.
- Languages like English, Mandarin, Arabic are natural languages
 - Python is a constructed language
 
 - We can differentiate thinking humans from thinking machines in perhaps a similar way.
- Humans are natural thinkers.
- Humans and human culture emerged consistent with naturalistic process over time.
 
 - Machines are constructed thinkers.
- Machines are designed, engineered, and ultimately constructed by some other entity (humans).
 
 
 
Be sure to introduce yourselves!
| Group 1 | Group 2 | Group 3 | Group 4 | 
|---|
Colab
- Take notes
- Navigate to https://colab.research.google.com
 - Make a "New Notebook"
 - Name it something, like CC_8_22, you'll remember
 - For each question, +Text and record
 - You can remove the "Code" block by clicking the trashcan
 - Share with your group and with me!
 
 
Question #1
How do I understand myself in relation to thought and language?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Question #2
How do I understand myself in relation to nature and construction?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Question #3
How would I imaging a thinking machine understand the self in relation to nature and construction?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Question #4
How would I imaging a thinking machine understand the self in relation to thought and language?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Thinking and Expressing
- As humans, we are accustomed to vocalization and textual expression between one another.
- Through natural languages.
 
 - How might we expect a thinking machine to express thought?
- Through constructed and especially programming languages.
 
 
Hello, World!
- Let's consider a famous example: the "Hello, World!" program
 - Go into your Colab notebook (perhaps a copy of the group notebook)
 - Create a new "Text" block that reads:
- "Exercise A.1 Have Python print  to the screen."
 - Use double stars ** to click the "B" button to make the exercise name bold.
 - Use ` tick marks or click the "<>" button to style "Hello, World!" differently, to denote it is "printed".
 
 - Create a new "Code" block.
- You will be prompted:
Start coding or g͟e͟n͟e͟r͟a͟t͟e with AI.
 - Determine how to make the "Hello, World!" program.
- You may chat with the AI.
 - You may read the Wikipedia link
 - You may use other resources at your disposal.
 
 - Once you have successfully written the program, add another "Text" block explaining your thought process.
 
 
Hello, World!
- Here is a lightly redacted example:

 - What do you notice?
- What does this tell you about "generate"?
 
 
Hello, You!
- Create a new "Text" block that reads:
- "Exercise A.2 Have Python print your preferred name to the screen."
 
 - Create a new "Code" block.
- You will be prompted:
Start coding or g͟e͟n͟e͟r͟a͟t͟e with AI.
 - Determine how to complete this task.
- Will you use the same steps as last time?
 - Has your previous experience informed how you work with machines?
 - What have you learned?
 
 - Once you have successfully written the program, add another "Text" block explaining your thought process.
 
 
On Colab
- Exercise A.3 Learn a bit more about Colab.
 - Figure out how to:
- Save a notebook.
 - Load a notebook.
- Load a brand new notebook.
 - Load a notebook you saved in Google Drive
 - Load a notebook you saved on your computer.
 
 - Share a notebook with your instructors and peers.
 - Write and format text in "Text" blocks.
- Bold
 - Italicize
 - Underline
 - Quote
 - Code, and
 -  Hyperlink (perhaps to Wikipedia or OpenAI chat you used to figure something out)
 
 - Change between "Text" and "Code" blocks using only the keyboard shortcuts.
 
 
Question #5
How did you decide whether and how to use AI to generate your responses to A.1, A.2, and/or A.3?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Arithmetic
- Compared to humans, I find machines are much better at doing what I call "arithmetic".
 - I do arithmetic in my life when I'm trying to estimate when to leave my home to reach campus.
- I enter I-5 at mile 298.
 - I exit I-5 at mile 260.
 - I-5 has a 55 mph speedlimit from 298 to 289 then 65.
 - It takes ~40 minutes to get to 260.
 
 - Or I can ask a computer.
(298 - 289) * (55/60) + (289-260) * (65/60)
39.666666666666664
- Oh wow - that's a lot faster, easier, more accurate, and more trustworthy.
 
 - To ease into approaching how machines may think we'll start with arithmetic:
- It's easy for machines.
 - It can be useful for us.
 
 
Arithmetic
- Python has many of the expected arithmetic operations, and some extra fun* ones too.
- Addition: 
 - Subtraction: 
 - Multiplication: 
 - Division: 
 
 - And some and some extra fun* ones too.
- Integer Division 
- 5/2 is 2.5, but 5//2 is 2 (an integer, or whole number)
 
 - Modulo 
- 5%2 is 1, but 4%2 is 0 (Modulo is the remainder)
 
 - Exponentiation 
- 5**2 is 25, 5^2 is... something else.
 
 
 
Question #6
Can you think of a question you've left unanswered to because the arithmetic to answer them felt too daunting?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Operations
- Exercise A.4 Testing operations.
 - Take two numbers:  and  (selected to be easy to type)
 - Estimate and record your estimate of the value from using each of the arithmetic operations over these two values.
 - Using "Code" blocks in Colab, calculate the results.
-  (Addition)
 -  (Subtraction)
 -  (Multiplication)
 -  (Division)
 -  (Integer Division)
 -  (Modulo)
 -  (Exponentiation)
- Take special note of what happens here.
 
 -  (Something else)
- Describe vaguely what you think might be happening here.
 
 
 
Variables
- We can also use variables in Python.
 - There are some restrictions on names - mostly that they can't contain spaces.
- We can use single letter names, like 
 - We can use underscores as spaces, also called "snake case", like 
 - We can use capitalization to start words, also called "camel case", like 
 
 - We assign the value of a variable 
x = 1
- There must be a valid variable name on the left side of the "="
 - There must be some valid value on the right side
 
 - It's important to different assignment "single equals" "=" from equality testing "double equals" "=="
 
Variables
- Exercise A.5 One or two equal signs.
 - Select any two integers and assign them to any two variable names, such as "x" or "y"
- It will help latter if the first value is much larger than the second, but you can always change latter.
 
 - Calculate the integer "quotient" (the result of integer divison) and remainder of the two values
- What operations should you use?
 - Store the result of each in a variable, for latter
 
 - Use "double equals" to check if 
- the smaller value (say, y)
 - times the quotient (say, q)
 - plus the remainder (say, r)
 - is equal to the larger value (say, x)
 
 
Question #7
What do you like or dislike about Python compared to other ways you've performed arithmetic in the past?
- Think about a possible answer on your own
 - Discuss your answers with the rest of the group
 - Record a summary of each group’s discussion
 
Homework
- Homework 1 Pythagorean Triples
- Write code to define positive integers , , and  of your own choosing.
 - Calculate , , and 
 - Check to see if your three values form a Pythagorean Triple such that .
 - Have Python print True or False to verify that you do, or do not, have a Pythagorean Triple defined.
 - Hint: You will need to use double and single equals as well as print()
 
 - You may make a copy of this Notebook and share it with me and anyone with whom you collaborate.
- Give Shouvik and I edit permissions.
 - You may only give your peers view or comment permissions.