Software developer

A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: “Excuse me, can you tell me where I am?”

The man below says: “Yes you’re in a hot air balloon, hovering 30 feet above this field.”

“You must be a software developer,” says the balloonist.

“I am,” replies the man. “How did you know?”

“Well,” says the balloonist, “everything you have told me is technically correct, but it’s of no use to anyone.”

The man below says, “You must work in business as a manager.” “I do,” replies the balloonist, “but how did you know?”

“Well,” says the man, “you don’t know where you are or where you are going, but you expect me to be able to help. You’re in the same position you were before we met but now it’s my fault.”

Source: Coding Horror

Développement logiciel sur plateforme Linux et Windows

Le domaine informatique a toujours été dominé par trois géants (du côté consommateur) : Linux, Windows et Macintosh. Les trois systèmes étant très différents, cela a toujours causé des complications aux programmeurs qui voulaient rendre leur code accessible à une plus grande population. Ainsi, ils devaient « porter » leurs codes vers une nouvelle plateforme, soit pour passer de Windows à Macintosh ou encore de Linux vers Windows par exemple. Afin de diminuer cette tâche qui se verrait devenir répétitive, ces développeurs ont eut l’idée de regrouper les ensembles de codes similaires afin d’en former des librairies qu’ils pourraient réutiliser pour accélérer le développement d’applications futures.

Avec l’ensemble des librairies qui ont été codés avec le temps (GTK, FTLK, Qt, wxWidgets, OpenGL, SDL, etc.), la majorité des plateformes informatiques ont commencés à devenir de plus en plus uniformes, permettant ainsi de déployer un même code sur plusieurs machines utilisant des systèmes d’opérations différents. On observe de plus la présence d’environnements de développement intégrés (EDI) multi-plateformes tel que Netbeans, Eclipse et Code::Blocks. Toutefois, il reste à déterminer quelle plateforme est la plus apte à permettre un développement qui sera rapide, efficace et de qualité. Afin de débattre de cette question, il est nécessaire d’évaluer certains aspects essentiels à la création d’un logiciel. Un logiciel peut être très facile à programmer mais être de piètre qualité en termes de performance (facilité de développement). Il peut être très long à programmer mais ne rien coûter (coûts reliées au développement). Les outils que les plateformes nous offrent peuvent être flexibles mais nécessiter une grande connaissance de ceux qui les emploient. Pour le développeur qui souhaite vendre son logiciel, il faut aussi connaître les diverses restrictions qui s’appliquent lorsqu’on emploi une librairie. Bref, il s’agit ici d’un ensemble d’aspects que nous aborderons afin de déterminer quelle plateforme entre Windows et Linux convient le mieux à un programmeur.

Pour lire l’ensemble du texte: Télécharger le PDF

Protected: La motivation

This post is password protected. To view it please enter your password below:


Getting things done

Objectif
J’écris ce message dans le but d’aider plusieurs d’entre mes amis qui semblent avoir des difficultés à se pousser à accomplir certaines tâches. Il s’agit ici d’une méthode élaborée par David Allen, l’auteur du livre Getting Things Done. GTD est une méthode simple qui a pour objectif de regrouper l’ensemble de ses tâches pour ensuite les sous-diviser en sous-tâches qui seront facilement accomplies. La méthode que je présente ici est tirée de cette méthode, mais plus spécifique aux tâches de nature

À prendre avec un grain de sel
Toutefois, je dois vous avertir. Bien que la méthode ait pour objectif de vous aider à focuser sur votre travail, il peut arriver que de la surutiliser puisse mener à une démotivation. En effet, si vous en venez à décortiquer vos tâches en une centaine de petites tâches, vous vous rendrez alors compte que vous en aurez pour un bon moment avant d’avoir fini. L’idée ici est simplement qu’il vous faudra être persistant et patient. Puisque vous avez un plan, vous serez donc en mesure de vous approcher peu à peu de votre objectif final. Il est sûr que ce n’est peu être pas aussi excitant que d’accomplir quelque chose d’un coup, mais si vous ne faite rien de tout vos petits moments passés à ne rien faire, vous pourriez accomplir pas mal de travail et être possiblement plus satisfait.

Ce que je tente de dire ici, c’est simplement qu’un gros projet ne s’accomplis pas de de lui même. Aussi, même si votre projet s’étale sur plusieurs jours/semaine/mois/années, et qu’il se complète, cela est déjà beaucoup mieux que de n’avoir jamais rien fait de son temps (je parle spécifiquement à ceux qui regardent trop facebook pour perdre leur temps ou encore youtube, mais pas ceux qui ont des objectifs spécifiques envers ceux-ci).

GTD, en gros
Bref, revenons sur le sujet. GTD est composé d’un ensemble d’étapes:

  1. Rassembler toutes les tâches qui doivent être accomplies
  2. Définir le type de tâches
  3. Former un plan d’action
  4. Agir (ou déléguer)

À la base, GTD s’applique sur des documents format papier. Il permet de définir ce qu’on doit faire pour toute “donnée”, que ce soit un chèque, une lettre d’un ami, le besoin d’acheter une lampe, un livre, des questions que l’on se pose, etc. Tout ce qui est dans notre tête et qui perturbe notre focus mental devrait être écrit sur une feuille de papier. Il est suggéré que d’écrire nos pensées sous forme papier libère l’esprit et je suis de cet avis. De cette manière, vous savez que vous avez un endroit où cette pensée ce trouve et vous serez en mesure de repasser dessus à un moment donné.

Passons donc à chacune des étapes et voyons ce qui doit être accompli.

Voici quelques aides-mémoire qui pourrons rapidement vous remémorer les quelques concepts imports de la méthode.

Rassembler toutes les tâches qui doivent être accomplies
Premièrement, il s’agit de mettre à un même endroit toutes les tâches qui doivent être résolues. Un endroit commun a pour objectif de permettre à notre esprit d’être à l’aise avec le fait que certaines pensées ne seront plus transportées avec nous à longueur de journée.

Commencez donc par faire une liste de toutes les tâches que vous avez à faire pour les prochains jours, puis les prochaines semaines et ainsi de suite. Par la suite, demandez vous quels sont les problèmes que vous avez actuellement et qui perturbent votre focus lorsque vous essayez de travailler. Finalement, regrouper toutes les lettres, textes, messages et autres sur lesquels vous devez poser une action (ou pas). On fait ça pour pouvoir ensuite passer à travers et déterminer ce qu’on doit faire de chacun des items.

Définir le type des tâches
Pour chacun des items que l’on a, on doit décider de quel type de tâche il s’agit. Est-ce un item qu’on doit éliminer? Garder pour être revue plus tard (on ne peut rien faire pour cette tâche actuellement) ou encore un item qui doit être gardé comme référence?

Si on peut s’en débarasser, alors on le jete et on ne se pose plus de question.
Si on doit le revoir plus tard, on le transfère dans la pile à être revue. Vous pouvez définir comment vous voulez revoir vos documents (chaque jours/mois/semaines/etc).
Si l’item est gardé comme référence, il faut s’assurer de bien le classer. Un document mal classé est l’équivalent de ne pas avoir de document et aussi bien l’avoir jeté.

Former un plan d’action
Pour chacune des tâches qui nécessite une action de votre part, vous pouvez définir un plan d’action. Il s’agit ici de lister les grands points de la tâche que vous aurez à accomplir. Dans mon cas, j’aime bien définir l’ensemble de la tâche à accomplir et si certains éléments sont à ajouter, je le fait au fur et à mesure. La méthode GTD elle, dit simplement de définir quel doit être la prochaine tâche que vous devez accomplir afin de faire avancer votre tâche.

Je préfère définir la tâche au complet car cela me permet de déceler les problèmes plus tôt et ainsi faire une planification. L’objectif est de me permettre d’optimiser ce que j’accomplis. Si je suis en mesure de définir un ensemble de tâche qui peut être accomplis d’un coup à un même endroit, alors je viens de me sauver beaucoup de temps. Un exemple grossier serait une personne qui fait une liste d’épicerie avant d’y aller. À l’opposé, ne pas faire une liste, et aller à l’épicerie, item par item, ne serait aucunement efficace. Bien que l’exemple soit bête, c’est un très bon exemple de compactage d’activités.

