Vers un C++ orienté débutant ?
Le langage évolue, son apprentissage doit lui aussi évoluer

Les rubriques (actu, forums, tutos) de Développez
Réseaux sociaux


 Discussion forum

Le , par gbdivers, Inactif
Ce n'est plus une nouvelle, le C++ continue son évolution avec la publication de la nouvelle norme, le C++11. Quels étaient les objectifs de cette évolution ? Il y a en avait plusieurs, mais nous allons nous intéresser ici à un seul point : "rendre le C++ plus facile à apprendre et à enseigner" (B. Stroustrup).

Or, en pratique, force est de constater que le langage C++ rebute beaucoup de débutants. Certains n'arrivent pas à maîtriser les abstractions de haut niveau. D'autres bloquent sur les problèmes de gestion mémoire. Il y en même qui ont peur de la réputation du C++ et fuient avant de le tester.
On reproche régulièrement au C++ d'avoir une syntaxe trop complexe, de permettre d'avoir 10 solutions pour un problème, de proposer des mécanismes d'abstraction trop complexes ou au contraire de ne pas sécuriser les manipulations de la mémoire, de ne pas fournir assez de fonctionnalités dans le langage et d'avoir trop de bibliothèques externes.
On retrouve ainsi des débutants qui rencontrent encore et toujours les mêmes difficultés et refont les mêmes erreurs.

Est-il possible de changer la façon dont est abordé le C++ pour en faire le langage parfait pour les débutants ?


A votre avis, qu'est-ce qui doit évoluer dans l'enseignement du C++ ?
Le C++ est-il par nature un langage trop complexe à force de vouloir trop en faire ?
Les développeurs seniors ont-ils réussi à évoluer avec le langage et à transmettre les bonnes pratiques ?


 Poster une réponse

Avatar de Ekleog Ekleog
Membre émérite
le 26/04/2012 17:00
Citation Envoyé par Freem  Voir le message
Je pense qu'on ne charge la factory qu'une seule fois, non? Mais je peux me tromper très facilement, mon expérience des plug-in étant plus qu'anecdotique.




On ne charge la factory qu'une seule fois, mais pour passer aux plugins il faut rendre virtual toutes les méthodes utilisées (pour avoir unt v-table, corrigez-moi si je me trompe).

Elle reste importante... C'est selon les gens, malheureusement.
Pour moi, c'est un fait (je m'estime libriste, et j'estime que choisir son OS est aussi une liberté fondamentale, qu'il me plaise ou pas. Pour ça que je m'obstine à faire du code portable au maximum d'ailleurs.). Les API windows ne me gênent pas en soit, ce qui me gêne, c'est une certaine difficulté que j'ai éprouvée à plusieurs reprises entre elles et du code plus standard. Mais bon, ça reste la principale cible des développements, alors il faut faire avec.



Surtout quand il y a un standard (POSIX) ... Mais ici n'est pas le sujet.

[...]

J'avais effectivement oublié ce flag.
Effectivement, dès lors que l'on utilise assert, par exemple, le code est modifié. Mais peut-on vraiment considérer qu'il s'agisse du code métier? J'ai cette tendance à considérer que le code de débogage ne fait pas partie du code métier et qu'il ne devrais pas avoir d'influence sur celui-ci. Mais je peux me tromper, je suis loin d'être un dev très expérimenté (à mon grand regret).
D'ailleurs, j'ai l'impression que tu n'as pas cité ce flag que pour la fonction assert. Tu lui connais une autre utilité? Peut-être changer un format de données au débug pour le rendre plus lisible (mais moins efficace)? Même dans ce dernier cas, j'ai du mal à relier ce point à du code métier...



L'exemple même que tu donne fait intervenir le préprocesseur :
Code :
1
2
3
4
5
6
   std::unique_ptr<Serializer> serializer 
#ifndef NDEBUG // Debug active 
   {new SerializePretty()}; 
#else 
   {new SerializeToBinary()}; 
#endif
Un autre exemple :
Code :
1
2
3
#ifndef NDEBUG 
   void debug_only_function(); 
#endif
Ici, on gagne sur la taille de l'exécutable, et on s'assure que les fonctions réservées au debug (qui pourraient peut-être contenir des failles de sécurité) ne sont utilisées nulle part lors de la compilation release.

Qu'est-ce? Avoir lu http://www.boost.org/doc/libs/1_49_0...f/iterate.html me fait supposer qu'il s'agit d'une technique pour faire des boucles avec le pré processeur? Si c'est le cas, cela peut effectivement être très utile, mea culpa de ne pas connaître.



