Books: Computational Thinking and Programming book (official book of the course - it includes more than 100 exercises with keys!) + accompanying book How To Code in Python
Other material: available in the GitHub repository of the course at https://github.com/comp-think/2021-2022/
As of yesterday, 29 people have subscribed to the Signal group
Please subscribe to the Signal group as soon as possible
Invitation link to join the group:
https://signal.group/#CjQKICS9Jct3jXhbC2MvbfZ8NWbdDes1cCdcg-ylMGTLBzeEEhBHzCfdCxp6djhSHHrErD2k
Note: I need to approve each request by hand
We will use the GitHub repository of the course for a series of activities, such as exercises and raising issues
Thus, please, create a new account on GitHub: https://github.com/join
Video of previous lectures:
As you should already know, a non-mandatory workshop will be held immediately after the last lecture, where the students are asked to organise themself in groups of 3-4 people (max. score: 4)
Max. score you can obtain from it: 4 points
We need to decide the date – my suggestion is
21 December 2021, 9:30-12:30
Founders of the cognitive science field
Father of the modern linguistics
Provided a classification for formal grammars
A formal grammar is a mathematical tool for defining a language (e.g. English) according to a finite set of production rules, that allows one to construct any syntactic valid sentence of such language
regular grammars (the least expressive)
context-free grammars
context-sensitive grammars
recursively enumerable grammars (the most expressive)
All specify constraints on the way one can use terminal and non-terminal symbols
terminals are elementary symbols of the language (e.g. words), e.g. "write"
non-terminals (e.g. <sentence>
) can be replaced by a combination of terminal and non-terminal symbols
A simple grammar defined using the Backus-Naur form
<sentence> ::= <pronoun> "write"
<pronoun> ::= "I"
<pronoun> ::= "you"
Is the sentence I write
part of the language defined by the aforementioned grammar?
<sentence> ⇒
<pronoun> "write" ⇒
"I" "write"
The sentence I write
is part of the language
Computational Thinking and Programming
Definition of computational (Oxford Dictionary): using or relating to computers
A computer (today): electronic device
A computer (before advent of electronic computers): a person who performs mathematical calculations
Groups of people who have to undertake long calculations for specific experiments or measurements
In astronomy: used for calculating astronomical coordinates of non-terrestrial things – such as the calculation of passages of Halley's Comet by Alexis Claude Clairaut and colleagues
In commerce: Napoleon imposed the creation of mathematical tables to convert quantities from the old imperial system of measurements to the new metric system
In 1822, Charles Babbage developed the Difference Engine and then the Analytical Engine - the latter one was programmable, making it the very first mechanical general-purpose computer in history
Babbage's Difference Engine
Babbage's Analytical Engine
Programmablewhat?
Babbage's Difference Engine
No additional operations permitted
Babbage's Analytical Engine
Space for additional operations
Programmablewhat?
Babbage's Difference Engine
No additional operations permitted
Babbage's Analytical Engine
User defines new operations
The ideas presented in the Analytical Engine were developed in a physical machine only one century later, since computing technology has had a drastic change as a consequence of World War II
In 1946, US developed the Electronic Numerical Integrator and Computer (ENIAC), a programmable computer through patch cables and switches - the fixed point in time that generated all modern computers
In this course, with computer we mean any information-processing agent (i.e. a person or a machine acting mechanically if appropriately instructed) that can make calculations and produce some output starting from input
Computational Thinking and Programming
The word programming stands for programming language
Natural language vs Programming language
An ordinary language (e.g. English), either written or oral, that has evolved naturally in humans, usually without a specific and premeditated planning
Usually, natural languages are very expressive but intrinsically ambiguous
by Groucho Marx, a line from a memorable joke
One morning I shot an elephant in my pajamas
A formal-born language, defined using Chomsky's context-free languages, usually
They oblige to specific syntactic rules that avoid possible ambiguous statements, mainly by restricting the expressiveness of the language
All the sentences in such language are conveying just one possible meaning
Machine language
100010110101010000100100000010001000001111111010000000000111011100000110101110000000000000000000000000000000000011000011100000111111101000000010011101110000011010111000000000010000000000000000000000001100001101010011101110110000000100000000000000000000000010111001000000010000000000000000000000001000110100000100000110011000001111111010000000110111011000000111100010111101100110001001110000010100101011101011111100010101101111000011
Low-level programming language
fib:
mov edx, [esp+8]
cmp edx, 0
ja @f
mov eax, 0
ret
@@:
cmp edx, 2
ja @f
mov eax, 1
ret
@@:
push ebx
mov ebx, 1
mov ecx, 1
@@:
lea eax, [ebx+ecx]
cmp edx, 3
jbe @f
mov ebx, ecx
mov ecx, eax
dec edx
jmp @b
@@:
pop ebx
ret
High-level programming language
unsigned int fib(unsigned int n) {
if (n <= 0) return 0;
else if (n <= 2) return 1;
else {
unsigned int a,b,c;
a = 1;
b = 1;
while (1) {
c = a + b;
if (n <= 3) return c;
a = b;
b = c;
n--;
}
}
}
Natural language
The function for calculating the nth Fibonacci number takes as input an integer “n”. If “n” is less than or equal to 0, then 0 is returned as a result. Otherwise, if “n” is less than or equal to 2, then 1 is returned. Otherwise, in all the other cases, associate the value “1” to two distinct variables “a” and “b”. Then, repeat the following operations indefinitely. Set the variable “c” as the sum of “a” plus “b”. If “n” is less than or equal to “3” then return “c”, otherwise assign the value of “b” to “a” and the value of “c” to “b”, and finally decrease the value of “n” by 1 before repeating.
Computational Thinking and Programming
To think (definition, Oxford Dictionary): use one's mind actively to form connected ideas
Addressed in the previous lecture! Some lesson learnt:
Leaving out unneeded material
Trial-and-error prodedure may be effective
Recognising similarity of a problem to one already solved makes the problem easier to solve
Use of patterns provided by experience is the most rapid way of solving problems
Writing a program: communicating to a computer in a (formal) language that such a computer and the human instructor can both understand
What we need:
agree on which language to use for the communication between us and a computer (either human or machine)
think about possible instructions that, if followed systematically by the computer, can enable it to return the expected result to a certain problem
Two objects, each composed by a stack of usually rectangular pages (346 and 288 respectively) made of paper oriented with one edge fixed together and then bound to the flexible spine of a protective cover of heavier material, containing a text written by someone (Lewis Carroll) in a natural language (Italian and English respectively)
The process of leaving out of consideration one or more properties of a complex object or situation by extracting common features from specific examples
An approach for solving problems, designing systems and understanding human behaviour that draws on concepts fundamental to computing
Reshape the abstractions we have ingested as consequence of our life experiences – that we are unconsciously reusing
Being again fully conscious of such abstractions, we can use an appropriate language for making them understandable to a computer, in order to automatise them
Final goal of Computational Thinking: to complement the other thinking strategies one has already learnt in the past with another tool to describe reality