Réfléction sur la programmation (la programmation de demain ?)

Publié le par Chkone

Avant j'étais :

Avant de commencer je voudrais dire que j'ai changé. Oui, vous m'avez surement rencontré sous une forme ou une autre. C'est moi le troll, je vous est parlé pendant des heures en vous disant que le C++ était mieux que le C, à la fin du débat cela finissait en "Conception Objet VS Conception Fonctionnelle" (et encore il y avait toujours l'argument du C-Objet). Et surtout à la fin des débats les points GodWin fusaient de ci et de là. Je suis las de cette vie allant de forums en forums à défier qui voudrait essayer de me faire croire que le DirectX était mieux que l'OpenGL ou que faire du multiplateforme Qt était mieux que wxWidGets....Que nenni ! J'ai roulé ma bosse un peu partout, je suis devenu un vieux routard de la programmation... Je suis passé du Basic au Visuel, de Javascript au Python (je sais...), du C au C++, du PHP à l'ASP et du Java au C# et là je suis tombé de haut ! Je n'aurais juré que par le C++ qui m'aurait fait gagner 1/10 de seconde par rapport à mon programme fait en ADA. Mais un jour j'ai découvert les délais de livraison d'un programme toujours trop court... Alors, là le C# répondais à tous mes soucis pas besoin d'être programmeur pour faire du C# il faut juste avoir un peu de logique (c'est comme le bateau).

Demain c'est loin :

Ne vous êtes-vous jamais demandé où va la programmation ? Bien que je sois jeune, j'ai vu le visage de la programmation changer (alors imaginer les "vieux" programmeurs comme Fortran ou Cobol). Après l'avènement des langages de programmation objet qui a été un pas de géant dans la programmation, (ceci est une vision personnelle en aucun cas cela est un fait établit, bien que pour moi ce soit le cas) la notion d'objet est devenue très importante dans les langages modernes ce n'est pas ce qui les caractérise le plus.

Quoi ? Qu'entends-je ? Que sont ces langages modernes ?

Les langages qui ajoutent des notions telles que les fonctions Lambda, les fonctions anonymes, l'introduction de nouvelles syntaxes qui permet de passer du code en paramètre (en fait ce qui se passe vraiment c'est que l'on envoie un pointeur de fonction qui a le code (envoyer en paramètre)). Donc dans la liste des langages modernes il y a la collection de chez microsoft : C# en particulier, mais aussi le tant attendu C++x0 (TR1). En gros un nouveau combat fera rage dans l'avenir même si le C# a pris une bonne avance.

.NET

Qu'elle est la philosophie du C#.NET (de mon point de vu) :
Pourquoi réinventer la roue et surtout pourquoi faire compliqué quand on peut faire simple ? Par exemple en C++ pour convertir un float en std::string comment fait-on ?
 #include <sstream>
// créer un flux de sortie
std::ostringstream oss;







// écrire un nombre dans le flux
oss << 51.0f;







// récupérer une chaîne de caractères
std::string result = oss.str();








Oui et regardons en C# :
private float x = 42; // décalaration d'un nombre
x.ToString(); // retour de ce nombre en string

Et pour l'inverse (std::string en float) ?
 #include <sstream>
// créer un flux à partir de la chaîne à convertir
std::istringstream iss( "
51.0f" );







// convertir en un int
float nombre;







iss >> nombre; // nombre vaut
51.0f







Et maintenant en C# :
private string x = "51.0f";
float.Parse(x); // retour d'un nombre flottant

Alors, avec ce genre de librairie (.NET) avec le C# plus vraiment besoin de se prendre la tête à chercher comment récupérer tel ou tel chose venant de tel ou tel autre chose... Et ceci n'est qu'une infime capacité du .NET (attendez je vous vois venir il existe le C++.NET mais j'y arrive microsoft à apparemment envie de jeter le C++ à la poubelle). Ce code dit manager permet de réduire considérablement les temps développement. Et bien sûr au détriment des performances des applications (et les pertes de performance ne s'arrêtent pas là j'arrive après au WPF).

Un vidéo :

Fonction Lambda :

 Func<int, bool> myFunc = x => x == 5;







bool result = myFunc(4); // returns false bien sur puisque 4 != 5








Vous voyez ce petit bout de code et bien "c'est magique" non ? En gros on définie un pointeur de fonction, le tout est caché :) pas mal comme syntaxe. Pour faire simple les fonctions Lambda en C# c'est :

(param0, param1, param2, ...) => (code).

