Tomáš Petříček, 309 (3rd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
Lectures: Monday 12:20, S7
https://d3s.mff.cuni.cz/teaching/nprg075
Is that teaching everyone to code?
What to teach and
how to best do it?
Designing languages for education?
Characteristics of the era
Not just a programming language for kids
Computer environment: people, things, ideas
Computer culture: a way of thinking about thinking
Platforms for creating applications with minimal code
A new take on end-user programming
High-level business oriented predecessor of COBOL (1957)
Makes coding so easy your company will not need programmers!
① Very high-level
Domain-specific languages
② Spreadsheets
CAD & statistical systems
③ User interaction
New kinds of specifying
FLOW-MATIC (1960s)
English; easily taught to clerical workers
DSLs (2000s)
Small languages for specific problems
Low-code (2020s)
GUI-based entire
app development
Domain-specific abstractions for server-less backends
(Marasoiu, 2019)
Spreadsheet-based data visualization
Spreadsheet interface for constructing custom charts
What else could we express this way?
Complete task manually, have computer repeat it
Industrial robots, graphics editing, task automation, geometry, formatting
How to allow for small variation in behaviour?
(Kandel et al, 2011 )
Data wrangling by direct manipulation
User cleans with data
System builds a script
Attempts to generalize concrete interactions
"Seymour Papert and Marvin
Minsky thought about thinking,
about children's thinking and
about machine's thinking."
TO NOUN
OUTPUT PICK [BIRDS DOGS ..]
END
TO VERB
OUTPUT PICK [HATE BITE LOVE]
END
TO ADJECTIVE
OUTPUT PICK [RED PECULIAR ..]
END
PRINT (SENTENCE ADJECTIVE
NOUN VERB ADJECTIVE NOUN)
A small domain-specific language for exploring ideas
Turtle graphics is best known example
First LOGO example was for word plays
On-screen and floor robots
Great for teaching
Debug by pretending to be the turtle & follow program
Does not blame students ("the turtle has a bug")
A powerful idea for understanding how programs work
Function instantiation as a "little men" doing (one step of) work
Boxes with pointers as connecting arrows
Let's insert 3 in the list between 2 and 4...
Boxes with pointers as connecting arrows
Let's insert 3 in the list between 2 and 4...
Useful but does not explain everything that pointers can do!
name
?name
?
class Monad m where
(>>=) ::
m a -> (a -> m b) -> m b
return ::
a -> m a
Interface capturing a class of computations
Used for effectful computations in Haskell
How programmers
think about them?
Meaningless symbolical entity satisfying laws
Container that can be transformed and un-nested
Computation that can proceed in multiple ways
Please do keep in touch!
Tomáš Petříček, 309 (3rd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
https://d3s.mff.cuni.cz/teaching/nprg075
End-user programming
Spreadsheets
Programming by demonstration
Programming by example
Programming education
Metaphors & misconceptions