mardi 11 novembre 2008

Réviser les notions de base

Dans le dernier billet de ma série Comment rester à jour pour les développeurs, j'aborde l'importance de bien maîtriser les notions de base.

On entend souvent qu'il est important de rester à jour par rapport aux nouveautés. C'est indéniable. Par contre, je trouve qu'on néglige parfois de s'assurer qu'on maîtrise toujours bien les aspects élémentaires pour un développeur. Avec le temps, certaines des notions de base se perdent à cause d'habitudes qu'on a prises dans le passé. On finit par faire certaines choses machinalement, sans trop se rappeler pourquoi.

On pourrait discuter longuement de plusieurs de ces notions de base, mais dans ce billet, je vais me concentrer sur deux aspects: les structures de données de bases, ainsi que les particularités des plates-formes de développement.

Structures de données de base


Les structures de données sont parmi les premières choses que les futurs développeurs apprennent dans les cours de Programmation 101! Et pour cause: ce sont les éléments de base pour le traitement de l'information.

Les structures de données élémentaires sont les tableaux, les tableaux dynamiques, les listes chaînées et les tables de hachage. Il y en a bien sûr plusieurs autres, mais ce sont les plus courantes. Pour chacune de ces structures, il est important de bien connaître leurs particularités respectives ainsi que de savoir dans quel contexte elles doivent être utilisées. Pour chacune des situations suivantes, essayer de déterminer laquelle des structures est la plus appropriée:

1. Vous devez faire des insertions à différents endroits de la structure.
2. Vous devez faire des accès directs à des éléments de la structure.
3. Vous devez conserver l'ordre des éléments dans la structure.
4. Vous devez associer chaque élément de la structure avec une clé.

Ces situations ne sont pas que théoriques. Ce sont des situations que les développeurs rencontrent fréquemment dans leur travail de tous les jours. Mais si on a pris l'habitude, par exemple, de toujours utiliser un tableau dans toutes les situations, il est clair qu'on utilise pas toujours le meilleur outil disponible.

Un tableau est une zone de mémoire continue et de taille fixe. Il est facile d'y récupérer directement un élément (#2). Le tableau dynamique est une structure semblable à un tableau, mais dans laquelle on peut insérer de nouveaux éléments, car la taille du tableau dynamique peut varier. La liste chaînée est une structure où chaque élément maintient un pointeur vers l'élément suivant (et précédent dans le cas d'une liste doublement chaînée). Il est aisé d'y insérer un élément à n'importe quel endroit de la structure, car il suffit seulement de changer les pointeurs (#1 et 3). Finalement, la table de hachage associe à chaque élément une clé unique qui permet de le récupérer sans parcourir la structure (#4).

La notation grand O, utilisée en théorie de la complexité, permet de définir un ordre de grandeur pour les opérations sur les structures de données.

Structure
Accès direct
Insertion/suppression à la fin
Insertion/suppression au milieu
Tableau
O(1)
n/a *
n/a *
Tableau dynamique
O(1)
O(1)
O(n)
Liste chaînée
O(n)
O(1)
O(1)
Table de hachage
O(1)n/a **
n/a **
(*) Dans un tableau, comme la taille est fixe, on ne peut faire d'insertion ou de suppression.
(**) Dans une table de hachage, c'est la structure qui gère l'emplacement des éléments.

La notation O(1) signifie que l'opération s'effectue en temps constant. La notation O(n) signifie que la performance de l'opération est proportionnelle au nombre d'éléments dans la structure. Ainsi, une opération en temps O(1) s'effectue plus rapidement qu'une opération en temps O(n). Bien sûr, pour des petits nombres d'éléments, c'est négligeable. Mais si vous devez gérer un grand nombre d'éléments, il est important d'avoir constamment ces notions à l'esprit.

En Java, la classe ArrayList est un tableau dynamique, la classe LinkedList est une liste doublement chaînée et la classe HashMap est une table de hachage. Il existe d'autres classes qui implémentent ces mêmes structures, mais ces classes sont très souvent utilisées.

Les particularités des plates-formes de développement


Que ce soit .NET, Ruby, Java ou une autre, chaque plate-forme de développement possède ses particularités que tous les développeurs travaillant avec elles doivent bien connaître. Ces particularités sont souvent là pour des raisons toutes à fait uniques à la plate-forme, mais elles sont très importantes à connaître pour être efficace. Souvent, ces particularités imposent des façons de travailler qui deviennent finalement des habitudes. Et après, on peut finir par oublier pourquoi on a ses habitudes. D'où l'importance de s'assurer de réviser au besoin le détail de ces particularités.

Par exemple, pour la plate-forme Java, vérifier si vous comprenez les particularités suivantes:

* Quelle est la différence entre une exception déclarée (checked exception) et une exception à l'exécution (runtime exception)?
* Pourquoi les méthodes destroy, resume, stop et suspend de la classe Thread ont-elles été marquées comme désuètes (deprecated), c'est-à-dire qu'on doit éviter de les utiliser?
* Pourquoi ne peut-on pas hériter de la classe String et qu'est-ce que cela a comme conséquence?
* Quelle est la différence entre les classes Hashtable et HashMap ou entre Vector et ArrayList?
* Dans quels cas doit-on définir les méthodes equals et hashCode pour un Java Bean?

L'important, ce n'est pas nécessairement de connaître dans le détail absolu ces particularités, mais d'en savoir assez pour faire de bons choix.

Il est donc important de prendre du temps pour réviser les notions de base. Il faut éviter de faire des choses seulement par habitude. Il suffit parfois seulement de quelques minutes sur Google pour réviser et rester à jour!

mardi 4 novembre 2008

La réalité est-elle toujours calculable?

Je suis en train de lire le numéro de juillet de Science & Vie et j'ai trouvé très intéressant l'article "Ce qu'on ne peut calculer est-il encore réel?'. Cet article rapporte un article du physicien Scott Aaronson qui postule que si un modèle proposé pour expliquer un phénomène naturel ne peut être calculé dans un délai "raisonnable" par un ordinateur, c'est qu'il est forcément faux!

Par exemple, en biologie, on explique le fonctionnement des protéines en proposant un modèle où elles se configurent de façon aléatoire avant de s'arrêter à une configuration stable (je suis loin d'être un connaisseur!). Selon Aaronson, ce modèle est invraisemblable car même un hypothétique ordinateur quantique ne pourrait reproduire ce modèle à cause du trop grand nombre de combinaisons à effectuer.

