Tomáš Petříček, 204 (2nd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
Lectures: Tuesday 12:20, S6
https://d3s.mff.cuni.cz/teaching/nprg075
Program as expression in small formal language
Type system determines what programs are valid
Safety proof shows no unauthorized accesses
Result is a document not a program
Working with one concrete dataset
Different language and system requirements!
Interacting with a stateful environment
Let programmers do more in new ways...
It's not just a language!
LINQ queries in Visual Basic .NET and C#
Dim db As New northwindDataContext
Dim ukCompanies =
From cust In db.Customers
Where cust.Country = "UK"
Select cust.CompanyName, cust.City
Why confuse programmers familiar with SQL?
SELECT [CompanyName], [City]
WHERE [Country] = 'UK'
FROM dbo.[Northwind]
Many different programming systems
TypeScript, Jupyter, ML/F#, Smalltalk, BASIC
Many different research methods
Design, logic, proofs, user studies
Evolving course from two years ago
Slides on the web, but no textbook
Small independent
or group project
Using any of the covered method
Described in a brief report (4 pages)
Deadlines
Topic by December 20
Draft by February 28
Check out prgprg.org!
Join our reading group
(on Wednesday)
Find other cool courses
(MFF and firends at FIT)
Sign up for email updates
Talks about "how"
but not about "what"
Treat design as a research problem!
What can we study about programming systems?
Design is the intentional solution of a problem, by the creation of plans for a new sort of thing, where the plans would not be immediately seen, by a reasonable person, as an inadequate solution.
Parsons (2015)
Different basic
ways of thinking
What is a computer program, how to best create one?
Five different cultures of programming!
Creating designs
Interviews, prototyping, formalism, analysis, history
Evaluating designs
Qualitative and quantitative studies, formal proofs
Coblenz et al. (2018)
Prove properties about small formal models
"Well-typed programs do not go wrong"
Discover and avoid subtle mistakes!
User studies, questionnaires, interviews, etc.
Qualitative analysis to design & test ideas
Quantitative analysis to compare designs
What interesting past ideas were lost?
And the socio-political reasons for that?
Use history as source for new design ideas!
Design - Design and pattern languages
Usability - Human-centric language design
Semantics - Formal models of programming
Types - Types and type safety proofs
Beyond - Unexpected perspectives on types
Paradigms - History and programming systems
Complementary - Learning from past systems
Cognition - How humans think about programming
How to do research about
programming language design?
Tomáš Petříček, 204 (2nd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
https://d3s.mff.cuni.cz/teaching/nprg075
Methodology
Assorted examples