Quel est l'utilisation imaginons 3 boutons (A, B, C) C ne fait rien. Lorsque je clics que sur A "il" envoi au bouton C la fonction calculer les premiers nombres premiers < 100, je clics sur C il le fait (2, 3, 5, ..., 97), je clics sur le bouton B il envoi le code écrire bonjour au bouton C. Je clics sur C il écrit bonjour. Tous cela dans la plus grande transparence. Mon ancien moi (le troll) disait je n'aime pas les algos qui cachent la complexité des algos. En effet ici tout est caché les pointeurs, les fonctions (je rappel que chaque appel de fonction grille plusieurs centaines de coup d'horloge il faut vider tous les registres et les remettre après 300 à 400 coups par appel attention donc aux fonctions récurrentes bref). Mais les fonctions Lambda ne sont pas faites pour être performantes mais, juste là pour être une aide au coder et accélérer le temps de développement d'un logiciel. Et de plus si nous voulons vraiment connaitre la vraie complexité d'un algo rien n'empêche d'aller voir en mode DEBUG le code ASM (assembleur).

LINQ c'est plus fort que toi :

Avant de commencer il faut connaître un minimum sur les requêtes SQL par exemple pour demander dans une table d'une base de donnée tous les éléments dont l'élément âge < 42 nous faisons :

SELECT * FROM ma_table WHERE âge < '42'. Et là SGBD s'exécute. Mais ne vous êtes jamais demandé un truc du genre : "Ah ça serait vraiment cool de pouvoir faire ça sur mon tableau". Et bien LINQ est là pour ça. Avec bien sûr un gros "blabla" de microsoft sur la convergence des données. Certes très intéréssant mais là n'est pas la question si vous voulez en savoir plus sur le pourquoi du comment ; je vous conseille de demander à google WebCast Microsoft LINQ et vous aurez plusieurs vidéos en français (et en anglais bien sûr et il faudrait pour certaine télécharger SilverLight). Exemple de requête LINQ sur un tableau :

 // Specify the data source
int[] scores = new int[] { 97, 92, 81, 60 };







// Define the query expression.








IEnumerable<int> scoreQuery = from score in scores score > 80 select score;








En gros on récupère une requête SQL dans scores où le score est > 80. Pas mal non ? Encore du temps de gagner. Plus besoin de coder les algos de rechercher. Les requêtes LINQ fonction pour les nombres, string et autre objet fantaisiste du moment qu'ils ont les opérateurs de comparaison adéquat.
Petit vidéo :

WPF : naissance d'un nouveau besoin : designer

Microsoft nous gâtes (ceci n'est pas un jeu de mot avec les accents de prononciations), en nous présentant WPF Windows Presentation Foundation qu'est ce ? Et bien une méthode pour faire des fenêtres sans toucher au code. Une méthode pour séparer le code pur, du design. Si vous êtes un coder chercheur vous allez me dire qu'il en existe plusieurs autres méthode. Et bien pas comme les WPF. Nous pouvons faire des applications 3D accélérer par la carte graphique avec plein d'effet. Le tout gérer en XML (xaml). Bien sûr nous pouvons faire des fenêtres standard, le tout est "véctorialisé". En gros c'est un vrai petit moteur 2D/3D en XML. En autre grâce à la vectorialisation WPF assure un rendu graphique identique quel que soit les machines au pire il passera du Hard (GPU) au Soft (CPU) mais le rendu sera le même mais avec une carte minimum DX7. Et comme d'habitude au détriment des perfs. Bien sûr le tout vendu avec une nouvelle vision de la programmation, nouvelle ergonomie des programmes, ...

2 Vidéos montrant ce qu'on peut faire avec :



Avec toutes ces avancées nous pouvons nous demander où va le monde de la programmation. Et bien avec la simplification des outils pour la création de site dynamique (à coup de middleware (un middleware est entre les outils de création simplifier et les outils de programmation)), les tentatives de middleware (sans grand succès pour l'instant) pour la création de logiciel. Nous pouvons penser qu'un jour le programmeur sera inutile et qu'il faudra simplement utiliser un logiciel pour faire des logiciels. Avec les processus d'automatisation qui se généralise et les API spécialisé gratuite qui se démocratise. Le jour viendra où l'on utilisera les COM, DLL et autre directement dans des logiciels pour créer d'autre logiciel. Par exemple je prenderais la DLL "OpenGLRender.dll" d'un moteur 3D mon logiciel listera les fonctions que j'utiliserais en simple drag&drop. Je vous le dis la fin des programmeurs est proche surtout avec les nouvelles techniques d'apprentissage pour les IA. Un jour les programmeurs seront appelés seulement pour faire des tâches qui demandent de la création et non la réutilisation de librairie (ou frameworks) comme ce que les programmeurs font en ce moment. Bien sûr je ne parle pas de recherche. Je parle dans une optique professionnelle. En pro on ne perd pas de temps à réinventer la roue. Voilà le sombre présage que j'annonce pour nous.

La démarche a déjà commencé. Avec la naissance d'une nouvelle profession dans le monde du développement logiciel. Les designer ! Il s'était déjà immiscé dans notre monde à l'époque nous n'avions pas besoin d'eux pour faire des sites. Dorénavant notre travail sur les sites est quasiment mineur. Maintenant pour les logiciels cela commence. Tous a commencé avec les RAD et la génération code (plus ou moins moche) pour la création d'interface graphique (GUI ou IHM). Et regarder microsoft qui nous dit : "Vous programmeur arrêter de faire des designs pour vos applications nous avons la collection expression qui sera bien mieux utilisée par des graphistes habituer au flash !". Je vous le dis nous allons être jetés à la poubelle.


Publié dans Pensées

Commenter cet article