Archives par mot-clé : programmation

un nouveau langage pour Internet ?

On réalise des sites dynamiques en programmant… Avec un langage de programmation donc.

Si, théoriquement, on peut faire des services internet avec n’importe quel langage, en réalité, il existe pas tant que ça de solutions :

  • C# dans .Net : proposé par Microsoft, c’est un très bon langage, avec un environnement de développement pil poil. C’est du propre : compilé, typé… Le problème est que quand on met un doigt là dedans, on en sort « full microsoft » avant d’avoir compris ce qui se passait… Et la facture licence peut faire peur…
  • Java : Solution normalement aussi propre que C#, avec l’avantage d’avoir des outils gratuits… Bon, la réalité est que, bien souvent, les architectures Java sont un peu lourdes, un peu verbeuses… On a rapidement des « délires UML » cher à développer et à maintenir.
  • PHP : LA solution Web par excellence. Langage simple à prendre en main, bien adapté à la production de pages dynamiques. Tout est fait pour faciliter l’écriture de petits programmes… Mais le contexte à bien changé depuis les débuts du langages. Ce langage est en fait utilisé par un nombre incroyablement grand de sites web (30 % ?), et PHP motorise donc des petits sites, mais également quelques monstres (comme Flickr !). Le fait que la plupart des hébergeurs proposent des solutions PHP clés en main accélère la diffusion de ce langage.
  • Autres langages interprétés (Python, Perl, Ruby…) : il existe pas mal d’autres langages, orientés Web. Ruby est par exemple une solution assez puissante pour produire des sites avec peu de ligne de code (ce qui est un critère de qualité : moins de ligne, mois de bug 😉 ).
  • C et C++ : Ce sont des langages bien solides, qui permettent de faire des applications excessivement rapides… Mais finalement, aujourd’hui, peu de monde utilise ces langages pour développer des sites web… Bon, quand même : les éléments clés des algos de Google sont développés en C…

Le PHP joue donc un rôle clé dans le développement du Web aujourd’hui.

Sa flexibilité, la taille de la communauté, la gratuite, … Beaucoup de facteurs ont poussé son développement, et aujourd’hui, la communauté PHP est juste phénoménale.

Mais aujourd’hui, je trouve la situation un peu paradoxale :

Qu’un site qui se lance parte sur PHP, je comprends : coût de développement réduit, pas de frais de licences, …

Mais ces contraintes changent complètement quand un site est plus important. Pour un gros site, la qualité devient un élément fondamental. Il faut donc être certain que le programme va bien produire le résultat attendu. Et pour ça, rien ne vaut un langage compilé, avec un typage stricte.

La solution actuelle consiste à rajouter des couches sur PHP, avec Zend Framework, …

Mais je pense, surtout après ma discussion avec Zeev, que l’avenir passera à moyen terme par l’émergence d’un nouveau langage.

Le cahier des charges est, à mon avis :

  • Langage compilé et typé ;
  • Langage orienté Web : disposer de syntaxes très simple pour produire des pages HTML ;
  • Peut être intégrer dans le langage une solution native pour gérer les sessions (et arrêter de charger la base de données avec des infos qui n’ont rien à y faire) ;
  • Langage objet bien sûr, pour faire de beaux modèles 😉 ;
  • Langage open source et gratuit, parce que c’est la clé de la diffusion sur Internet, et, comme PHP, parfaitement intégré à Apache.

La barrière à l’entrée est assez élevé, parce qu’il y a pas mal de choses sur le marché…

NB : ce billet est un billet de « projection ». A court terme, on peut très bien développer de bons services avec les outils actuels. On remplace les insuffisances de tels ou tels langage par de la méthode et des outils !

Grandeur et décadences de l’objet

L’objet, c’est un élément fondateur de l’informatique moderne.

On programme objet, on peut analyser avec une approche objet…

Mais d’abord, c’est quoi ce truc ?

L’approche objet est à la base une évolution « naturelle » des techniques de programmation.

Un peu d’histoire :

