Coder Social home page Coder Social logo

karnaj / pcomp-2019 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yurug/pcomp-2019

0.0 2.0 0.0 329 KB

Repository of the course "Comparative Programming" of University Paris Diderot

License: Other

Makefile 4.00% C 8.75% Java 14.20% Go 14.52% OCaml 14.02% Scala 6.21% Python 2.98% Ruby 35.31%

pcomp-2019's Introduction

Programmation Comparée -- 2019

Le cours "Programmation Comparée" du Master 2 "Langages et Programmation" de l'Université Paris Diderot est animé par Adrien Guatto et Yann Régis-Gianas. Ce dépôt git contient les ressources utilisées en cours et créés par les enseignants et leurs étudiants. Sauf mention spécifique, l'ensemble des fichiers de ce dépôt est diffusé sous licence Creative Commons CC BY-NC-ND.

Motivations

La diversité des langages

Il existe plusieurs milliers de langages de programmation dont plusieurs centaines sont activement utilisés aujourd'hui. Qu'est-ce qui peut expliquer une telle diversité? Est-ce que cette diversité a des raisons théoriques et pratiques profondes ou bien traduit-elle un phénonème de Tour de Babel, i.e. l'incapacité des hommes à construire ensemble un langage universel (de programmation)?

🤔 Quelles sont les raisons de cette grande diversité des langages selon vous?

La diversité des styles

Non seulement il existe de nombreux langages pour écrire les programmes mais même si on se fixe un langage de programmation, il y a une infinité de façon de l'utiliser pour écrire le code source d'un programme. Parmi tous les programmes exprimables dans un langage, y-a-t-il des codes sources "meilleurs" que d'autres? Sur quels critères évaluer un code source? Qu'est-ce qui influence, consciemment ou inconsciemment, le choix d'un style de programmation plutôt que d'un autre? C'est une vaste question, similaire à celle posée par la littérature comparée dont est tiré le titre de ce cours.

🤔 Et vous, en tant que programmeur, qu'est-ce qui vous fait choisir un langage ou un style de programmation plutôt qu'un autre lorsque vous commencez un nouveau projet?

La question de ce cours

Comment un développeur doit-il se positionner vis-à-vis de cette pluralité des styles de programmation?

C'est la question que pose ce cours et à laquelle nous allons essayer de répondre.

Est-ce une question pertinente pour un développeur?

Cette question n'est-elle pas purement académique? Pourquoi devrait-elle intéresser tout développeur? Dans la plupart des cas, un développeur intègre un projet déjà existant dont le langage de programmation a déjà été déterminé, il n'a qu'à l'utiliser! Plus généralement, pourquoi s'intéresser à d'autres langages de programmation que C, Java, Python, VB, C++, C#, Javascript, PHP, SQL et Objective-C qui en 2018 représentaient à eux seuls 60% des langages les plus "populaires" (d'après l'index TIOBE)? De même, pourquoi s'intéresser à d'autres paradigmes que ceux de la programmation procédurale et de la programmation orientée objet alors qu'ils semblent s'être imposées depuis plusieurs décennies dans l'industrie du logiciel?

🤔 Vous en connaissez vous, d'autres paradigmes de programmation? Ce n'est pas un peu grandiloquent ce terme de "paradigme"? L'hypothèse de Sapir-Whorf prétend que non!

L'évolution des langages de programmation

L'histoire des langages de programmation montre qu'en 70 ans, un grand nombre d'approches et de langages se sont succédés : FORTRAN, ALGOL, COBOL et LISP ont été les Java, Python ou Javascript de leurs époques mais sont aujourd'hui dépassés en popularité par ces derniers. Est-ce seulement parce que ces langages sont démodés qu'ils ne sont plus tant utilisés? Est-ce qu'ils ont toujours été remplacés par des langages ayant véritablement de meilleures propriétés? Est-ce que le remplacement des langages de programmation suit une forme de rationalité? Dans tous les cas, l'histoire a tendance à se reproduire et Java, Python et Javascript seront probablement remplacés par de nouveaux langages de programmation dans les années à venir. Dès lors, il est essentiel de savoir apprendre un nouveau langage de programmation.

Face à un nouveau langage, il faut réussir à distinguer ce que le langage hérite de ses prédécesseurs et ce qu'il apporte de véritablement nouveau. Cette tâche peut se révéler ardue si on ne sait pas naviguer dans l'océan des milliers de langages de programmation existants à ce jour.

Le style de programmation

S'intéresser aux différentes approches et styles de programmation permet d'élargir son champ de pensée et de conception. Cela permet de ne pas se trouver démuni face à du code écrit par une autre personne ou par soi-même:

"Any code of your own that you haven't looked at for six or more months might as well have been written by someone else."

  • Eagleson's law

Peut-on vraiment répondre à cette question?

Cette question admet-elle des réponses "scientifiques"? Sans aucun doute! Dans ce cours, nous verrons que l'on peut se doter d'une  méthodologie rigoureuse  pour évaluer un code source ou plus généralement la pertinence d'une approche de programmation pour résoudre un problème fixé.

Les critères d'évaluation sont multiples et complexes : ils peuvent être qualitatifs ou quantitatifs, s'appuyer sur des résultats théoriques et formels ou sur des modèles construits de façon empirique. Dans tous les cas, le positionnement du programmeur vis-à-vis des approches et techniques de programmation est le résultat d'un compromis visant à maximiser des mesures, parfois difficilement conciliables. Une approche rigoureuse permet de retracer le raisonnement qui a mené à ces choix.

Objectifs

  • Comprendre et comparer les différentes approches de la programmation
  • Apprendre à communiquer avec le code et sur le code

Méthodes

  • Étude de l'Histoire et de la théorie des langages de programmation
  • Expériences de communication autour du code:
    • Expliquer son code.
    • Expliquer le code d'un autre programmeur (avec ou sans accès à ce dernier).
    • Comparer plusieurs programmes proposés pour résoudre un problème donné.
    • Faire une revue de code.
    • Faire un exposé technique sur une technologie de programmation.
  • Cours orienté "défis"

Thèmes abordés

La liste suivante est indicative et évoluera:

  • La qualité d'un code source
  • De la crise du logiciel à la révolution de la programmation fonctionnelle
  • "Programming-in-the-large"
  • L'art de la programmation (lettrée, dirigée par les tests, par les types, "live", ...)
  • L'optimisation des programmes séquentiels
  • Programmation à grande échelle
  • Programmation orientée langages, aspects, composants, acteurs, services, ...

Validation

  • Contrôle continu:
    • Exposé de groupe sur une approche de programmation
    • Exposé individuel sur un langage de programmation "inconnu"
    • Défis
  • Examen final

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.