Cet article fait référence à plusieurs notions de la théorie de la complexité. Un bon rappel de ces notions peut être trouvé sur le site du cours INF 6460.

jeudi 30 octobre 2008

La Révolution Wikipédia


Comme beaucoup, je consulte Wikipédia régulièrement. Je suis fasciné par ce que des personnes d'un peu partout dans le monde et de façon tout à fait bénévole ont pu accomplir! Par contre, certaines personnes soulèvent la question à savoir si on peut vraiment considérer Wikipédia comme une source fiable d'information. Comment peut-on se fier à une encyclopédie où tout un chacun peut à volonté changer n'importe quoi? C'est la question que se sont posées 5 étudiants français dans le cadre de leur dernière année d'études en journalisme. Ils ont publié les résultats de leur recherche dans le livre La Révolution Wikipédia.

Le livre débute par la préface d'un de leur professeur à L'École de journalisme de Sciences-Po à Paris, Pierre Assouline. Le moins que l'on puisse dire, c'est que ce professeur ne porte pas Wikipédia dans son coeur! Ce dernier explique comment toute une nouvelle génération d'étudiants consulte et cite Wikipédia sans prendre la peine de valider à d'autres sources l'information qu'ils y puisent. Ce professeur reproche aussi à Wikipédia d'être un outil de désinformation, car plusieurs groupes de personnes avec des intentions douteuses peuvent utiliser l'encyclopédie en ligne pour y diffuser leur message.

