Ce support se veut le compagnon indispensable des étudiants et des professionnels en informatique. Rédigé dans l’esprit « TL;DR », pour « Too Long; Didn’t Read », typique des échanges techniques entre informaticiens modernes, il revendique une approche condensée, exhaustive et didactique permettant l’assimilation aisée de notions informatiques parfois jugées compliquées. Pour préparer un entretien, un concours ou lors d’une transition professionnelle, il répondra aux exigences des...
Ce support se veut le compagnon indispensable des étudiants et des professionnels en informatique. Rédigé dans l’esprit « TL;DR », pour « Too Long; Didn’t Read », typique des échanges techniques entre informaticiens modernes, il revendique une approche condensée, exhaustive et didactique permettant l’assimilation aisée de notions informatiques parfois jugées compliquées. Pour préparer un entretien, un concours ou lors d’une transition professionnelle, il répondra aux exigences des développeurs, chefs de projet, architectes des SI, assistants à la maîtrise d’ouvrage ou futurs responsables informatiques.
Le support couvre des sujets essentiels de tous les domaines de l’informatique tels que le fonctionnement des UC, l’architecture lambda du Big Data, la modélisation de bases de données, la Programmation Orientée Objet, le langage UML, l’algorithmique, le web, les réseaux, la sécurité, le web sémantique et ses ontologies, ainsi que Linux, Bash ou encore Docker.
Le lecteur y trouvera également les informations essentielles pour la mise en œuvre du management de projet contemporain avec Scrum/SAFe et DevOps ainsi que les principaux concepts utiles aux consultants en organisation informatique, allant des outils SWOT, PDCA et IGOEs aux tableaux de bords informatiques, en passant par la sécurité ou le PCA, comportant une définition claire et précise des KPI à surveiller.
En initiation au langage Python, le support est un guide didactique, à même d’induire de bonnes habitudes de programmation, adaptées à un usage professionnel.
Ensuite, une check-list exhaustive et commentée des items de la documentation d’un projet est un allié indispensable pour ceux qui évoluent dans de nouvelles fonctions ou pour les responsables informatiques qui envisagent d’augmenter le niveau de maturité de leur organisation, le cas échéant en visant une certification CMMi.
Les nombreux aide-mémoire de ce support, de l’assembleur à Docker, en passant par SQL, Git, Pandas, Linux ou les réseaux, s’avèrent des outils structurés et précis pour un usage quotidien ou une révision rapide.
1. Présentation du processeur central de l’ordinateur
2. Fonctionnement du processeur et assembleur
2.1 Zoom sur une unité centrale de traitement (CPU)
2.2 Programmation assembleur
2.3 Pourquoi apprendre l’assembleur ?
3. Autour du CPU
3.1 Début de la séquence de démarrage d’un ordinateur
3.2 Agencement des différents composants matériels à mettre en œuvre
4. Les ordinateurs actuels calculent en binaire
4.1 Petites réflexions au sujet de la représentation décimale des entiers (base 10)
4.2 Introduction aux calculs en hexadécimal (base 16)
4.2.1 Conversion hexadécimal vers décimal
4.2.2 Conversion décimal vers hexadécimal
4.3 L’octal
4.4 Le binaire
4.4.1 Binaire vers décimal
4.4.2 Trucs, remarques et astuces
5. Encodage des caractères
6. Systèmes de fichiers
7. Carte graphique GPU, CUDA et IA
8. Réseaux et communications applicatives
8.1 Les réseaux locaux, introduction
8.2 Le protocole TCP/IP
8.3 Les adresses IP
8.3.1 IPv4
8.3.2 IPv6
8.3.3 Adresses IP à connaître
8.3.4 Relation entre IPv4 et IPv6
8.4 Plan d’adressage IP et DMZ
8.5 SSL/TLS HTTPS
8.6 L’accès à un serveur au travers d’un réseau, SSH
8.7 Socket programming : communication inter-processus sur le réseau
8.8 L’accès à une application ou à des microservices web via OAuth2
Méthodes - Les bases
1. Introduction
2. Assurer la convergence d’une action ou d’un projet
2.1 Penser le projet en se mettant en mode « PDCA »
2.1.1 Zoom sur le SWOT
2.1.2 Zoom sur le diagramme d’Ishikawa
2.2 Évaluer les principales phases d’un projet en mode cascadé (waterfall)
2.3 Cycle en V
2.4 Agilité
2.4.1 SCRUM, la référence actuelle des méthodes agiles
2.4.2 SAFe
2.4.3 Git
2.4.4 DevOps CI/CD
2.5 KPI et mesures
2.5.1 Mesurer la performance d’un projet
2.5.2 Le cas de la performance d’un projet agile
2.5.3 Tableau de bord de la sécurité
2.5.4 Tableau de bord du plan de secours informatique
2.5.5 Tableau de bord DevOps
2.5.6 Tableau de bord de l’exploitation informatique
3. Modéliser
3.1 Algorithmes
3.1.1 Exemple préliminaire
3.1.2 Test des algorithmes
3.2 Penser au travers de représentations normalisées : UML
3.2.1 Utilisation de la modélisation UML pour différents styles de programmation
3.2.2 Diagramme de cas d’utilisation (use case)
3.2.3 Diagramme de classe (héritage, composition, association message)
3.2.4 Diagramme de séquence
3.3 Diagramme entité-association (ER, EA, MCD) et langage SQL
3.4 Règles et règles métiers (business rules)
3.5 Modèles de processus, BPMN ou UML
3.6 Architecture d’entreprise (EA) et architecture technique du projet
3.7 Quelques concepts facilitant la structuration et la collaboration des couches du SI
3.7.1 SOA : Architectures Orientées Services
3.7.2 Les services du cloud computing
3.8 TOGAF
4. Comment structurer une étude de cas
4.1 Méthode générale pour aborder une étude de cas
4.2 Compléments concernant les choix de solutions informatiques fonctionnelles
4.2.1 Liste de progiciels fonctionnels
4.2.2 Choix de progiciels ou de solutions « clés en main »
4.2.3 Exemples de critères de choix de progiciels
Méthodes - Bien gérer les données
1. Introduction
2. Les concepts CRUD, 3NF, ACID, OLTP (et pas OLAP !)
2.1 CRUD
2.2 Les formes normales, en se limitant au niveau 3NF
2.2.1 Relations (associations)
2.2.2 Les trois formes importantes : 1FN, 2FN, 3FN
2.3 Les propriétés ACID
2.4 L’OLTP
3. Les concepts liés aux databases de la BI et du BigData
3.1 OLAP
3.2 Le BIGDATA - architecture de référence
3.2.1 Un exemple d’architecture "Lambda"
3.2.2 Hadoop et ses principales distributions
3.2.3 MapReduce, un algorithme exceptionnel
3.2.4 Apache Spark (Release 3.1.x)
3.2.5 Apache Hadoop vs Apache Spark
Découvrir l’algorithmique
1. Notions élémentaires
1.1 Un premier exemple d’algorithme
1.2 Un peu d’histoire...
1.3 La place de l’algorithme dans le développement d’un programme
2. Algorithme et programmation
2.1 L’objectif de l’algorithme
2.2 Exécution pas à pas d’un exemple pour induire un principe plus général
2.3 Décomposer par analyse descendante
2.4 Définir l’environnement de l’algorithme
2.5 Le cadre de l’algorithme : objectif, principe, exemple(s), décomposition et environnement
3. Rudiments de formalisation
3.1 Données et actions élémentaires
3.1.1 Le type numérique NUM
3.1.2 Le type caractère CAR
3.1.3 Le type chaîne de caractères CHA
3.1.4 Le type logique LOG
3.1.5 Le type date DAT
3.1.6 Le type composé : CMP
3.2 La déclaration et la portée des données
3.2.1 Sans affectation
3.2.2 Avec affectation
3.3 Interaction utilisateurs
3.4 Schéma conditionnel
3.5 L’itération
3.5.1 Le schéma : POUR _ FAIRE _ FINFAIRE
3.5.2 Le schéma : TANTQUE _ FAIRE _ FINFAIRE
3.6 Écriture modulaire
3.6.1 Les procédures
3.6.2 Les fonctions
3.7 Traduction vers un langage de programmation
3.7.1 Algorithme de calcul du reste de la division de deux entiers écrit en pseudo-code
3.7.2 Récursivité
4. Micro boîte à outils d’algorithmes
4.1 Le load balancing
4.2 La transformée de Fourier rapide
4.3 Optimisation au travers d’un gradient stochastique, le cas Adam
4.4 Algorithmes génétiques, application à la recherche d’un optimum
4.4.1 Sélection des parents
4.4.2 Crossover (croisement)
4.4.3 Mutations
4.4.4 Coder un algorithme génétique
4.5 Parcourir un arbre
4.6 Bibliothèque d’algorithmes utiles
Code et Web
1. Introduction
2. Connaissance, ontologie, markup language, web sémantique
3. HTML5 et CSS3
3.1 En bref
3.2 Exemple de page web triviale
4. Le DOM
5. JavaScript
5.1 Exemple de JavaScript
5.2 Insertion de code JavaScript dans une page HTML
5.3 Page web via Python, apartés sur Flask, POST et GET
Linux, Shell, Conteneurs, WSL - quésako ?
1. En guise d’introduction
2. Survivre avec Linux - Le minimum à savoir
2.1 Points de repère
2.2 Manipuler un fichier
2.3 Redirection, pipe, grep
2.4 Installation, en bref
2.5 Permissions
3. Daemons (divinités ou démons) et cron
4. Suggestions pour une utilisation plus professionnelle de Linux
4.1 Apprendre le shell bash
4.2 Étudier et implémenter "Systemd" et travailler sur les "cgroups"
4.3 Suggestions - Réseau et services
4.4 Suggestions - Sécurité
5. Conteneurs et Docker
5.1 Docker, VM, services, en bref
5.1.1 Démarrer avec Docker
5.1.2 Persistance
5.2 Exemple d’architecture multiconteneurs
Python - "starter" TL;DR
1. L’esprit de ce starter Python
2. Dénominations et conventions
3. Zen de Python
4. Contexte de travail
5. Pour commencer
5.1 Python, comme une calculette
5.2 Faire des choix
5.3 Structures de contrôle itératives
5.4 Créer ses propres fonctions
5.4.1 Portée des variables et passage de paramètres
5.4.2 Mourir vite
5.5 Créer ses propres bibliothèques de fonction
5.6 Vos deux premiers types built-in composés
5.6.1 Les t_uplets (tuple)
5.6.2 map et lambda
5.6.3 Les ensembles (set)
6. Manipulations de données courantes
6.1 Utiliser la fonction print et découvrir les strings
6.2 Utiliser les listes
6.3 Créer et transformer des listes
6.3.1 Les bases
6.3.2 Effectuer une boucle sur une liste
6.3.3 Manipulation vectorielle d’une liste
6.4 Numpy, tenseurs, matrices en bref
6.4.1 Manipulations de bases
6.4.2 Sauvegarde et accès intelligent à un tenseur
7. Les dictionnaires Python
7.1 Introduction aux dictionnaires
7.2 Se doter d’une fonction print pour les structures complexes via pprint
7.3 Manipulation des dictionnaires
8. Zoom sur les générateurs
9. Créer ses propres objets
9.1 Création de classes et d’objets
9.2 Création de classe et notion d’encapsulation
9.3 Les méthodes spéciales
9.4 Les décorateurs
9.4.1 Le décorateur méthodes de classes pour créer des bibliothèques de fonctions
9.4.2 Le décorateur "property" pour simplifier l’appel des "getters"
9.5 Créer son propre décorateur : transformation simple d’un attribut
9.6 Créer son propre décorateur : le design pattern Singleton
9.6.1 Passage d’arguments par position ou par nom (arg et kwargs)
9.6.2 Création du décorateur @singleton
Développement, savoir-faire complémentaires
1. Introduction
2. Manipulation de données avec Pandas
2.1 Introduction à Pandas
2.2 Lecture d’un fichier csv et transformation via Pandas
2.3 Pandas et SQL
3. Valider et affecter des types simples en toute sécurité
4. Gestion des exceptions, en bref
5. Tri récursif d’un vecteur de données (liste)
6. Gérer les dates de façon normalisée et efficace, datetime & pytz
7. Un programme utilisable en ligne de commande
Documenter tous les aspects d’un projet : check-list
1. Introduction
2. Principales caractéristiques de la documentation d’un projet informatique
3. Documentation des enjeux et des modes de gestion du projet
3.1 Besoins motivant la création du projet
3.2 Champ d’application et situation
3.2.1 Définition du problème
3.2.2 Positionnement du produit ou de la solution
3.2.3 Contexte
3.3 Définition et objectifs
3.4 Décrire un ou plusieurs scénario(s) pour le projet
3.5 Trajectoire du projet
3.6 Calendrier global du projet
3.7 Bénéfices attendus
3.8 Évaluation des coûts
3.9 Planifier et budgétiser le sous-projet informatique
3.10 Gestion des risques
3.11 Qualité de projet
3.12 Plan de communication
3.12.1 Communication initiale
3.12.2 Communication pendant le projet
3.12.3 Go !
4. Architecture globale du SI en relation avec le projet
4.1 Personnalisation de l’architecture globale
4.2 Portée de l’architecture globale
4.2.1 Définitions, acronymes et abréviations
4.2.2 Synthèse pour les non-techniciens
4.3 Architecture d’entreprise
4.3.1 Introduction
4.3.2 Contexte métier
4.3.3 Processus métier
4.3.4 Événements métier
4.3.5 Impacts métier
4.4 Architecture fonctionnelle et services à déployer
4.4.1 Composition des fonctions/services
4.4.2 Fonctionnalités et cas d’utilisation les plus importants
4.4.3 Communication et interactions fonctionnelles
4.4.4 Impacts fonctionnels
4.4.5 Traçabilité métier
4.4.6 Modèle de données ou modèle sémantique (ontologie)
4.4.7 Cycles de vie des objets
4.4.8 Données de référence
4.4.9 Traçabilité fonctionnelle
4.4.10 Conformité à l’architecture d’entreprise
4.5 Architecture d’Application
4.5.1 Composition de l’application
4.5.2 Dépendances d’Application
4.5.3 Services d’Applications
4.5.4 Flux et interactions des applications
4.5.5 Impacts sur une application existante
4.5.6 Traçabilité fonctionnelle
4.5.7 Bases de données et nomenclatures de référence
4.5.8 Conformité à l’architecture générale de l’entreprise
4.6 Exigences en matière d’Architecture Logicielle
4.6.1 Taille et performances
4.6.2 Autres exigences et contraintes
4.7 Architecture Technique
4.7.1 Composition Technique
4.7.2 Réutilisation
4.7.3 Traçabilité de l’Application
4.8 Architecture de Déploiement
4.8.1 Déploiement Géographique
4.8.2 Infrastructure
4.8.3 Contraintes Opérationnelles
4.9 Stratégie de Développement
4.10 Stratégie de Migration des Données
4.11 Stratégie de Déploiement au niveau hardware, réseaux, virtualisation et (micro)services
4.12 Stratégie de Gestion de Configuration et de Version
4.13 Contraintes de Sécurité, de résilience et de Conformité
4.14 Catalogue des Risques en relation avec l’architecture
4.14.1 Conformité aux Normes et Standards
4.14.2 Conformité de l’Architecture Fonctionnelle d’entreprise
4.14.3 Risques IT, analyse en profondeur
5. Fiches de "Cas d’Utilisation Métier"
6. Documentation de la gestion des Problèmes et des Défauts
7. Release note (note décrivant le contenu d’une version livrée)
8. Documentation technique moderne des applications et des Systèmes d’Information
Aide-mémoire
1. Introduction
2. Aide-mémoire : directives et commandes assembleur
2.1 Directives assembleur
2.1.1 SECTION
2.1.2 EXTERN
2.1.3 EQU
2.1.4 DB
2.1.5 DW
2.2 Commandes assembleur
2.2.1 MOV
2.2.2 ADD
2.2.3 SUB
2.2.4 CMP
2.2.5 JMP
2.2.6 CALL
3. Aide-mémoire HDFS et Hadoop, gestion de fichiers
3.1 Afficher les informations de base sur un fichier
3.2 Gestion des fichiers et des répertoires
3.3 Transfert de fichiers entre HDFS et le système de fichiers local
4. Aide-mémoire SQL
4.1 Clause WHERE - utilisation avec SELECT/UPDATE/DELETE/INSERT
4.1.1 SELECT avec WHERE
4.1.2 UPDATE avec WHERE
4.1.3 DELETE avec WHERE
4.1.4 INSERT avec WHERE
4.1.5 SELECT DISTINCT avec WHERE
4.2 Clause WHERE - opérations simples
4.3 Clause WHERE - opérateurs logiques
4.4 Clause WHERE - avec jointure
4.4.1 Jointure interne (INNER JOIN)
4.4.2 Jointure externe (LEFT JOIN)
5. Aide-mémoire Git
5.1 Initialisation d’un dépôt Git
5.2 Gestion des branches Git
5.3 Gestion des commits Git
5.4 Gestion des conflits de fusion
5.5 Gestion des tags Git
6. Aide-mémoire Linux : Gestion fichiers/processus/ utilisateurs/paquets/archives
6.1 Gestion de fichiers
6.2 Gestion des processus
6.3 Gestion des utilisateurs
6.4 Gestion des paquets
6.5 Gestion des archives
7. Aide-mémoire Linux : changer les attributs d’un fichier, dont les permissions
7.1 Changer le propriétaire et le groupe d’un fichier
7.2 Modifier les permissions par défaut pour les nouveaux fichiers
7.3 Changer les permissions d’un fichier
7.4 Modifier l’heure de modification d’un fichier
8. Aide-mémoire Linux : cron
8.1 Création d’une tâche cron
8.2 Syntaxe de la planification des tâches
8.3 Exemples de tâches cron
8.4 Gestion des erreurs
8.5 Sécurité
9. Aide-mémoire Linux : réseau
9.1 Afficher les informations d’interface réseau
9.2 Afficher les informations de routage
9.3 Afficher les informations DNS
9.4 Afficher les informations ARP
9.5 Afficher les informations de connexion réseau
10. Aide-mémoire Linux : le "bash", en bref
10.1 Les bases
10.2 Les variables
10.3 Les conditions
10.4 Les boucles
10.5 Les fonctions
11. Aide-mémoire Linux : systemd et cgroups
12. Aide-mémoire Linux : serveur HTTP Apache2 (dans un contexte Systmed)
12.1 Démarrer, arrêter et redémarrer Apache2
12.2 Gestion des fichiers de configuration
12.3 Gestion des hôtes virtuels
12.4 Gestion des journaux
12.5 Gestion de la sécurité
13. Aide-mémoire Linux : fireWall
13.1 Configurer un pare-feu avec iptables
13.2 Configurer un pare-feu avec firewalld
13.3 Configurer un pare-feu avec ufw
13.4 Configurer un pare-feu avec nftables
13.5 Configurer un pare-feu avec Shorewall
14. Aide-mémoire Linux : SSH
14.1 Connexion à un serveur distant via SSH
14.2 Gestion des clés SSH
14.3 Configuration du serveur SSH
14.4 Gestion des sessions SSH
15. Aide-mémoire Linux : SSL
15.1 Création d’un certificat SSL autosigné
15.2 Création d’un certificat SSL signé par une autorité de certification
15.3 Conversion de formats de clés et de certificats
16. Aide-mémoire Docker : commandes de base
16.1 Démarrer un nouveau conteneur
16.2 Gérer les images Docker
16.3 Gérer les conteneurs Docker
16.4 Gérer les réseaux Docker
17. Aide-mémoire Docker : gestion des volumes
17.1 Créer un volume
17.2 Utiliser un volume
17.3 Copier des fichiers vers/depuis un volume
17.4 Sauvegarder/restaurer des volumes
17.5 Synchroniser des volumes entre les hôtes
18. Aide-mémoire Docker : instructions contenues dans les Dockerfile
18.1 Créer une image Docker
18.2 Créer un utilisateur non privilégié
18.3 Installer des dépendances
18.4 Utiliser des variables d’environnement
18.5 Utiliser des arguments de construction
19. Aide-mémoire Docker : instruction de gestion des conteneurs DockerCompose
19.1 Création d’un service
19.2 Lancement d’un service
19.3 Arrêt et suppression d’un service
19.4 Gestion des réseaux
19.5 Gestion des volumes
20. Aide-mémoire Pandas : l’indispensable
20.1 Création d’un DataFrame
20.2 Manipulation rapide d’un DataFrame
20.3 Indexation et sélection
20.4 Complément utile : Manipulation de chaînes de caractères (strings)
21. Aide-mémoire Pandas : zoom sur les manipulations de données
22. Aide-mémoire Pandas : zoom sur les jointures
Annexes
1. Bibliothèque d’algorithmes
1.1 Algorithmes à la mode ces dernières années
1.2 Algorithmes autour des graphes
1.3 Algorithmes qui ouvrent des perspectives
2. Types MIME
2.1 Applications
2.1.1 Applications génériques
2.1.2 Applications bureautiques
2.2 Images
2.3 Multiparts
2.4 Texts
2.5 Vidéos
2.6 Syntaxe MIME, en bref
3. Codes permettant de générer certaines illustrations de l’ouvrage
3.1 NameNodes, code en syntaxe PlantUML
3.2 Tableau de topologies, code en syntaxe PlantUML
3.3 Vocabulaire réseau, code en syntaxe PlantUML
3.4 Plan d’adressage IP et DMZ, code en python utilisant le package diagrams
3.5 Diagramme de séquence OAuth2, code en syntaxe PlantUML
3.6 PDCA, roue de Deming, code en syntaxe GraphViz
3.7 Cas d’utilisation (use case), code en syntaxe PlantUML
3.8 Diagramme de classes, code en syntaxe PlantUML
3.9 Symbolique SDL adaptée aux processus, code en syntaxe PlantUML
3.10 Un algorithme c’est un chemin, code en syntaxe PlantUML
Index
Christian GOGLIN
Christian GOGLIN a travaillé près de 20 ans dans l'ingénierie puis le conseil en solutions logicielles de trading, valorisation de produits dérivés et gestion des risques bancaires. Par la suite, il obtient un Doctorat en finance comportementale primé par la FNEGE en 2018 pour son caractère transdisciplinaire. Il s'oriente alors vers l’enseignement et la recherche et occupe aujourd'hui le poste de Professeur Associé à l'ICD Business School Paris où il enseigne notamment l’algorithmique, l'Intelligence Artificielle et les Instruments Financiers. Il mène par ailleurs des travaux de recherche en éthique de l'Intelligence Artificielle et dirige le Centre d’Expertise en Data et IA (CEDIA) de l'ICD.
Eva LAUDE a dispensé de nombreuses formations sur le machine learning et les sciences de la donnée dans différents établissements supérieurs ou organismes privés. Elle a exercé des activités de conseil dans des secteurs variés (INSEE, entreprises de biotechnologies ou ESN) et participé à la revue académique "Management & Data Science". Geek et passionnée, elle s'exprime au travers d'une "stack" logicielle très étendue, dans des contextes de développement en Python ou R, et intervient dans des environnements Linux particulièrement sensibles en termes de disponibilité et de confidentialité.
Henri LAUDE est un professionnel reconnu des Computer Sciences. Il a encadré de nombreux travaux de R&D sur les data sciences, l'IA, les Fintech, la détection de fraudes et le déploiement d’architectures Big Data. Il est co-fondateur d’Advanced Research Partners, où il anime la conception d'algorithmes très novateurs. Primé à plusieurs reprises pour ses solutions innovantes, comme au Data Intelligence Forum avec une IA spécialisée dans l’intelligence économique nommée DxM (pour Deus eX Machina), il intervient sur des projets aussi variés que l’élaboration d’un exosquelette intelligent ou les IA de cyber protection.