Faire une recherche

jeudi 19 décembre 2019

[PARTIE 1/2] Comment se trouver un emploi vite fait bien fait avec un diplôme en informatique?

NOTE: j'ai reçu beaucoup de retours sur le fait qu'il s'agit plus de mon histoire que de l'astuce que je veux présenter. Promis, dans le prochain article j'irai plus en détail. Bref, découvrez moi un peu en attendant le prochain article.

Dans cette première partie, je vais vous présenter comment je suis devenu un développeur en vous racontant mon modeste parcours 


Je suis développeur et j'aime mon métier. J'ai écris ma première ligne de code en 2013 et c'était un <<Hello world>> en JavaScript. 2 ans plus tard, je décrochais mon premier stage professionnel, ce qui m'ouvrit les portes du monde de l'emploi.

Dans cet article, je vais partager avec toi quelques astuces qui pourront t'aider à trouver un emploi vite fait bien fait avec ton diplôme en informatique. Dans la suite, je me base uniquement sur mon parcours, ce qui ne saurais être une vérité universelle.

Tout d'abord, il faut savoir que l'informatique est un domaine très vaste. Dans cet article, je ne vais te parler que du métier de développeur logiciels.

1- Pose toi la question de savoir: comment est tu en arrivé là? Pourquoi a-tu fais cette filière qui te prédispose à devenir un développeur?


En ce qui me concerne et comme j'ai l'habitude de le souligner, tout a commencé en 2010 quand j'ai obtenu le BAC. Je me suis présenté au concours d'entrée en faculté de médecine que j'ai échoué. Pendant ce temps j'ai découvert une émission sur RFI: l'atelier des médias, présentée par Ziad Maalouf. Cette émission passais tous les samedis après midi et ne présentais que les nouveaux médias: blogs et réseaux sociaux, entre autres. C'est alors que j'ai décidé moi aussi de créer mon blog et de partager avec le monde ce qui m'intéresse, à savoir la biologie.

A la rentrée académique, je m'inscris en Biologie Moléculaire et Cellulaire (BMC) à l'université de Douala. Je précise ici que nous sommes toujours en 2010. Quelques mois plus tard, je me rend compte qu'il existe la filière bio-informatique et biostatistiques (BIBS) dans cette même université. Je me renseigne un peu sur cette filière et j'arrive à la conclusion suivante: tiens, si je fais cette filière, je peux combiner 2 domaines que j'aime bien: l'informatique qui m'a permis de créer mon blog et la biologie. En 2011, j'abandonne la BMC et vire en BIBS. Quelques mois plus tard, je découvre le blog Bioinfo-fr et tombe carrément amoureux de la programmation, du langage python et de la bio-informatique.



Je décide alors de foncer en autodidacte, j'apprends le HTML, CSS, JavaScript et Python grâce au Site du Zéro, aujourd'hui openclassroom. Je lis des articles autour de la bio-informatique et de la programmation en même temps. Nous sommes en 2013 et j'affiche mon premier Hello world en JavaScript. Entre 2011 et 2013, je lisais tous ce qui me tombais sous les yeux et apprenais avec un stylo et une feuille. Je n'avais pas d'ordinateur et les samedis après avoir écouté Atelier des médias, j'allais au cyber-café. Je ne savais même pas ce que c'étais la console JavaScript.

Et tout bascula en 2013 quand j'obtins mon premier laptop.


2- Pourquoi trouves tu la programmation si intéressante?


Tu dois te poser la question de savoir pourquoi la programmation est si intéressante pour toi.

Je rêvais et je rêve toujours de développer un logiciel qui va analyser l'ADN de fond en comble. Les cours de biochimie structurale que je suivais en fac me donnaient des idées sur comment je peux faire un logiciel qui va prédire la structure des protéines, comment séquencer l'ADN et tout et tout! Je précise que des solutions à ses problèmes existaient mais je n'en avais aucune idée, j'étais tout enthousiasmé et naif. Dans ma tête, je voulais réaliser un truc dans le domaine de la santé, de l'analyse médicale plus précisément. Très vite je me confrontais aux premier problèmes: comment reconnaître que tel brin d'ADN est issue de tel ou tel échantillon. Je précise ici que je suis toujours sur papier et stylo, je ne sais même pas ouvrir une console. Je me lance dans la lecture d'articles et je découvre des algorithmes de classification, le K-means, la régression etc... Je suis en plein cœur de l'IA d'aujourd'hui et je ne m'en rend même pas compte?



Plus tard quand j'apprends à coder avec l'aide de Ronald Ndi (mon mentor), je programme les premières interfaces de Biodiscover en HTML et CSS uniquement et c'est ce projet qui me permet d'obtenir mon premier stage. Au moment de l'obtention de ce stage, je n'y connais rien en base de données ni en analyse UML. En fac on ne nous apprends que la programmation (C, C++ et R), normal, puisque j’étais dans une filière couverte par le département des organismes végétaux. Nous sommes en 2015. C'est alors mon mentor (Ronald Ndi) qui me montre pleins pleins de trucs (Git, Base de données, déboggage etc...).

MERCI MAN!

3- Quelles ont été les premières choses que tu as réalisé lorsque tu as commencé à programmer ?


Pour ma part, les premières choses que j'ai réalisé étaient Biodiscover (avec Python et Flask) et des petits codes (Tkinter, calculs, Sudoku - que je n'ai jamais réussi -, Jeu du pendu etc...).

Alors, quand je me suis présenté devant mon employeur de stage, je lui ai présenté Biodiscover et lui ai expliqué pourquoi je veux être développeur. Bref, je lui ai raconté tous ce que j'ai cité plus haut et il m'a retenu. Lors de ce stage, j'ai appris à utiliser Google App Engine, j'ai appris un peu de web design, j'ai appris le travail collaboratif et la gestion de version. J'étais fier de dire que je suis un développeur Python. Quand on me présentais une offre  PHP, je postulais et précisais que je suis développeur Python, je ne fais que du Python.




Ainsi, j'obtins mon deuxième stage dans une entreprise pour laquelle j'avais postulé en tant que développeur Python alors qu'elle recherchais un développeur PHP. Au premier entretien je n'ai pas été retenu mais plus tard j'ai été rappelé pour un projet Python. Il 'agissait d'intégrer un ERP et c'est alors que je découvre Odoo, nous sommes en 2016.

Après ce stage, j'obtiens mon premier vrai contrat, puis un deuxième, puis un troisième... toujours en tant que développeur Python (Flask et Odoo)

Aujourd'hui je suis un développeur et fier de l'être malgré les petits soucis de trésorerie. J'ambitionne toujours de faire de la pure bio-informatique et j'ai recommencé le projet Biodiscover.