Les 5 étudiants portent un jugement plus équilibré sur Wikipédia. Ils commencent par nous rappeler la fameuse étude de la revue Nature où, en 2005, cette dernière publiait que Wikipédia est aussi fiable que la vénérable encyclopédie Britannica! Plusieurs personnes ont utilisé (et encore beaucoup aujourd'hui) cette étude pour affirmer que Wikipédia a passé le test de la fiabilité et qu'on peut maintenant s'attendre à la mort prochaine des encyclopédies classiques! Ces étudiants nous montrent que c'est une conclusion tout à fait erronée. Ils prennent le temps de décortiquer la méthodologie de Nature pour cette fameuse étude pour nous faire voir qu'en réalité, l'étude prouve plutôt que Wikipédia est moins fiable que Britannica!

On nous explique ensuite les mécanismes que Wikipédia utilise pour s'assurer de la qualité des articles qu'elle contient. Tout en reconnaissant que ces mécanismes ont bien fonctionné jusqu'à maintenant, les auteurs expliquent que ceux-ci sont beaucoup plus efficaces sur des sujets où il y a peu de controverses, comme les mathématiques, la physique ou l'informatique. Par contre, avec des sujets historiques, politiques ou religieux, c'est beaucoup moins efficace. Les consensus sont souvent difficiles à établir, ce qui oblige souvent les administrateurs de l'encyclopédie à intervenir.

À la fin, ces étudiants nous amènent à réaliser ceci: de toute façon, Wikipédia est là pour rester. Ce qu'il faut, c'est apprendre à s'en servir de façon intelligente. L'esprit critique reste encore et toujours une qualité indispensable pour utiliser cette nouvelle source d'information. Les étudiants (et les autres aussi) doivent absolument prendre le temps d'aller à d'autres sources pour comparer. Ils conseillent également de prendre le temps d'apprendre à contribuer à Wikipédia pour mieux comprendre son fonctionnement et l'enrichir!

Je considère donc ce livre comme un bon rappel. Loin de nous décourager à consulter la célèbre encyclopédie, il nous incite simplement à la prudence, ce qui est toujours un bon conseil!

samedi 18 octobre 2008

Wikinomics

Le livre Wikinomics: How Mass Collaboration Changes Everything explique en quoi les nouvelles technologies de l'information bouleversent la façon de gérer une entreprise. Selon les auteurs, nous vivons une époque charnière. Internet a complètement changé la façon dont les gens communiquent entre eux. L'information circule plus rapidement que jamais. Mais la tendance la plus révolutionnaire, c'est le pouvoir que ces nouvelles technologies de l'information donnent aux gens ordinaires. Aujourd'hui, les gens peuvent produire eux-mêmes l'information. Plusieurs de ces personnes créatrices d'information se réunissent en communauté. Et ces communautés font trembler mêmes les plus grandes et puissantes entreprises. Car là où ses compagnies régnaient autrefois en maître absolu, ces nouvelles communautés y prennent de plus en plus d'espace. De plus, la nouvelle génération, qui maîtrise ces nouvelles technologies comme les précédentes ont maîtrisé la télévision, va faire accélérer ces tendances.

Ce livre est donc une sorte de mise en garde pour les entreprises: coopérer ou périr. Selon les auteurs, les entreprises qui auront le plus de succès dans l'avenir seront celles qui sauront coopérer avec diverses communautés et exploiter leur potentiel. Le livre s'ouvre sur l'exemple de Goldcorp, une petite compagnie minière de l'Ontario. Cette dernière était dans une impasse: elle n'était plus en mesure de trouver de l'or dans sa mine de Red Lake dans le nord de l'Ontario. Pourtant ses géologues avaient plusieurs indices leur indiquant que d'importante quantité d'or devait encore s'y trouver. Mais voilà, après plusieurs millions investis, aucun résultat probant. La compagnie était au bord de la crise. Le nouveau CEO de l'entreprise prit alors une décision tout à fait inusitée: il demanda aux géologues de l'entreprises de mettre toutes les données à propos de la mine disponible sur Internet en offrant à ceux qui pourraient les aider à trouver l'or une récompense de 575 000$. Ils reçurent des idées de divers groupes de personnes: géologues bien sûr, mais aussi mathématiciens, physiciens, militaires, étudiants et informaticiens. Plusieurs de ces idées étaient tout à fait novatrices. Résulat: l'or fut trouvé. Et Goldcorp est passé d'une entreprise valant environ 100 millions à une valant aujourd'hui 9 milliards de dollars. Et la mine de Red Lake produit toujours.

Le coeur du livre contient sept façons dont les entreprises peuvent tirer profit de ces nouveaux outils de communication et ces nouvelles communautés d'utilisateurs. Les entreprises qui sauront exploiter ces nouvelles réalités seront les mieux placées pour réussir dans les années à venir.

D'après les auteurs, même les travailleurs vont être touchés par ces changements. Ces derniers devront être polyvalents, prêts à collaborer avec des ressources à l'extérieur de l'entreprise et surtout, savoir utiliser les nouveaux outils de collaboration.

Donc, un livre très intéressant détaillé avec beaucoup de faits vécus et de statistiques révélatrices. Je le recommande à ceux qui s'intéressent au mariage de l'économie et des nouvelles technologies.

samedi 4 octobre 2008

Apprendre en s'amusant!

La meilleure façon d'apprendre un nouveau langage de programmation ou pour se perfectionner est de se pratiquer. Mais voilà, souvent (dans mon cas), ce n'est pas toujours évident de trouver des idées de bout de code à écrire assez diversifiées pour être vraiment efficace pour apprendre. J'ai remarqué que de se tourner vers des problèmes à résoudre est souvent une bonne façon de s'y prendre.

Au cours des dernières années, je me suis amusé à résoudre des problèmes provenant principalement de deux sites: Ruby Quiz et Project Euler. Le premier, comme son nom l'indique, est constitué de problèmes surtout de programmation avec des solutions en Ruby. Mais rien n'empêche de les résoudre en utilisant un autre langage! L'auteur du site a même fait un livre avec certains des meilleurs problèmes. Le deuxième contient surtout des problèmes de maths. Un problème est soumis et pour prouver qu'on l'a résolu, on doit fournir la réponse (souvent numérique) au problème. Une fois résolu, on a accès à un forum dédié au problème où d'autres soumettent et discutent les différentes solutions. On peut utiliser le langage de son choix. Voici quelques problèmes que j'ai trouvé intéressants à résoudre:
Je vous invite à parcourir la liste des problèmes de ces deux sites. Vous y trouverez sûrement des problèmes intéressants.

Connaissez-vous d'autres sites intéressants où des problèmes semblables sont soumis?

samedi 27 septembre 2008

The Productive Programmer

Comme je vous en avais parlé dans un précédent billet, j'ai lu le livre The Productive Programmer de Neal Ford.

Ce livre est le fruit de l'expérience pratique de l'auteur. Il nous révèle ses trucs et astuces pour devenir un programmeur productif.

Son livre est divisé en deux parties. La première traite des différents outils à la disposition des programmeurs pour effectuer leur travail. Pour l'auteur, un programmeur productif utilise toujours le meilleur outil possible pour la tâche à accomplir. Il rappelle l'importance de trouver des outils nous permettant d'automatiser les tâches répétitives car ces dernières sont souvent, à la longue, celles qui font perdre le plus de temps et qui sont la cause de beaucoup d'erreurs d'inattention. Vous devez interagir avec votre système d'exploitation? Développez des scripts Bash ou Power Shell. Vous devez manipuler des fichiers? Utilisez un langage dynamique comme Ruby ou Groovy. Vous devez rechercher du texte dans des fichiers de log? Apprenez à maîtriser les expressions régulières. Avec de nombreux exemples, Ford nous démontre les avantages à utiliser ces outils.

Il prend le temps de partager certains des outils qu'il utilise pour lui permettre de travailler plus rapidement: presse-papiers multiple, éditeurs textes, engins de recherche, bureaux virtuels et autres.

Dans la deuxième partie du livre, l'auteur s'attarde aux bonnes pratiques de développement logiciel qu'un programmeur productif doit maîtriser. Cette section couvre assez sommairement une grande quantité de pratiques: les tests unitaires, l'analyse statique du code, la méta-programmation et j'en passe! Chaque chapitre de cette deuxième partie est un condensé des avantages de chacune de ces bonnes pratiques. C'est évident que, comme chacune de ses pratiques ont des livres entiers qui leur sont consacrées, vous devrez voir ailleurs pour des approfondissements. Mais ces chapitres constituent tout de même une bonne introduction (ou un bon rappel). J'ai beaucoup aimé le chapitre consacré aux programmeurs polyglottes.

L'auteur nous encourage à visiter le site du livre, où il compte continuer d'ajouter d'autres façons d'être des programmeurs productifs!

samedi 20 septembre 2008

La pratique pour rester à jour

Les expérimentations avec certaines technologies permettent d'aller chercher une connaissance pratique. Évidemment, ça ne peut remplacer dans votre cv une véritable expérience de travail. Mais ces connaissances vont vous permettre d'être compétitifs par rapport à d'autres développeurs qui n'ont pas pris le temps d'expérimenter avec ces technologies. Dans d'autres cas, elles vous permettent de découvrir de nouveaux outils ou de nouvelles méthodes qui servent à vous rendre plus efficaces dans vos tâches quotidiennes.


Tutoriels

Les tutoriels sont intéressants car ils permettent rapidement d'aborder une technologie sans investir (habituellement) beaucoup de temps. Beaucoup peuvent se compléter en une heure ou deux. Et ce qui est bien, c'est que la plupart sautent rapidement de la théorie à la pratique. En suivant les instructions, on est amené à jouer avec la technologie, ce qui est souvent plus motivant que de lire un long exposé théorique. Un autre avantage non négligeable: la très grande majorité des tutoriels sont gratuits!

En voici quelques uns que j'ai récemment lus:


Livres d'introduction

Comme mentionné dans un précédent billet de cette série, beaucoup de livres sont des introductions à une technologie. Bien que je trouve que ce genre de livre est rapidement désuet, ils sont souvent plus détaillés et vont plus loin qu'un simple tutoriel. Comme les tutoriels, ces livres vont rapidement à la pratique. La meilleure façon d'en profiter est de faire les exercices à mesure qu'on en fait la lecture. Certains vont apprécier pouvoir retourner plus tard feuilleter ces livres pour se replonger dans une technologie. Et si le livre aborde une technologie (ou une version d'une technologie) plus ancienne, on peut souvent avoir ces livres à rabais.

