Je suis un intello!
Avant de me croire prétentieux, qu’est-ce qu’un intello? Peut-être que la définition qui suit ne convient pas à ce terme quoiqu’il en soit je l’aime beaucoup:
Être intello ça veut dire aimer s’instruire, être curieux, attentif, admirer, s’émouvoir, essayer de comprendre comment tout ça tient debout et tenter de se coucher un peu moins con que la veille1.
Cette définition fait abstraction de la notion d’intelligence. Tout le monde peut faire preuve de curiosité c’est l’une des seules justices de ce monde, par contre curiosité n’est pas égale à intelligence et malheureusement (ou heureusement peu importe) chacun ne naît pas avec le même capital et les mêmes possibilités.
Mais lorsqu’à l’école un bambin balançait “oh l’intello” il ne voulait pas dire “oh mais comme il est curieux mon camarade”… Mais bien plutôt “celui-là il me gonfle il sait tout!” Dans ce sens la définition ci-dessus n’est peut-être pas adéquate mais qu’elle se rapporte à intello ou n’importe quelle autre expression, je voulais la partager car je l’apprécie beaucoup.
- Extrait tiré du livre Ensemble c’est tout d’Anna Gavalda [↩]
Teach Yourself Programming in ten years
Je suis retombé récemment sur cet article extrêmement intéressant: Teach yourself programming in ten years.
Passé l’introduction, Peter Norvig expose plusieurs points qui selon lui sont la recette du succès pour devenir un bon programmeur. Peter Norvig est actuellement Directeur de Recherche chez Google US, il est donc légitime de faire confiance en ses dire. Les voici en résumé:
- Avoir du plaisir! Programmer parce qu’on aime ça. Et le faire avec suffisamment d’envie pour pouvoir le faire encore dix après.
- Avoir un échange avec d’autres programmeurs. Lire le code d’autres développeurs . Et aujourd’hui avec la multitude de projets open sources (qui a dit Java?) il n’y a pas d’excuse pour trouver du code écrit par des professionnels.
- Coder, coder, coder et encore coder! En effet, n’oublions pas que c’est en forgeant que l’on devient forgeron.
- Obtenir un titre universitaire permettra de postuler sur des emplois demandant un papier et permettra également d’avoir une compréhension plus profonde du sujet. Cependant l’expérience ne s’acquiert ni en lisant des livres, ni en assistant à des cours. Il est donc possible de devenir un programmeur professionnel en ayant uniquement une formation de base et en développant ses compétences par la pratique. L’expérience de Peter Norvig nous apprend que l’un des meilleures programmeurs qu’il ait eu l’occasion d’embaucher était de niveau pré-universitaire (l’un des créateurs de netscape entre autre).
- Travailler avec d’autres programmeurs
- Travailler sur des projets après d’autres programmeurs.
- Apprendre au moins une demi douzaine de langages. Un supportant l’abstraction de class (Java, Python..), un supportant l’abstraction fonctionnelle (Lisp, Haskel), un supportant l’abstraction syntactique (Lisp), un supportant les spécifications déclaratives (C++ templates), un supportant les coroutines (Scheme) et enfin un supportant le parallélisme (Sisal).
- Prendre part dans l’effort de standardisation d’un langage. Même dans un contexte local, sur un projet personnel par exemple.
J’ai pris la liberté de ne pas mentionner tous les points mentionnés dans l’article. Mais rien qu’avec cette liste, il y aura certainement toujours quelque chose à faire, à améliorer. C’est aussi cela qui est passionnant avec l’informatique. Se dire que l’on n’aura jamais fait le tour du sujet, qu’il sera toujours possible d’en apprendre et de nourrir abondamment sa curiosité… Ca ca me plait!
Une aide bienvenue pour se certifier SCWCD
Une seconde édition du livre Head First Servlets and JSP est sortie!
Si vous êtes à la recherche d’une aide adéquate pour obtenir le niveau de la certification SCWCD, ce livre est parfait! Cette seconde édition couvre la spécification 5 de Java Entreprise alors que la précédente portait sur la version 1.4. Par contre pour ceux qui sont déjà certifié sur la version 4 je ne pense pas qu’il y ait un grand intérêt à la passer du fait que les ajouts ont surtout été fait au niveau du langage et moins sur les specs Servlet/JSP.
Faisant partie de la série Head First (existe aussi en français sous le nom Tête la Première - cet ouvrage n’est pas traduit), la lecture est non seulement facile, elle aide énormément à la mémorisation et à la compréhension. Les auteurs se sont en effet mis au courant des dernières avancées en recherche cognitive et on peut dire que c’est sacrément efficace!
Et si vous êtes curieux n’hésitez pas à jeter un oeil aux autres livres de la série qui abordent des sujets plus intéressant les uns que les autres!
Package java.lang
La bibliothèque Java est vaste, très vaste. Sans conteste cela lui procure une grande richesse puisque de ce fait il est possible de quasiment tout faire avec. Il devient cependant de plus en plus difficile de s’y retrouver à mesure que le langage évolue. Ces évolutions sont bien régulées par le Java Community Process mais n’empêche que les fonctionnalités sont toujours plus nombreuses!
Je vais tenter par une série de plusieurs articles de parcourir quelques-uns des packages de Java afin de montrer les différentes classes disponibles. Bien sûr ce ne sera qu’un survol mais toujours utile, que l’on découvre le langage ou que l’on ait davantage l’habitude d’utiliser Java (enfin j’espère).
Pour bien commencer, prenons les choses par le début: java.lang. Ce package est automatiquement importé lorsque l’on développe en Java. Toutes les classes présentes dans ce package sont très souvent utilisées dans les programmes et le compilateur nous facilite la vie en faisant lui-même le lien lorsqu’il en rencontre une utilisation.
Wrapper types
On retrouve ainsi la définition des types de Java (Boolean, Byte, Character… et le vénérable Object sans qui rien ne serait possible). On les nomme généralement Wrapper types pour faire ressortir que ce n’est que la correspondance des types natifs (ou primitifs) qui sont utilisés lorsque l’on fait par exemple:
int theResponse = 42;
Lorsque l’on code sur Java à partir de la version 5, une fonctionnalité existante peut faire complètement oublier ce concept: l’autoboxing. En effet, précédemment le code suivant ne compilait pas:
Integer laReponseATteVosQuestion = 42;
Threading
Tous les outils de concurrences ne se trouvent pas dans ce package. Cependant, le socle de base de la programmation multi-threading est intégré dans java.lang. On y trouve la classe de base: java.lang.Thread mais aussi par exemple java.lang.ThreadLocal qui est utilisée afin d’implémenter le pattern Thread Local Session.
On peut très bien n’utiliser que la classe Thread pour les besoins concurrents. Nous verrons cependant lorsque nous aborderons le package java.util.concurrent qu’il existe plusieurs outils supplémentaires qui facilitent la vie du développeur lorsqu’il met le pied dans le monde du multi-threading.
Accès système
Enfin, plusieurs classes de ce package permettent de faire appel au système sur lequel tourne Java.
La classe System contient uniquement des membres statiques permettant par exemple de récupérer le flux de sortie de Java (le flux utilisé pour afficher des données à l’écran, la console), le temps actuel en millisecondes ou en nanosecondes, récupérer une variable d’environnement, enregistrer une propriété système, charger une classe ou une librairie dynamiquement ou encore enregistrer un SecurityManager personnalisé.
La classe Runtime est elle davantage liée au "système" de Java. Il est ainsi possible de l’utiliser afin de récupérer la mémoire disponible dans la machine virtuelle, lancer le Garbage Collector (aussi possible depuis la classe System qui fait en fait une redirection sur la classe Runtime) et enfin avant de mentionner la dernière classe, Runtime permet d’exécuter un nouveau processus système…
La classe Process liée donc à Runtime mais aussi à ProcessBuilder représente un processus natif. Une utilisation de ce genre de classe peut bien évidemment limiter la portabilité de l’application; il faut par conséquent bien réfléchir quant à son utilisation.
Par exemple, pour une application graphique permettant d’exécuter des imports de données sur une base Oracle il existe l’outil bien connu Sql Loader qui permet de charger les donner en ligne de commande. Il sera possible d’appeler directement depuis le code Java l’exécutable d’Oracle de cette manière:
Process p = new ProcessBuilder("sqlldr", "userid=root control=control.ctl").start();
Ensuite les flux de sortie, d’entrée et d’erreur sont disponibles et doivent être récupérés afin de pouvoir communiquer avec le processus lancé.
Autour de tout cela je n’ai pas pris le temps de parler de l’ensemble d’exceptions et d’erreurs se trouvant dans le package mais comme je l’ai dit dans l’introduction, ce n’est et ne sera qu’un aperçu!