Bien coder c’est coder proprement

Je suis tombé précédemment sur une présentation faite par Jean-Baptiste Nizet, informaticien chez NinjaSquad : https://speakerdeck.com/jnizet/5-apprentissages-pour-le-programmeur-debutant

J’ai trouvé intéressant de rebondir là-dessus vu mon dernier post. Je reviens donc sur cette présentation et je présente mon point de vue. En clair, je commente cette présentation 🙂

1 – Indentez votre code

Oui, comme le dit JB Nizet, l’indentation est promordial en programmation. Sur ce point, rien à dire. C’est comme si j’écrivais ce post sans accents, sans ponctuation. Ce serait illisible ! (Pour faire hype, branché, à la mode, on emploiera le terme refactoring).

2 – Erreurs et trace de bugs

La plupart des étudiants en informatique ne lisent pas ces traces d’erreurs car c’est un bloc illisible à première vue ! Puis même après avoir pris l’habitude de lire ces traces d’erreur, voire avoir pris l’habitude d’utiliser le débugueur de l’IDE, ça reste chiant ce gros pavé.

Que ce soit Eclipse ou IntelliJ (je suis agnostique là-dessus en ce qui concerne ces usines à gaz, pas de préférences), l’apprentissage reste faible. Les gens vont aller sur google et recopient la trace d’erreur et avec un peu de chance, ils trouveront une tentative de résolution sur StackOverflow…

3 – La documentation c’est pour les rigolos

Google c’est magique. Encore plus si vous faîtes votre recherche : 1) en anglais 2) avec des mots-clés.

Personnellement, je trouve que la documentation c’est utile, mais de temps en temps c’est vachement pas très instructif et ça n’aide pas tout le temps. Surtout en développement web quand vous utilisez des frameworks et autres librairies.

Donc le RTFM [1], c’est gentil mais dès fois pour des cas complexes ce serait plutôt LMTGTFY [2] ! 😛

4 – Killing the name of

J’en ai déjà parlé précedemment. Les variables foor, bar, toto, c’est cool quand vous testez pour vous-même. Les variables qui n’ont aucun sens c’est à proscrire. De même pour les variables trop verbales. Surtout en Java ! Oui Java est déjà tellement verbeux alors si vous en rajoutez une couche…

5 – Throws, catch…

Je ne suis pas encore un expert dans tous les langages mais à vue de nez ça sent le Java !

Je profite de ce cinquième point pour faire une parenthèse sur Java.Java ne sera jamais mon langage préféré pour plusieurs raisons.

La première : Il est trop verbeux.

Un exemple :

Capture d’écran 2014-07-03 à 16.20.53

La deuxième : Les exceptions.

Pour un débutant voire quelqu’un qui a au minimum un an d’expérience en Java (voire deux dans mon cas), les exceptions c’est un autre monde.

La troisième : Un langage objet devrait être simple.

Je n’ai pas encore manipulé d’autres langages objets jusqu’à présent mais je reste persuadé que le langage objet fut créé tout d’abord pour simplifier la programmation. Il faudrait comparer Java avec le langage C++ ou encore le langage Objective-C. Mieux encore ! Avec le langage Smalltalk !

Il y a d’autres raisons, mais ce sont les principales. Java n’en reste pas moins un langage intéressant mais il est loin d’être le meilleur à mon goût.

Publicités

Code School , Cool ?

Bonjour jeunes (et moins jeunes) Gens !

En cette merveilleuse journée (nuit pour ma part) je vous propose de folâtrer du côté de code school et de ses cours , ma foi très bien réalisés .. Certes la plupart d’entre eux sont hélas payant, mais ça vaut, selon moi, le détour ! De plus, mes amis, réjouissons nous puisque certains de ses articles sont accessibles gratuitement 🙂 Pour ma part je n’ai jusqu’à maintenant testé uniquement Try Ruby mais celui-ci m’a plutôt convaincue de concert.

try-ruby-e5c4e60c3b82ce8d76f36cdbebd199f9