Boost.preprocessor est un ensemble d'utilitaires pour le préprocesseur. (Attention à ne pas regarder le code source, c'est particulièrement horrible -- vive le DRY !)
Iterate permet d'inclure un fichier N fois, avec un compteur en bonus.
Il y a aussi du BOOST_PP_REPEAT, qui n'inclut pas un fichier mais répète l'expansion d'une macro.

Et caetera.

Non, le préprocesseur est àmha aussi utile que les templates (il est possible de faire avec tout ce que font les templates je crois, mais ce serait plus verbeux). C'est simplement qu'il est *clairement* plus complexe, et nécessite une bonne bibliothèque.
Avatar de Ekleog Ekleog
Membre émérite
le 26/04/2012 17:08
Citation Envoyé par Hardwarista  Voir le message
[...]
Oui, j'aime bien ton idee d'une machine virtuelle qui re-assemblerait le code machine en fonction de la plateforme. Comme ca tout ce que j'ecris pour la machine virtuelle prend plus de valeur.




LLVM est à peu près ça. D'ailleurs, son nom le prouve : Low Level Virtual Machine.
Mais l'avantage du c++ est justement qu'on a le choix de compiler ou interpréter ou JIT-er son code !

[...]
Et puis les templates c'est pas magique: les classes c++ sont instanciees pour chacune des valeurs de parametre de template. Et c'est le meme combat pour les #define. Pour quoi ne pas me montrer dans un fichier temporaire le code effectifvement genere ?! Et le TMP c'est comme du langage interprete, donc ca devrait etre deboguable comme du langage interprete.



g++ -save-temps

Le souci avec C++ c'est que les templates n'ont pas etes concus pour s'integrer bien avec le concept d'API oriente object. Combien de fois on n'essaie de templatiser une fonction ou une classe, pour eviter de dupliquer du code, et qu'on se retrouve avec une horreur de chaine d'inter-dependances qui ralonge la compilation et oblige a changer les fonctions publiques virtuelles ?



0 ?
Si la classe est bien pensée à l'origine, elle n'aura pas de difficulté à être "templatisée", si elle doit l'être.

Le fait qu'il n'est pas possible d'exporter des template est aussi dans la meme ligne.



Un exemple d'utilité de l'export template ?
L'export template est plus ou moins équivalent à placer le code c++ des templates dans le .o, donc ça avance à quoi ?

Aussi, toutes les classes-template de conteneurs de la STL ne sont pas concues pour etre etendues par heritage. Mais dans ce cas ca devrait s'appeler differement ! De dire "les classes on peut les etendre par heritage" puis "ah non pas celles-la" c'est assez tordu je trouve.



Tu devrais te renseigner sur les notions de sémantique d'entité / de valeur.
Rapidement :
Sémantique d'entité -> non copiable, héritables publiquement
Sémantique de valeur -> copiable, non héritables publiquement, potentiellement héritage privé

Les classes de la SL sont conçues pour être à sémantique de valeur, pour la plupart (à part les *stream, si je ne me trompe pas). D'où le fait qu'il faut éviter de les hériter publiquement. L'héritage privé reste toutefois une option, mais la composition reste souvent la meilleur idée.
Avatar de koala01 koala01
Modérateur
le 26/04/2012 17:34
Citation Envoyé par Hardwarista  Voir le message
Aussi, toutes les classes-template de conteneurs de la STL ne sont pas concues pour etre etendues par heritage. Mais dans ce cas ca devrait s'appeler differement ! De dire "les classes on peut les etendre par heritage" puis "ah non pas celles-la" c'est assez tordu je trouve.




Non, il est tout à fait normal qu'une classe "conteneur" ne soit pas héritable, selon le principe même évoqué par LSP