Quelques livres d'introduction intéressants:


Cours en ligne

Un nouveau phénomène intéressant pour apprendre de nouvelles technologies ou méthodologies est que plusieurs universités mettent en ligne le contenu de certains cours. On peut ainsi “suivre” le cours, comme si on y était inscrit! J'aime beaucoup l'approche d'un cours. Quelqu'un a fait l'effort d'approfondir un sujet, d'en dégager des points importants et de nous proposer un cheminement pour le comprendre. Si on réussit à se procurer le manuel du cours et si on prend le temps de faire les exercices on peut en retirer beaucoup.

Quelques cours que j'ai commencé à "suivre":


Langage de programmation

Le livre Pragmatic Programmer conseille d'apprendre un nouveau langage de programmation par année! Et ce n'est certainement pas le choix qui manque. Tous les ans, de nouveaux langages font leur apparition. Et c'est sans parler de tous ces vieux langages toujours utilisés par beaucoup de développeurs mais ignorés par la grande majorité. Au cours des dernières années, les langages dynamiques attirent beaucoup l'attention. Que ce soit Ruby, Groovy ou Python tous ces langages possèdent une quantité impressionnante de documentation pour vous permettre de devenir familier avec eux.

Pourquoi ce conseil d'apprendre un nouveau langage par année? Il est très probable que beaucoup de ces langages ne deviendront pas le prochain Java ou C#. Mais la raison est que de connaître de nouveaux langages vous exposent à de nouvelles façons de régler les problèmes que celles typiquement proposées par le langage que vous utilisez régulièrement. Découvrir ces nouvelles façons de faire vous rendent plus efficaces car vous aurez une vision plus large de ces problèmes. De plus, vous pourrez utiliser ces autres langages pour certaines de vos tâches secondaires. Par exemple, pourquoi ne pas utiliser Groovy pour écrire vos tests unitaires? Ruby pour manipuler ces gros fichiers de logs? PHP pour vous bâtir une application web de test? Beaucoup de ces langages excellent à ces tâches pour lesquelles ont perd souvent un temps fou en s'obstinant à utiliser le langage dans lequel on est familier mais souvent moins adapté. Selon beaucoup, comme Neal Ford et Ola Bini, l'avenir est aux programmeurs “polyglottes” qui seront capables d'utiliser simultanément plusieurs langages à la fois. L'avenir nous dira s'ils ont raison!

Faites-nous part de vos suggestions et expériences pour pratiquer avec les nouvelles technologies!

vendredi 12 septembre 2008

Rencontres de développeurs

Dans cet autre billet de ma série Comment rester à jour pour les développeurs, j'aborde la question des rencontres organisées pour les développeurs.

Les rencontres organisées pour la présentation de nouvelles technologies sont souvent bien intéressantes pour rester à jour. Elles permettent de rencontrer d'autres développeurs. En prenant le temps de leur parler, ou seulement en écoutant les conversations, on peut découvrir quelles technologies ou méthodologies les autres développeurs de notre région utilisent. Ça aide à savoir où on se situe dans nos connaissances et pratiques par rapport au marché.

On peut aussi avoir l'occasion de rencontrer des développeurs réputés. Lors d'une rencontre du GUJMTL, Neal Ford est venu faire une présentation sur comment améliorer son écriture de code. Ça avait été très intéressant!

Les présentations elles-mêmes permettent de découvrir rapidement de nouvelles technologies. Certains diront que souvent, un bon livre ou un tutoriel sur le web pour remplacer ce genre de présentation. Ce n'est pas faux. Mais le fait d'entendre comment d'autres utilisent une technologie peut être utile. On peut aussi poser des questions de vive voix.

Également, si vous avez envie de faire découvrir des technologies aux autres, ces groupes sont très ouverts à laisser de nouveaux présentateurs se lancer. Ça peut être une excellente façon de parfaire vos talents d'orateurs!

Dans la région de Montréal, pour un développeur Java, il y a le GUJMTL. Il y a aussi, pour ceux qui s'intéressent aux développement web avec Ruby On Rails, le groupe Montreal On Rails, qui se réunit régulièrement depuis 1 an. Leur prochaine rencontre aura lieu mardi prochain et portera sur les outils ruby autres que Rails.

MISE À JOUR: j'ai trouvé un groupe pour les développeurs Python.

Connaissez-vous d'autres groupes de développeurs dans la grande région de Montréal?

dimanche 7 septembre 2008

Lectures de développeurs


Il existe plusieurs sortes de livres disponibles pour les développeurs. Il y a les livres de référence très proche d'une version en particulier d'un logiciel ou d'un api. Il y a les livres tutoriels qui prennent la peine de vous expliquer étape par étape comment utiliser une technologie. Il y a les livres d'introduction qui brossent un portrait global d'une technologie.

On peut lire ces types de livres assez rapidement. Il faut se rappeler que ce ne sont pas des romans. Il n'y a rien de mal à sauter des chapitres qui nous semblent moins pertients.

Enfin, il y a les livres que j'appelle les livres de "principes". Ils ont pour but d'expliquer les bonnes pratiques à l'utilisation d'une technologie ou de certains aspects du métier de développeur. Cette catégorie de livre est ma préférée et celle parmi lequel je crois que vous devriez vous attardez davantage. Contrairement aux autres livres où après une lecture on n'a plus vraiment intérêt à y revenir (à part bien sûr les livres de référence), ces livres peuvent être relus sans problème. De plus, ils demeurent pertinents beaucoup plus longtemps. Quelques exemples classiques: Design Patterns, The Pragmatic Programmer (un de mes préférés), Code Complete, Effective Java, Expert One-On-One J2EE Development Without Ejb (le livre qui a fait découvrir Spring), Refactoring et plusieurs autres. Vous êtez invités à me rapporter vos classiques favoris dans les commentaires de ce billet.

Ces livres sont ceux qui vont le plus influencer votre pratique du métier! Ce sont eux qui vont vous permettre de vous tenir à jour au niveau des bonnes pratiques.

Où trouver les livres?

Il est évident que la façon la plus simple de se procurer les livres est d'aller en librarie, soit avec pignon sur rue ou en ligne. Mais le prix pour se procurer plusieurs ouvrages grimpe très rapidement. Il existe quelques façons de trouver de bons livres sans débourser autant. Les librairies en ligne comme Amazon et Chapters offrent la possibilité d'acheter des livres usagés, ce qui permet d'économiser beaucoup. De plus, Amazon ne fait pas payer la taxe dans le cas des livres usagés. J'aime bien aussi le site Lulu, qui permet aux auteurs de vous offrir leurs livres pour souvent bien moins chers.

La bonne vieille bibliothèque est aussi un bon endroit. Les bibliothèques de petites municipalités n'ont souvent pas un choix intéressant. Par contre, si vous habitez à Montréal ou y allez souvent, la Grande Bibliothèque est tout indiquée. J'y vais régulièrement et je suis toujours surpris de voir la grande quantité de livre d'informatique disponible. C'est vrai que vous n'y trouverez probablement pas les livres du mois, mais on y retrouve plusieurs livres qui ont de six mois à un an.

Déterminer si ce livre est un bon achat

Il est frustrant de se retrouver avec un navet, surtout quand on a payé le gros prix. La façon que je préfère pour déterminer si un livre en vaut la peine est d'aller lire les critiques d'autres lecteurs sur Amazon. Il est mieux d'aller lire les critiques sur amazon.com même si vous achetez du site amazon.ca car il y a beaucoup plus de gens qui écrivent des critiques sur le site américain. Pour les livres en français, faites un tour sur amazon.fr. Ne regardez pas seulement le nombre d'étoiles. Prenez le temps de lire les critiques pour vous donner une idée du contenu et des forces et faiblesses rapportés par les lecteurs.

Une autre façon de déterminer si un livre est intéressant est de faire le tour des blogs d'autres développeurs qui prennent le temps de faire des recommandations de livres. Par exemple, cette semaine j'ai lu un billet favorable à propos du livre Behind Closed Doors: Secrets of Great Management qui a piqué mon intérêt.

Aussi, n'oubliez-pas que la plupart des grands éditeurs offrent des chapitres gratuits sur le web. Ça donne une bonne idée du ton du livre. On peut retrouver facilement ces chapitres gratuits à l'aide du site PDFoo.

Il est important pour les développeurs de prendre le temps de lire quelques livres reliés aux technologies. Peu importe le domaine d'expertise, il y a sûrement une bonne quantité de livre disponible pour se perfectionner. Ça peut être aussi une façon de se familiariser avec des technologies un peu à l'écart de son domaine d'expertise. Les livres permettent souvent d'aller plus loin que la lecture d'articles pour la compréhension d'une technologie.

Cette semaine je débute la lecture de The Productive Programmer de Neal Ford. Je vous en donne des nouvelles une fois achevée.

Bonne lecture!

mercredi 3 septembre 2008

Les éclaireurs

Mon premier billet de la série Comment rester à jour va porter sur mes méthodes pour faire de la veille technologique. Qui sont mes éclaireurs?

Dzone

Le site dzone me permet rapidement de prendre le poul de l'actualité et des dernières tendances dans le monde du développement. Je peux constater l'arrivée de nouveaux frameworks, de nouvelles librairies et des derniers acronymes! Je prends le temps de lire certains articles soumis, mais généralement, je fais seulement passer par dessus les titres. Si je constate qu'un sujet revient régulièrement et que j'ignore en grande partie de quoi il s'agit, je m'efforce de l'approfondir un peu. Je commence généralement par faire un tour sur Wikipedia voir de quoi il retourne, puis je vais sur les sites principaux en rapport avec le sujet. Je retourne ensuite sur dzone lire un ou deux articles sur le sujet. Il se peut que je lise certains articles en diagonale, mon objectif à ce stade est de construire une connaissance générale du sujet, pas de devenir un expert.

La blogosphère

Je surveille les blogs de quelques développeurs réputés. J'aime bien suivre ce genre de blogs car l'aspect plus personnel qui s'en dégage m'aide à faire des rapprochements avec mon quotidien de développeur.

Voici quelques-uns des développeurs que je lis fréquemment:

  • Charles Nutter: développeur principal de JRuby chez Sun

  • Ola Bini: consultant chez ThoughtWorks , très technique, mais bien expliqué et varié

  • Neal Ford: autre consultant ThoughtWorks , un touche-à-tout et excellent communicateur

  • Jeff Atwood: développeur .NET, très sharp

  • Neal Gafter: un gourou Java, anciennement de Sun mais maintenant chez Google. Il est derrière BGGA, une des spécifications proposées pour intégrer les closures dans java 7

