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

lundi 24 septembre 2018

[En Deux Mots] Ne faites pas de longues ruptures

Même si ce conseil paraît évident, j'ai fait cette erreur de ne pas le suivre. J'ai pris une longue rupture qui a atteint les 3 ans, durant lesquelles, je n'ai pas réalisé des projets complets. Mon travail de développement se limitait à ce que j'avais besoin pour assurer les Travaux Pratiques en Algorithmique (pour les étudiants en première année Mathématique et Informatique - MI). Deux ans en Pascal et une dernière année en C.
La cause principale de ce désastre était mes débuts en doctorat. entamer un nouveau domaine n'est pas toujours une chose facile, surtout s'il s'agit d'un domaine loin de l'informatique. Je me trouvais étudier les livres de psychologie, psychopédagogie, psychologie du développement, théorie de l'action et les théories des émotions.

Sloman, A. (2004, March). What are emotion theories about. In Invited talk at cross-disciplinary workshop on Architectures for Modeling Emotion at the AAAI Spring Symposium at Stanford University in March.

Les résultats de cette rupture étaient catastrophiques. Premièrement, mes productions étaient des codes dispersés qui visaient des exercices d'introduction à l'algorithmique, des exemples sur les boucles et quelques exercices très classiques comme la vérification d'une grille Sudoku ou bien trouver les nombres amis. Si mes participations sur les forums des débutants ont devenus plus détaillées et plus pédagogiques, mes participations sur les forums plus avancés commençaient à diminuer avant de s'arrêter complètement. Mon repository sur Source Forge a stagné complètement aussi.
Deuxièmement, je n'ai pas pu suivre du près les nouvelles approches révolutionnaires qui ont vu le jour durant ces années. Groovy était un langage des amateur, Docker était dans ces débuts et semblait avancé un peu doucement et l'école fonctionnelle semblait encore endormie. Après trois ans, Groovy n'est plus le langage pour les amateurs; il est devenu un langage et une plateforme très intéressante. Je ne pouvait même pas reconnaître des parties telles que Grail qui a changé complètement. Docker a aussi changé, maintenant, il est doté d'un écosystème complet et il est devenu la base d'autres plateformes telles que Fn. Cette dernière prouvait qu'une l'approche fonctionnelle est du retour et avec puissance; l'approche Objet sur laquelle je me basais complètement a commencé à montrer sa lourdeur sur le côté serveur.
Finalement, je ne reconnaissais plus ma plateforme préférée : Java (J2SE/J2EE). La J2EE 6 était une vrai révolution, les fichiers XML que j'ai tant utilisé ne sont plus nécessaires et ils sont généré automatiquement à partir des annotations. Les services web RESTful ont devenus plus simples et plus rapides à développer. Les annotations se multipliaient et les outils aussi. Java 8 et les expressions Lambda ont été introduites, je n'en savait rien sauf quelques articles très brefs que j'ai lus.
Comment je me suis réveillé ? Je préparé une formation Java pour des étudiants. C'était avant l'introduction du module Programmation Orientée Objet avec des Travaux Pratiques en Java. Tout simplement, j'ai trouvé du mal à écrire ma fonction main, c'était aussi grave. Durant les deux années suivantes, j'ai essayé de récupéré. Même si je me débrouille pas mal, je pense que tout ce la était facile à éviter si je ne me suis pas émergé complètement dans mon doctorat et mon enseignement.
Alors, Ne prenez jamais de longues vacances et ne faites jamais de grandes ruptures. Restez près de votre éditeurs et travaillez sur des projets, même les plus simples, d'une manière continue. Ne vous contentez pas des articles, installez les nouvelles versions et essayez les, ce n'est pas une perte du temps, c'est même un gain du temps.
(Pourquoi cet article ? Jetez un coup d’œil par ici)

jeudi 20 septembre 2018

En Deux Mots (une courte série)