Dans le prochain article, je vais entrer plus en détail et vous présenterai ces points ci-dessous


  1. Être passionné par ce métier et te faire suivre par un mentor
  2. Avoir un objectif clair de ce sur quoi tu veux évoluer
  3. Avoir un projet personnel fonctionnel ou semi-fonctionnel que tu vas présenter lors de tes entretiens
  4. Avoir un CV impéccable
  5. Parler à ton éventuel futur employeur avec enthousiasme


Sur ce, RDV dans le prochain article!
A+

mercredi 6 novembre 2019

Faut-il mettre en place les projets ERP sur mesure en fonction des clients?

Article traduit de https://www.linkedin.com/pulse/case-aginst-custom-developments-fabien-pinckaers/

La clé des implémentations d'ERP : Gérer les attentes des clients


Je suis un développeur. J'aime développer, c'est amusant et intellectuellement stimulant.

Mais, en tant que PDG d'Odoo, je sais aussi que, pour les projets de mise en œuvre d'ERP, les développements sur mesure doivent être évités autant que possible.

Ce n'est pas aussi facile qu'il n'y paraît quand les clients pensent souvent qu'ils ont besoin de développements personnalisés. D'autre part, les sociétés de services d'implémentation sont heureuses de facturer des jours supplémentaires pour ces personnalisations. Mais je dois avertir les deux parties, les développements sur mesure ne sont pas bons pour vous !

Pourquoi minimiser les développements sur mesure ?

Pour les clients, les développements sur mesure ajoutent des coûts et du temps au projet d'implémentation, parfois au point de mettre le projet en danger. De plus, le développement sur mesure entraîne une dette technique que vous aurez à payer dans les années à venir : plus de coûts de maintenance et de mise à niveau. Une telle dette technique coûte environ 25% des coûts de développement CHAQUE ANNÉE (~17% en maintenance + ~8% en amélioration).

Chaque développement peut sembler simple et abordable. Mais la complexité d'un projet augmente avec le carré du nombre de personnalisations, pas linéairement. Vous voulez probablement résoudre ce que vous n'aimiez pas dans votre logiciel précédent ; mais ne serait-il pas préférable de standardiser vos processus d'affaires et de mettre en œuvre le projet 2 fois plus rapidement et à moindre coût ?

Pour les partenaires, les développements sur mesure ont généralement un coût élevé, pour une faible valeur client. Combien de fois avez-vous estimé à 10 jours le temps nécessaire pour développer une fonctionnalité ; le client pense que c'est trop pour une fonctionnalité si basique que vous ne chargez que 8 jours ; mais vous finissez par passer 12 jours. Oh, et quand nous découvrons des problèmes/changements plus tard parce que vous avez dû le faire rapidement, le client ne paiera pas pour la journée supplémentaire car c'est votre faute. Ce qui aurait dû être un service à 35 % de marge est maintenant une perte de service de 6 % !

Pour croître, il est plus facile de se concentrer sur des services de valeur ayant de meilleures marges et de réduire le risque d'heures non facturables. Ces services comprennent la gestion de projet, l'analyse d'affaires, la personnalisation sans développement, la gestion du changement et la formation.

Si vous ne développez pas une mentalité de réduction des développements personnalisés, tôt ou tard, vous deviendrez non compétitif. Les concurrents qui gèrent mieux les attentes des clients auront des coûts de mise en œuvre du projet plus faibles. Avez-vous déjà perdu un projet parce que le client a dit "vous êtes trop cher", pour découvrir que le client a acheté beaucoup moins que ce que vous auriez livré ?

Bien sûr, des développements sur mesure sont parfois nécessaires pour gérer l'entreprise. Mais, d'après mon expérience, la majorité des demandes des clients ne valent pas le coût pour eux, ne sont pas pertinentes une fois qu'ils commencent à utiliser Odoo, ou ils peuvent s'en passer car cela ne fait pas partie de leur utilisation principale. Acceptez-vous ces demandes ou non ? Tout dépend de votre méthodologie d'implémentation et de l'état d'esprit de votre entreprise.

Le client n'est probablement pas un expert du produit, et probablement pas non plus dans les projets de mise en œuvre. Ils ne peuvent donc pas facilement équilibrer le coût d'une caractéristique particulière en fonction des recettes qu'ils en tirent. Les demandes des clients sont basées sur les défis qu'ils ont eus avec leur ancien logiciel ou leur façon actuelle de travailler. La plupart de ces problèmes sont atténués ou ne s'appliquent plus une fois qu'ils sont passés à l'utilisation d'Odoo.

Il n'est pas facile de définir le bon équilibre entre les développements standard et personnalisés. Ce qui n'en vaut peut-être pas la peine pour un client peut être très précieux pour un autre.

Si vous demandez aux entreprises de services, elles vous diront toutes qu'elles ne développent que ce dont le client a besoin (et elles pensent vraiment qu'elles le font). En réalité, il est très difficile de s'évaluer soi-même et de savoir si l'on est bon pour évaluer le rendement des investissements et résoudre les problèmes avec des conseils commerciaux plutôt qu'avec des développements.

Pour comprendre les différents états d'esprit, examinons la structure de mise en œuvre de deux sociétés de services.

CAS 1 : Si une entreprise a 8 développeurs pour 2 chefs de projet, leur objectif est de faire des développements sur mesure. Leur méthodologie est probablement scrum (ou une autre agile), et leur chef de projet passera le plus clair de son temps à écrire des spécifications et à tester des développements. Ils satisfont les clients en développant, mais cette approche conduit inévitablement à une augmentation du coût et de la rapidité du projet (et non à dessein, bien sûr). Les clients sont satisfaits à court terme (car ils obtiennent tout ce qu'ils demandent), mais pourraient être insatisfaits à mesure que les coûts et les délais augmentent.

CAS 2 : Une entreprise comptant 2 développeurs et 8 hommes d'affaires (analystes ou chefs de projet) se concentre sur les services aux entreprises : gestion du changement, ingénierie des processus d'affaires, recherche de solutions standard aux problèmes commerciaux, formations. Ils auront des comptables, des gestionnaires d'inventaire ou d'autres experts dans leur équipe qui pourront contester les demandes des clients. Ils satisfont les clients parce qu'ils fournissent une valeur très élevée à un très bon prix. La plupart des clients aimeront l'approche, mais certains pourraient être frustrés à court terme lorsque vous remettez en question ce qu'ils demandent. En revanche, ces clients seront très satisfaits à moyen terme à mesure que le projet avancera.

Quel est le juste équilibre entre CAS 1 et CAS 2 ? Malheureusement, il n'y a pas de point de repère.

Chez Odoo, nous disposons d'un département de service composé de développeurs, de chefs de projets et d'experts métier. Au fil des ans, nous nous sommes concentrés sur l'amélioration de la rapidité des projets, plutôt que d'essayer de vendre plus de services à l'avance.

Voici la taille de notre équipe pour nos projets d'implantation directe :


  • Pour les petits clients (1-50 utilisateurs), nous avons 11 développeurs pour 80 chefs de projets et analystes d'affaires. Ainsi, 12 % ont un profil de développeur.
  • Pour les grands projets (>500 utilisateurs), notre ratio est plus proche de 50% de développeurs, 50% de non-développeurs.
  • Ou, vous pouvez le voir d'une autre façon ; sur les projets de petite et moyenne envergure, en moyenne, 12 % de notre temps facturé est consacré au développement, 88 % aux services aux entreprises.


En tant que client, cette simple astuce de vérification de la taille des équipes vous aidera à évaluer votre partenaire potentiel en fonction de vos attentes. En tant qu'entreprise de services, faites le calcul avec votre propre taille d'équipe. Ce ratio vous indiquera si vous avez des marges d'amélioration pour augmenter vos marges et la vitesse de votre projet.

Si votre ratio est 2 fois plus élevé que celui-ci, il vaut la peine de réfléchir à vos méthodologies, votre modèle économique et le profil de vos prochains recrutements. Un bon point de départ est la "méthodologie d'implémentation" d'Odoo.

Comment répondre aux demandes spécifiques des clients ?

 Lorsque vous traitez avec des clients, n'oubliez pas qu'il y a une différence entre les objectifs des parties prenantes et les besoins des utilisateurs clés. La plupart des décideurs vous diront que leur priorité est le temps et le budget, tandis que les utilisateurs clés réfléchiront surtout en termes de caractéristiques spécifiques à développer. Comme ces objectifs se contredisent, c'est à vous de décider : qui voulez-vous satisfaire ?

Je pense que vous devriez toujours faire ce que vous pensez être bon pour le projet ; cela signifie remettre en question ce que les utilisateurs clés demandent, au point de refuser de le faire si vous pensez que cela ne vaut pas la peine. Essayer de satisfaire la demande des utilisateurs clés en faisant tout ce qu'ils demandent est un état d'esprit à très court terme ; il est préférable de se concentrer sur le succès du projet.

J'utilise le cadre suivant pour traiter les demandes de développement personnalisé :



  • Est-ce vraiment nécessaire ?
  • Vaut-il la peine d'en supporter le coût (de développement et de maintenance) ?
  • Le gain est-il assez important ?
  • Pouvons-nous servir le même objectif, avec une approche différente ?
  • Si vous en arrivez à la conclusion que le développement d'une fonctionnalité spécifique n'en vaut pas la peine, vous devriez vous efforcer de convaincre le client. Il y a différentes tactiques pour cela : expliquer le "pourquoi", le mettre en phase après la mise en ligne, le faire passer à un manager (bien que ce ne soit pas idéal, c'est parfois nécessaire).


Est-ce vraiment nécessaire ? 


Supposons que vous ayez une demande pour le développement personnalisé suivant :

Le client dispose d'un site développé avec Magento Commerce et ne souhaite pas changer son site car il y a déjà beaucoup investi. Mais ils aimeraient qu'Odoo soit complètement intégré à leur site Magento (produits, coupons, suivi des paniers abandonnés, etc.)

La meilleure façon d'évaluer si c'est nécessaire est de vérifier si le client possède déjà cette fonctionnalité dans son ancien logiciel. Si le client enregistre toutes les commandes manuellement dans son ancien logiciel, il peut le faire de la même manière avec Odoo. Je recommanderais alors d'entrer en production sans développer d'intégration avec Magento, d'utiliser Odoo pendant 3 mois, puis de revoir les priorités et de décider si cela en vaut la peine (à ce moment-là, vous avez 50% de chance que le client aime tellement Odoo qu'il optera pour Odoo eCommerce plutôt que pour un connecteur pour Magento. :)

En matière de gestion du changement, il est toujours préférable de déployer progressivement les changements de processus d'affaires, plutôt que de tout mettre en œuvre en une seule fois. Avec la modularité d'Odoo, il est logique de déployer en plusieurs phases : 1/ Avec ce dont le client a absolument besoin pour exploiter l'entreprise et seulement après le passage à 2/ Autres caractéristiques pour améliorer l'efficacité.

En réalité, les priorités de développement du client changent lorsqu'il entre en production. Les raisons en sont les suivantes :


  • En utilisant le logiciel, ils découvrent de nouveaux développements plus importants et redéfinissent l'ordre de priorité de celui-ci. 
  • Après avoir dépensé de l'argent pour la mise en œuvre, ils sont satisfaits du résultat et préfèrent réduire les dépenses pour des fonctionnalités inutiles. 
  • Lorsque le client commence à utiliser Odoo en production, son état d'esprit change au fur et à mesure qu'il développe son expertise sur le produit.

Cela vaut-il la peine d'en supporter le coût ? 


Deuxièmement, vous devez évaluer l'avantage ; combien de jours-homme par mois le client économisera-t-il grâce à cette fonction. Souvent, le client ne tient compte que du temps qu'il consacre actuellement à ce genre de tâche et des économies qu'il pense pouvoir réaliser à l'avenir. En réalité, ils devront encore enregistrer toutes les données nécessaires au calcul, traiter manuellement les exceptions, etc : Même si le client développe un connecteur Magento, il devra tout de même résoudre tous les conflits, enregistrer les remises de prix dans les deux solutions logicielles, gérer les conflits d'inventaire car la synchro n'est pas en temps réel, etc).

Ensuite, vous devez évaluer le rapport coût-efficacité. Souvent, le client ne voit que le "coût de développement unique". En réalité, vous pouvez facilement multiplier ce coût par 2 ou 3 car vous devez prendre en compte de nombreux facteurs : temps de test, bugs et retards supplémentaires sur le projet, adaptation de la documentation car elle n'est pas standard, maintenance et mises à jour futures sur les 5 prochaines années.

Notez que l'utilisation d'un module communautaire vous permet d'économiser le temps du développement initial, mais vous aurez toujours les tests, la maintenance, les retards du projet et la mise à niveau pour tenir compte du coût. Un module communautaire est aussi une dette technique.

Le gain est-il assez important ?


Supposons que vous ayez une demande pour le développement personnalisé suivant :

Lorsque nous confirmons une commande de vente pour un projet de construction, nous voulons créer une série de tâches basées sur un ensemble de règles qui dépendent des produits, du client et des emplacements.

Lorsque vous avez une demande de personnalisation, votre premier réflexe devrait être de questionner les volumes : combien de projets de construction gagnez-vous par mois ? Disons que le client gagne 10 de ces projets par mois. Il faut probablement 10 minutes pour créer et mettre à jour les tâches en dupliquant et en mettant à jour les modèles de projet.

Vaut-il la peine de lancer un développement complexe pour économiser moins de 2 heures ou travailler par mois ? Sûrement pas, cette fonctionnalité coûtera environ 10 jours de développement, plus 25% de cette somme chaque année.

Pouvons-nous servir le même objectif, avec une approche différente ?


Supposons que vous avez la demande suivante du client :

Je veux synchroniser notre calendrier Outlook avec Odoo CRM.

