jeudi 27 décembre 2007

Performance Ruby 1.9

Ruby 1.9 vient de sortir --> chez Matz
Et les perfs sont finalement un peu... décevantes --> un aperçu

Voilou...

A l'assaut du Java...

Il fallait bien que ça arrive, à force de voir des offres d'emploi demandant la connaissance du Java dans le profil du candidat... J'ai craqué, et je me suis lancé dans une petite formation aux bases du langage Java, en ligne, gracieusement financée par mon "employeur" actuel. Il est clair que je compte surtout acquérir quelques notions pour pouvoir me dépatouiller avec en cas de besoin (et l'ajouter sur mon CV, cela va de soi...), mais que d'emblée, j'ai un a priori assez fort contre ce langage...


Pour l'instant, la qualité du tuto est assez discutable, avançant des affirmations un peu suspectes comme "avec une vitesse d'exécution comparable au C et C++" (je demande à voir pour le C !), "beaucoup plus portable et modulable" (tiens donc !), "Syntaxe très simple et peu contraignante" (!!!)... Aucune aide pour l'installation, et une grande légèreté dans l'explication de la compilation et de l'exécution (qui ne marchait pas au départ avec leurs indications...). Bref, ça partait plutôt mal...

Du coup, je suis passé voir le tuto Java du Site du Zéro, qui avait pas l'air trop mal, et où il m'est confirmé une impression que j'avais : sous Windows, sans IDE, tu peux t'accrocher mon poulet... JBuilder qui y était recommandé étant depuis devenu payant, j'ai pris JCreator qui est supposé être bien pour les débutants. Pour l'instant ça me paraît assez clair (j'utilise à peu près jamais d'IDE, ces trucs là me gonflent...) et fait miraculeusement tourner le code de départ de la formation. Jetons un coup d'oeil :

Java :

// Sortez une hache, j'attaque Java...

package exemples.messages ;

public class PremiereApp{
public static void main(String args[]){
System.out.println ("Ma premiere appli Java") ;
}
}
Bon, c'est pas encore Azureus, c'est sûr... mais pµTa1N que c'est VERBEUX !!! Pour rappel, en Ruby :

Ruby :
puts "Ma 267eme appli en Ruby..."
Et un petit tour des différents types (comme en C++ apparemment, et non pas "classes de bases" comme en Ruby...) m'a déjà scié 3 nerfs : "byte, short, int et long !!!"... Va pas falloir se gaufrer à la déclaration j'ai l'impression...

Allez, j'arrête de râler, et je m'y plonge sérieusement : je peux pas croire que le Java serait tant utilisé s'il était aussi foireux que ce que je crois... A l'attaque !


(prochain langage, j'en prends un fonctionnel... je le dit, je le fais, allez !)

mercredi 26 décembre 2007

I Luv' Sneakers : Holy Grey Serie


Several Greys

Images provenant de FootLocker/europe (1) et www.pickyourshoes.com (suivantes).

samedi 22 décembre 2007

RubyShyne

RubyShyne

est un outil de bureau, implémenté en Ruby, convertissant un code source en HTML coloré syntaxiquement (pour le présenter sur une page web, par exemple). Ce petit code est placé sous la licence libre BSD. Il supporte actuellement les langages Ruby, Java, Fortran et Groovy, et est facilement paramètrable pour obtenir le style de votre choix.

is a desktop-tool implemented in Ruby. It converts source code into HTML with syntax highlightment (in order to paste it on a web page, for instance). This humble code is under free-software BSD licence. Its current version supports Ruby, Java, Fortran and Groovy programming languages. You can easily configure it to get the highlighting style of your choice.

Exemple / Example :


=begin
Let's test
RubyShyne
and Duck Typing
!
=end

class Duck
attr_reader :name, :position

def initialize who
@name = who
@position = 0.0
@@legs = 2
end

def walk miles
@position += miles
end

def quack
puts "KWAAAAK !!!"
end
end

# Let's call one Herbert
a_duck = Duck.new "Herbert"

$weather = "Sunny"

for i in (0..2)
a_duck.quack
end

# Where are you going bro ?
a_duck.walk 10.0
puts "Herbert walked ", a_duck.position.to_s,\
"miles."


ATTENTION : un interpréteur Ruby est nécessaire à son utilisation !

WARNING: a Ruby interpreter is necessary to use it !

4/01/2008 : v0.6 - comment

Documentation et manuel (fichier lisez_moi.txt) sont inclus dans l'archive.

Doc and user manual (readme.txt file) are included into the archive.

N'hésitez pas à me contacter pour toute question, rapport de bug ou suggestion.
Feel free to contact me for any question, bug report or suggestion.


Mise à jour / Update : 4/01/2008

vendredi 21 décembre 2007

Matrices en Ruby : 1 - Attention !

On ne se refait pas... Étant (paraît-il) un peu matheux, il fallait bien que je m'intéresse au traitement des matrices en Ruby dans la librairie standard. Pour résumer, les matrices sont des objets mathématiques qu'on peut décrire comme des tableaux 2D, comprenant un grand nombre d'opérations, et de propriétés et pouvant représenter à peu près n'importe quelle donnée (système d'équations, graphe, statistique, raideur physique en méca, viscosité en CFD...). Elles sont utilisées assez systématiquement en maths appliquées, et leur enseignement se fait, en France, en Bac+1 et plus dans les cursus scientifiques. Voyons leur gestion en Ruby. On va faire ça par étape, gentiment, en commençant par un ou deux petits soucis avec cette classe.

Avant de raller, un rapide aperçu :

  • Pour la création, pas mal de méthodes à disposition (mais pas new !) : par ligne, par colonne, nulle, diagonale, identité... il manquerait peut-être les triangulaires mais ne chipotons pas trop...
  • Les méthodes d'accès aux cellules, lignes et colonnes, tailles, méthode collect...
  • Les opérateurs classiques (+, -, *, **...) et l'opérateur "/" qui ferait hurler à peu près n'importe quel prof de maths non-muet (la division d'une matrice A par une matrice B n'existant pas au sens strict : il s'agit de la multiplication de A par l'inverse de B SI CELLE-CI EST INVERSIBLE !).
  • Les méthodes sur les matrices : déterminant, rang, trace et transposition.
  • Les outils de conversion divers (to_s, vecteurs colonnes, etc...)
Donc c'est pas trop mal. Mais il y a quelques hiatus assez surprenants :

WARNING : déterminant faux !!!

C'est vrai, c'est noté dans la doc, mais ça reste savonneux un truc pareil : il est nécessaire d'inclure la lib mathn sous peine d'avoir des déterminants erronés (dans l'exemple du code on obtenait -20 au lieu de -19 pour a et 0 pour b, ce qui est par définition impossible pour une matrice inversible, et donc pour l'inverse d'une matrice...). J'espère que la correction sera faite dans la version 1.9 parce qu'un truc pareil, ça craint sec !

Affichage : "Yé souis pas oun' machine !"

La méthode to_s est bien gentille, mais elle est pas franchement compréhensive pour nos pauvres yeux : une matrice étant le plus souvent un tableau 2D (ici en tout cas...), c'est plus sympa de l'avoir sous forme de tableau à l'écran. Je propose une méthode print dans le code du jour pour avoir une sortie console plus lisible.

Matrice non-rectangulaire ?

Également notifié dans la documentation, il n'est pas imposé par la classe qu'une matrice soit rectangulaire : par les mathématiques si en revanche. Cela pourrait éventuellement poser des soucis assez significatifs de se trimballer des coefficients nil... Mais d'un autre côté, économiser de la place sur les matrices creuses sans introduire de structure de stockage dédiée (typiquement un tableau 3*n pour une matrice tri-diagonale n*n) est assez tentant. A tester, on en reparlera.

Le code :

Juste des petits tests sur une matrice d'entiers 3*3 (tester sans le 'mathn', vous verrez !) avec l'introduction de ma petite méthode d'affichage.



require 'Matrix'
# WARNING !!! Mandatory to get real determinant value !!!
require 'mathn'

a = Matrix.columns([[1,2,5],[0,5,1],[1,1,1]])

# "Classic" to_string
puts "a = " + a.to_s

class Matrix
# Print a "human readable" matrix
# Why doesn't it already exist ?
def print
for i in (0...self.row_size)
strg = ""
for j in (0...self.column_size)
strg = strg + " " + (self.[](i,j)).to_s
end
puts strg
end
end
end

puts "\na = "
a.print
puts "\nDet(a) = " + (a.determinant).to_s

b = a.inverse
puts "\nb = a^-1 = "
b.print
# b determinant should be a determinant inverse
puts "\nDet(b) = " + (b.determinant).to_s + "\n"

c = a*b # Should be equal to identity matrix I
puts "\nc = a*b = "
c.print

mercredi 19 décembre 2007

Blogs Ruby




Dernière mise à jour : 18/10/2009

mardi 18 décembre 2007

Un nouveau tutoriel Ruby : introspection

Petit coup de pub pour un tuto de Ruby paru hier sur le site du zéro.

Il se penche sur un point très puissant du Ruby : l'introspection, c'est à dire la capacité du code à s'analyser lui même. Si ça peut paraître abstrait vu d'ici, je vous conseille vraiment d'aller y jeter un coup d'oeil, car pas mal de choses sont en fait utilisables "au quotidien" (j'y ai mieux compris des choses que j'utilisais depuis assez longtemps...).

Le tuto :


par Pingouin Chauffé, un jeune Rubyiste de talent.

Programmation poétique - Chapitre III : World at War

La guerre des navigateurs


Voilà des années, que Hank Thernett, grand explorateur américain né à Redmond, affirmait sa suprématie sur toutes les mers du globe... Il connaissait le moindre recoin de chacun des océans, et tous les ports lui étaient grand ouverts, grâce à ses nombreux contacts, dont le célèbre Mike Rosoft Wedows. Il avait dû se battre pour en arriver là, notamment contre le célèbre Ned S. Caype !
Un nuage sombre couvrit le soleil, annonçant un orage prochain. Et pourtant, depuis quelques temps, de nombreux nouveaux venus dans le monde de la navigation gagnaient peu à peu sur son prestige. Le noble Saint-Ferri de Lapomme, le redoutable pirate "Renard de Feu", Roald O. Perason le scandinave pour les plus célèbre...
Le vent soufflait à présent plus fort de babord, l'équipage s'activa pour changer les voiles. Tous ne souhaitaient qu'une chose : qu'il perde son monopole sur ses comptoirs, et piller ses précieux clients à sa place. Et la populace des ports les plus miteux semblait sensible aux bruits qu'ils faisaient courir à son sujet sur de prétendues épidémies qu'il aurait apporté avec lui... Foutaise !
Il lui fallait avant tout se tenir sur ses gardes, une attaque en mer peut être fulgurante, et Dieu sait qu'il en avait essuyé ! Et soudain apparut le vaisseau du "Viking"...



La guerre des éditeurs :

- Tu sais utiliser VI toi ?
- Non, pourquoi ?
- J'en ai besoin pour éditer un fichier binaire en fait...
- Ah ! Mais ça doit être faisable avec XEmacs alors !
- Euh, ouais, peut-être... je connais pas non plus en fait...
- ...
- Tu pourrais me montrer ?
- Yep, pas de soucis

Un peu plus tard...

- Bon, voilà, ça marche.
- Nickel !
- Mais, euh, tu utilise quoi comme éditeur toi habituellement ?
- NEdit sous UNIX, et WordPad sous Windows ("mais des fois ça fait des caractères bizarres..."), pourquoi ?
- (depuis 10 ans !!!!!?????) ... Non, rien (n00b!).


La guerre des langages :

- Si je vous demande la différence entre une pierre précieuse et un reptile, répondez que peu importe, un mathématicien danois les supplantant.
- Si je vous affirme qu'un marteau n'est pas une foi, niez, et priez.
- Si je prie, affirmez que la taille d'un animal n'est pas celle en laquelle je crois.
- Si je dis que l'avenir est incertain, affirmez que je deviens pire avec le temps.


lundi 17 décembre 2007

Plus de 100 visiteurs...

Petit message pour fêter le dépassement des 100 visiteurs uniques sur le blog (c'est fait depuis quelques jours, mais mieux vaut tard que jamais...). Au bout d'un peu plu d'un mois, on approche les 450 visites, et les 1400 pages vues. Les raisons qui amène des gens ici sont variées (le hasard ayant une belle part du gâteau) mais par Google, c'est beaucoup pour le Ruby (rassurant !), en particulier pour mes petits articles sur les tableaux, les piles et les files. Environ 67.3 % des visiteurs sont blondes à fort QI, et possède un animal redondant.


Comment je sais ça ? J'utilise Google Analytics. Sincèrement, sans être très calé, ça s'installe et s'utilise très facilement (en particuliers chez Blogger, évidemment...) et on a accès à une quantité d'informations importante (mais pas la couleur des cheveux en fait... les animaux oui par contre).

Tant qu'on est dans les applis ajoutées à ce blog, vous avez sans doute constaté que j'utilise également Google Adsense pour diffuser de la pub dans le second bandeau de droite et devenir multimilliardaire (ou plus si affinité...). Pour ceux que ça intéresse, deux trois petites infos à ce sujet. D'abord, il faut être majeur ou s'inscrire au nom de ses parents (ou tuteurs légaux, etc...) pour pouvoir utiliser ce service. Ensuite, au niveau installation, sur Blogger, c'est de l'ordre du quart d'heure, et encore, en lisant la plupart des textes que l'on saute habituellement. La rémunération se fait au clic sur la pub (le montant dépendant de l'annonce au moment du clic) et évidemment il est interdit de cliquer soi-même dessus, de faire un bot qui le fait tout seul, ou même de demander explicitement à ses visiteurs (ou à ses proches) de le faire (je ne vous le demande donc pas ^^). Apparemment Google est assez strict là-dessus...



Petite nouveauté aujourd'hui, je viens d'ajouter une syndication RSS par FeedBurner (appartenant également à Google... non, je taffe pas pour eux...) d'une part pour mieux être référencé (il paraît que ça aide, par un procédé qui m'échappe encore...), pour vous permettre de vous abonner plus facilement selon votre lecteur de flux et pour avoir une idée des abonnements effectifs (bizarrement, Analytics ne gère absolument pas cette partie du "trafic").

Deux liens vers des blogs d'aide/astuces/widgets pour Blogger :
Voilà pour ces petites infos actuelles. Il me reste encore du chemin pour bien faire référencer (Technorati, annuaires...) ce modeste blog que j'espère utile et/ou agréable pour le maximum d'entre vous. A ce sujet, je vous encourage vivement à poster des commentaires sur les textes et/ou les codes des articles si vous avez un problème, que je dis du purin, que vous aimez pas, ou même, soyons fou, que vous appréciez.

Et surtout, bonne visite !

L'image de cet article est une fractale, issue de www.artdubonheur.com. On reparlera d'art numérique un de ces quatre...

Ruby et YAML : la base de la base.

Juste pour un début en YAML avec Ruby, comment écrire dans un fichier, et le relire. (Il existe d'innombrables autres méthodes, options, etc... Ici c'est vraiment la BASE !).




Le code :



# Définissons un hachage :
console1 = {
:id => 0,
:name => "wii",
:path => "au magasin" ,
:tags => [:game, :nintendo, :move]
}


# dump : on l'écrit dans fichiertest.yaml
File.open('fichiertest.yaml','w') do |out|
YAML.dump console1, out
end

# On relit avec load
relecteur = open('fichiertest.yaml') do |input|
YAML.load input
end

# Et voilou
for i in relecteur
puts i[0].to_s + " => " + i[1].to_s
end

samedi 15 décembre 2007

Fortran : Coloration de graphe

Aujourd'hui, un peu de théorie des graphes en Fortran 90 ! (Je teste la coloration avec Rubyshyne en Fortran...)

Il s'agit d'un programme de coloration de graphe. Celle-ci est utilisée dans divers domaine, par exemple pour colorer automatiquement une carte avec différentes entités (pays, régions ou autre).

Comment ?

En consultant Wikipedia, je me suis rendu compte que j'ai "refait" sans le savoir l'algorithme classique pour ce problème, à savoir l'algo de Welsh & Powell. Pour la petite info, cet algo se base en partie sur le théorème des 4 couleurs, premier théorème mathématique dont la démonstration a nécessité l'utilisation d'un ordinateur (près d'un siècle après sa première formulation !).

Entrées-Sorties :

Ce programme prend en entrée la matrice du graphe à analyser, précédée du nombre de sommets (fichier tab.dat). Exemple :

6
0 1 1 0 0 0
1 0 1 0 1 0
1 1 0 1 1 0
0 0 1 0 0 1
0 1 1 0 0 0
0 0 0 1 0 0

Ce qui donne en graphe et en "carte" (déjà colorés ici pour l'exemple) :









Le code :


PROGRAM Coloration
IMPLICIT NONE
integer, allocatable :: A(:,:)
integer, allocatable :: Degree(:), AliasD(:), B(:), Color(:)
integer :: i, n, tmp, tmpD, ii, icolor
character(len=999) :: format_tab
character(len=6) :: motif = 'I1,1X,'
logical :: pas_adj

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! LECTURE DU GRAPHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PRINT*, ' '
OPEN(UNIT=10, FILE='tab.dat', FORM='formatted', STATUS='OLD')

READ(10,'(I6)') n
PRINT*, 'Taille du graphe : ', n
Print*, ' '
ALLOCATE(A(n,n))
ALLOCATE(Degree(n))
ALLOCATE(AliasD(n))
ALLOCATE(B(n))
ALLOCATE(Color(n))

Color = 0

format_tab = '('
DO i = 1, n-1
format_tab = format_tab(1:(6*i-5))//motif
END DO

format_tab = format_tab(1:(6*n-5))//'I1)'

PRINT*, 'Matrice du graphe : '
DO i = 1, n
READ(10, format_tab) A(i, 1:n)
B(i) = i
PRINT*, A(i, 1:n)
END DO
PRINT*, ' '

CLOSE(10)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! TRI PAR DEGRE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DO i = 1, n
Degree(i) = SUM(A(i,1:n))
END DO

AliasD = Degree

ii = 1
DO WHILE (ii < n)
IF (AliasD(ii+1)>AliasD(ii)) THEN

tmp = B(ii)
tmpD = AliasD(ii)
B(ii) = B(ii+1)
AliasD(ii) = AliasD(ii+1)
B(ii+1) = tmp
AliasD(ii+1) = tmpD
IF (ii > 1) THEN
ii = ii - 1
ELSE
ii = 1
END IF
ELSE

ii = ii + 1
END IF
END DO

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! COLORATION
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Color(B(1)) = 1
DO icolor = 1, 4
ii = 2
DO WHILE (ii < n+1)
IF (Color(B(ii))==0) THEN


pas_adj = .TRUE.
DO i = 1, n
IF ((Color(i)==icolor).AND.(A(B(ii),i)/=0)) THEN
pas_adj = .FALSE.

END IF
END DO

IF (pas_adj) THEN
Color(B(ii)) = icolor
END IF


END IF
ii = ii + 1
END DO
END DO

!!!!!!!!!!!!!!!!!!!!!!!!!!

! RESULTATS
!!!!!!!!!!!!!!!!!!!!!!!!!!
PRINT*, ' '
PRINT*, 'Coloration : '
PRINT*, Color

END PROGRAM Coloration

vendredi 14 décembre 2007

Rubyshyne : du source au "cute" HTML...

Je vous en parlais l'autre jour : j'ai débuté le codage d'un petit outil qui transforme un code source (ruby pour l'instant, suivra le fortran) en code HTML coloré syntaxiquement (en bonne partie pour poster sur ce blog...). J'ai envie de l'appeler Rubyshyne, donc ce sera son nom ! Si son développement avance bien, je pense le mettre sous license libre, et en téléchargement dans le coin, pour ceux que ça intéresse. Pour l'instant il n'est pas terminé et il faut bien que je teste, donc en avant le code débile à ne pas utiliser !

Essai de Rubyshyne :


class Liste
attr_accessor :value, :next

@@name = "list"

def initialize (val, nekst = nil)
@value = val
@next = nekst
end


end

$glob = 56

a = Liste.new 1

b = Liste.new 0, a # Beaucoup !!!

erv = :ruby

puts "j'ai maaaaaal au #{erv}"

puts b.next.value

if a.val < b.val then
puts a.to_s

end

# J'aimerai que ça marche

Ooooh les zolies couleurs !

I luv' sneakers : German Scheme Serie


Classic - White + Black/Red
PickYourShoes

Les photos de cet articles appartiennent au site de vente www.pickyourshoes.com.

Un outil de présentation de code online - Syntax Highlighting

Ça fait plusieurs fois que je tombe sur ce petit "paste-tool" sur le web, et je le trouve vraiment sympatoche :


Il s'agit d'un site proposant de présenter joliment (avec plusieurs colorations syntaxiques au choix) vos codes online, dans plusieurs langages de prog', pour pas un rond. Il y a même la possibilité de rendre un code privé (petit cadenas). Il suffit après de récupérer l'URL après sauvegarde. Pour récupérer un code, même pas besoin de sortir d'éditeur : il y a déjà une fonction télécharger... Si c'est pas beau tout ça...

Un exemple (débile : le code planterait, mais il y a la plupart des choses à colorer en Ruby).


Bon, le sujet m'intéresse particulièrement en ce moment vu que je cherche toujours une solution simple pour mieux présenter mes codes dans ce blog... Les solutions en ligne ne m'ont pas convaincu pour l'instant, donc je suis en train de programmer un outil de coloration syntaxique directement en ruby (pour Ruby, dans un premier temps). C'est un assez bon exercice pour la gestion des Strings, avec un poil de YAML pour faire pro (héhé !). Pour l'instant, ça donne ça :



class Liste
attr_accessor :value, :next

@@name = "list"

def initialize (val, nekst = nil)
@value = val
@next = nekst
end


end

$glob = 56

a = Liste.new 1

b = Liste.new 0, a # Beaucoup !!!

puts b.next.value


if a.val < b.val then
puts a.to_s
end

# J'aimerai que ça marche

C'est pas encore phénoménal, mais ça viendra...

Pour info, quelques solutions en ligne :

A voir... Si vous en connaissez d'autres, n'hésitez pas !

mercredi 12 décembre 2007

Ruby : Argument d'un script

Il y a des choses plus difficiles que d'autres à (re)trouver quand on utilise un langage de programmation. Parmi elles, il y en a une qui m'a bien fait ramer hier soir : le pire étant que je l'avais déjà vue ! Il s'agit de la variable spéciale permettant de récupérer la ou les donnée(s) d'entrée d'un script en Ruby. Désolé, ça va piquer un peu les yeux, petit interlude "mots-clés" pour notre ami Google/Yahoo/Lycos/Mozbot/... rayez les mentions inutiles :

entrer récupérer une variable en entrée d'un script Ruby - argument d'un script Ruby - input for Ruby script - variable spéciale Ruby entrée script - special global variable in Ruby for script input - entry - program input - input entrée programme Ruby - argument en ligne de commande - argument console terminal shell Ruby - command-line arguments


==> ARGV

ARGV récupère sous forme de tableau les entrées proposées au lancement du script à la suite de son nom, séparées par des espaces, sous la forme de strings. Une image valant mille mots :

testargv.rb :

puts "class : " + (ARGV.class).to_s + \
" ; size : " + (ARGV.size).to_s
for i in ARGV
puts "input : " + i.to_s + \
" ; class : " + (i.class).to_s
end


Lançons :
$ testargv.rb
#=>class : Array ; size : 0

$ testargv.rb 5
#=>class : Array ; size : 1
#=>input : 5 ; class String
$ testargv.rb 5 toto Foo 7.2
#=>class : Array ; size : 4
#=>input : 5 ; class : String
#=>input : toto ; class : String
#=>input : Foo ; class : String
#=>input : 7.2 ; class : String
Et voilà, pour la suite, les méthodes sur les tableaux et de conversion de String devraient vous aider à profiter de cet argument.

La source : l'excellent livre :


de David Thomas et Andrew Hunt, disponible gratuitement et légalement en version électronique (Open Publication License v1.0).

mardi 11 décembre 2007

50 ans du Fortran

Le Fortran, langage informatique pionnier, fête cette année son 50ème anniversaire. Rappelons qu'il est né, après une grossesse de 3 ans environ, dans les laboratoires d'IBM. Malgré l'aspect assez repoussant que nous lui connaissons aujourd'hui, c'était un (très) beau bébé, et John Backus n'a pas hésité à le reconnaître comme étant son enfant, et à l'appeler Fortran, pour FORmula TRANslating system (comme son oncle, donc).

Deux articles sur l'évènement :

Since then it has evolved through many versions, each more powerful than the last, and even now Fortran is still the language of choice in many areas of physics.
Finally, there is no need to be a religious extremist; these days, procedures in different languages can be intermixed (which will only become easier). Different subsets of applications can be written in the most appropriate language, e.g. Java for the web, and all can be glued together in a PYTHON framework.


Un "NPC" ("NON-Personal Computer !") dans les années 50.

Une petite pensée pour John Backus, le papa de la bête, qui nous a quitté en Mars dernier. Il est également le géniteur, avec Peter Naur, de la notation BNF (Backus-Naur Form), décrivant la syntaxe de langages de programmation de niveau supérieur à l'Assembleur.
Bon anniversaire Fortran !

lundi 10 décembre 2007

Quels sont les langages de programmation des pro ?

J'adore les trolls. Ces débats stériles, généralement sur des sujets qui peuvent apparaître comme sans aucun intérêt, sont marrants, variés et opposent le plus souvent plusieurs objets ou produits du même domaine. En vrac :

  • Langages de programmation (c'est de ça qu'on va parler, patience !)
  • Editeurs de texte (Vi/Vim vs Emacs/XEmacs)
  • IDE
  • GUI
  • Libre vs Propriétaire
  • Windows vs Linux (vs Mac vs BSD vs ...)
  • Surf vs Ski
  • Internet Explorer vs Firefox (et les autres !)
  • Perrier vs Perrier Citron
  • MacDo vs Quick
  • SuperNintendo vs Megadrive
  • KDE vs GNOME
  • ...
Bref, vous avez saisi le concept, tout cela est assez débile. Cependant, les trolls partent assez souvent de questions ou réflexions pertinentes (comme par exemple "PHP saymal !" ==> non, je plaisante). Un vrai exemple, sur le site du zéro (adapté par mes soins) :

Salut les ptits poulets,
J'aimerais savoir quels langages il faut connaître quand on est pro
Merci d'avance, vous êtes tous très bô.

Kévin le n00b.


Le troll a mis, dans mon souvenir, 2 réponses pour s'installer. Mais la question est intéressante pour le débutant comme pour le professionnel.

Quels sont les langages de programmation les plus utilisés et/ou demandés dans le monde du travail ?

Un classement des langages... Le rêve absolu du trolleur programmeur ! Et bien ça existe. Il y a le TIOBE Programming Community Index, basé sur la popularité des langages et actualisé en permanence (en bonne partie grâce à des analyses de résultats de recherche sur Google, Yahoo, etc...).

Cependant, ce classement ne reflète pas forcément l'usage d'un langage donné dans le milieu professionnel. C'est pourquoi je vous propose un autre indice, cette fois basé sur les hits obtenus sur Monster.fr :

LE Classement (au 10/12/2007) :

Langage Hits sur Monster Classement

Classement TIOBE
Java 965 1

1
C 675 2

2
C++ 533 3

5
PHP 391 4

4
ASP 266 5

n-c
VB 223 6

3
Javascript 214 7

10
Perl 149 8

7
COBOL 91 9

15
Python 53 10

6
Delphi 38 11

11
ADA 25 12

24
Assembleur 15 13

n-c
Fortran 8 14

22
Ruby 5 15

9
Ocaml 2 16

79
Erlang 1 17

40
Haskell 0 18

34
Prolog 0 18

27
LISP 0 18

17

Méthodologie :

Sur Monster.fr, sans aucune précision autre que le mot-clef correspondant au nom du langage (hormis pour C et Assembleur : on ajoute le mot-clef "informatique"), on lance une recherche. Le choix des langages testés est a priori aléatoire : il s'agit de choix personnels, mais ils sont globalement pertinents par rapport à l'index TIOBE. Les langages .NET n'ont pas été testés, cette méthode étant peu adaptée à leur cas (C = C# = C.NET ? VB = VB.NET ?). A noter que je ne considère pas HTML, XML, LaTeX, SQL, Shell, BATCH et autres comme des langages de programmation à proprement parler (certes, c'est discutable ==> un troll ?)

Commentaires :

Les résultats sont dans l'ensemble assez logiques et comparables à ceux de l'index TIOBE. L'assembleur et l'ASP n'apparaissent pas dans celui-ci, pour diverses raisons détaillés sur leur site.
On voit clairement que certains langages ne sont pas vraiment à la mode en France : Ruby entre autres, et que d'autres sont assez sous-estimé par TIOBE (Fortran, ADA, COBOL). Ces langages ne sont effectivement pas "glamour" comme le Python, le Ruby ou l'Ocaml, mais ils ont fait leurs preuves, chacun dans leur domaine (respectivement : sciences, systèmes embarqués, gestion/finance).
Pas plus de commentaire sur la place sinistre détenue dans les deux classement par le Visual Basic (saymal !)...

Et l'apprentissage ?

Les formations comprenant l'enseignement de langage(s) de programmation sont nombreuses... Je vais me limiter ici à l'école d'ingénieurs MATMECA (en modélisation mathématique et mécanique), et au mastère spécialisé d'informatique de l'ENSEEIHT (école d'ingés multi-disciplinaire de Toulouse) :

MATMECA :
  • Fortran 90
  • C++
  • En option : Java ("Calcul Haute Performance" i.e. calculs parallèles), Python (ajout de modules sur codes de calculs industriels)...
Mastère ENSEEIHT :
  • ADA
  • Langage assembleur
  • PROLOG
  • Java
  • Javascript, PHP
  • C
  • LISP
  • + SQL, Shell, HTML, XML

AVERTISSEMENT : A ne prendre sous aucun prétexte comme un classement officiel ou même bien fait, comme un début de troll, une invitation au Java ou à l'abandon de l'Erlang !