Affichage des articles dont le libellé est programmation. Afficher tous les articles
Affichage des articles dont le libellé est programmation. Afficher tous les articles

jeudi 18 février 2016

A0711 Vous avez dit Agile ?

-- Vous voyez, avec la méthode Agile, nous sommes à l'écoute permanente des utilisateurs, nous développons très vite pendant deux ou trois heures, nous montrons à l'utilisateur, et si ça ne lui plaît pas, nous modifions dans la foulée, et hop!
-- Et vous pourriez aller jusqu'à modifier le modèle de données ?
-- Le quoi ?

lundi 23 février 2015

A0616 Différence entre langages impératifs et langages déclaratifs

Les langages impératifs, ce sont les langages classiques, comme Java, C#, C++, etc

Les langages déclaratifs, ce sont les langages basés sur la logique, comme PROLOG ou DATALOG, ou les langages à base de contraintes.

Dans un langage impératif, on dit ce que l'on fait

Dans un langage déclaratif, ont dit ce que l'on veut

Programmer en langage déclaratif, c'est expliquer à la cuisinière ce que l'on veut

Programmer en langage impératif, c'est faire soi-même la cuisine

99,9% des programmeurs choisissent la seconde solution.


Pour arriver à un résultat final précis pour le diner,  le langage déclaratif demande beaucoup plus de réflexion, de maîtrise, de connaissance en profondeur du domaine, d'anticipation.

Nous sommes ici dans un cas où dire est plus difficile que faire.

On peut voir aussi ce choix de presque tous les programmeurs comme une illustration  du  théorème des 15 minutes maximum de réflexion:

http://plexus-logos-calx.blogspot.fr/2009/10/a0018-theoreme-des-15-minutes-maximum.html

Bien sûr, comme presque personne ne programme en langage déclaratif, il existe peu d'environnements de développement, de communautés de développeurs, comme on en trouve à profusion pour les langages impératifs, ce qui est une autre bonne raison de continuer à travailler plus pour réfléchir moins.

mercredi 28 janvier 2015

A0603 Construisez vous-même votre moteur d'inférence

Je viens de publier sur Slideshare une version plus lisible de mon cours sur la construction d'un moteur d'inférence:

http://fr.slideshare.net/Jean_Rohmer/construire-un-moteur-dinfrence

Je reprends ici le texte associé à la première publication:

A0386 Moteur d'Inférence en logique des prédicats en Java ou C# pour les nuls

C'est très facile de construire soi-même son moteur d'inférence avec un langage orienté objet comme Java ou C#.
Voici le support du cours d'Intelligence Artificielle de l'ESILV ( 4 ème année) qui explique comment rédiger un tel moteur.
On explique en particulier comment tout se ramène à des opérations de jointure sur des tables.

Il s'agit d'un moteur sophistiqué, en logique des prédicats avec des variables, en chaînage avant.
On parle aussi de la Méthode d'Alexandre en Datalog, qui permet de faire du chaînage arrière à partir du chaînage avant.
On explique aussi comment ce moteur peut être le cœur d'un système réactif intelligent, de type "Complex Event Processing'.

La représentation des connaissances utilisée est le réseau sémantique, (ou triplets). Ceci permet au moteur de travailler sur des données de type RDF du Web sémantique.

L'expérience montre que la quasi-totalité des élèves terminent leur moteur d'inférence en 3 séances de TP.
Ecrire soi-même son moteur d'inférence plutôt qu'en utiliser un déjà tout fait offre évidemment de multiples avantages, entre autres ceux de pouvoir l'adapter, le faire évoluer, l'insérer dans n'importe quelle application.
Et évidemment le plaisir d'écrire soi-même un programme relativement complexe, et de comprendre à fond les mécanismes d'inférence !


mardi 2 septembre 2014

A0517 Un mot gentil sur le web sémantique

Je dis en temps normal assez de mal du web sémantique (voir le marqueur associé), pour être un peu plus généreux en ce jour de rentrée scolaire, d'autant que ma mansuétude porte sur un travail pédagogique.

Karima Rafes, tenace et talentueuse évangélisatrice du web sémantique, nous présente un exemple de réalisation de ses étudiants:

J'ai développé un petit outil pour aider mes étudiants (Bac+3 en info à ITESCIA) à faire plus simplement du Linked Data pour se concentrer sur les requêtes et non sur le HTML&co.
Voici le résultat de leurs travaux en seulement 2 jours de formation au Linked Data (7h de cours et 7 heures de TP à 13 étudiants). Vous pouvez voir le code SPARQL en regardant le code source des pages.

NB : l'outil sera ré-utilisé  durant le
semantic camp (NDLR: organisé par Karima le 12 Septembre; inscrivez-vous !) 
http://www.meetup.com/SemanticCampParis/events/188228402/


Voilà des liens lien vers des  pages HTML décrivant les meilleures copies des projets des étudiants: 


http://tpo.bordercloud.com/K.php?i=1c7361b68d0951e83fd88d53107247a3


http://tpo.bordercloud.com/K.php?i=8caeb245d2a0def1ab69e0e854416662


http://tpo.bordercloud.com/K.php?i=96f31feb92440d7393fafc365d1ee907


(pour tout comprendre, il faut aller voir le code source sous votre navigateur, et vous en inspirer si vous voulez expérimenter vous aussi; c'est ça la beauté de HTML et Javascript)

Tout cela reste évidemment d'une lourdeur éprouvante, mêlant toutes les horreurs de la programmation orientée objet de bas niveau aux crocs indentés de la syntaxe XML, mais cette lourdeur aura au moins le mérite de faire passer un peu de la pilule sémantique auprès des sadiques de JDBC, Hibernate,  et autres couches d'accès à des bases de données.

On est loin de ma terre promise du Litteratus Calculus, et même du vieux DATALOG, mais bon, cette première  dose de programmation déclarative mérite un coup de chapeau, d'autant qu'elle vise nos chères têtes blondes.


jeudi 29 mai 2014

A0478 En programmation, à l'est, rien de nouveau

J'entends dire que les principales équipes de programmation sont localisées en Asie
J'entends dire que les asiatiques aiment bien appliquer des consignes sans discuter
Je comprends maintenant mieux le pourquoi des méthodes de programmation appelées "design pattern"

Ça serait d'ailleurs tout naturel que les asiatiques aimassent être orientés (objet)

mardi 20 mai 2014

A0473 De Natura Numericum: Principe d'Incertitude

Le comportement d'un système numérique est totalement défini par les bits contenus dans sa mémoire.

Le problème c'est qu'il y en a beaucoup, et que l'on ne peut pas en général aller les voir.

Et si on le pouvait, on n'y comprendrait rien.

Par exemple, les bits qui définissent le fonctionnement  du système viennent de la traduction d'un programme écrit par des humains. Mais ce programme, on ne l'a pas dans le système-lui-même (votre smartphone par exemple)

Et quand on l'a, -ailleurs- il est difficile à comprendre, surtout s'il fait des millions de lignes

Pour le comprendre, il faut lire une documentation écrite en langage naturel. Et cette documentation est rarement à jour, et rarement bien écrite.

Et si elle est à jour, il n'est pas prouvé qu'elle décrive exactement ce que fait le programme (le programmeur a mal compris la documentation)

Et si la documentation est à jour, vous n'êtes pas sûr que les bits dans la mémoire n'ont pas été substitués à d'autres par des gens malintentionnés.

Le numérique, c'est comme ça.

Pourquoi ça marche néanmoins pas trop mal en général malgré toutes ces incertitudes ?

Parce qu'il y a tout un tas de gens autour, qui s'occupent de tout, qui essaient de voir ce qui ne marche pas, ce qu'il faut améliorer, comment modifier les programmes, les bits, la documentation en conséquence.

Bref, tout ça est très fragile, plein d'incertitudes, plein de risques de fausses manips.

On appelle ça parfois la TMA: Tierce Maintenance Applicative, le "Tiers" signifiant que, comme c'est un boulot assez ingrat, on paye des tiers pour le faire, des gens appartenant à une sorte de tiers état,  souvent des gens de pays lointains,  d'un tiers monde,quoi,  qui font de leur mieux pour comprendre ce qu'ils doivent faire.

Le numérique, c'est comme ça.

Pour limiter les dégâts, on dote les travailleurs du tiers état d'outils pour les aider à bien faire leur travail, ces outils étant eux-mêmes des systèmes numériques pleins d'incertitudes.







dimanche 18 mai 2014

A0471 Le mépris pour les informaticiens en général et les programmeurs en particulier

Emission télévisée du 11 Février 2009: Lors d'un reportage sur la grande base américaine du Kosovo: "les USA en profitent  pour recruter des gens dans la population locale qui tiendront des emplois subalternes en Irak et Afghanistan: cuisiniers, réparateurs, serveurs, informaticiens"

Un directeur de la stratégie: "L'informatique est de trop bas niveau pour pouvoir être enseignée aux managers et aux décideurs"

vendredi 2 mai 2014

A0457 Pénurie de développeurs en informatique

Un directeur d'une école d'ingénieurs très orientée informatique et maths appliquées m'explique que ses élèves ne veulent pas programmer.

Résumons-nous:

  • La plupart des jeunes ne veulent pas faire d'études scientifiques
  • Parmi les autres, la  plupart ne veulent pas faire d'informatique
  • Parmi les autres, la plupart ne veulent pas coder
Au lieu de se plaindre, la profession (employeurs et formateurs) devrait se demander "pourquoi".

Se demander comment rendre le métier plus attirant.

Se demander pourquoi les filles fuient le codage encore plus que les garçons.

L'outil de référence pour le développement d'applications industrielles est J2E. La seule  table des matières du cours officiel J2E fait mille (1000) lignes. C'est pas sexy, ça ?



samedi 22 mars 2014

A0447 La grande muette informatique

On entend très souvent des professeurs d'économie dans les media
On n'entend presque jamais de professeurs d'informatique dans les media
Facile de comprendre pourquoi
Les économistes ne sont jamais d'accord entre eux
Il n'y en a pas deux qui disent la même chose
On ne s'ennuie jamais avec eux
Les informaticiens c'est tout le contraire
Ils disent tous la même chose
C'est lassant
Ça leur apprendra à ne jurer que par les standards

lundi 2 septembre 2013

A0416 Programmation orientée objet: définition

La programmation orientée objet est au traitement de l’information
Ce que le code du travail est à l’esprit d’entreprise

(Ceci ne comportant aucun jugement de valeur sur les quatre éléments de l'analogie)

samedi 6 avril 2013

vendredi 15 mars 2013

A0365 Les métiers de l'Informatique: comment choisir

Voici "la grande carte des métiers de l'informatique",  une présentation de l'école d'Ingénieurs ESILV qui explique quels sont les grands métiers de l'informatique, les différentes manières d'exercer le métier d'informaticien selon le type d'entreprise qui vous emploie, comment choisir un métier en informatique selon vos attentes et votre personnalité, comment ensuite évoluer  et faire carrière à l'intérieurs ou hors des métiers de l'informatique.

lundi 11 mars 2013

A0361 Quelle méthode choisir ?

Le Génie Logiciel  traditionnel applique des méthodes rigides pendant de longues périodes

La démarche Agile applique des méthodes souples pendant de très courtes périodes

Beaucoup de logiciels que j'apprécie ont été développés en utilisant une méthode souple pendant de très longues périodes

dimanche 10 mars 2013

A0360 Introduction à l'Intelligence Artificielle (suite): la résolution de problèmes avec Prolog

Suite au billet A0335, voici les références sur slideshare  d'un papier rédigé à l'issue travaux pratiques d'Intelligence Artificielle à l'ESILV en 3 ème année (sur 5).
Ce  papier explique comment, en 5 lignes de Prolog, on peut programmer un "résolveur de problèmes", et l'appliquer ensuite à deux célèbres problèmes:

-- le paysan, le loup, la chèvre et le chou
-- les tours de Hanoï

Nous aimerions arriver à l'objectif suivant: expliquer en même temps la résolution de problèmes (au sens du GPS de Simon,  Shaw et Newell ) et l'essence du langage Prolog.
Notre but est d'aboutir-après quelques itérations et l'aide de lecteurs téméraires- à un style d'expression simple et naturelle qui permette à "tout le monde" -disons à tout bachelier ...- d'y comprendre un peu quelque chose.
Toutes les remarques et critiques  des lecteurs sont donc les bienvenues, pour progresser dans cette direction.
Ma principale motivation pour rédiger ce papier est que personnellement  je n'arrive pas à comprendre la plupart des programmes Prolog que l'on trouve sur Internet, qui traitent de ces deux problèmes célèbres.

C'est donc une application de mon idée qu'il ne faut pas de livres "XXX pour les nuls" mais "XXX par les nuls".

dimanche 20 janvier 2013

A0336 Enseignement de la programmation orientée objet en 2013

Plusieurs professeurs de l'enseignement supérieur m'expliquent qu'ils font avec plaisir des cours généraux sur la programmation orientée objet, mails qu'ils sont devenus  tout à fait incapables d'assurer les travaux pratiques, les langages réellement utilisés et surtout les environnements de programmation étant de plus en plus changeants et de plus en plus compliqués.

De leur côté, les élèves veulent de moins en moins apprendre de connaissances générales, et pas vraiment non plus les centaines ou milliers de pages des manuels utilisateurs. Leur pratique consiste à rechercher sur Internet les solutions à instant donné au problème que l'on vient de leur soumettre en séance de TP. Et en se disant que ce n'est pas la peine d'en rien retenir, les choses risquant d'avoir changé d'ici  la prochaine fois.

Entre ces deux populations, des vacataires très mal payés essaient de prouver aux professeurs qu'ils maîtrisent leurs théories et aux élèves qu'ils sont aussi malins qu'eux sur les forums d'échange de tuyaux de programmation.

Comme leur nom l'indique, les vacataires comblent un vide.

dimanche 25 novembre 2012

A0307 Software Engineering Considered Harmful

La programmation par composants est à la mode depuis pas mal de temps. On ne programme plus, on réutilise.
Au lieu d'écrire 1000 lignes de code qui font quelque chose que l'on connaît bien avec des noms d'objets que l'on a choisis et qui nous parlent, on écrit 1000 lignes de code  pour appeler des composants que l'on ne connaît pas et qui ont DesNomsImpossiblesQueLonNAPasChoisis.DansUne LangueEtrangere.QueLOnNeMaitrisePasBien.

Voilà ce que c'est d'avoir abandonné les langages de haut niveau comme APL, LISP et PROLOG.

mercredi 7 novembre 2012

A0293 Opposition entre programmes politiques

Les programmes informatiques écrits dans le langage d'Intelligence Artificielle Prolog sont illisibles car ils sont trop courts parce qu'écrits dans un langage trop puissant.

Les programmes informatiques écrits dans le langage orienté objet Java sont illisibles car ils sont trop longs parce qu'écrits dans un langage trop pauvre.

En informatique comme en politique, les compromis au centre, ça a bien du mal à exister.

samedi 27 octobre 2012

A0280 Reprogrammation des cellules, reprogrammation de l'humanité

On voit tous les jours que les techniques de reprogrammation des cellules -humaines en particulier- font des progrès continus.
Quand on sait où  en est  la programmation des ordinateurs, on doit s'attendre au pire pour l'avenir de l'humanité.
Dans les crèches, on va voir arriver des bébés orientés objet.
Dans les cours de récréation, la bande des  enfants engendrés avec des langages déclaratifs cassera la gueule  à celle des héritiers des langages fonctionnels, et réciproquement.
Sans parler, sur les CV, de la mention de la méthode de conception: moi j'ai été conçu en 3 semaines par deux sprints de la  méthode Agile, et moi en 2 ans par un cycle en V. Bien loin des cycles de la méthodes Ogino.

Dans ces conditions, la suppression annoncée les mots "père" et "mère" dans le code civil semble un prérequis modeste et raisonnable (voir le billet A0267).
Au commencement était le Verbe, et à la fin  sera le Code.
Nos arrière-petits-enfants seront des petits amas de bouillie -ou de gélatine, les technologues en débattent encore dans les comités de standardisation- qui, -bonne nouvelle- s'échangeront des tweets à travers le réseau précâblé reliant leurs habitacles.
Cependant, on annonce que la lutte contre les OGM aura parallèlement fait des progrès décisifs, et que les plantes génétiquement modifiées ne seront plus qu'un mauvais souvenir.

Ainsi sera accompli LE PROGRAMME:

"TOUT CHANGER DANS L'HOMME
 POUR QUE RIEN NE CHANGE DANS LA NATURE"

samedi 29 septembre 2012

A0252 La Bible du Programmeur


Si Dieu était un programmeur orienté objet, il aurait dû commencer par créer une boite –une classe- comme conteneur du monde, puis par écrire une boucle for pour le faire tourner.

Ou une boucle while, ou until ? That is the question.

Heureusement, pour les sujets importants, comme les dix commandements, il a préféré la programmation déclarative.