Odoo a un connecteur avec Google Agenda en standard, mais pas avec Outlook. Mais le développement et la maintenance d'un connecteur peuvent coûter très cher. Cependant, il existe de nombreux services qui synchronisent Google Agenda avec Outlook. (comme l'IFTTT) Donc, une solution serait de s'abonner et de mettre en place un tel service pour chaque employé.

Ce n'est pas parfait car vous devrez modifier votre configuration à chaque fois que vous recruterez un nouvel employé. Mais la solution est prête en 2 heures, et cela ne prendra que 10 minutes par nouvel employé. C'est encore beaucoup moins qu'un nouveau développement, si l'entreprise compte moins de 100 employés.

Note : En réalité, Odoo a un connecteur Outlook dans les applications de la communauté, nous vous conseillons donc d'utiliser celui-ci à la place. Ce n'était qu'un exemple théorique.

Si je réduis les développements sur mesure, vais-je perdre des revenus importants ?

Si vous avez 80% de votre équipe en tant que développeurs et 20% en tant que chefs de projet, vous pourriez avoir le sentiment que des développements sont nécessaires pour soutenir vos revenus. Mais les entreprises ayant 20% de leurs équipes comme développeurs ont un point de vue exactement opposé ; les services aux entreprises sont nécessaires pour maintenir les revenus et les marges.

En réalité, les clients ont beaucoup plus besoin de services fonctionnels, souvent plus que de développements. C'est juste qu'il faut trouver la bonne façon de les vendre et de les entretenir. Habituellement, une fois que le client est en ligne, le nombre de demandes de développement diminue, tandis que la demande de services aux entreprises peut continuer, si votre approche est bonne.

Bien sûr, vous ne pouvez pas passer d'un jour à l'autre ; changer l'état d'esprit d'une entreprise et sa méthodologie de mise en œuvre prend du temps. Mais si vous pouvez passer de 80/20 à 70/30, vous améliorerez vos marges. Passez ensuite à 60/40 et vous ferez un pas de plus en avant.

Ma recommandation serait de :



  • Travaillez sur votre méthodologie d'implémentation (commencez par la nôtre - c'est à dire Odoo - si vous n'en avez pas).
  • Conservez votre équipe, mais recrutez progressivement quelques analystes commerciaux ou chefs de projet supplémentaires qui n'ont pas de profil développeur. 

Choses à garder à l'esprit :



  • Évitez les développeurs qui font aussi de la gestion de projet. Devenir un développeur expert est difficile et demande des années de pratique. Etre un grand chef de projet demande aussi du temps et de l'expérience. Si vous encouragez les développeurs à devenir chefs de projet, vous aurez des gens de niveau moyen dans les deux rôles, pas excellents dans un seul ; et avoir des chefs de projet de niveau moyen sera préjudiciable à vos implémentations. 
  • Éviter d'utiliser des développeurs dans la relation client. Les développeurs peuvent tout faire ; ils trouvent facilement des solutions aux problèmes techniques. Par conséquent, il leur est facile de dire "Oui" pour un développement sur mesure, car ils ne ressentent pas la douleur d'avoir à le gérer. Quand Odoo n'avait que 10 employés (principalement des développeurs), c'est ce qui m'a permis de grandir plus vite : J'ai commencé à recruter des chefs de projet sans connaissances en développement et à mieux structurer le rôle de chacun.

Si le client a choisi Odoo, n'est-ce pas parce qu'il veut toutes ces personnalisations ? 

Odoo est un logiciel étonnant. Rien qu'en utilisant le standard Odoo, l'entreprise du client sera massivement transformée, pour le mieux. La plupart des ministères seront plus efficaces et les employés disposeront d'un outil pour accroître leur productivité. C'est là que réside la valeur ; les développements personnalisés ne représenteront que 5% à 10% des fonctionnalités que le client utilisera à partir de la plate-forme.

Vous devez gérer les attentes des clients, avant même de faire une offre, et le client vous remerciera d'avoir remis en question ses demandes ; c'est ce qu'il attend généralement des grands chefs de projet. Cela vous permettra de réduire le budget initial et d'être plus compétitif, tout en limitant les développements coûteux pour vous concentrer sur les marges élevées associées aux services aux entreprises.

Une fois que le client est en production et satisfait, il sera beaucoup plus susceptible d'acheter plus de vos services car votre rapport qualité/prix est excellent. Il y a tellement d'applications que vous pouvez déployer sur Odoo que le potentiel est presque illimité, vous pouvez toujours élargir la portée.

La plupart des entreprises pensent qu'elles sont uniques et spéciales, et se sentent justifiées dans leur désir de personnaliser. Ce n'est pas l'état d'esprit qu'il faut pour réussir un projet. C'est à vous de diriger le projet dans une direction axée sur la valeur qui aide le client, pas seulement ce qu'il vous demande de faire. Et ils vous récompenseront à long terme pour une telle approche. Odoo n'est pas seulement une plate-forme, ce sont les " meilleures pratiques commerciales " codées dans ce logiciel. Ces pratiques sont le fruit d'une longue expérience de travail avec les clients

Vaut-il la peine de développer des fonctionnalités personnalisées, si elles peuvent être réutilisées sur plusieurs " futurs " projets clients ?

Dans le passé, nous avons essayé à plusieurs reprises de développer une fonctionnalité personnalisée pour un client, avec l'espoir de réutiliser cette fonctionnalité pour de futurs clients. Il a échoué dans la plupart des cas :

Les gens ont toujours l'impression qu'une caractéristique est assez générique et que beaucoup de gens la voudront. En réalité, les autres clients le voudront légèrement différent et vous finirez par gérer différentes versions de votre code personnalisé.
Cet argument est souvent utilisé par le client pour négocier un moyen de "partager" le coût d'une fonctionnalité personnalisée, ou par votre équipe interne pour justifier une fonctionnalité "non facturée". Dans les deux cas, ce n'est pas bon pour les marges de l'entreprise.
Développer des fonctionnalités à vendre à plusieurs clients est le modèle économique d'un éditeur de logiciels (comme Odoo SA), mais c'est un modèle économique complètement différent de celui d'une société de services. C'est un modèle où vous avez besoin de 80% de marges sur vos produits pour couvrir les coûts de R&D très élevés. Il s'agit d'un modèle où plus de 50% de vos frais sont des développeurs en R&D, et non facturés aux clients.

Une entreprise de services efficace visera un taux de facturation d'environ 80 %. C'est ce dont vous avez besoin pour maintenir une croissance saine. Vous n'atteindrez pas ce niveau de taux de facturation si vous avez un modèle commercial mixte de développement de logiciels et de services.

Mes excuses

Je sais qu'un tel billet de blog pourrait ne pas plaire à tout le monde. Toutes mes excuses. Je ne veux faire de mal à personne. Je veux juste être utile. Et pour être utile, je dois être direct et transparent.