Votre sélection variera selon vos domaines d'expertises. Dans mon cas, comme vous le remarquez, la mienne contient principalement des blogs de développeurs Java.

Je considère ces développeurs parmi les meilleurs dans mon domaine: leur avis et opinions sont souvent de bons indicateurs des bonnes pratiques et technologies que les développeurs devraient au minimum connaître. Ces développeurs m'ont particulièrement aidé à non seulement rester à jour en apprenant à connaître les nouveautés, mais aussi en m'assurant que je maîtrise toujours bien les connaissances de base que tout bon développeur doit bien comprendre (cet aspect fera l'objet d'un futur billet dans cette série). Cela dit, il m'est très fréquent de lire certains de leurs billets en diagonale si je les juge moins pertinents pour moi. L'important est de dégager ce que je peux apprendre d'eux pour rester à jour, pas de lire religieusement tous leurs billets.

Fils RSS

Un outil particulièrement utile pour faire de la veille sans perdre un temps fou à visiter chaque site individuellement est un bon lecteur rss. Tous les sites et blogs que je surveille offrent un fils rss qui permet à ces logiciels d'aller récupérer automatiquement les derniers billets de chacun d'eux et de les afficher dans l'interface du logiciel. Ça permet de sauver un temps fou. Il existe plusieurs logiciels qui font ce travail. Celui que j'utilise est Google Reader. Pourquoi? Il est accessible en ligne. Donc pas de perte de temps à chaque fois que je change d'ordinateur à reconfigurer tous les nouveaux fils ajoutés sur une autre machine. Google Reader permet d'organiser chaque fils en groupe par un système de tags. Il permet de mettre une étoile à certains billets pour permettre de les retrouver facilement.

Derniers conseils

Un conseil à l'utilisation d'un lecteur rss: faites régulièrement le ménage parmi les fils que vous suivez. S'il y en a que vous ne trouvez plus pertinents, soyez prompts à les supprimer. Essayer de suivre trop de fils à la fois devient nuisible car vous risquez de vous décourager.

Un autre conseil plus général au sujet de la lecture d'articles et de billets en ligne: n'hésitez-pas à interrompre la lecture de l'un d'entre eux si vous n'y voyez pas d'intérêt. Combattez la tendance à vouloir lire jusqu'au bout pour rien. Vous épargnerez ainsi temps et énergie.

Finalement, il faut essayer de se fixer un moment précis et un temps limité pour faire de la veille. Par exemple, une heure le mercredi soir et une autre le samedi matin. N'en faites pas trop à la fois, vous n'en retirerez pas grand-chose.

Et vous, quelles méthodes utilisez-vous pour faire votre veille?

dimanche 31 août 2008

Le défi du développeur: rester à jour

Le métier de développeur de logiciels n'est pas de tout repos! Une petite visite sur dzone.com, codeproject.com, devx.com et autres site du genre nous rapporte à toutes les heures les dernières nouveautés en fait de frameworks, librairies, méthodologies, patterns, logiciels et autres! Il y a toujours une nouvelle technologie qu'on suggère aux développeurs de maîtriser. Tout un défi!

Il est important pour les développeurs de prendre des moyens pour rester à jour. Avec la rapidité avec laquelle de nouvelles technologies arrivent, un développeur court le risque de devenir dépassé. Certains diront que tant qu'on est efficace dans son travail de tous les jours, on n'a pas à se soucier de rester à jour avec d'autres technologies. Je ne suis pas d'accord avec cette affirmation. C'est évident qu'un développeur doit se concentrer en premier lieu à maîtriser les technologies qu'il utilise régulièrement. Mais aller au-delà est important pour rester pertinent. En tant que développeur, on est souvent amené à donner notre avis d'expert sur les nouvelles technologies et comment elles pourraient être utiles pour l'entreprise qui nous emploie. Si un développeur n'est pas au fait des nouveautés, il risque fort de donner des conseils dépassés ou même de mauvais conseils.

Il est évident que je ne parle pas d'être un expert dans toutes les nouvelles technologies. C'est sûrement impossible. Mais un développeur doit être capable d'expliquer, dans ses mots, ce que la technologie ABC est et en quoi elle diffère de XYZ. Et dans certains cas, il doit être capable d'utiliser ces nouvelles technologies.

Par contre, plusieurs développeurs ont un temps limité à consacrer à se tenir à jour. Ils doivent donc être efficaces et méthodiques. Il faut aussi éviter de couvrir trop large lorsque vient le temps de choisir quelle technologie approfondir.

J'ai donc décidé de commencer une série de billets sur le thème Comment rester à jour. J'y aborderai les méthodes que j'utilise pour me tenir à jour ainsi que celles suggérées par d'autres développeurs expérimentés. Je discuterai des avantages et inconvénients de ces différentes méthodes. Comme je suis un développeur Java, plusieurs aspects vont toucher plus spécifiquement ce domaine, mais les principes s'appliqueront pour la grande majorité des développeurs.

La série:
  1. Faire de la veille technologique - comment je m'y prends en tant que développeur
  2. Lire de bons livres - mes recommandations de lecture
  3. Assister à des rencontres - l'intérêt d'assister aux rencontres organisées pour les développeurs
  4. Faire des expérimentations - rester à jour par la pratique
  5. Réviser les notions de base - l'importance de réviser
Vos commentaires et suggestions sont évidemment les bienvenues!

dimanche 24 août 2008

Zach & Wiki

Je viens de compléter le jeu Zach & Wiki de Capcom. Et je dois dire que j'ai adoré chaque minute passée à jouer ce jeu!

Voilà un jeu qui sort de l'ordinaire! Rappelant les vieux jeux point-and-click des années 90 (Zak McKracken, Maniac Mansion ou Grim Fandango), Zach & Wiki réussi le tour de force d'utiliser la télécommande de la Wii d'une façon tout à fait intuitive et originale.

