.. blogpost:: :title: Introduction à la programmation (sketch) :keywords: teachings :date: 2022-09-07 :categories: cours :lid: blog-intro-2022-ensae Xavier Dupré - *http://www.xavierdupre.fr* **Présentation** * Avant l'ENSAE, programmation en classes préparatoires, `Informatique en CPGE `_ * concepts de base, tests, boucles, fonctions * calcul matriciel * notion de quelques algorithmes * langage python * Après l'ENSAE * réalisation de nombreux projets en python * plus grande culture algorithmique, graphes, algorithmes probabilistes * notion d'ingénierie logicielle * tests unitaires * notion de processeur, CPU, GPU * manipulations des données * Selon les options * langages plus bas niveau C/C++ * autres langages, javascript pour les sites web, SQL pour les bases de données, R pour les statistiques * SAS... * Python à l'ENSAE depuis 2005 * beaucoup de choses ont changé depuis, le langage python s'est largement répandu dans le monde professionnel * Mon boulot en 2005 * Mon boulot aujourd'hui * Même si la plupart des ingénieurs savent programmer, peu savent très bien programmer * La double compétence mathématiques / informatique est rare. * Python : le langage du machine learning * numpy, scikit-learn, pandas, matplotlib, jupyter * deep learning = python * automatisation, site web * Python : langage commun à toutes les universités de par le monde * facile, travail plus facile pour les professeurs également * interfaçage avec C++ **Assembler des algorithmes existants** * Trouver le plus court chemin d'une station de métro à une autre ? --> plus court chemin dans un graphe * Même question en tenant compte des temps de changement de ligne ? * Optimiser la tournée d'un camion poubelle **Automtiser** * Lancer tous les matins la récupération automatiques de données épidémiologiques pour construire un rapport de suivi **Machine learning aujourd'hui** * Apprentissage fait avec python * :epkg:`scikit-learn` * deep learning : :epkg:`pytorch` * Code faisant les calculs écrit en C/C++/asm * :epkg:`numpy`, :epkg:`scipy` * :epkg:`scikit-learn`, `_tree.pyx `_ * Déploiement (utilisation des modèles) sur d'autres langages encore (javascript, C#, go, ...) * Python très lent malgré et difficile à maintenir d'une version de python à une autre * Le Cloud `AWS `_, `Azure `_ ... * Démocratisation dans de nombreux pays * `Health Data Hub `_ * `data.gouv.fr `_ **Deep Learning** * Le deep learning envahit la vie quotidienne * santé (aide au diagnotisque) * sécurité (vidéo surveillance), * automatisation (voiture) * publicité, objets connectées * ... * Besoin de calculs, besoin de codes rapides * CPU, GPU, TPU * `NVIDIA A100 `_, innovation matérielle et logicielle * recherche très active dans ce domaine * Modèles de plus en plus gros * Il ne suffit plus d'être bon en maths, ou bon en informatique, il faut être les deux **Ingéniérie logicielle** * Le point faible des ingénieurs français * On commence l'informatique avant la prépa dans d'autres pays * Pas assez de pratique, un bon codeur a beaucoup codé. * **tests unitaires :** à connaître avant d'aller passer un entretien d'embauche * intégration continue * A chaque modification, on vérifie que les tests unitaires passent. * documentation * C'est fastidieux mais indispensable dans un monde open source. * Les projets qui ont réussi ont toujours une bonne documentation. * culture algorithmique * un produit matriciel n'est pas aussi simple qu'on le dit quand on veut qu'il soit rapide * :ref:`l-algoculture` * git * Un outil injustement méconnu des juristes. **Thèse...** * C/C++ : même si vous n'en avez pas besoin tous les jours, on code mieux en python quand on connaît un langage bas niveau car on comprend mieux tout ce que le langage nous cache * linux **Cours, premiere semestre** * TD : :ref:`l-td1a` * Evaluation, anciens examens :ref:`l-seances-notees-1A` **Cours, second semestre** * Projet : :ref:`l-projinfo1a` **Ressource, supports pour ce cours** * TD : `Python dans tous ses états `_ * Rappels : `Petit voyage au pays du machine learning `_ * Programmation : `Apprendre la programmation avec Python `_ * Un peu plus mathématique : `Les maths d’abord, la programmation ensuite `_ Et puis... * Les moteurs de recherche : `python + message d'erreur`, `cheatsheet` * `Questions tagged [python] `_ * `Compétition de code par Google `_ * `Compétition de code en français ou presque `_ * `Projet Euler `_ **A la fin de l'année, vous devriez pouvoir...** * Imaginer une stratégie automatique au 2048. * Simuler une épidémie, des régimes de retraites * Supprimer les pesticides en programmant des drones pour couper les mauvaises herbes ou couper les feuilles infectées par le mildiou * Lutter contre les îlots de chaleur dans les villes en verdissant les toits avec un mélange de plantes en fonction de la disposition du toit (`Singapour : des gratte-ciels anti-pollution `_) * Devenir le prochain `covidtracker `_ * Calculer l'exposition d'une économie à un certain type de produit... `PSA : l'usine de Rennes à l’arrêt par manque de semi-conducteurs `_ `Panne Orange : quelles conséquences ? `_, `Xavier Jaravel, meilleur jeune économiste 2021 pour ses travaux sur l'innovation et les inégalités `_, Tout est sur `GitHub `_. **Culture algorithme et informatique** Connaissez-vous ? * Debian ? * git ? * github ? * les exceptions ? * les expressions régulières ? * json ? * les graphes ? * une table de hashage ? * Comment résoudre un sudoku avec un programme ? * Un algorithme de streaming ? * Le problème du postier chinois ? * Un problème d'appariement ? * Un problème NP-complet ? * la librairie openmp ? * Un cache ? * un float, un double ? * un test unitaire ? * ADA ? * John Von Neumann ? * Guido van Rossum ? * INRIA ? Programme : :ref:`l-feuille-de-route-2022-1A` **Notions à connaître** Algorithmes, structure de données * Dictionnaires * Tri bulle, tri fusion * Recherche dichotomique * Graphe, prédécesseur, successeur, composante connexe dans un graphe * Plus court chemin dans un graphe, distance d'édition * Plus court chemin passant par tous les points d'un graphe Techniques * expression régulière * profiling * JSON, sérialisation avec pickle * numpy, pandas, matplotlib * tests unitaires