Depuis environ 11 ans, j'ai entamé ma carrière en recherche. Le début était avec mon projet de fin d'études (pour en savoir plus, c'est par ici). Par la suite, j'ai décidé de continuer avec mes études supérieures; j'étais fasciné pour le monde universitaire et j'ai voulu l'intégrer. Durant les années qui suivaient (à partir de 2008), je passais d'un ingénieur qui se base sur ses outils conceptuels et techniques pour résoudre des problèmes (plus ou moins) pratiques à un jeune chercheur qui doit s'affronter à de nouvelles problématiques et à proposer de nouvelles propositions. La différence était énorme et le premier résultat était mon éloignement de l'aspect technique de l'informatique.
Après avoir intégré la famille universitaire, le problème continuait. Je travaillais sur la théorie pour ma thèse de doctorat et j'exploitais mes connaissances techniques de base qui étaient plus que suffisantes pour garantir mes responsabilités d'enseignement. Et puisque je n'avançais pas, alors je reculais.
Cette époque de 11 années était marquée, sur le plan professionnel, par une profonde sensation d'incertitude et d'hésitation. Les causes étaient multiples et le résultat était une grande influence négative sur ma concentration et sur mon rendement.
Si je fais un résumé de ma vie professionnel durant ces 11 années, je peux voir que j'ai commis des dizaines d'erreurs que je pouvais éviter facilement pour aller plus loin et pour accomplir beaucoup plus de ce que j'ai accompli. J'ai commis ces erreurs malgré les mises en garde et les avertissements des centaines d'auteurs.
Dans cette courte série, je vais essayer d'écrire à mon tour, pour moi et pour vous, à propos de ces erreurs à éviter. J'écris cette série pour moi parce que tout simplement je sens le besoin de le faire. Je l'écris aussi, pour vous, pour vous avertir et peut-être pour vous aider à éviter de tomber dans ces mêmes erreurs.
Le titre de la série est "En Deux Mots"; elle sera constituée de quelques articles courts (d'où l’appellation). Chaque article sera consacré à une (et une seule) erreur que j'ai faite. 

samedi 16 décembre 2017

LazySloth : un outil pour générer rapidement des JavaBeans

Dans un article précédent (ici), j'ai encouragé l'idée de développer et de construire sa propre boite à outils pour réaliser des tâches répétitives ou ennuyeuses, même, si l'outil en question ne sera pas utilisé par d'autres personnes. L'outil peut être un script, un programme ou un (mini) (micro) logiciel qui fait une seule chose.

Le fait qu'il ne sera pas utilisé par d'autres personnes possède un côté positif. Il n'est plus nécessaire de bien documenter le code, respecter les modèles sophistiqués ou utiliser la dernière technologie. Il n'est plus nécessaire de contrôler toutes les données ou bien de corriger tous les bugs. C'est votre propre outil et vous connaissez ses points faibles.

Dans cet article, je veux présenter l'un de mes outils préférés : LazySloth. Comme son nom l'indique, je l'ai créé parce que je suis un peu "fainéant". Vu que je travaille souvent sur des diagrammes de classes ou bien des diagrammes Entité/Association, cet outil me permet de traduire rapidement ce diagramme vers des classes Java (JavaBeans) et des scripts SQL pour créer les tables adéquates.

L'idée est de faire le tout en une seule commande dans la ligne de commande. Cette commande est constituée de trois partie :

1. Qu'est ce qu'on veut générer :
    a. -java : pour générer des classes Java seulement.
    b. -sql : pour générer des script SQL seulement.
    c. -both : pour générer les classes Java et les scripts SQL.

2. Le nom de la classe ou de l'entité qu'on veut traduire vers Java et SQL.

3. La liste des colonnes séparées par des espaces. La première lettre désigne le type de la colonne, elle ne sera pas prise comme partie de son nom. Les types des données supportés sont les types que j'utilise personnellement dans les différents exemples :
    a. i : pour Integer, pour stocker des entiers.
    b. n : pour Numeric, pour stocker les nombres réelles.
    c. d : pour Date, pour stocker des dates.
    d. s : pour String, pour stocker des chaînes de caractères. C'est le type désigné par défaut si l'outil n'arrive pas à déterminer un type à partir de la première lettre de la colonne.

Il est possible d'ajouter des contraintes après le nom de la colonne. Elles doivent être séparées par des ":" pour ne pas les confondre avec le nom de la colonne. Les contraintes supportées pour le moment :
  1. pk : pour désigner la colonne comme clé primaire.
  2. sN : (exemple s20) pour spécifier N (20 dans l'exemple) comme taille de la chaîne de caractères.
  3. a : pour désigner la colonne comme AUTO_INCREMENT.

Exemples :

Si la commande ne donne pas toutes les informations nécessaires, l'aide de l'outil est affiché :

java -jar LazySloth.jar



Une commande très simple consiste à créer une classe qui contient le id, le nom et le prénom :

java -jar LazySloth.jar -both Exemple1 sid:pk snom:s100 sprenom:s100



Le code Java généré est :

public class Exemple1{

 String id;
 public void setId(String p){
  this.id = p;
 }
 public String getId(){
  return this.id;
 }

 String nom;
 public void setNom(String p){
  this.nom = p;
 }
 public String getNom(){
  return this.nom;
 }

 String prenom;
 public void setPrenom(String p){
  this.prenom = p;
 }
 public String getPrenom(){
  return this.prenom;
 }

}

Le code SQL généré est :

Create Table Exemple1(
 id Char(100) Primary Key,
 nom Char(100),
 prenom Char(100)
)

Comme un dernier exemple, cette commande teste les qutre types supprotés :

java -jar LazySloth.jar -both Exemple2 iid:pk snomprenom:s200 ddatenaissane nsolde


Le code Java généré est :

public class Exemple2{

 int id;
 public void setId(int p){
  this.id = p;
 }
 public int getId(){
  return this.id;
 }

 String nomprenom;
 public void setNomprenom(String p){
  this.nomprenom = p;
 }
 public String getNomprenom(){
  return this.nomprenom;
 }

 Date datenaissane;
 public void setDatenaissane(Date p){
  this.datenaissane = p;
 }
 public Date getDatenaissane(){
  return this.datenaissane;
 }

 double solde;
 public void setSolde(double p){
  this.solde = p;
 }
 public double getSolde(){
  return this.solde;
 }

}

Le code SQL généré est :


Create Table Exemple2(
 id Int Primary Key,
 nomprenom Char(200),
 datenaissane Date,
 solde Decimal(10, 2)
)

Le projet entier se résume en une seule classe Java qui peut être facilement modifiée pour ajouter de nouveaux types de données, de nouvelles contraintes ou pour exécuter d'autres commandes après la génération du code telles que la compilation des fichiers Java générés ou bien pour exécuter les scripts SQL créés.

Le projet se trouve à SourceForge, l'outil que j'ai toujours utilisé pour télécharger des projets OpenSource bien avant l'arrivée de GitHub. Vous pouvez le télécharger par ici.

dimanche 23 décembre 2012

Enseigner et écrire pour maîtriser, et pourquoi pas le modèle chinois?

“Si vous n'arrivez pas à expliquer un concept à un enfant de 6 ans, c'est que vous ne maîtrisez pas ce concept.” - Albert Einstein.

Il nous arrive dans notre cursus d’ingénieur d’apprendre des tas de choses, de les comprendre et de les utiliser, sans pour autant les maîtriser. La maîtrise n’est confirmée si on les enseigne.

“Vous ne devez pas écrire un livre sur une thématique donnée si vous n’arrivez pas à en parler pendant une heure, sans préalable préparation, devant un publique.” - Tariq Suwaidane.

Encore plus difficile qu’enseigner, écrire un livre sur une thématique nécessite plus de connaissance et une meilleure maîtrise. Alors devons nous attendre d’atteindre ce niveau pour essayer d’enseigner ou bien d’écrire?

Heureusement, d’autres modèles peuvent être suivis pour atteindre la perfection, et en particulier le modèle chinois : et si on essaye de le faire, même si on ne le maîtrise pas? Et si on essaye d’apprendre et de maîtriser pendant qu’on le fait? Si on observe l’évolution de la production chinoise des produits de haute technologie et des voitures, nous allons apercevoir clairement l’application de ce modèle.

Le modèle n’est pas nouveau, il découle des théories pédagogiques constructives qui encouragent l’apprentissage par l’application et non pas par un passage passif de connaissances de l’enseignant vers l’apprenant. Dans ce contexte, l’apprenant est surveillé et supporté par son enseignant pour obtenir les résultats attendus; il effectue des activités d’apprentissage où l'échec n’est qu’une étape vers le succès. Néanmoins, son application dans la vie quotidienne et dans la vie professionnelle a donné des résultats très satisfaisants malgré que l’environnement professionnel oppose le milieu éducatif, il est très hostile, il n’offre aucun support ou encadrement et il ne donne des chances minimes pour retenter.

Quand je dis “enseigner” pour maîtriser, je ne parle pas d’enseigner dans une institution officielle; la préparation d’une formation gratuite donne la possibilité de vivre une expérience similaire et faire plusieurs tentatives pour perfectionner ses connaissances dans le domaine en question et dans le domaine pédagogique. Du même, “écrire” ne veut pas dire se plonger dans une aventure risquée de publication d’un livre, mais, rédiger et écrire des tutoriels et e-books gratuits sur Internet.

Je pense que nous avons, plus que jamais, la possibilité d’apprendre et de maîtriser par appliquer, enseigner et écrire grâce aux technologies d’internet qui nous permettent d’avoir un feedback de nos amis et des communautés spécialisées sur nos productions, et du coup, on peut voir la société remplace l’enseignant d’une manière positive.   

dimanche 15 novembre 2009

Bienvenue

Bonjour,

Je suis Tarek BOUTEFARA, titulaire d'un diplôme de Magistère en informatique, obtenu à l'Ecole nationale Supérieure d'Informatique (http://www.esi.dz), option Systèmes d'Information et de Connaissances. Actuellement, je prépare une thèse de doctorat dans la même école. La thèse entre dans le cadre des techniques d'apprentissage à distance, connu aussi sous le nom du "e-Learning".

Le e-Learning est un domaine très actif vu qu'il touche à l'une des activités les plus anciennes, à savoir l'apprentissage. Pour la même cause, le e-Learning est parmi les domaines les plus vastes, il couvre les différents aspects liés à sa problématique en commençant par les aspects purement techniques pour arriver aux aspects abstrait en liaison direct avec les sciences de l'éducation. Actuellement, je travaille sur une problématique liée aux "styles d'apprentissage" sous la direction de Mme. MEHDAOUI Latifa.

Au même, et comme toute enseignant chercheur, j'ai eu des expériences en enseignement et en encadrement des étudiants de fin cycle et de Master 2. Mes activité d'enseignement portaient essentiellement sur des modules techniques (J2SE, Pascal) et basiques (Introduction à l'Algorithmique), tant dit que mes activité d'encadrement se focalisaient sur des projets entrant dans le cadre de mes travaux de recherche mais portant sur des thématiques plus générales et moins compliquées pour être assimilées dans les délais (très courts) des projets.

Pour mieux apprendre sur mes expériences, je vous prie de visiter mes autres blogs dédiés:
Ce blog sera réservé pour les autres expériences ainsi que l'informatique de manière générale. J'espère que vous trouverez de la valeur et de l'importance entre les lignes des différents articles.