Note:This is a unique course with lots of exploration, fun and some serious insights into understanding the genesis and anatomy of programming languages towards aquiring knowledge and skills that are required to design them, not just use them
Course Description - What is this course about?
Do you know how many programming languages are there today? [3000+?] How many more programming languages would come in future? Do you know how these languages are designed? Will you learn each of these languages or learn the core that enables us to learn any language quickly and deeply? Understanding and designing programming languages is inevtiable in today's world not just for software engineers but everybody and for computer science students, it is impossible to design solutions without a fundamental understanding of programming languages. It is here this course makes an attempt towards that direction.
This course is an attempt to provide foundations to students for a deeper understanding of the anatomy of programming languages and at the same time dissect and analyze these foundations in the context of several programming languages. Focus will be on providing an overview of theories of programming languages like lambda calculus, turing machines and so on... paradigms of programming languages like declarative, imperative and so on. This exercise is done by understanding core principles of programming languages like scope, state, environments, types and so on through the lens of several programming languages. This course does not use one particular language but explores a set of interesting languages. Wait!!! Not just C, C++, Java and so on... but Erlang [WhatsApp], Scala [Twitter], Groovy, Clojure, Dart [like Java Script from Google] and many more... Another major distiction of this course is to understand the specification of these programming languages and see how thye are designed. Code as data is a major influence during the design of programming languages and we will delve into how to integrate machine learning style into programming languages as an experiment.
Course Objectives
- ↠ Understand fundamental principles like scope, state, environments... in Programming Languages and be able to apply them towards design of programming languages
- ↠ Understand the design of programming languages through their specifications
- ↠ Design and write an article [in pairs] towards a new programming language
- ↠ Be able to learn new programming languages rapidly not just syntax but the underlying semantics
- ↠ Be able to choose appropriate languages and make trade-offs
- ↠ Acquire knowledge and skills towards design of new programming languages
- ↠ Internal Objective: Bring out the best in students using best ways!!!
- ↠ Internal Objective: Help students to become best engineers in best product companies like Google, Facebook, Microsoft and so on by providing under the hood fundamentals
An Interactive Teaching and Learning Style - Unique aspects of this course
This course uses innovative pedagogies to make learning interactive and these are the following innovative aspects of this course
- ↠ This is primarily a thinking, writing and designing course
- ↠ Inquiry based learning - Discover, Diagnose and Design
- ↠ Extra credits for extra work
- ↠ A lecture or two from the choice of students
- ↠ Course Diary: Students write their learnings, likes, dislikes...
- ↠ Studio classroom exercises
- ↠ Bonuses for extended assignment deadlines
- ↠ Puzzle exercises
- ↠ Exit slips: students must earn at least 5 points to leave the class
- ↠ This course will be continuously adapted based on students' interests, abilities and feedback
Grading
This course uses points for grading and as such students accumulate points throughout the course via various activities listed above. They can gain extra points by doing extra and innovative work. The maximum number of points for the course is 1000 and has levels for differnet grades like A, A-, B and so on. Students will always be credited if they do extra work :)
Proposed grading distribution
• 10% : Mid Exam 1
• 10% : Mid Exam 2
• 15 % : Final Exam
• 40 % : Adventure* Article + supporting illustrations/demonstrations/examples
[As some students might not be very good at writing, for them the weightage might be reduced to 30% and the rest 10% could be considered via other means]
• 20 % : Assignments and Quizzes [small, recurring ones throughout the course]
• 5 % : Blog/Wiki summarizing what you learnt every week and class activities
*The primary component of this course is an edited book entitled "Adventures in Programming Languages" comprising of articles written by students along with me. These articles primarily start with the question of "Why current programming languages are not enough?" and each pair of students propose a language with proposed features, why they are required, what is the specification behind it and then the design of the language itself. This is called as an "adventure" rather than a project. Students write and enhance this article every week and by the end of the course, the book should be complete.
Expected effort: 3-4 hours per week other than contact hours. There will be continuous exercises and evaluations instead of one-time. Yes, as many of you are asking, it is proposed to be a light-weight course :) :) but hope it will be a milestone as well
Books/Resources
This course does not use a direct book but students will be provided with a number of resources. The following is a set of reference books that will be available in the institute library