Essaie moi !

Ce qui m’a séduite ? ( Et Dieu sait que je ne suis pas facile à séduire … Il parait) Tout d’abord le design de la page , simple , soigné mais ludique. On n’a pas envie , comme sur certains sites du même acabit , de s’enfuir sous l’apparente complexité de la page, du vocabulaire, qui semble destiné uniquement à une élite intellectuelle … Ou en tout cas à plus intelligent que moi. Second point positif pour Try Ruby : son humour et sa lecture plaisante. Et clair ! Personnellement, je souriais comme une idiote devant mon Mac, heureuse d’un peu de douceur dans ce monde brut. Aaaah , comme un marshmallow qui fondrait dans la bouche … Je m’égare non ? Revenons en à nos moutons (ou bien présentement à nos Sheep) puisque nous arrivons au point noir de ce cours … Il est en anglais ! Enfin personne ne peut être parfait parait-il …

Concluons par l’efficacité : comme promis , en 15mn (ou un peu plus , je l’avoue) vous aurez appris les rudiments du Ruby. Comme je l’ai entendu quelque part : Efficace et pas cher. 

On m’a aussi conseillé Rails For Zombies …

Voilà !

Ninn : Une fenêtre Java avec un JTextArea

Introduction

Je vous en parlais dans la brève d’aujourd’hui, nous allons bientôt démarrer le développement de Ninn fin Septembre si tout se passe bien. Nous allons partager avec vous ce mois-ci un code en java qui servira de base au développement de Ninn. (Nous avons de grands projets pour Ninn 🙂 ).

Java 

Pour exécuter ce code, veuillez avoir installer l’environnement Java (JRE et JDK). Pour comprendre ce code servez vous des commentaires ainsi de l’article proposé en fin d’article. 🙂

 
 

package Ihm;
import java.util.*;
//on importe tout le contenu de la bibliothèque avec
//cela évite d'importer un par un les éléments de la bibliothèque swing
import javax.swing.*;
/*je suis obligé de faire appel à AWT car j'en ai besoin pour gérer les 'layouts manager'
(gestionnaires de placement)
*/
import java.awt.*;
import java.awt.event.*;

//la classe hérite de JFrame (extends)
class mainwindow extends JFrame
//On maintenant construit la fenêtre
{
/*variable privée : variable accessible uniquement dans la classe
on déclare ces variables qui vont être utilisés dans le constructeur avant
avantage de le déclarer en dehors du constructeur :
utilisable partout dans la classe mainwindow*/

//Container, contient tous les autres objets tel que JButton
private JPanel panel = new JPanel();

//barre de menu
private JMenuBar menubar = new JMenuBar();

//Menu
private JMenu file = new JMenu("File");
private JMenu edition = new JMenu("Edit");
private JMenu about = new JMenu("A propos");

//Items
private JMenuItem sauvegarder = new JMenuItem("Save");
private JMenuItem quitter = new JMenuItem("Quit");
private JMenuItem license = new JMenuItem("License");

//fontsize sera un item de : edition et aura plusieurs items
private JMenu fontsize = new JMenu("Font Size");
private JMenuItem size12 = new JMenuItem("12");
private JMenuItem size36 = new JMenuItem("36");
//Zone de texte
private JTextArea text = new JTextArea("");
//constructeur
public mainwindow()
{            //titre de la fenêtre
setTitle("NINN");
//taille de la fenêtre
setSize(990,560);
setResizable(true);
//affiche la fenêtre au centre de l'écran
setLocationRelativeTo(null);
//cadre de la fenêtre
//true : cadre
//false : sans cadre
setUndecorated(false);
// ferme la fenêtre
//si on ne met pas ça en réalité la fenetre n'est pas fermée elle a juste "disparue"
setDefaultCloseOperation(EXIT_ON_CLOSE);

//----------------
setJMenuBar(menubar);
menubar.add(file);
menubar.add(edition);
menubar.add(about);
file.add(sauvegarder);
file.add(quitter);
edition.add(fontsize);
fontsize.add(size12);
fontsize.add(size36);
about.add(license);

//----------------

//raccourcis clavier
sauvegarder.setMnemonic('S');
// getKeyStroke to get the KeyChar
sauvegarder.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK));
quitter.setMnemonic('Q');
quitter.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_Q,InputEvent.CTRL_MASK));

