Let us start by looking at Githut
Look at the top 49 languages
"view by percentage of total":
the number of programming languages is growing
not on githut:
Cobol, Algol, Simula, Ada, Smalltalk, Eiffel, Erlang, Prolog, Idris,
Isabelle, Agda, Coq, Promela, Anglican, ML, ...
What other programming languages do you know?
Can we bring some order into this?
Clearly we cant learn all of them.
Let us take a step back and look at the landscape surrounding computer science:
Draw a map of the landscape (possibly add hardware/engineering on the left):
programming computer science mathematics
-----------------------------------------------
1. I see progress in this landscape following one (or many) S-shaped figures:
------------->------------------>-------------
|
-------------<------------------<-------------
|
------------->------------------>-------------
|
-------------<------------------<-------------
|
...
discuss some examples of S-shapes ...
btw, we might have to add a "hardware" column to the left of "programming" ...
2. We can place people in the landscape ... only a small number will be at home in all three areas
3. We can place programming languages:
Questions:
For what purpose was a language invented?
For what purposes is a language used now? Why?
Which communities use the languages?
...
(Possibly with an arrow starting where you are and pointing where you want to be.)
I am somwhere between computer science and mathematics. I use mathematical models of computation in my research. In this course I am planning to teach you some of the fundamentals of this area. The main idea is to use models of computation as an organising principle
- to bring order into the multitude of programming languages
- to appreciate the history of programming languages
- to understand current trends and future developments
- to prepare ourselves for a future of even more programming languages
What do you want to get out of the course? Where are you in the landscape?
- 40% written exam
- 40% blog
- 20% form,
- 20% content
- 20%
- software or
- theoretical essay (mini-thesis) typeset in latex
- The blog and the software/essay can be group work
- Groups could be 3 students each
- Each group should adopt one programming language, the same for blog and software
- Everybody is different, if you prefer to work alone that is ok with me ... but groups are fun and one can learn a lot from others
-
If you like theory use the blog to document your understanding of models of computation, use the blog to do homework and exercises and learn a programming language like eg Isabelle.
-
If you like programming, use the blog to document the progress in programming and to link your programming with what we learn about models of comptuation in the theoretical part of the course.
-
If you like blogging, you can also start from there.
Blogging is important. I am sure you all read blogs and you know what great contribution they can make to teaching and learning. Let me give you some examples of blogs I enjoy reading (even if I never manage to read them regularly).
One of the oldest science blogs (mostly physics and maths) is by legendary John Baez from Riverside: http://math.ucr.edu/home/baez/TWF.html
My friend and colleague Pawel Sobocinski is breaking new ground with his blog on linear algebra as a programming language: https://graphicallinearalgebra.net
Of course there many more ... let me know your favourites ... a recent example (thanks to Justin Dressel) that is very relevant for programming language design is https://queue.acm.org/detail.cfm?id=3212479
Your blog does not have to be public, but you are likely to get higher marks if it is: Being aware of the readers improves form and content.
You can choose a langueage because
- you have a specific career plan and you know that a certain PL would be good
- you heard others talking about this PL and it sounded so cool
- the PL would be useful for what you want to do in your programming project (you always wanted to develop X, but you didnt know the best way of doing it, so now you choose a PL that might be interesting for the purpose; you might not get X going, but you will learn a lot about PLs, and X, on the way)
- you are interested in the history of PLs (Fortran, Lisp, Algol, Smalltalk, Scheme, ...)
- of the application area
- probabilistic programming for machine learning https://en.wikipedia.org/wiki/Probabilistic_programming_language
- AI (lisp, prolog, ...)
- theorem proving (Isabelle, Agda, Coq, ...)
- blockchain, crypto, smart contracts, ... https://en.wikipedia.org/wiki/Solidity ...
- you want to learn a PL that is fringe but rising in popularity
- Haskell, Idriss, ...
- Ehtereum, blockchain, smart contracts, ...
- the PL is really so different from all the others (and hence interesting) Prolog, Idris, Lisp, Erlang, ...
- it is a PL I know well (Isabelle, Promela, Prolog)
- it is a PL I dont know much about (all the others)
- form groups
- choose a programming language
- let me know your favourite blogs (should be somewhat CS related)
- choose a place to host your blog (could be github ...)
- write the first blog entry about why you are excited about the programming language you choose ... what do you expect? ... etc
- possible projects:
- write about the history of programming Languages
- try to understand the the role the different 49 languages play
- For what purpose was a language invented?
- For what purposes is a language used now? why?
- Which communities use the languages?
https://githut.info
https://github.com/tchapi/markdown-cheatsheet/blob/master/README.md