Agir (ou déléguer)
Avec votre prochaine action de définie, il ne vous reste plus qu’à faire celle-ci. Une tâche ne peut tristement pas s’accomplir par elle-même et il vous faudra donc mettre les efforts requis pour la mener à terme. En ayant suivi ces étapes, vous vous sentirez probablement un peu mieux de savoir que votre projet avance, même si ce n’est qu’à petit pas.

Dans mon cas, j’ai adopté cette mentalité surtout puisque j’ai remarqué que je perdais beaucoup de mon temps à ne rien “effectuer” du tout. Naviguer sur Internet de part et d’autre sans aucune raison, lire des articles sur l’informatique sans objectif précis, avoir des discussions sans but sont quelques uns des exemples de ce que je faisais. Et je ne suis pas fier de dire que c’était du temps bien employé.

Conclusion
Avec un peu de travail, même un 5 minutes par jour, on peut accomplir vraiment beaucoup de travail. Je crois qu’il vous faut voir à long terme, et arrêter de vouloir tout de suite. Par exemple, 5 minutes par jour pour apprendre une langue, ça représente 30h d’apprentissage par an. Ce n’est peut-être pas beaucoup, mais sachant qu’un enfant commence généralement à apprendre l’anglais vers la troisième année du primaire et à s’en servir tous les jours (écouter la télévision ou encore servir des clients anglais) vers le secondaire 5, ça fait presque 8 ans d’apprentissage, et donc 240h. Vous voyez, avec le temps, les choses peuvent prendre beaucoup d’envergure, enfin, seulement si on leur en donne.

Gérer facilement la mise à jour de son site

subversionTout développeur web sait qu’il peut être long et ennuyant de modifier les fichiers sur son serveur à distance afin de mettre les nouvelles versions de ceux-ci. Par FTP, la tâche peut être longue étant donné que le logiciel va lancer une commande FTP de suppression pour chaque fichier (si vous n’écrasez pas vos fichiers)… un peu long.

Voici ce que je vous propose. Premièrement, j’espère qu’en tant que développeur, vous avez appris à vous servir de SVN (Subversion). Il s’agit d’un simple outil qui vous permet de garder un historique de votre travail, et vous permet de revenir à des versions précédentes si nécessaire.

Bref, l’idée ici est simple. À l’aide de la commande svn export, nous pouvons mettre à jour de façon rapide notre version en production. Bien sûr, pour pouvoir faire cela, il faut avoir un accès SSH à son serveur, ce que tout utilisateur d’un service d’hébergement partagé (shared) n’aura probablement pas. Si toutefois, vous travaillez sur un serveur dédié, alors voici ce que vous pouvez faire:

1. En local, établissez une copie de travail de votre dépôt SVN (celui-ci peut être situé n’importe où). L’idée est que votre ordinateur local soit en mesure de faire fonctionner vos scripts (PHP dans mon cas). Je travail actuellement avec une VM avec Fedora d’installé, et pour modifier les fichiers, je peux soit travailler directement de la VM, ou encore via FTP directement. Dans mon cas, je préfère travailler par FTP sur mon Macintosh avec TextMate, mais chacun ses préférences.

2. Avec une copie locale, vous êtes en mesure de faire vos modifications. Lorsque vous êtes satisfait, vous faites un svn commit de vos fichiers pour qu’ils soient enregistrés dans votre dépôt SVN.

3. À présent, vous pouvez mettre votre copie de production à jour en une seule commande, soit svn export.

Afin de me simplifier la tâche, je me suis fait un petit script qui fait svn export avec l’url nécessaire et il ne me reste donc plus qu’à simplement appeler le script pour que la mise à jour soit effectuée. Ainsi, plus besoin de jouer avec son FTP pour tout changer, quelques commandes de console et le tour est joué. Dans mon cas, une mise à jour prend environ 10-15 secondes, pour 10 Mo, ce qui est excellent (le dépôt SVN se trouve sur le serveur de production).