//----------------

//quand on clique sur quitter, l'application se ferme
//pour sauvegarder
sauvegarder.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(panel, "La fonction sauvegarder n'existe pas encore" );
}
}
);
//pour quitter Ninn
quitter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.exit(0);}
}
);
//la licence d'exploitation de Ninn
license.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(panel, "GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. http://fsf.org/" );
}
}
);
//pour modifier la taille du texte
size12.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
Font twelve = new Font("Arial", Font.PLAIN,12 ); // 12
text.setFont(twelve);
}
}
);
size36.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
Font twelve = new Font("Arial", Font.PLAIN,36 ); // 36
text.setFont(twelve);
}
}
);

//----------------

//on appelle ceci un layout manager et ceci est un objet de la bibliothèque AWT
panel.setLayout(new BorderLayout());
//panel.add(bouton, BorderLayout.NORTH);
panel.add(text, BorderLayout.CENTER);
this.setContentPane(panel);

//----------------

//autorise le retour à la ligne
text.setLineWrap(true);

}
}
//classe principale 'window'
public class window {

/**
* @param args
*/
//méthode prncipale main (static void)
public static void main(String[] args) {
// TODO Auto-generated method stub
//objet de type JFrame, on place sa référence dans window
//On va construire la fenêtre en faisant appelle à la classe mainwindow();
JFrame window = new mainwindow();
//rendre visible la fenêtre
window.setVisible(true);

}

}

VOUS AVEZ ADORÉ ? VOUS ALLEZ RIRE MAIS CET ARTICLE VOUS INTÉRESSERA.

J’apprends à programmer.

Ze usual suspects introduction.

Bonjour, j’ai décidé de partager mon opinion de débutant en programmation avec vous et vous faire part de mes observations après avoir glané un peu sur le oueb. Vous trouverez à foison des conseils, des idées…Bref, un peu de tout. Je ne dois pas être le seul à faire ce genre d’articles, ni le seul à essayer de partager mon opinion mais j’espère que quelqu’un lise ceci, commente de façon pertinente et surtout que cela l’aide.

Avant de se lancer corps et âme  dans la programmation.

4 choses à savoir, 4 choses à avoir, 4 choses inévitables à acquérir :

  • Une curiosité insatiable.
  • Une grande autonomie.
  • Une bonne mémoire.
  • De la rigueur.

L’informatique, c’est un peu comme une science. D’ailleurs, vous allez rire mais y a des maths en informatique ! *trollface* En sciences, comme en informatique, la rigueur, la curiosité et la mémoire est de mise. En ce qui concerne l’autonomie j’y viendrai après.

Être curieux est une chose très naturelle chez l’Homme et permet au débutant en informatique de progresser en ne cessant de lire les forums, les blogs, etc. Mais pas seulement ça, le bon programmeur qui voit son programme « buguer » ne s’arrête pas à régler le problème mais, par curiosité, à comprendre pourquoi ça ne fonctionnait pas.

RIGUEUR + ORDINATEUR = AMAZING TRICK !!!*

La rigueur, vous l’apprendrez en C, est important car l’ordinateur ne fait pas de l’à peu près. C’est c*n un ordinateur, vous savez ? Il ne fait que suivre au mot près. Aucune déduction. Kaput. Mais par contre, il est fort en maths et a une bonne mémoire (si vous en prenez soin). Si vous êtes rigoureux, il vous sortira des trucs incroyables.

*Amazing trick : Tour de magie incroyable.
 

La mémoire est le meilleur appareil photo qui soit.