L’informatique a commencé avec des langages « barbares », ou en tout cas de bas niveau : assembleur, cobol…

Puis sont venus les langages fonctionnels et structurés.

Fini les GOTO, et bienvenue aux variables locales !

Cela a constitué une avancée fondamentale :

Le programme est 1000 fois plus lisible, 1000 fois plus réutilisable.

Il y a eu d’autres pistes explorées : les langages de type Intelligence Artificielle (Prolog), les langages purement fonctionnels (Camel & co), …

Et puis il y a eu l’objet.

Derrière l’objet, il y a plusieurs idées fondatrices :

L’une des idées est de se dire que les structures de données sont clées, et finalement plus centrales, plus stables que les fonctions.

Bref, le truc objet a bien pris, et la plupart des langages modernes sont objets : C#, Java, PHP…

ça, c’est la grandeur des objets.

Mais les objets auraient pu aller à pleins d’autres endroits.

Il y a eu ainsi de magnifiques projets de bases de données objets (O2 mon amour 😉 ).

J’en parlais ce soir avec mon amis Hubert, qui de son côté a travaillé sur un projet d’OS objet.

A ce propos, Microsoft devait intégrer une base de données objet à la place du file system de Vista… Projet abandonné.

Tout ça, c’est la décadence de l’objet !

Il n’y a pas de base de données objet sérieuse sur le marché.

Les OS ne sont pas objets.

Le file system est très loin d’être remplacé par une base objet…

Pourquoi « tant de haine » ?

C’est une histoire qui me fascine d’autant plus qu’elle me ramène à ma propre histoire : dans les années 90, j’avais monté un projet de bases de données objet, persuadé que c’était l’avenir.

On peut dire que pour les bases de données, cela n’a pas pris parce que ce que les gens attendent d’une base de données, c’est de stocker des données, et pas tellement de savoir comment elles sont structurées.

Je n’adhère pas à l’argument, parce que cet argument aurait très bien pu jouer contre les langages de programmation…

Je pense qu’en fait, il y a sûrement une part de hazard là dedans… Et si ça se trouve, on aura bel et bien de belles bases de données objets dans les années à venir ! N’oublions pas que cette histoire est en cours d’écriture !

Développer son site plus vite avec Symfony

Quand on doit développer un service, on ne peut pas toujours partir d’une « souche métier » (Prestashop, Magento pour le e-commerce).

Il faut alors partir de plus « bas ».

Dans ces cas là, pour aller vite, et ne pas réinventer l’univers, on peut partir d’un framework.

Utiliser un framework permet de partir avec une « souche logicielle » qui permet de structurer le développement, et des outils, pour automatiser certaines tâches.

Des frameworks, il en existe pas mal…

Logo Symfony

Symfony apporte pas mal de choses et permet de mettre en ligne rapidement une application.

La solution est porté par la société Sensio.

Logo Sensio

Sensio est à la base une web agency. C’est à partir de cette expérience, auprès de leurs clients donc, qu’ils ont monté Symfony.

Cela se ressent, avec une solution qui fait des choix pragmatiques, efficaces.

Symfony a su s’entourer d’une belle communauté, tant côté utilisation (plus de 10 000 applications) que développeurs, avec de très très belles références, dont notamment Yahoo Bookmarks.

Yahoo Bookmark

Cette référence, avec la richesse fonctionnelle et l’audience d’un tel site, balaye toute les objections qu’on pourrait avoir, sur les aspects fonctionnels et surtout performance !

Livre blanc sur les framework PHP

Quand on doit développer son site marchand, on choisi le langage et l’environnement.

Mais on fait rarement un développement « from scratch » : on utilise soit un framework, soit une solution open-source.

J’en reparlerais, mais je voulais juste signaler le livre blanc, produit par Clever Age, sur les Framework PHP :

Téléchargez le livre blanc, publié par Clevar Age, sur les framework PHP

Ces Framework permettent de gagner pas mal de temps, quand on doit développer un site. Mais il ne sont pas tous équivalents. Ce document compare CakePHP, Symfony, Zend Framework et Code Igniter.

