Choisir un langage de programmation, le parcours du combattant ?
Lorsqu’on apprend la programmation de façon autodidacte, et surtout pour un usage personnel, nous sommes tous amené à se poser une question, « Vers quel langage je devrais m’orienter ? ». Il n’est pas toujours facile de se faire une idée entre les fils de discussion trollesques, voir complètement dépasser de date pour des langages très évolutifs.
Au delà de ce titre un peu tape à l’œil, je souhaitai faire un petit retour d’expérience, des situations auxquels on se retrouve lors du choix d’un langage informatique.
En avant propos, deux choses :
- Les comparatifs de langages entrainent souvent des flots interminable de discussions sur les forums spécialisés, il n’est pas toujours facile d’avoir un point de vu objectif, et surtout en n’entrant pas trop dans les trolls, je ferai de mon mieux pour ne pas en semer partout (ça va être dure). Donc les avis n’engage que moi.
- Les points de vus sont avant tout pour un usage personnel, parce qu’on peut se faire plaisir avant tout dans la programmation. Ce n’est pas un retour d’expérience en milieu professionnel donc. Cela n’empêche pas de pouvoir utiliser des outils prévus avant tout pour un usage professionnel
Je ne publie pas souvent d’articles sur la programmation, j’en avais fait quelques uns sur le langage C (liste chaînée par exemple), depuis, J’ai eu l’occasion d’apprendre, de pratiquer et de me documenter autours de quelques langages dont Java (avec un peu de JEE, Spring, Maven), PHP, Python (pygtk, voir même un peu django), et plus récemment Ruby On Rails.
Avant de choisir un langage, il faut se poser quelques questions je crois :
- Est-ce mon premier langage ?
- Est-ce pour m’orienter vers un usage web, ou au contraire une application ?
- Est-ce que je dispose du temps pour apprendre, suis-je plutôt assidu, ou si un problème me tiens tête trop longtemps je jète l’éponge ?
- Est-ce pour un but de produire quelque chose de précis, ou est-ce pour m’ouvrir l’esprit sur la programmation en général ?
- Est-ce juste pour me faciliter mon utilisation Linux ?
- Ai-je besoin d’un programme portable ? (multi-plateforme)
- Ai-je vraiment besoin de performances ?
Bien sûr, d’autre question peuvent se poser selon le cas de chacun, pour les étudiants par exemple. En répondant à ces questions, vous ne saurez toujours pas quel langage choisir, mais vous saurez dans quel état d’esprit vous vous trouvez, vers quel approche aborder ce choix et ces lectures. À partir de là, il ne vaut mieux pas foncer tête baisser vers un langage, mais se documenter sur le langage en lui même, et un peu autour également, la communauté, les API ou framework disponible, les divers outils autour de tout ça également. Je pense qu’il vaut mieux passer deux jours à fouiner un peu tout ça et se faire sa propre opinion, plutôt que de choisir tel langage « bêtement » parce que le copain à dit qu’il est bien et que les autres sont nul.
Votre premier langage ?
Le choix du premier langage n’est pas facile, sont souvent opposé le C et le Python pour débuter et le Java déconseillé, pour des applications logiciel et non web. Le C est bien pour une personne qui souhaite aller un peu plus en profondeur dans la programmation et les algorithmes, sans pour autant avoir envie de gros résultat rapidement. Le C est très instructif, mais il ne faut pas s’attendre à faire des applications intéressante rapidement, et cela passe par pas mal d’exercice tel que les listes chaînée par exemple, apprendre à utiliser les API disponible pour le C est également un très bonne exercice pour la capacité d’adaptation à des utilisations d’API qu’on ne connais pas. Quant à lui, le Python est sûrement beaucoup plus satisfaisant pour obtenir quelque chose de concret et utilisable vite fait, tout en restant un bon exercice pour les conceptions. On compare souvent les performances entre les langages, il est évident que le C est le plus rapide, mais encore faut-il se demander si vraiment on a besoin de performances, pour un usage personnel tel qu’on peut en avoir, il ne faut pas se leurrer, on ne fait pas de super gros projets sur des mois avec des bénévoles programmeurs, et on se limite souvent à quelques petit projets plaisant, par ci par là, ne mobilisant certainement pas de folles ressources sur l’ordinateur.
Pour un usage web, il est évident que des connaissances en HTML et CSS sont des prérequis incontournable, après cela, les possibilités sont très vaste quand même, dépendant des besoins sûrement.
Java
Le Java est un sujet très vaste. Il est pour sûr un langage très utilisé, d’une part très portable, pouvant d’un même code source être utilisé sur toute plateforme. Une des application qui contribue fortement à son succès est son usage autour du web dans un environnement professionnel. Dans ce cas, ce n’est plus simplement Java qui est utilisé, mais avec de nombreux framework tel que Spring, et devient alors une approche vraiment différente qu’on pourrait avoir avec une application avec Java uniquement. De plus, l’actualité autour de Java est un peu tendu en ce moment, comme autour de beaucoup d’application que Oracle à mis la main dessus. (à lire par exemple, Java traverse-t-il une mauvaise passe ?). Mettant également une remarque sur le fait que Java est un langage qui se complexifie au fil du temps.
Mon point de vue sur le Java est : c’est instructif pour sûr comme langage, permettant beaucoup de chose, je me suis posé la question à savoir si pour un usage personnel, le java n’est t’il pas « un peu de trop ». J’ai choisis ce langage après le C, parce que je voulais un changement total dans l’approche d’un langage, et je pensais que choisir un langage « tout objet » été plus judicieux que simplement de passer au C++. Le java permet quand même de faire quelques applications graphiques après un temps d’apprentissage quand même. Cependant on a vite fait de se perdre dans beaucoup de choses, tel que les designs paterns.
De nombreuse discussion comparatives entre le C++ et le Java existe au travers du web, et je ne m’y risquerai pas :þ
Python
Une fois passer outre le système d’indentation et les nombreux troll concernant sa lenteur, on trouve quand même un langage plutôt bien fourni en API et divers outil, et restant agréable à l’usage. Il permet également de faire des applications graphique assez rapidement, sans avoir de grosses connaissances au préalable. Je dois dire que d’avoir appris Java avant, m’a bien aidé pour les concepts avec pygtk. Pour le graphique, reste à faire le choix entre ce qu’il existe, voir pygtk ou pyqt. Encore un fois, ça reste subjectif, les documentations des deux côté son plutôt bien fourni, j’avais suivis le tuto de pygtk sur developpez.com par exemple, qui est bien fait.
Le Web
Encore là un bien vaste sujet. Il est évident que l’usage du web à évolué pour l’utilisateur, et que derrière ça, le côté du développeur à complètement été révolutionné. Alors qu’avant il suffisait d’avoir une approche très basique du PHP, à aujourd’hui sont rajouté d’autres langage tel que le JavaScript et l’Ajax, on voit également des framework tel que jQuery afin de faciliter l’utilisation de JavaScript. Et continu à évoluer à grande vitesse. L’approche du web devient de plus en plus celle qu’on a pour le développement d’un logiciel par exemple, et fait appel à des techniques utilisé par celui-ci.
Pour le PHP, son approche objet est bien pratique pour la création de script entier, et non pas juste un petit morceau par ci par là autour du html comme il y a 10 ans encore :þ. Pour une utilisation intéressante et complète, il vaut mieux se pencher sur les divers framework existant. C’est pour sûr l’orientation que je prendrai si je me remets, essayer d’avoir une approche plus « MVC » qui peut être apporté par de nombreux framework.
Pourquoi utiliser un framework et plus spécifiquement en MVC ? Tout d’abord une approche MVC permet d’avoir une structure bien séparé, un peu comme on séparerai le moteur, carrosserie et les divers organes d’une voiture pour mieux pouvoir contrôler ce qu’on fait, et surtout mieux pouvoir faire évoluer. Même si refaire la roue peut être instructif, on a peut être pas toujours envie d’y revenir, et c’est là qu’on va se demander, est-ce quelqu’un à déjà fait la fonction dont j’ai besoin par exemple, que je pourrais récupérer pour mon propre projet, permettant de me concentrer sur d’autre point intéressant du projet. Les framework permet de mettre à disposition quelques utilitaires afin de faciliter les développement. Pour comprendre ça avec un exemple, lorsqu’on regarde les divers applications internet, beaucoup (si ce n’est la plupart) comporte par exemple un formulaire d’inscription, ou un système d’autentification, de login/logout, il peut donc être intéressant de se faciliter la vie là dessus.
J’ai voulu voir ce que donne des langages normalement prévu pour des logiciels, pour un usage web, et deux cas particulier: Django, qui est un framework pour Python, permet donc toujours dans un système MVC de créer de toute pièce une application web sous une base de python, le site reste bien fournis, mais je ne m’y suis pas pencher plus que ça. L’une des choses amusante avec Django, c’est la génération automatique d’une partie admin du web, en effet, bien souvent une partie administration existe sur les web, et parfois un peu fastidieuse à faire.
L’autre alternative sur lequel je me suis penché et le Ruby On Rails, je dois dire être agréablement surpris par celui ci, permettant de faire des application web pouvant être de conception avancé, et cela assez facilement et rapidement. Cependant, ce n’est pas forcément une approche classique (toujours du MVC). Et qu’il faut apprendre un autre langage qu’est le Ruby, ce n’est pas forcément un langage habituel pour apprendre la programmation c’est certain. On retrouve un framework assez complet et évolutif, avec de bon support sur les technologies JavaScript et Ajax (ainsi que jQuery par exemple). Peut être que dans de prochains articles je pourrais en faire des tutoriels, à voir. Il est assez impressionnant de voir une des vidéos de présentation du site, créant une base de blog en 15 minutes. Rails permet d’avoir aussi une approche Test Drive Developpment, permettant de se faire guider par des testes unitaires.
En conclusion pour les approches web, le choix est libre à chacun, mais je pense qu’un langage seul en lui même n’est pas forcément la meilleur solution. Même si le PHP à lui tout seul peut faire des merveilles, il est préférable je pense voir ce qu’il se fait autour, et surtout ne pas partir avec trop de préjugé et un regard neuf si c’est vos débuts pour le choix d’un langage orienté web. Comme on s’en douterai, l’usage de Java pour du web même si c’est possible et utilisé, reste quand même une artillerie lourde si c’est pour un développement à titre personnel.
Conclusion
Rien ne sert de se décider trop vite si c’est pour se tromper sur les attentes du langage, bien savoir ce que l’on veux, mais également penser à regarder autour du langage lui même. Si c’est des applications graphique qui vous intéresse, se renseigner sur la documentation d »API graphique (pygtk pour python par exemple) peut être un plus pour partir d’un bon pied.
Il reste encore bien des aspects que je n’ai pas abordé, surtout ce qui est de l’administration système, avec le bash ou le perl par exemple.
Ce billet n’avait pas pour but d’être un guide pour choisir tel ou tel langage, mais bien de montrer que beaucoup de questions sont derrière cette simple question « Vers quel langage je vais m’orienter ? ». Et que de répondre à cette question peut se révéler être un vrai parcours du combattant au fil des lectures, mais c’est un passage obligé je pense, surtout pour ne pas rester sur des préjugés ou des « le pote il a dit que ». Parce que apprendre un langage demande du temps et de l’attention, et qu’on a pas envi d’apprendre forcément pour rien, ce temps imparti à ce coté de documentation n’est pas superflu.
En espérant que la lecture du billet puisse être utile à quelqu’un.