La mémoire est utile qu’importe l’activité que vous exercez. C’est plus rapide de programmer quand on se souvient bien de l’instruction dont à besoin qu’alterner entre son IDE et Google parce qu’on ne se souvient plus. 😉

Moi j’suis grand, j’me débrouille tout seul !

Un jour, quand j’ai vraiment débuté, j’ai voulu faire une calculatrice en JAVA. Très simple non ? Je me suis renseigné sur un forum et je me suis fait incendié (de mon point de vue) par un membre. En fait, c’est une technique très courante chez les membres experts en programmation quand ils tombent sur un débutant qui leur pose une question qui a été posé plus d’un million de fois. Je ne sais pas si dans mon cas je méritais sanction mais je les comprends un peu.

Vous tomberez aussi sûrement sur un membre qui vous dira : rtfm (surtout si vous débutez sur linux). Ceci n’est ABSOLUMENT pas une remarque sympathique du style LOL, je tiens à le préciser. :mrgreen: Soyez autonome et glanez sur le oueb. Vous trouverez bien quelqu’un qui aura posé la question avant vous ! 🙂 Et lisez les documentations et les manuels aussi, ça peut servir, ils sont là pour ça hein ? RTFM ! 😛

Le bibliothécaire

Je tiens à vous parler des livres en informatique car il est évident que tout informaticien, tel un érudit, se voit doté d’une bonne bibliothèque.

Si vous faîtes partie des gens qui pensent que grâce à Internet, on est plus obligé de dépenser de l’argent pour des livres qui souvent coûtent très cher, je vous donne à moitié raison. Tout d’abord, il est évident que niveau prix, il n’y a pas photo : Internet c’est génial, tout est gratuit ! (pas vraiment tout en fait, mais ce n’est pas l’intérêt de l’article). Mais en ce qui concerne la qualité, c’est fiable à 70%, même peut être moins mais je ne suis point statisticien. Je ne m’aventurerais pas d’avantage dans les chiffres, mais vous l’avez bien compris : On trouve de tout sur Internet. Les livres offrent des cours, des pratiques, des méthodes (qui parfois paraissent « obsolètes », je le reconnais), des trucs et astuces de qualité. Le prix d’un livre est très variable, vous pouvez très bien tombé sur un très bon livre à 20 € comme Java de C.Delannoy (édition Eyrolles, je parle de ce livre ici).

 N’oublions pas les ebooks !! Je ne me lancerais pas dans le débat : « le livre numérique est-ce bien ? », le livre numérique reste un excellent compromis : Nettement moins cher et moins encombrant.

Moi j’ai une petite méthode pour bien choisir mon livre dans une librairie. J’y vais en suivant une méthode tel un ordinateur suivant un algorithme :

Sujet Qualité Prix Édition Auteur

Voilà, je procède donc en regardant d’abord le sujet, ensuite la qualité, puis le prix (là c’est carrément vital dans mon cas :mrgreen: ), pour finir l’éditeur et l’auteur. Généralement, les meilleurs éditeurs dans le domaine de l’informatique sont Pearson et O’Reilly. Sans oublier Dunod, qui est un peu plus scientifique lui.

Les p’tites phrases

Pour faire simple et vous évitez de longs paragraphes, je vous ai fait une liste de petites phrases qui veulent tout dire :

  • Un code simple est difficile à écrire.
  • Un code extrêmement simple est extraordinairement difficile à écrire.
  • Un code facile à comprendre ne signifie pas qu’il était facile à écrire. (En fait, plus il est facile à comprendre, plus il était probablement difficile à écrire).
  • Il y a plusieurs façons de faire quelque chose.
  • Quoi qu’il en soit, il n’y a probablement aucun meilleur moyen, seulement beaucoup de façons différentes qui sont bonnes.
  • Il y a toujours beaucoup de place pour l’amélioration (dans votre code, et dans votre façon de faire).
  • Les changements à « une seule ligne de code » n’existent pas.
  • Toujours sauvegarder avant de réorganiser.
  • RTFM 😉 Lisez les documentations (pas intégralement seulement ce qui vous intéresse) et les tutoriels.
  • N’ayez pas honte d’utiliser un max les ressources qu’on vous propose que cela vient de Windows, Mac, Linux ou je ne sais pas de qui.
  • Ce n’est pas parce que vous avez écrit au moins cent lignes de code que vous êtes un génie.
  • Réussir à faire un petit programme ne veut pas dire que vous avez tout vu de l’informatique.
  • Faîtes votre liste des projets, des choses que vous voulez faire comme vous faîtes votre liste des courses.
  • Write once, run everywhere.