Un jeune pirate nommé Zach part à la recherche du légendaire trésor du pirate Barbaros. Il est accompagné de son ami Wiki, une espèce de singe volant qui se transforme en cloche que Zach peut utiliser pour transformer animaux et personnages en des objets utiles pour sa quête. Leur aventure les transportera à travers la jungle, des volcans, des palais de glaces, des maisons hantées et même dans l'espace! Le jeu a beaucoup d'humour et les personnes sont plus cocasses les uns que les autres.

Le déroulement du jeu est simple: chaque niveau vous demande de réussir à atteindre le coffre. Pour y arriver, vous devrez résoudre différentes énigmes du genre déplacer un bloc pour atteindre un levier qui ouvre un chemin qui etc, etc! C'est souvent simple, mais toujours amusant. Par contre, pour certains niveaux où la solution ne vous sera pas évidente au premier coup d'oeil, vous aurez probablement à recommencer à quelques reprises du début le même niveau. Ça peut parfois être agaçant.

Côté graphisme, le jeu est excellent. Utilisant la technique du cel-shading, ce jeu m'a rappelé Zelda: Windwaker. Les décors aux couleurs vives sont très bien réussis.

La télécommande de la Wii sert à la base à pointer et cliquer dans l'environnement, comme dans tous bons jeux du genre (comme une souris). Mais en plus, et c'est là que ça devient intéressant, on s'en sert pour manipuler les objets. Que ce soit pour sonner de la cloche, tirer sur une corde, laisser tomber un bloc et même se battre à l'épée, la Wiimote est particulièrement bien utilisée dans le jeu. C'est vrai que dans certains cas, vous pourriez vous plaindre d'un manque de précision, mais dans l'ensemble, c'est excellent.

Voici un petit vidéo annoté qui vous permet de découvrir le premier niveau:


Malheureusement, comme pour plusieurs autres bons jeux (je pense à toi, Okami!), il a été largement ignoré, même s'il a reçu d'excellentes critiques. On peut encore le trouver facilement en magasin, souvent à rabais.

Toute une aubaine si vous voulez mon avis!

samedi 16 août 2008

San Juan

J'ai eu la chance d'essayer le jeu San Juan la semaine dernière.

Ce jeu est la version simplifiée du populaire Puerto Rico que je possède depuis quelque temps déjà.

