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.
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).
- 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é
- 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.