Structure.

J’en reviens à la rigueur : structurez bien votre code. C’est toujours plus sympa de lire un code structuré, tout comme il est très agréable de lire un roman structuré en paragraphes. Voilà un exemple sur le CSS. Généralement, on fait apprendre aux débutants le C pour la rigueur. Vous en aurez bien besoin en POO lorsqu’il s’agira d’écrire des classes de classes de… Bref, structurez !

Write once, run everwhere ?

Pensez votre code pour qu’il puisse marcher partout. En écrivant cela, je pense au responsive design. L’art de faire un site internet lisible sur n’importe quel appareil (multi-device) sans problème de taille de la page et des caractères. C’est une manipulation CSS. J’ai actuellement un blog gratuit fait avec WordPress. Je n’envisage pas pour l’instant de passer dans un domaine payant où je peux maîtriser tous les éléments du site. Mais j’ai choisi un thème intitulé YOKO fait par Elmastudio qui s’adapte sur tous les appareils. Vous pouvez tester par vous même si vous le souhaitez. Ceci est un exemple. Mais cette philosophie peut s’adapter à n’importe quel projet que vous mènerez.

POO : Programmation Orienté Objet.

En programmation, vous rencontrerez la programmation orienté objet. Très utilisée en Java, reprise également, ne serait-ce que le principe et la forme, en Javascript, la programmation orientée objet que vous utilisez Java, JS, Python, ou autre, c’est toujours la même vision : Objets, Procédures, Méthodes. Des termes à bien maîtriser. Important en Java notamment pour les classes.

Voilà, voilà, j’espère que ça vous aidera dans un avenir proche. 🙂

VOUS AVEZ ADORÉ ? VOUS ALLEZ RIRE MAIS CET ARTICLE VOUS INTÉRESSERA.

♫ Dance the java with me ♫


Introduction

Je me lance sur ce petit article pour faciliter la tâche aux jeunes loups comme moi qui souhaiteraient maîtriser la création d’interface graphique avec Java ou tout simplement à tout ceux qui souhaitent débuter dans l’interfaçage graphique en Java. Pour cela, il est nécessaire de faire appel à la bibliothèque Swing. Petit rappel : Swing est une API graphique (ou bibliothèque graphique au choix) propre à JAVA.

Learn Java ? Easy as ABC ! (Apprendre Java ? Simple comme bonjour !)

Bon, ici je ne vous ferais pas de cours sur JAVA.

Si :

  1. Vous êtes français.
  2. Vous êtes débutant.

Je vous recommande vivement de lire le cours de cysboy, ou d’acheter le livre ou bien de télécharger le livre pour le mettre sur votre liseuse.

Indiana Jones et le cours de Java perdu

Autrement, je vous conseille vivement de vous partir à l’aventure et trouver sur Google ou Bing ce qui vous convient. Vous vous apercevrez que des cours il y en a à foison.

Vous êtes encore vieux jeu et vous préférez les livres ?

Pour cela je vous recommande d’acheter, de voler, ou d’emprunter « Programmer en Java » (dernière édition) écrit par Claude Delannoy et édité par Eyrolles dans leur collection Best-Of. Certes, c’est un pavé (citez moi un bon livre d’info qui n’est pas un pavé ? 🙄  ) mais son prix vaut largement le coup non ?

Ce livre comprend tout ce qu’on doit savoir en Java et traite aussi Swing et ses fonctionnalités.

