Git Product home page Git Product logo

prog_scala's Introduction

Programming Large Systems with Scala

This repository contains the teaching material that I use for my lectures on System Programming at ENS Rennes. This is a undergrad lecture, introductionnary on scala (but not on programming).

If you are a student of ENS Rennes, you will not find any solution to the exercises. You should not read the material before the lectures to not spoil yourself, but it does not hurt if you do. After the lecture, your help is welcome to improve the material. Pull requests welcome ;)

Syllabus

Lecture 1: Introduction.

We first try to motivate the study of systems programming, and discuss the philosophy of Computer Science to show that Programming large Systems is absolutely central in Computer Science.

After this (hopefully) motivating introduction, we present the basics of the Scala syntax.

We use the lesson on Hanoï Towers of the PLM to experiment with the Scala syntax. Don't forget to switch to Scala with the upper right menu!

Large systems are inherently complex and dynamic, so we want to design our systems in a way that mitigates these issues.

We lengthly discuss the Object Oriented Programming approach (OOP), that is the classical reductionist solution to the system complexity. There is no absolute rule about how to build a Good Design (TM), but we present several rules of thumb to avoid horrible designs, at least.

As a conclusion (and as an appertizer for next week's lecture) we then shortly contrast this OOP approach with the Functional Programming (FP) way of composing complex systems.

In this project, you will implement a Tower Defense game inspired from the PopCap Games' Plants vs Zombies ®. During this assignment, you will explore many of the OOP concepts, as well as some basic concepts of FP.

Please do not fork the current project to work on your assignment, but download the source code and create another repository elsewhere. Please do not post any solution to this assignment online.

This week we explore another way of sorting your bits, centered on the behaviors. We speak of higher order functions and closures, but also of variance, covariance, invariance and friends.

This exercise sheet will let you work on OOP code organization. You will have to design two class hierarchies. A source template is provided to save your time.

Lecture 4: Sorting your bits.

This week we speak of code clarity and understandable design. This will lead us through the notions of Design Patterns, code smell, Functionnal Programming Principles and Programming Style.

If you want more of Software Engineering, have a look on this colorful, not-too-technic introduction to the topic.

This exercise sheet will let you work on FP code organization, using two classical combinatorial search problems as an excuse. A source template is provided to save your time.

Compiling the material

Everything is written with org-mode, of emacs. If you are really new to this, check the little introduction that I wrote in another context.

If you want to run everything with a simple make, you need to also install latex-make. That's very easy if you use a Linux system, but I was told that it's also possible with Mac OSX.

License

This material is distributed under the CC-BY-SA licence: as with wikipedia material, you are free to contribute or distribute this content, but you cannot restrict the rights of your own copy. Your readers must also be allowed to modify and contribute to your version.

prog_scala's People

Contributors

lbeziaud avatar mquinson avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

oster

prog_scala's Issues

Typos !!!

Sur le sujet du TD "programmation fonctionnelle en scala"

Page 1 : For each possible solution, it it is better than the previously best solution known, it
becomes the new best solution known. -> "if it is better" (erreur de saisie)

Page 1 : Once down -> "Once done" (!!)

Page 1 : "filter that list" -> "filters that list" (erreur de personne)

ExhaustiveSearch.scala : "There is $n$ solutions" -> "There are $n$ solutions" (personne !)

Typos en vrac

TD3, section 1.1 : "simply sweeps over all solutions" -> "(simply / just) sweep over all the solutions" (just me semble plus adapté que simply, dans le sens où il y a une unique chose à faire mais pas forcément simple. Sweep : pas de "s" si c'est à l'impératif (contentez-vous de balayer les solutions). Et évidemment, un the car on sait quelles sont les solutions, ce ne sont pas des concepts mais des choses tangibles, toutes choses étant relatives bien entendu).
TD3, section 1.2 : "generating every knapsacks" -> "generating every knapsack" (derrière every, c'est un singulier)
TD3, section 3 : "a bread-first search" -> "a breadth-first search" (le pain, c'est bon, mais le parcours en largeur, c'est mieux). Dans la même phrase "the set can be empty if we reached a leaf" -> "the set can be empty if we have reached a leaf" (la feuille, nous l'avons toujours en main...)

TD2, un peu partout : je dirais "electric dipoles" plutôt que "electrical dipoles", idem pour "electric circuits" au lieu de "electrical circuits". Cela dit, je ne suis pas sûr de ça à 100% .
TD2, section 1.0 : "a serie circuit" -> "a series circuit" (c'est ainsi au singulier en anglais, et c'est la même pour les séries en maths)
Du coup, même erreur à la question 2, à la questiion 3.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.