Quel environnement technique pour un site e-commerce ?

Quand on se lance dans un projet e-commerce, on peut se retrouver dans la situation ou l’on doit choisir un langage de programmation, et plus largement, un environnement technique (OS, serveur, langage, base).

La question est importante, parce qu’elle a beaucoup de conséquences, sur les équipes, l’architecture, et les composants, qu’on pourra plus ou moins facilement ajouter.

Quels sont les grands éléments de cet environnement ?

  • Langage de programmation
  • Serveur
  • Base de données
  • Environnement de programmation
  • Système d’exploitation

On peut commencer par parler des langages de programmation.

D’abord, il faut dire que tous les langages ont une couverture fonctionnelle identique : il n’y a pas de langage qui permet de faire quelque chose, qu’on ne peut pas faire avec un autre langage.

Comment choisir alors ?

Voici quelques critères :

  • Compétences des équipes : Si les équipes maîtrisent un langage (Java par exemple), cela prendra du temps de les former à un nouveau langage. Ce n’est pas forcément rédhibitoire, surtout si on a du temps, mais, existe-t-il des projets ou on a du temps 😉 ?
  • Budget : Certains langages sont gratuits (Java, PHP, Ruby On Rails), et certains sont payants (.NET).
  • Délais. Certains langages, associés à des librairies, permettent de gagner du temps, de développer les services plus vite.
  • Environnement existant : Vous avez déjà tout un environnement, basé sur une technologie. C’est sans doute une bonne idée de faire un développement cohérent par rapport à cet existant.
  • Contour fonctionnel : avec le langage on choisi « de facto » les librairies sur lesquelles on pourra s’appuyer. Si par exemple on doit intégrer un module de CRM, PHP permet de faire ça assez facilement, avec des modules comme SugarCRM.
  • Robustesse de l’application : il est beaucoup plus facile de faire du code robuste en Java ou .NET qu’en PHP. PHP, pour rester sur cet exemple, est tolérant par rapport aux erreurs. La concéquence est qu’il est beaucoup plus difficile d’écrire une application 100% bug free en PHP qu’en Java. Bon, ce point doit être modéré, parce que la qualité finale dépend de tout un tas de facteurs : librairies utilisées, compétences des équipes, …

Je ne mets pas la performance comme critère, parce qu’on peut faire des services performants avec tous les langages (on peut également faire des systèmes qui rament avec tous les langages, c’est même assez facile 😉 ). A chaque fois, il convient « simplement » d’ajuster l’architecture.

Bon, vous me direz peut être que tout ça ne vous guide pas vraiment !

Prenons les trois langages les plus utilisés aujourd’hui : PHP, Java et C#.

PHP

Avantages

  • Gratuit ;
  • Très bien intégré dans la couche LAMP (Linux / Apache / MySQL / PHP) ;
  • Grosse communauté d’utilisateurs, et donc beaucoup de librairies disponibles ;
  • On trouve (relativement) facilement des ressources, soit pour recruter, soit en prestation ;

Inconvénients

  • Trop tolérant aux erreurs (pas de typage, …), et donc cela augmente « mécaniquement » le risque d’avoir un service buggé ;
  • Environnement de développement assez pauvre (pas de débugger encore bien stable).

Java

Avantages

  • Gratuit, mais attention, il faut ajouter un serveur d’application qui n’est pas forcément gratuit. Le serveur d’application est une couche, qui s’intercale entre Apache (le serveur Web) et le langage Java.
  • Très bon environnement de développement, gratuit (Eclipse) ;
  • Grosse communauté, on trouve beaucoup de composants libres ou pas sur le marché ;
  • Langage de très bonne qualité, qui permet, plus facilement qu’en PHP, de faire des programmes robustes et fiables.

Inconvénients

  • On trouve un peu moins de ressources qu’en PHP.
  • Les développements sont souvent un peu plus long qu’avec PHP. C’est la concéquence, le prix à payer ;
  • Comme il y a moins de développeurs Java que PHP, les prix sont un peu plus élevés. La facture est donc un peu plus lourde qu’avec du PHP.

C#

Avantages

  • Au niveau qualité du langage, on est au même niveau qu’avec le Java, mais l’intégration entre le langage et l’environnement de développement (Visual Studio) est plus forte. Au final, le développeur a entre les mains un outils de développement de très grande qualité ;
  • On bénéficie du support d’un grand éditeur ;
  • On peut gagner plus de temps, par rapport au Java, grâce aux nombreuses librairies fournies par Microsoft.

Inconvénients

  • Solution la plus chère, à tous les niveaux : licences, ressources.
  • Ce choix est très structurant, et le choix Microsoft a tendance à « se répandre » : on prend .NET, puis SqlServer, puis IIS, puis Windows Server, puis… On fini rapidement par avoir l’ensemble des logiciels Microsoft, et on revient sur le premier point : attention à la facture !

Au final

Pas simple, pas de réponse universelle.

Autre point important : un projet a une durée de vie limitée, une période d’amortissement. Un site qui vit 3 à 5 ans, c’est bien. Aller au delà n’est pas forcément très raisonnable.

encore un autre point : le choix n’est pas forcément unique : on peut faire le front en PHP, le back en Java, … Avec les Web Services, les différents langages savent dialoguer. Mais : c’est des développements complémentaires et il faut dans ce cas avoir les deux compétences.

N’hésitez pas à commenter ce billet : j’ai essayé d’être synthétique, mais j’ai sans doute oublié des points !

L’art de l’abstraction

bien programmer est un art, où tout au moins un artisanat, un peu comme un ébéniste.

Par programmation, j’entends l’ensemble des activités, permettant de passer de l’expression d’un besoin à un système informatique. Cela regroupe donc ce qu’on appelle l’analyse, la conception, la programmation, les tests, …

Bien sûr, les grosses boites vous parlent de processus industriels.
Ils ne vont pas vous dire le contraire, quand on allonge une facture de plusieurs centaines de milliers d’euros…
Ce sont les mêmes qui réalisent les systèmes informatiques des grosses banques… Vous me suivez ?

Mais la réalité est aujourd’hui plus simple, toute nue : la qualité de votre système informatique, quel qu’il soit, dépend de la qualité des artisans qui le construisent.

Une des qualités fondamentale pour bien programmer, c’est l’art de l’abstraction.

Pourquoi ? (j’aurais pas du regarder Sarkozy l’autre soir moi, j’ai une rechute)

Quand on doit réaliser une application, la base de la programmation, c’est de découper le problème, dans deux sens : verticalement et horizontalement.

Verticalement : on sépare le problème, fonction par fonction (pour un front office, on parlera par exemple du processus achat, du catalogue produit…)

Horizontalement : on sépare le problème en couche (toujours pour notre front, on pourra faire une couche pour les données, une couche pour les objets métiers et enfin une couche présentation).

Ce découpage à pour but de définir des modules, entité informatique ayant d’une part une complexité maîtrisable et d’autre part une certaine homogénéité.

Pourquoi ?

  1. Un module doit être plus simple à programmer parce que le problème qu’on cherche à régler est une partie du problème global.
  2. Le module est plus homogène parce qu’il ne résoud qu’un type de problème (les données pour le processus achat par exemple).

Le programmeur, notre artisan, doit donc être capable de faire abstraction des autres problèmes (voisins de gauche et de droite et du dessous) pour se concentrer sur son « morceau » du problème.

ça encore, c’est pas le plus dur.

Le plus dur, c’est qu’il doit à son tour donner une interface à son module ayant le bon niveau d’abstraction.

Il doit bien faire la différence entre « sa cuisine interne » et la vue qu’il donne sur son module.

Concevoir l’interface d’un module est réellement une partie passionnante. On se retrouve dans la situation de définir le « panneau de contrôle », donnant donc une vision la plus simple et la plus abstraite du problème qu’on doit résoudre.