Veuillez ne pas lire ce blog comme le point de vue d'un "Software Vendor". C'est en fait ce que nous avons appris au cours de l'année écoulée dans notre département de service, en nous concentrant sur la rapidité et la compétitivité du projet, en faisant ce que nous pensons être bon pour le succès du projet, et non ce que les utilisateurs clés nous demandent de faire. Il s'avère que ce département de service est maintenant aussi perturbateur et efficace que notre produit, au point qu'il est devenu un avantage concurrentiel énorme.

En partageant ce que nous avons appris, j'espère que cela aidera certains partenaires à accélérer leur croissance, tout comme SAP l'a fait il y a quelques années avec ASAP, la méthodologie de mise en œuvre accélérée de SAP. ASAP a joué un rôle majeur dans l'évolution de SAP et sa capacité à mettre en œuvre des entreprises complexes, dans les premières années. Un élément clé de leur approche est de s'en tenir à la norme, les " meilleures pratiques d'affaires ". Si leur approche permet de réussir des implémentations complexes avec un produit aussi merdique que SAP, imaginez ce que nous pouvons faire avec un logiciel aussi incroyable qu'Odoo !

Nous disposons d'un vaste réseau de partenaires très intelligents. Notre seule faiblesse : nous sommes plus jeunes, moins mûrs. Si nous parvenons à accroître notre maturité, nous perturberons le marché, plus rapidement que n'importe quel autre produit ne l'a jamais fait auparavant. Nous avons transformé la vie de 3,7 millions d'utilisateurs en quelques années. Mais pour atteindre 100 millions d'utilisateurs, un bon produit ne suffit pas, il faut construire, ensemble, le meilleur réseau de partenaires qui soit.

lundi 28 octobre 2019

Comment monter un projet et créer sa startup technologique facilement en Afrique?

Bonjour! Des amis et moi sommes entrain de monter Proxima afin de vendre nos services, AlphaDSF et Salers. J'en profite pour partager ici avec vous, quelques conseils que nous sommes entrain d'appliquer!

En Afrique ça bouge de partout et de plus en plus de jeunes diplômés se lancent dans la création de startups. Dans le but de leur venir en aide et leur montrer comment s'y prendre, cet article donne quelques astuces pour leur permettre de créer leur prochaine startup technologique.

Dans un premier temps, je présente comment mettre en valeur une idée. Ensuite, j'indique comment monter son buisness plan et comment concrétiser son projet. Enfin, je présente les étapes de croissance qu'il faut suivre afin d'obtenir un financement.

Mettre en valeur votre projet

Étape 1 - Trouver un problème

Étape 2 - Étudier le marché (produits concurrents)

Etape 3 - Acheter un nom de domaine

Étape 4 - Créer une page d'accueil (landing page)

Étape 5 - Partager la page d'accueil et parler du projet

Étape 6 - Créer un business plan

1- Faire un résumé en une page

Qui êtes-vous? Que vendez-vous? A qui vendez-vous? Quels sont les gros titres financiers?

2. Vue d'ensemble de l'entreprise

Qui êtes-vous en tant qu'entreprise? Quelles sont vos valeurs? Quel est votre équipe?

3. Produits et services

Décrivez vos produits et/ou services. Quel est le problème que vous résolvez? Pourquoi êtes vous uniques?

4. Analyse du marché

Quels sont vos concurrents? Quels sont les opportunités qu'il y'a dans votre marché? Quels sont les défis et comment allez-vous les surmontez?

5. Définir votre marché cible

A qui allez-vous vendre? Quels sont leurs besoins? Combien ont-ils à dépenser? Pourquoi achèteront-ils ça ?

6. Stratégie et implémentation

Énoncer votre plan de marketing: définissez des étapes clés pour votre entreprise.

7. Plan financier

Comment allez-vous gagner de l'argent ? Quand allez-vous gagner de l'argent ? Combien allez-vous gagner sur une période de temps qui vous aurez définit? Combien il vous en coûtera pour gérer votre entreprise?

Étape 7 - Conception du projet

Étape 8 - Création de l'application

Étape 9 - Déploiement 


Étapes de croissance


Étape 1 - Obtenir 25 souscriptions

Etape 2 - Créer un SaaS

Étape 3 - Convertir les utilisateurs en clients payants

Étape 4 - Recueillir les commentaires des utilisateurs

Étape 5 - Améliorer l'application en utilisant les commentaires

Étape 6 - Recueillir 100 clients de plus

Étape 7 - Répéter les étapes 4 à 6 jusqu'à atteindre une certaine limite.

Étape 8 - Faire 2 embauches (développeur full-stack & commercial)

Étape 9 - Créer une offre plus généralisée

Étape 10 - Faire une levée de fond

Étape 11 - Embaucher une équipe plus nombreuse

Étape 13 - Grandir encore et encore


Comment obtenir un financement?

1- Avoir une bonne capacité de gestion (respect des procédures)

2- Avoir un bon business plan qui fait rêvé et qui permet de se projeter dans l'avenir

3- Croire au projet

4- Le projet doit être innovant (apporter une solution réelle à un problème)