Cela dit si vous êtes orienté jeu vidéo je vous conseille de vous procurer « Devenez un petit génie des jeux vidéo » édité par Pearson dans leur collection « Le Programmeur » écrit par Ian Cinnamon. Vous pouvez l’avoir allons disons à tout casser 20 € !

Création de ma fenêtre en Java

Vous aurez vivement besoin d’un IDE pour créer votre programme. Le plus connu pour le java est Eclipse. Je ne me pencherais pas sur le choix de l’IDE, mais je vous conseille de prendre Eclipse pour deux raisons :

  1. La grosse majorité des développeurs utilisent Eclipse.
  2. J’utilise Eclipse et les explications qui vont suivre sont surtout propre à Eclipse. :mrgreen:

Tout d’abord, vous suivez ce tutoriel où tout est bien expliqué (avec de zolies zimages d’ailleurs) afin de créer votre projet et votre classe. Ne copiez pas le code proposé, il est sympa, il marche, vous le verrez partout dans les cours sur Swing, moi je vous propose une autre méthode ici. Et notons aussi que votre package n’a pas à s’appeler obligatoirement « Ihm ». 😉


package Ihm;
//on importe tout le contenu de la bibliothèque swing
import javax.swing.*;
//je suis obligé de faire appel à AWT car j'en ai besoin pour gérer les 'layouts manager'(gestionnaires de placement)
import java.awt.*;
import java.awt.event.*;

//la classe hérite de JFrame (extends)
class mainwindow extends JFrame
//On construit maintenant la fenêtre
{
	//On met ici des variables de type private par exemple
	//constructeur
	public mainwindow()
{			//titre de la fenêtre
			setTitle("Window title");
			//taille de la fenêtre
			setSize(800,600);
			setResizable(true);
			//affiche la fenêtre au centre de l'écran
			setLocationRelativeTo(null);
			// ferme la fenêtre
			//si on ne met pas ça en réalité la fenêtre n'est pas fermée elle a juste "disparue"
			setDefaultCloseOperation(EXIT_ON_CLOSE);

}
}
//classe principale 'window'
public class window {

	/**
	 * @param args
	 */
	//classe principale dite classe main (static void)
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame window = new mainwindow();
		window.setVisible(true);

	}

}

Deux-trois p’tites remarques à propos du code. Nous avons créé là deux classes : La classe principale

public class window {
public static void main (String[] args)
...
}

La « classe secondaire » qui contient un constructeur)

class mainwindow extends JFrame {
...
public mainwindow()
{
...
}

L’intérêt de faire appel à une classe « secondaire »  ? Cela permet de garder notre classe principale où se trouvera la classe main « intacte » et de créer à coté des classes diverses qui permettront par la suite d’instancier plein d’objets. Bon, je sais, c’est peut être pas la meilleure méthode…D’autre part, je me dois de vous préciser qu’en écrivant import.javax.swing.* vous importez toute la bibliothèque swing (c’est l’étoile qui indique que vous importez tout 😛 ).

Il reste à savoir s’il ne serait pas plus sage d’appeler uniquement ceux dont on a besoin ? (Par exemple, nous utilisons l’objet JFrame qui appartient à l’API Swing, nous aurions pu écrire import.javax.swing.JFrame). Personnellement, moi je choisis la méthode dite « facile », on importe tout ! :mrgreen: Après évidemment si vous n’avez besoin que de JFrame, c’est comme quand il y a 15 personnes on ne va pas se fouler à appeler tout le monde si on a besoin uniquement de Mr Dupont, prenez la deuxième méthode !

En bref : Dans ce code source, vous noterez la création de deux classes dont une qui contient une classe main où on instancie un objet de type mainwindow qui sera en fait notre fenêtre (polymorphisme) en utilisant le constructeur de la seconde classe .

Le bonus

Exceptionnellement, il n’y en aura pas, mais cela étant dit, je vous offre en compensation une fuite d’information : Bientôt sur le lab de nerdycode, une fenêtre en java sous forme d’application 🙂