Dans San Juan, vous bâtissez votre ville en installant des terrains de production de ressources (indigo, sucre, tabac, café et argent) et des bâtiments. Ces derniers vous donnent des bonus essentiels pour remporter la partie. Comme dans le jeu original, on doit choisir à son tour un rôle (bâtisseur, producteur, marchand, conseiller et chercheur d'or) qui permet différentes actions. Par exemple, le producteur sert à produire des ressources sur les terrains déjà construits et le chercheur d'or permet de choisir une ou plusieurs nouvelles cartes.

Les cartes servent autant d'éléments à construire (terrains de production et bâtiments) que de monnaie pour payer ces derniers. Les cartes servent aussi à représenter les ressources produites. Le défi consiste donc à choisir habilement comment ses cartes seront utilisées.



Ce que j'ai aimé:
  • Conserve l'essence du jeu original. Les habitués n'auront aucune difficulté à s'y retrouver.
  • Version de voyage bien pensée. Les cartes servant à tout, l'espace requise pour jouer est minimale.
  • La mécanique du jeu est rapide et efficace.
Ce que j'ai moins aimé:
  • Le hasard est beaucoup plus important dans ce jeu que dans Puerto Rico (où le hasard y est quasi inexistant). Cela est dû au fait que l'on progresse au gré des cartes piochées.
Je me suis procuré ce jeu chez Franc Jeu à Rosemère. Je l'ai également vu au Maître des jeux à Deux-Montagnes.

vendredi 15 août 2008

The 4-Hour Workweek


Wow! J'ai vraiment trouvé épatant le livre The 4-Hour Workweek de Timothy Ferris. Si vous en avez assez de la petite routine du travail de 9@5, ce livre est pour vous! N'avez-vous jamais rêvé d'être votre patron et de partir en voyage autour du monde? Ce livre vous donne la recette pour y parvenir!

Avec des conseils pratiques, l'auteur nous amène à réaliser qu'on a tous le potentiel d'avoir une vie extrêmement enrichissante maintenant sans attendre la retraite. Sa méthode se résume en 4 lettres, DEAL: D pour Definition, E pour Elimination, A pour Automation et L pour Liberation (en français: définition, élimination, automatisation et libération).

Ainsi, l'auteur nous incite à définir ce qui nous tient vraiment à coeur. Si on ne définit pas clairement nos objectifs, on ne peut y parvenir. Ensuite, il nous aide à simplifier notre vie en éliminant le superflu qui prend trop de notre temps, que ce soit au travail ou dans sa vie personnelle. Par la suite, et c'est la partie que j'ai trouvée la plus fascinante, Timothy élabore un plan pour lancer rapidement sa propre entreprise autosuffisante! Comment rouler une business profitable en seulement 4 heures de travail par semaine? Lisez ce livre! Finalement, quoi faire avec tout ce temps libre? C'est le moment de vivre sa vie!

Évidemment, à la fin du livre, on doit quand même se rendre à l'évidence, la magie n'existe pas! Tout ça ne peut s'accomplir sans une bonne dose de volonté et de travail déterminé. L'auteur en est conscient et il prend le temps de donner des exercices pratiques et simples pour avancer dans la démarche. Le livre tient compte aussi de ceux qui ne peuvent ou ne veulent pas, pour toutes sortes de raisons, devenir leur propre patron.

Le livre est disponible en version française. Vous pouvez aussi lire d'autres critiques plus étoffées du livre.

À lire absolument!

vendredi 1 août 2008

Nouvelle terre

À la suite de la lecture du livre Nouvelle Terre d'Eckhart Tolle, j'ai pris le temps de faire une liste d'idées pratiques que j'ai retenues.

1. Renoncer à l'ego. Dans son livre, l'ego est identifié à l'inconscience. L'ego est un thème que l'auteur élabore tout au long de son livre. C'est d'après l'auteur la raison de bien des problèmes dans nos sociétés. Voici des manifestations de l'ego citées dans le livre:

· Exiger de la reconnaissance pour quelque chose que vous avez fait et vous mettre en colère si vous ne l'obtenez pas
· Essayer d'attirer l'attention en parlant de vos problèmes, en racontant l'histoire de votre maladie ou en faisant une scène
· Donner votre opinion quand personne ne la demande, sans que cela change rien à la situation
· Être plus préoccupé par la façon dont l'autre vous voit que par elle, c'est-à-dire utiliser l'autre personne pour refléter ou intensifier votre ego
· Essayer d'impressionner les autres par vos possessions, vos connaissances, votre apparence, votre statut social, votre force physique, etc.
· Gonfler son ego par une crise de colère contre une situation ou une personne
· Prendre les choses personnellement
· Se sentir offensé
· Se donner raison et donner tort aux autres en se plaignant mentalement ou verbalement de façon futile
· Vouloir être vu ou sembler important

L'auteur donne le conseil suivant: quand vous détectez cette attitude en vous, arrêtez-vous et examinez la situation. Demandez qu'est-ce qui vous pousse à agir ainsi. Ensuite, choisissez simplement d'arrêter immédiatement d'agir ainsi. Répéter cet exercice aussi souvent que nécessaire permet de devenir plus conscient de l'ego en nous.

2. Se concentrer sur le moment présent. Un autre thème central du livre (et aussi le thème de son précédent livre). Trop de gens vivent soit dans le passé ou dans le futur. Pourtant, le seul moment sur lequel on peut influer est le présent. C'est dans le moment présent qu'on peut vraiment agir. Si on se fixe des objectifs pour le futur, on doit s'assurer que ça ne nous amène pas à vivre malheureux dans le présent sous prétexte que la fin justifie les moyens. D'après l'auteur, beaucoup passent leur vie à courir après le bonheur futur, alors que c'est maintenant que l'on peut vraiment le trouver.

3. Les grandes choses se font par de petites choses. On doit chercher à bien faire même les plus petites choses même si elles nous semblent banales ou sans importance. Le succès pourra venir par la suite. On doit toujours se concentrer sur la tâche en cours pour la faire du mieux possible. Une clé pour y parvenir: l'acceptation. Certaines tâches sont moins intéressantes que d'autres, c'est évident (comme changer un pneu crevé sous la pluie!), mais si on accepte ce que l'on doit faire sans chercher à s'en défiler, ça devient plus facile. Par contre, si on peut se permettre d'abandonner une tâche ou un travail que l'on déteste vraiment ou que l'on considère inutile ou nuisible, on doit le faire.

4. Ne pas résister. Quand on rencontre des problèmes ou des événements pénibles, on ne doit pas résister. Chercher à se venger, crier à l'injustice ou ressasser constamment le problème ne fera que nous rendre plus malheureux. Laisser aller est souvent une excellente chose à faire! Si on doit prendre des actions, il faut s'en tenir aux faits et ne pas laisser le filtre de nos émotions et de nos perceptions nous guider.

5. « Cela aussi passera ». Ces paroles, qu'un sage aurait dites à un antique roi du Moyen-Orient, nous rappellent que tout est éphémère. Si on réalise cela, on va apprécier davantage le moment présent quand tout va bien, et moins paniquer quand ça va mal.

dimanche 27 juillet 2008

Mystère sans magie: ma critique

Je viens de compléter la lecture de Mystère sans magie de l'auteur Cyrille Barrette. Cet essai porte sur le rôle de la science dans nos sociétés et sur la façon dont celle-ci peut nous aider à comprendre le monde qui nous entoure.

L'auteur explique très clairement la démarche scientifique. Comment la science fait-elle pour énoncer des hypothèses? Qu'est-ce exactement une théorie en science? Comment fait-elle parler la nature? Quelle est la différence entre science dure et science molle? L'auteur répond à ces questions en utilisant de nombreux exemples bien choisis, tirés de son expérience de chercheur ou de l'actualité.

J'ai trouvé très éclairantes les explications de ce livre à propos de la façon dont une théorie en science est bâtie de façon graduelle et en étant constamment remise en question avant de s'imposer comme l'explication choisie pour un phénomène naturel. J'ai trouvé aussi très intéressants les arguments de l'auteur sur le fait que notre bon sens est souvent insuffisant (et parfois trompeur) pour bien comprendre le monde. Il énonce plusieurs exemples, cocasses et surprenants, qui soutiennent cette affirmation (par exemple, l'histoire classique du blé et de l'échiquier).

L'idée maîtresse de ce livre est que la rationalité et la science est essentielle pour faire avancer l'humanité, combattre l'obscurantisme et comprendre la nature.

J'ai donc bien apprécié la lecture de ce livre. Je suis moi aussi convaincu de l'importance de la science pour nous aider à relever les défis sociaux de notre époque. Par contre, je trouve un peu naïve l'idée provenant des Lumières que la rationalité va immanquablement nous mener vers une société plus juste et plus humaine. Je crois que pour y arriver, la rationalité est effectivement essentielle, mais pas suffisante. Je crois qu'il est aussi essentiel de faire de la place à l'art, la littérature et la spiritualité, ce que l'auteur de ce livre semble parfois juger superflu.

samedi 26 juillet 2008

Bienvenue chez Pascal!

C'est à mon tour de me lancer dans l'aventure d'un blog!

Ici, je vous ferai part de mes découvertes, que ce soit de lecture, de logiciels, de trucs et astuces, du web ou autres! J'y partagerai des idées et des opinions à propos de tout et de rien.

Vos commentaires sont les bienvenus!