Après tout: tu spécialise ton conteneur pour qu'il s'adapte à un type de donnée ou à un autre (sans qu'il n'y ait de rapport entre conteneur<int> et conteneur<string> ), mais tu n'hérite pas d'un conteneur : une liste triée n'a, en vertu de LSP absolument pas à hériter d'une liste (non triée), parce que les pré / post conditions / invariants sont différents (tout comme carré n'a absolument pas à hériter de rectangle malgré le fait que, du point de vue des mathématiques, un carré n'est jamais qu'une "rectangle particulier" )

J'ai presque envie de dire que ta réaction met, encore une fois, en évidence une lacune au niveau de la conception elle-même : le fait qu'une classe puisse avoir une interface identique à une autre n'est jamais qu'un indice (parmis d'autres!!! ) du fait qu'il est peut etre possible (mais loin d'être systématique !!!) d'envisager une relation d'héritage ou l'intégration dans une hiérarchie commune, mais, et c'est là que pose le problème, l'héritage implique qu'il doit etre sémantiquement cohérent d'estimer qu'un objet de la classe fille est bel et bien un objet de la classe parent, et que les pré / post conditions / invariants sont respectés dans les différents sens

Finalement, je ne suis pas loin de penser que ce qui manque peut etre dans l'enseignement (pas seulement de C++ ) , c'est une approche de la programmation par contrat, durant laquelle on insisterait sur le corrollaire aux pré / post conditions / invariants : le principe de substitution de liskov
Avatar de Flob90 Flob90
Expert Confirmé
le 26/04/2012 18:43
Pour ce qui concerne la méta-prog pré-processeur et template, le sujet étant : "Le C++, un langage orienté débutant". Je pense que ca ne fait pas partie des choses qui devraient être enseigné. Il y a déjà suffisament à apprendre avec :
-> Impérative
-> Objet (je rajouterais bien une approche contrat avec)
-> Générique

@Ekleog: Non, pas obligé d'utilisé le pré-processeur pour simuler des variadic. L'utilisation du pré-processeur dans la simulation des variadics n'est qu'"user-friendly", c'est pas fondamentale.

@oodini:
1/ Si tu veux discuter des compilateurs, alors il faut te tourner vers les ouvrages de référence dans le genre : Dragon Book. Si tu veux plus précis sur certains compilateurs, alors ce sont vers des ouvrages dédié à eux qu'il faut aller (là j'en connais pas).

Les livres de Sutter/Meyers font livre de recette ? C'est normal, c'est l'objectif voulu : donner un ensemble de conseils pour programmer en C++. Je pense que les livres de BS ne font pas cet effet, et les livres sur des sujets plus spécifique n'ont pas cet effet non plus.

2/ Pour boost :
-> La grande majorité est header-only, plus simple à installer c'est dur
-> Sur tout les systèmes Unix, il se trouve souvent dans les dépots officiels et est accessible via le gestionnaire de paquet
-> Sur Windows, si tu utilises les outils de Microsoft, alors il existe un installateur Windows classique qui fait l'installation
-> Dans les autres cas, quand on utilise des outils venant du monde Unix et adaptés ensuite pour Windows, ca ne m'étonne pas que ce soit (un peu) moins simple que dans les autres cas

@Hardwarista: Je connais pas cet article (par contre le type-erasure je connais), je vais le regarder pour voir.
Avatar de Flob90 Flob90
Expert Confirmé
le 26/04/2012 19:14
@Hardwarista: J'ai lu l'article que tu cites (le premier), et je ne suis pas d'accord avec sa vision des choses. Il dit qu'il change les détails internes sans changer l'interface et qu'au final ca impact l'utilisation. Cependant, pour moi, la catégorie des itérateurs retourné fait clairement partie de l'interface (plus exactement du contrat de la classe). Ainsi si tu ne peux plus assurer le contrat en changer les détails internes, c'est de ta faute.

Par exemple, il dit qu'un code comme it_end - it_begin; ne compilera plus après changement de std::vector vers std::list en interne. C'est vrai, sauf que si dans le contrat de ma classe j'ai spécifié : input_iterator, l'utilisateur n'aurait jamais du écrire it_end - it_begin. Et en effet la complexité passera de constant en linéaire, sauf qu'à nouveau si j'ai indiqué input_iterator dans le contrat de ma classe, l'utilisateur n'avait pas à attendre mieux que linéaire.

Edit: Cependant son article met en exergue la cohabitation des deux paradigmes : c'est la mise en oeuvre de contrats clair (pour les classes et les fonctions) qui permet le bon fonctionnement du monde générique. Dans les exemples de l'auteur, il n'y a pas de contrat : ca marche mal, dans la S(T)L, tout les contrats sont clairs : ca fonctionne.
Avatar de oodini oodini
Membre Expert
le 27/04/2012 10:37
Citation Envoyé par Flob90  Voir le message
1/ Si tu veux discuter des compilateurs, alors il faut te tourner vers les ouvrages de référence dans le genre : Dragon Book.




Non non : je parlais de l'environnement de la chaîne de compilation/édition de liens. En général, dans les cours de C, c'est bien couvert, mais étrangement, pas dans ceux du C++.

Citation Envoyé par Flob90  Voir le message
Les livres de Sutter/Meyers font livre de recette ? C'est normal, c'est l'objectif voulu : donner un ensemble de conseils pour programmer en C++.




Oui, mais certains de ces conseils devraient être directement données dans les cours initiaux.

Citation Envoyé par Flob90  Voir le message
Je pense que les livres de BS ne font pas cet effet, et les livres sur des sujets plus spécifique n'ont pas cet effet non plus.




Je ne connais que son livre de référence, et franchement, il faut déjà connaître C++ pour pouvoir le lire, notamment les premiers chapitres.

Citation Envoyé par Flob90  Voir le message
2/ Pour boost :
-> La grande majorité est header-only, plus simple à installer c'est dur
-> Sur Windows, si tu utilises les outils de Microsoft, alors il existe un installateur Windows classique qui fait l'installation




Moi, ma première utilisation de Boost (version 1.33, je crois), c'était pour Boost.Thread. Et l'installateur pour Visual est toujours à la bourre par rapport aux numéros de version. On doit donc se taper du Boost.Build ou bootstrap, depuis quelques temps. Et je persiste à dire que pour un débutant, ce n'est pas l'idéal. Il s'agit d'ailleurs d'aller voir sur ce même forum, dans la section Boost, les appels à l'aide pour l'installation...
Avatar de Flob90 Flob90
Expert Confirmé
le 27/04/2012 11:36
Citation Envoyé par oodini  Voir le message
Non non : je parlais de l'environnement de la chaîne de compilation/édition de liens. En général, dans les cours de C, c'est bien couvert, mais étrangement, pas dans ceux du C++




D'accord, c'est peut être lié à un reste de l'approche historique C -> C++ qui veut qu'on ai vu le C (au moins un peu) avant le C++.

Citation Envoyé par oodini  Voir le message
Oui, mais certains de ces conseils devraient être directement données dans les cours initiaux.




Alors je suis bien d'accord

Citation Envoyé par oodini  Voir le message
Moi, ma première utilisation de Boost (version 1.33, je crois), c'était pour Boost.Thread. Et l'installateur pour Visual est toujours à la bourre par rapport aux numéros de version. On doit donc se taper du Boost.Build ou bootstrap, depuis quelques temps. Et je persiste à dire que pour un débutant, ce n'est pas l'idéal. Il s'agit d'ailleurs d'aller voir sur ce même forum, dans la section Boost, les appels à l'aide pour l'installation...




L'installateur est en retard d'une ou deux version, c'est pas non plus catastrophique comme retard. Et sur le forum, la majorité des demandes d'aide porte sur l'installation de boost pour MinGW sous Windows (ie ma 4° -> dans mon message précédent). La petite difficulté en plus dans ce cas est qu'il faut recompiler avec b2 (et que pour les gens qui débutent et ne connaise que Windows, c'est pas une procédure courante), un peu plus difficile mais pas insurmontable (*).

(*) D'ailleurs cette difficulté est peut-être lié à ce que tu soulèves comme premier point : une mauvaise connaisance de la chaine de compilation et des outils associés.
Avatar de oodini oodini
Membre Expert
le 27/04/2012 11:45
Citation Envoyé par Flob90  Voir le message
L'installateur est en retard d'une ou deux version, c'est pas non plus catastrophique comme retard.




Cela dépend de la bibliothèque utilisée. A l'époque, Boost.Thread était assez dynamique, et on a par la suite bossé sur Boost.GIL. Il nous fallait donc les dernières versions. Autant te dire que l'installateur de Visual, je ne l'ai jamais utilisé.

Citation Envoyé par Flob90  Voir le message
Et sur le forum, la majorité des demandes d'aide porte sur l'installation de boost pour MinGW sous Windows (ie ma 4° -> dans mon message précédent). La petite difficulté en plus dans ce cas est qu'il faut recompiler, un peu plus difficile mais pas insurmontable (*).




Je n'ai pas dit que c'était insurmontable. Mais comme on parlait de ce qui est susceptible de décourager les débutants, faire mention de ce point ne me paraît pas incongru.
Quelqu'un qui vient de Python et qui est habitué à développer sur du multi-plate-formes, et qui pour des problèmes de performances doit se mettre à C++, il est tout de même susceptible d'avoir à se taper l'installation de Boost.Thread, de se faire des scritpts Scons (ou Boost.Build !), de savoir configurer Eclipse CDT avec gdb, etc...
Par rapport à du Java, tu avoueras que c'est un plus la galère.

(*) D'ailleurs cette difficulté est peut-être lié à ce que tu soulèves comme premier point : une mauvaise connaisance de la chaine de compilation et des outils associés.[/QUOTE]
Avatar de I_believe_in_code I_believe_in_code
Membre Expert
le 30/04/2012 11:33
Citation Envoyé par Kaamui  Voir le message
Le problème de la qualité de l'enseignement ne vient pas forcément de l'enseignant ou de l'élève, ni même du langage. Je penses qu'il s'agit surtout de l'agencement des emplois du temps, dans les universités en particulier...

Comme il a été dit, et je l'ai vécu, beaucoup d'élèves ne feront jamais de programmation si on ne leur demande pas. Cela n'aide pas à comprendre le peu de cours que les profs peuvent nous faire et le temps imparti n'aide pas les profs non plus à faire des cours de haute qualité.

C'est vrai qu'en 8 semaine de cours, moins une semaine pour les exams, je ne saurais pas quoi faire, mon cours serait forcément un survol, et du coup je serais obligé de mentir (ou d'oublier volontairement certaines subtilités du langage) pour ne pas les embrouiller.

Mais quand on passe 3 jours sur 5 en 1° année de licence à faire tout sauf de l'informatique (bio, physique, chimie, etc... terminale 2 quoi...), et qu'ensuite on arrive en 2° année de licence et qu'on ne nous spécialise toujours pas dans notre domaine...il y a un problème. J'ai l'impression que la première année sert plus à "éliminer" tous ceux qui ont eu leur bac parce qu'il est donné de nos jours... forcément dans ces conditions on voit ensuite à la fac des élèves qui foutent rien...

Bref, pour moi le problème vient avant tout du système éducatif qui ne permet pas aux profs et aux élèves de gérer leur temps d'enseignement/d'apprentissage correctement.




Voila un point de vue original qui me parait, au fond, tres juste.

Sinon, je suis pour un enseignement elitiste, de celui qui met d'entree de jeu les etudiants peu motives ou ecerveles dans la situation tres claire du "tu t'adaptes ou tu revois tes ambitions a la baisse". A ce titre, il me semble que C++ premier langage est un tres bon choix, a condition d'en faire faire pendant un semestre entier, et de ne pas en cacher les difficultes.

Et puis voir un langage fonctionnel comme deuxieme langage, faire ecrire de vrais applis avec aux eleves (histoire de tordre le coup a des idees recues repandues meme chez les pros). Que les cerveaux inadaptes soient degoutes le plus tot possible et qu'ils s'orientent vers un metier plus reposant.
Avatar de oodini oodini
Membre Expert
le 30/04/2012 11:53
Point de vue qui se comprend, mais il faudrait également que le système éducatif et professionnel français permette de reprendre ses études plus facilement. Bien souvent, toute ta carrière est orientée par tes études initiales.

Or, savoir à 18 ou 20 ans ce qu'on va faire pendant les quelques dizaines d'années qui suivent ne va pas de soi. Et avoir la certitude de sa "voie" est à mon avis bien présomptueux. Les ingénieurs en informatique qui veulent très rapidement sortir de la technique pour devenir chef de projet ou commercial de SSII, il y en a à foison. Sans compter ceux qui ont à 35 ou 40 ans partent élever des chèvres, parce qu'il faut bien avouer que beaucoup de tâches dévolues aujourd'hui aux informaticiens sont souvent pleines de vacuité (développement web ou sur smartphones par exemple).

Par ailleurs, il ne faut pas s'étonner de trouver des gens peu motivés parmi les élèves, qui ont grandi dans un contexte de crise, et à qui on a dit qu'il n'y a que dans les nouvelles technologies qu'il y a du boulot.

Personnellement, le développement, c'est mon deuxième métier (j'ai repris des études longues pour cela), et je vais sans doute passer à un troisième d'ici quelques années.

Bref, tout miser sur une formation initiale, c'est à mon avis voué à l'échec. Il y a plein de métiers que tu découvres en commençant ta vie professionnelle, plein de métiers dont tu ne soupçonnais pas l'existence. Et puis, on se découvre également.

Je trouve qu'on devrait arrêter ses études à bac+2, et les reprendre à 30 ans. Parce que là, tu sais vraiment que tu as choisi la formation la plus adaptée à ta personnalité, et tu as vraiment conscience de l'utilité et de la valeur de ce qu'on t'apprend. Et quand on t'apprend le génie logiciel, la conception, ou l'intérêt des tests, ça te parle, et tu "imprimes" beaucoup mieux.
Avatar de Kaamui Kaamui
Membre chevronné
le 30/04/2012 14:49
Citation Envoyé par oodini  Voir le message
Point de vue qui se comprend, mais il faudrait également que le système éducatif et professionnel français permette de reprendre ses études plus facilement. Bien souvent, toute ta carrière est orientée par tes études initiales.

Or, savoir à 18 ou 20 ans ce qu'on va faire pendant les quelques dizaines d'années qui suivent ne va pas de soi. Et avoir la certitude de sa "voie" est à mon avis bien présomptueux. Les ingénieurs en informatique qui veulent très rapidement sortir de la technique pour devenir chef de projet ou commercial de SSII, il y en a à foison. Sans compter ceux qui ont à 35 ou 40 ans partent élever des chèvres, parce qu'il faut bien avouer que beaucoup de tâches dévolues aujourd'hui aux informaticiens sont souvent pleines de vacuité (développement web ou sur smartphones par exemple).

Par ailleurs, il ne faut pas s'étonner de trouver des gens peu motivés parmi les élèves, qui ont grandi dans un contexte de crise, et à qui on a dit qu'il n'y a que dans les nouvelles technologies qu'il y a du boulot.

Personnellement, le développement, c'est mon deuxième métier (j'ai repris des études longues pour cela), et je vais sans doute passer à un troisième d'ici quelques années.

Bref, tout miser sur une formation initiale, c'est à mon avis voué à l'échec. Il y a plein de métiers que tu découvres en commençant ta vie professionnelle, plein de métiers dont tu ne soupçonnais pas l'existence. Et puis, on se découvre également.

Je trouve qu'on devrait arrêter ses études à bac+2, et les reprendre à 30 ans. Parce que là, tu sais vraiment que tu as choisi la formation la plus adaptée à ta personnalité, et tu as vraiment conscience de l'utilité et de la valeur de ce qu'on t'apprend. Et quand on t'apprend le génie logiciel, la conception, ou l'intérêt des tests, ça te parle, et tu "imprimes" beaucoup mieux.




Je trouves que tu as tout à fait raison. Le décalage entre le moment où il faut commencer à travailler et le moment, pour une grosse majorité, où l'on découvre ce que l'on veut vraiment faire, est important. Le système éducatif actuel ne prend malheureusement pas en compte ce paramètre, et c'est un problème, tu as raison. L'accès aux études une fois dans le monde actif est bien trop compliqué (et restreint => un ouvrier avec femme et enfant qui se sent avocat mais l'a découvert trop tard ne pourra jamais (en l'état) trouver le temps de faire des études longues, même s'il a les capacités)

Par rapport à ce que dit I_belive_in_code (joli pseudo ), je garderais une réserve même si je comprends son point de vue, car il existe dans le lot des "élèves peu motivés ou écervelés" certains qui ne savent justement pas encore vers quoi se tourner. Dans un contexte "il faut choisir, mais je ne sais pas ce que je veux", le résultat va bien souvent à l'abandon ou à la démotivation (qui entraine des mauvaises notes). C'est également dans ce lot qu'on trouve généralement des personnes très brillantes (qui ne savent pas quoi faire car tout les intéresse, ou elle sont très douées dans tout et ne savent pas faire un choix), alors ce serait dommage de les éjecter.

Par rapport à ce que j'ai déjà dit, les capacités d'une personne devraient être le seul frein à une prise/reprise d'études supérieures à un age plus avancé que "20 ans", donc Oodini +1.
Ce qui est sur, c'est qu'on aime les domaines dans lesquels on a des capacités plus évoluées que dans d'autres, donc plutôt que d'orienter les élèves vers un choix, les confronter à leurs capacités serait peut-être plus judicieux.
Offres d'emploi IT
Analyste Développeur PHP
CDI
COOPTALIS - Nord Pas-de-Calais - Région Lilloise
Parue le 24/03/2014
Développeur Sharepoint + .NET indépendant
Mission
IT NEST - Ile de France - Paris (75000)
Parue le 23/03/2014
Chef de Projet Technique CRM (H/F)
CDI
PRINTEMPS - Ile de France - Siège Paris
Parue le 20/03/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula