Un développeur avisé en vaut 2.

Mes diverses expériences me permettent de cultiver une double compétence architecte et chef de projet. Le savoir-faire capitalisé a toujours une forte dimension fonctionnelle car il a toujours été acquis avec le métier de l’entreprise ou du client en ligne de mire.

Analyse Programmation

Modélisation

Rationaliser le développement des fondations par l’usage d’un vecteur de communication entre analystes et développeurs : l’utilisation d’une méthode de notation polyvalente permet cela : l’UML.uml-logo

Je pratique l’outil Case EnterpriseArchitect depuis ne nombreuses années car il couvre 80% des spectre des autres outils case pour un prix de 10 à 20 fois moins élevé.

Conception et implémentation

Une proposition technique assez « classique » mais qui couvre un large spectre technique horizontal et vertical.

Expertise du langage C++, en particulier pour les couches basses et couches métier (si des contraintes particulières de performance le nécessitent).cplusplus-logo

  • maîtrise des librairies C++ standard (STL), Boost
  • connaissances avisées sur les avantages et inconvénients de la méta-programmation (templates)
  • pratique des MFC
  • Il est possible d’utiliser Qt si l’interface graphique doit être réalisé dans la même application.

Utilisation typique du C# pour les couches métier, les interfaces graphiques, les besoins d’interopérabilitécsharp-logodotnet-logo

  • framework WPF (successeur des WinForms)
  • framework WCF pour la communication inter-process
  • de nombreux composants « sur étagère » si nécessaire

Ces éléments techniques sont proposés car ils sont parmi les seuls à offrir

  • le spectre fonctionnel et technique le plus vaste
  • les meilleures performances
  • des compétences « faciles » à trouver avec une assez grande pérennité
  • écosystème open-source ou closed-source le plus vaste qui soit

Une technologie alternative mais sans écosystème avéré conserve toute sa crédibilité technique mais n’acquiert pas de légitimité économique ; en conséquence, je m’appuie rarement sur des choses exotiques.

Paradigmes et patterns

Une application évolutive et maintenable

  • intègre de nombreux design pattern
  • est résolument (mais pas trop) multi-threading et/ou multi-processus
  • nécessite une architecture cohésive (fin du code spaghetti)

Architectures

La séparation des couches logicielles est au centre des préoccupations (layer).

Suivant les cas, les modèles de l’industrie informatique seront appliqués (ou pas) : MVP, MVVM.

Les standards d’applications distribuées sont applicables :

  • patterns client/serveur (synchrone ou asynchrone) et publish/subscribe
  • services
  • appels RPC
  • communications de plus bas niveau si nécessaire : shared memory, file mapping

Systèmes

Cibles

Les 3/4 des projets sont réalisés sur cible Windows.

Certains projets utilisent Linux (distributions spécialisées ou génériques).

Bases de données

Les projets réalisés intègrent

  • des systèmes de fichiers propriétaires (binaires ou structurés) : cela peut toujours être légitime suivant les applications
  • des bases de données relationnelles : SQLServer, MySQL, PostgresSQL

Les alternatives pour des gros volumes de données non structurées ou des insertions massives sont les « nouvelles » bases de données NoSQL.

Dans quel cadre ?