5- Le projet doit être évolutif (être en mesure de l'implémenter ailleurs)

6- Le projet doit toucher une large population

7- Présenter le projet sur une vidéo de 2 ou 3 min convaincante

8- Rencontrer des investisseurs

Je vous propose également de regarder ce talk très instructif de Chris on code qui expliquais lors du Concatenate Conf 2019 comment mettre sur pied d'un buisness.


Je pense vous avoir aider et ose croire que cet article vous sera bénéfique pour la réussite de votre projet technologique!

samedi 19 octobre 2019

Découvrez les nouveautés de Python 3.8

Cet article a été publié en tant que thread sur twitter par Elias Walyba, data scientist et machine learner au Sénégal. Néanmoins, j'ai retouché quelques mots.

Python 3.8 est sorti le 14 octobre dernier. Cette nouvelle version de Python vient avec quelques fonctionnalités plutôt intéressantes en terme de développement. Dans ce thread je vous présente quelques unes de ces fonctionnalités que j’ai eu à tester.

1/ L’opérateur de warlus «:=»

Cet opérateur vous permet de faire des assignation de valeurs à des variables dans des expressions ou des blocs d’expressions. Son signe est := . Il est très utile pour éviter de se répéter dans des structures de contrôles.

# Le bout de code suivant (3.7):
if len(dataset) > 1000:
    print(f’’moins de {len(dataset)} éléments attendus’’)

# Devient (3.8):
if (n:=len(dataset)) > 1000:
    print(f’’moins de {n} éléments attendus’’)

2/ Les paramètre «/» et «*» des fonctions

Cette version de Python introduit ce qu’ils appellent: positional-only parameter et qui se note /. Cette fonctionnalités permet de dire que certains paramètres d’une fonction (ou méthode) ne peuvent être passés que par position et pas par clé-valeur. Elle introduit aussi le keywords only parameter qui se note * qui lui permet de dire que certains paramètres ne peuvent être passés que par clé-valeur.

Dans la fonction suivante, a et b ne peuvent être passé que par position, ce qui peut être à la fois passé par position et par clé-valeur et d ne peut être passé que par clé-valeur.

 def func(a, b, /, c, *, e):
    pass

func(2, 5, c=40, e=1.7)

ou

func(2, 5, 40, e=1.7)

Cette fonctionnalité est très utile pour écrire du code avec le paradigme fonctionnel.

3/ Ajout du signe «=» dans les f-strings

L’autre fonctionnalité super sympa de cette version c’est l’ajout du signe = dans les f-strings pour faciliter l’inspection de variable et la self documentation.
La f-string suivante: f"{expr=}" produit la chaine "expr=valeur_de_expr"

Le code suivant:
twitto = "@eliaswalyba"
age = 26
print(f"{twitto=} {age=}")

Produit:
"twitto=@eliaswalyba age=26"

PS: On peut l’utiliser avec les formatages de f-strings pour plus de contrôle.

print(f'{theta=}  {cos(radians(theta))=:.3f}')
theta=30  cos(radians(theta))=0.866

4/ Plus de précision sur le typage

Avec l’introduction de types de données tels que:

  • Literal types
  • Type dictionaries
  • Final objects
  • Protocols


Python prend en charge les indicateurs de type facultatifs, généralement sous forme d'annotations sur le code:

def double(number: float) -> float:
    return 2 * number

Dans cet exemple, number doit être un float et la fonction double() doit également renvoyer un float. Cependant, Python traite ces annotations comme des astuces. Ils ne sont pas appliqués à l'exécution:

double(2)
 retorune 4

double("Dakar)
retourne DakarDakar

Même si cela ne permet pas de faire de Python un langage à typage statique et fort, ça a une réelle importance pour les programmes de type-checking tels que mypy qui pourront l’utiliser pour faire du type-checking avant ou lors de l’édition.

Les types Literal, Protocoles, etc sont accessible via le package typing.

from typing import Literal

5. La fonction reversed() sur les dictionnaires

Depuis Python 3.7, les dictionnaires conservent l'ordre d'insertion des clés.  Avec Python 3.8 reversed() peut maintenant être utilisé pour accéder au dictionnaire dans l'ordre inverse de l'insertion - exactement comme OrderedDict

6. L’unpacking avec return et yield

Depuis Python 3.2, l’unpacking des éléments itérables sans parenthèses dans les instructions return et yield est interdit:

# interdit
def func():
    res = (4, 5, 6)
    return 1, 2, 3, *res

def func():
    res = (4, 5, 6)
    yield 1, 2, 3, *res

Toutes les deux fonctions renvoyaient  des SyntaxError
Avec Python 3.8, ce truc a été corrigé et donc possible maintenant.

7. Syntax Warning

Python 3.8 permet de faire des alertes en cas d’erreurs de syntaxe dans certains cas.

Le code suivant:
data = [
    (1, 2, 3)  # absence de virgule
    (4, 5, 6)
]

Au lieu de générer l’erreur: TypeError: 'tuple' object is not callable qui est une horreur 😱🤯, vous avez maintenant une Syntax Warning qui vous dit que vous avez probablement oublié une virgule. C’est qui est beaucoup mieux pour le débogage.

Voilà c’est tout ce que j’avais à partager avec vous concernant les nouvelles fonctionnalités de Python. Je suis sûr que vous allez les adorer 😍. Pour ma part je ne les trouve pas très nombreuses mais je pense qu’elles sont supers utiles et arrivent au bon moment.

Pour plus de détail vous pouvez consulter la documentation de Python dans la partie Whatsnew ou bien le blog realpython


Merci à Elias Walyba sans qui cet article aurait été beaucoup moins sympa à lire !

mercredi 28 août 2019

La gestion du processus d'achat et l'entrée des produits en stocks.

Hello!

La semaine dernière je vous montrais comment gérer les dépendances, utiliser les variantes de produits et établir des liens entre modèles.

Pour rappel, cet article fait parti de la formation gratuite Odoo Traning que vous pouvez retrouver sur ce lien. Si vous êtes débutants, commencez par là!

Maintenant que le décors est planté, nous allons entrer dans le vif du sujet: gérer le processus d'achat et faire entrer nos livres dans le stock! Je vous laisse un petit secret: j'ai comme pour impression que ce tuto ne va nécessité aucune écriture de code :)

Commencez par démarrer votre instance Odoo et rassurez-vous d'avoir le module oo_library. Sinon, il est disponible à cette adresse.

Gestion du processus d'achat

Le principe est simple:

  1. Cliquer sur le menu Achats
  2. Ensuite sur le bouton créer situé dans le vue demande de prix




C'est quoi une demande de prix?

Comme mentionné sur la vue, la demande de prix ou devis contient l'histoire de la discussion/négociation que vous avez eue avec le fournisseur. Dès que c'est confirmé, une demande de devis est convertie en un ordre d'achat. La plupart des propositions d'ordres d'achat sont crées automatiquement par Odoo, basé sur les besoins de l'inventaire, notamment lorsque vous avez configuré les règles d'approvisionnement.

Ici, il faut noter que la demande de prix est fournie par le modèle purchase.order. 

Autres choses, n'oubliez pas ce que l'on c'est dit la semaine dernière: Vous faites un module personnalisé de gestion de bibliothèque, votre client ne doit faire aucune autre action. Il doit ouvrir son logiciel, aller sur son module et faire ses manipulations, ce qui veut dire qu'il doit normalement éditer sa demande de prix sur le menu MaLibrairie.

Pour ce faire, nous allons procéder comme la dernière fois c'est-à-dire faire apparaître le menu Demande de prix au niveau de MaLibrairie. Ceci dit, il suffit de créer un nouveau document XML qui contient ce code puis ajouter son chemin dans le fichier manifest.

Et donc, si jamais il arrive que vous ayez besoin d'ajouter ou modifier un champs, il suffira tout simplement de venir dans ce fichier, créer le record form view et hériter de la vue originale (XML ID: purchase.purchase_order_form)

Maintenant que tout est bon, on peut éditer notre demande de prix ou devis. Une fois le formulaire enregistré, vous pouvez alors Confirmer la commande (cliquer sur le bouton) et attendre que le fournisseur vous livre avant de réceptionner les articles dans votre stock (bouton Réception par article)

L'entrée des produits en stock

Nous passons alors dans le module stock (Menu Inventaire). 


Lorsque vous l'ouvrez, vous constatez qu'il y'a deux éléments principaux (Réceptions et Livraison) sur la page. Les réceptions vous indiquent qu'il y'a des produits en cours de réceptions (le fournisseur va les livrer) et les livraisons quant à elle indiquent les livraisons en cours que vous allez devoir écouler. 

Cependant, le seul élément qui nous intéresse pour le moment est Réceptions.

  1. En cliquant sur le bouton A recevoir, vous obtenez un vue liste qui vous présente une ligne de transfert incluant la référence, le fournisseur (partenaire), la date de la commande, le document d'origine et l'état du transfert. 
  2. Cliquez sur cette ligne: le formulaire de réception va s'ouvrir. Tous ce que vous aurez à faire sera de Valider (en cliquant sur le bouton) , puis Appliquer (en cliquant sur le bouton) et le tour est joué! Vous venez de faire entrer votre produit dans le stock.
  3. Le menu Mouvements de stocks (premier menu après Valorisation de l'inventaire) vous montre les mouvements qui se sont produits. En ouvrant le formulaire, vous pourrez même accéder à l'emplacement où est stocké votre produit comme le montre ces captures.




Avant de terminer je vais vous donner un petit exercice pour vous aider à assimiler ce que l'on a vu aujourd'hui:

  1. Afficher le menu Transferts en cours dans MaLibrairie. Ce menu doit afficher les transferts en cours
  2. Afficher le menu Emplacements dans MaLibrairie

La prochaine fois, nous ferons la gestion des abonnements

Sur ce, 
A+

mercredi 21 août 2019

Mise en place des fonctions d'acquisition de livres: gestion des dépendances, des variantes de produits et établissement de liens entre deux modèles

Bonjour et bienvenue!

Dernièrement je vous présentais comment implémenter les fonctionnalités de consultation des livres. En gros, il s'agissait d'écrire un modèle qui enregistre des livres et sur lequel on peut faire des éditions et des suppressions. Vous pouvez consulter l'article en question ici!

Si vous êtes débutant et venez tous juste de nous rejoindre, je vous invite plutôt à commencer ici!

OK! Aujourd'hui nous allons commencer la mise en place des fonctions d'acquisitions des livres. Pour vous permettre de comprendre, mettez-vous à la place d'un libraire qui, après avoir enregistrer les livres qu'il va vendre dans sa bibliothèque, décide maintenant de les acquérir. Pour ce faire, il doit enregistrer ses produits ou articles (livres), puis ses fournisseurs. Ensuite, il devra passez par un bon de commande pour passer sa commande auprès du fournisseur avant de les recevoir dans son stock.

Maintenant, et si je vous disais qu'actuellement, Odoo me permet de faire cette opération, sans aucune difficulté, comme ça de manière native? Et oui! c'est vrai. Rien qu'en installant les modules Achats (purchase) et Inventaire (stock), je peux le faire.

Vous allez me demander: mais pourquoi dois-je alors développer une telle fonctionnalité?

Et à moi de vous répondre:
  1. Vous faites un module personnalité de gestion de bibliothèque, votre client ne doit faire aucune autre action. Il doit ouvrir son logiciel, aller sur son module et faire ses manipulations.
  2. Vous faites une intégration ERP; et qui dit intégration ERP dit respect des procédures clients. Votre client vous demande de l'aider à exécuter les tâches qu'il fait tous les jours via son poste de travail.
  3. L'ergonomie et la personalisation. Odoo fait tout et vous devrez le personnaliser selon les besoins de votre client, rien de plus!
J'en profite alors pour vous dire ce qu'on fera dans ce tutoriel

  1. Permettre l'installation des modules Achats (purchase) et Inventaire (stock) lors de l'installation du module de gestion de librairie (oo_library)
  2. Joindre les  livres qui ont été enregistré aux articles (product.product). J'en profiterai pour vous expliquer la différence qu'il y'a entre les modèles product.product et product.template
Passons maintenant aux choses sérieuses

1. Comment installer les modules Achats (purchase) et Inventaire (stock) lors de l'installation de notre module?


C'est simple. Ouvrez le fichier __manifest__.py qui présente les caractéristiques du module (dans un dictionnaire Python). Vous verez qu'au niveau de la clé depends il y'a une liste comme ceci:

'depends': ['base', 'sale_management', 'purchase', 'stock'],

Cette liste est la liste des modules dont dépends notre module personnalisé. Par conséquent, tous ces modules sont installés lors de l'installation du module oo_library. Ici, vous verez les modules suivant:
  • base: le noyau d'odoo comportant les modèles avec res (res.users, res.partners, etc...), ainsi que plusieurs autres fonctionnalités (suppression, création, modification, import, export, impression, etc...) et l'affichage.
  • sale_management: pour la gestion des ventes
  • purchase: gestion des achats
  • stock: gestion de stock

2. Nous allons maintenant établir un lien entre les articles et les livres qui ont été enregistrés


Avant de continuer, notez d'abord cette différence entre les modèles product.product et product.template


  • le modèle product.product contient tous les articles stockables qu'on peut manipuler. Ces articles peuvent être attribués à des variantes: on dit qu'il liste les variantes du produit.
  • le modèle product.template lui, permet de contenir les informations qui sont identiques aux variantes.

En effet, il est possible sur Odoo de créer des variantes de produits. Par exemple le produit stylo contient des variantes stylo rouge et stylo bleu. Du coup, si vous créez un produit (Stylo) en utilisant la modèle product.template, le même produit (Stylo) sera créé au niveau du modèle product.product, vous permettant ainsi d'enregistrer les variantes rouges et bleues.


Comment activer les variantes de produits sur Odoo?

C'est simple: vous pouvez utiliser les variantes de produit dans Odoo en activant "Attributs et variantes" dans le menu Ventes / Configuration.




Ainsi, comme on peut avoir plusieurs versions (tome) d'un même livre, nous allons plutôt créer un product.template.

Dans le dossier views, créer le fichier oo_product_template.xml. Ici, oo représente les initiales de mon module et product_template représente le modèle sur lequel je vais travailler. 

Pour que votre code soit propre et facile à maintenir, optez toujours pour la méthode un modèle pour un fichier.

Le but de cette section est de faire apparaître le menu Articles présent dans Achats au niveau de MaLibrairie. Pour celà, nous allons faire un héritage de vues.

Comment hériter d'une vue sur Odoo?


Il faut tout d'abord être capable repérer le xml_id 


En effet, le xml_id est l'élément qui identifie un composant (action, menu, vue, etc...) sur Odoo. Par exemple, pour repérer le xml_id de l'action qui va ouvrir la formulaire des Articles, voici la procédure à suivre et il en est de même ou presque pour tous les autres composants.
  1. Activer le mode développeur
  2. Cliquer sur le menu en question (Menu Articles dans le modules Achats)
  3. Cliquer sur Ouvrir les outils de développement (il s'agit du petit insecte situé tout juste à côté de votre nom de profil à l'extrême droite)
  4. Cliquer sur modifier l'action et noter la valeur de ID Externe (c'est le xml_id de l'action: purchase.product_normal_action_puchased)


Maintenant on va récupérer le xml_id de la vue (l'ID de la vue formulaire du menu Articles)
  1. Cliquer sur le bouton create
  2. Cliquer sur Ouvrir les outils de développement 
  3. Cliquer sur Modifier la vue formulaire et noter la valeur de l'ID externe (product.product_template_only_form_view



On peut alors passer au code

Nous allons surcharger le modèle product.template (par héritage et faire le lien avec nos livres présents dans le modèle oo.consultation)



N'oubliez pas d'importer ce nouveau fichier dans le dossier models/__init__.py

from . import oo_product_template

Ensuite, nous allons surcharger la vue proprement dite et afficher le livre après le champs Catégorie




N'oubliez pas d'inclure le fichier dans __manifest__.py

'data': [
        'data/menu.xml',
        'views/oo_consultation_view.xml',
        'views/oo_product_template.xml'
    ],

Je vais m'arrêter ici pour aujourd'hui. Prenez la peine de mieux assimiler tout ce qui a été dis jusqu’à aujourd'hui et la prochaine fois nous allons continuez sur la gestion du processus d'achat et l'entrée des produits en stocks.

Découvrez le code source de ce module ainsi que d'autres modules ici

Sur ce, 
A+!

mercredi 14 août 2019

Quelques commandes utiles sous Git que chaque débutant doit connaitre

Hello! Aujourd'hui je vais vous parler de Git.

Git est le système de contrôle de version distribué (ou simplement l'outil de collaboration) le plus célèbre et le plus performant jusque là.

Dans cet article je partage avec vous une liste (non exhaustive) de commandes Git utiles. Ces commandes ont été initialement posté sur twitter par eliaswalyba.

En effet, Elias est un Senior AI/ML consultant et CoFounder DopeLab and @GalsenAI.
Vous pouvez le retrouver sur Twitter, GitHub, LinkedIn et YouTube (il y publie des tutoriels)

Maintenant, passons aux choses sérieuses!

INSTALLER GIT

Pour installer Git, rendez vous sur le site https://git-scm.com/downloads. Télécharger la distribution correspondante à votre système et installer la.

Sur Ubuntu ouvrez votre terminal et tapez

$ sudo apt install git

et le tour est joué. Vous avez Git installé

Dans la suite de cet article, toutes les commandes que je vous présente s’exécutent sur un terminal (cmd pour Windows). Ce pendant il existe des outils graphique qui vous permettent de manipuler Git. Mais pour un début je ne vous les conseille pas.

PREMIÈRES CONFIGURATION

Configurer les informations utilisateur pour tous les référentiels locaux

$ git config --global user.name "Votre nom"
Définit le nom que vous voulez attacher à vos transactions de commit

$ git config --global user.email "Votre adresse email"
Définit l'email que vous voulez attacher à vos transactions de commit

$ git config --global color.ui auto
Active la colorisation utile de la sortie en ligne de commande

CRÉER DES DÉPÔTS

Démarrer un nouveau référentiel ou en obtenir un à partir d'une URL existante

$ git init nom_du_projet
Crée un nouveau référentiel local avec le nom spécifié

$ git clone url
Télécharge un projet et l'historique de ses versions

FAIRE DES CHANGEMENTS

Vérifier les modifications et cré une transaction de validation

$ git status
Répertorie tous les fichiers nouveaux ou modifiés à valider

$ git add nom_du_fichier (ou . pour tout ajouter)
Capture instantanée du fichier en préparation

$ git reset [fichier]
Décompose le fichier mais conserve son contenu

$ git diff
Affiche les différences de fichier non encore mises en scène

$ git diff --staged
Affiche les différences de fichier entre le transfert et la dernière version du fichier

$ git commit -m "Une petite description de votre commit"
Enregistre les fichier de manière permanente dans l'historique des versions

REGROUPER DES CHANGEMENTS

Nommez une série de commits et combinez les efforts accomplis

$ git branch
Répertorie toutes les branches locales du référentiel actuel

$ git branch nom-branche
Cré une nouvelle branche

$ git checkout nom-branche
Bascule vers la branche spécifiée et met à jour le répertoire de travail

$ git merge nom-branche
Combine l’historique de la branche spécifiée dans la branche actuelle

$ git branch -d nom-branche
Supprime la branche spécifiée

MODIFICATIONS SUR LES FICHIERS

Déplacer et supprimer les fichiers versionnés

$ git rm nom_fichier
Supprime le fichier du répertoire de travail

$ git rm --cached nom_fichier
Supprime le fichier du contrôle de version mais conserve le fichier localement

$ git mv ancien_nom_fichier nouveau_nom_fichier
Change le nom du fichier et le prépare pour le commit

EXCLUSION DE FICHIER

Exclure les fichiers temporaires et les chemins

Pour exclure certains fichier (ne pas les traquer par Git)
Créez un fichier nommé .gitignore et mettez y tous les fichiers que vous voulez exclure.

$ git ls-files --other --ignored --exclude-standard
Répertorie tous les fichiers exclu dans ce projet

SAUVEGARDER DES FRAGMENTS DE FICHIERS

Doubler et restaurer les modifications incomplètes

$ git stash
Stocke temporairement tous les fichiers suivis modifiés

$ git stash list
Répertorie tous les changements cachés

$ git stash pop
Restaure les derniers fichiers cachés

$ git stash drop
Ignore le plus récent jeu de modifications stocké

VOIR L'HISTOIRE DE VOTRE PROJET

Parcourir et inspecter l'évolution des fichiers de projet

$ git log
Répertorie l'historique des versions de la branche actuelle

$ git log --follow nom_fichier
Répertorie l'historique des versions d'un fichier, renommage compris

$ git diff nom-branche-1 ... nom-branche-2
Affiche les différences de contenu entre deux branches

$ git show hash-du-commit
Affiche les métadonnées et les modifications de contenu du commit spécifié

REFAIRE DES COMMITS

Effacer les erreurs et l'historique des remplacements

$ git reset hash-du-commit
Annule tous les commits après [hash-du-commit], en préservant les modifications localement. Le hash-du-commit est un identifiant unique octroyé à chaque commit. Par exemple 793e57778a8e33ee61044a8255ee3b37368596a7 est un hash-du-commit

$ git reset --hard hash-du-commit
Ignore tout l'historique et rétablit le commit spécifié

SYNCHRONISER VOS CHANGEMENTS (SUR UN SERVEUR)

Enregistrer un signet de référentiel et échanger l'historique des versions

$ git fetch url
Télécharge tout l'historique du signet du référentiel

$ git push url nom-branche
Télécharge tous les commits des branches vers un serveur

$ git pull url nom-branche
Télécharge l'historique des signets et intègre les modifications

Voilà en gros quelque commandes de Git qu'Elias a publié sur son fil Twitter.

Après je ne retient pas toutes les commandes mais sur internet vous pouvez trouver plein de ressources pour apprendre à utiliser Git. C'est une technologie incontournable maintenant surtout dans le milieu professionnel et malheureusement on en parle jamais dans les universités / instituts de formations.

Enjoy !
A+!