Je rebondis sur l'argument des outils de développement qui semble être pour vous un point important pour la productivité, parce que j'ai quand même beaucoup de mal à croire à celui-ci en particulier (tout comme au "x10" entre développeur expérimenté et un débutant, mais la discussion dérive déjà donc je ne vais parler que du premier point ^^).

Pour mes projets perso j'utilise Notepad++ (ou n'importe quel bloc-note évolué équivalent), tandis qu'au boulot j'utilise principalement Visual Studio pour C# et IntelliJ IDEA pour Java/Scala. Peut-être que je suis un piètre utilisateur de ces outils (c'est particulièrement vrai pour IDEA d'ailleurs, je suis loin de connaître tous les raccourcis), mais même s'il y a des tâches sur lesquels ils me font gagner du temps je ne les considère ni l'un ni l'autre comme des outils indispensables au développement :

- Je passe beaucoup plus de temps à lire du code qu'à l'écrire, et il me semble que c'est vrai pour à peu près n'importe quel projet sur lequel plusieurs développeurs travaillent (d'autant plus vrai que les développeurs sont nombreux d'ailleurs). Les fonctionnalités qui me seraient les plus bénéfiques sont donc celles qui me permettent de lire plus efficacement, donc j'ai surtout besoin d'une fonction de recherche, d'une fonction qui permet de naviguer facilement dans le code (suivre une référence, vers à la déclaration d'un symbole, etc.) et d'un éditeur qui se lance et ouvre des nouveaux fichiers instantanément. Je peux trouver ça dans à peu près n'importe quel éditeur de code sans avoir besoin d'une IDE très évoluée.

- Même quand "j'écris" du code ça n'est pas véritablement la frappe au clavier qui me prend le temps de temps, donc au-delà d'une complétion basique pour ne pas avoir à taper entièrement le nom de mes fonctions, je n'ai pas besoin de grand chose. Beaucoup d'outils qui proposent des templates de code me demandent finalement plus de temps pour naviguer et compléter ce qui a été écrit que si je l'avais tapé moi-même.

- Pour le refactoring je vois deux cas : soit il s'agit de refactoring basique (par exemple renommer un symbole ou changer l'ordre des paramètres d'une méthode) et je fais tout en ligne de commande, à base de git grep -Fl machin | xargs $EDITOR ; c'est moins efficace que les outils de renommage intégrés, je perds un peu ici, mais je ne passe pas non plus mon temps à renommer des variables donc c'est une perte limitée. Dans le deuxième cas il s'agit de refactoring complexe qui implique des changements de plusieurs classes et interfaces, et ici je n'ai pas trouvé un outil qui me fasse gagner du temps.

Après je me rends compte que certains langages rendent l'utilisation d'IDE plus indispensable que d'autres, et je ne pense pas que ce soit une bonne chose. Je n'ai aucun mal (dans le sens "aucune fonctionnalité ne me manque au point de me faire changer d'outil") à utiliser Notepad++/terminal pour écrire du C, du C++, du Python ou du Shell, ou Notepad++/navigateur pour faire du web. En revanche écrire du Java sans IDE est franchement pénible et écrire du Scala devient même suicidaire. Mais en déduire qu'une IDE est un outil indispensable pour un développeur serait à mon avis une mauvaise conclusion, je pense que la faute se situe au niveau des langages.
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Je suppose que ton refactoring à base de grep n'est absolument pas limité par sa portée, et personnellement ça me semble limite suicidaire — deux variables portant le même nom sont renommées même si elles n'ont rien à voir et qu'elles sont dans des portées différentes ?

Je ne partage pas tellement ton opinion concernant le fait qu'il soit néfaste de devoir avoir à disposition un bon IDE pour apprécier le langage. Pour moi c'est un peu comme les gens qui disent que le C++ est un bon langage et que ça n'a rien à voir avec le fait que la STL soit de qualité discutable.
Pour moi, le langage, le framework et l'IDE forment un tout, et tous les trois concourent à une bonne efficacité.
En fait je ne vois pas ce que ça apporte de pertinent de les évaluer séparément.

Cela dit, je ne travaille pas sur des projets impliquant beaucoup de personnes, donc on n'a manifestement pas le même usage des outils.

Tiens, d'ailleurs, tu fais comment pour dessiner tes fenêtres de GUI avec notepad++ (ou équivalent) ? Tu fais tes fenêtres manuellement ?
J'ai des collègues qui ont tendance à insister dans ce sens, et ça m'exaspère : c'est énormément moins efficace à écrire, le résultat est généralement relativement moche (marges pas régulières, etc), l'ergonomie finale est très largement moins bonne, et les modifications sont extrêmement pénibles à faire, à fortiori si la personne modifiant la fenêtre n'est pas la personne l'ayant écrite. Au final je ne vois que des inconvénients majeurs.
Je suis dans le même cas que Penpen : je suis le seul développeur là où je bosse, et le "pire" que j'ai à faire, c'est reprendre du code des autres.
Passer à un vrai IDE de qualité (PhpStorm pour le PHP, et - dans un bien moindre mesure - CSS, Javascript et HTML) m'a changé la vie. Rien que l'inspection de code, pouvoir accéder en un clic à la hiérarchie d'héritage d'une méthode donnée, avoir des détections de code dupliqué, la possibilité de mettre en forme le code de façon propore d'un raccourci, la prise en compte de phpDocumentor, la détection des erreurs et warnings en cours de frappe... tout ça s'est vite révélé indispensable. Mais depuis que j'utilise le débuggeur intégré et que je n'ai plus besoin de faire des echo "prout $a"; partout pour suivre l'exécution du code, ou que je peux interrompre un script d'un clic (je travaille sur des scripts de traitement de données qui peuvent mettre plusieurs dizaines de minutes à s'exécuter) sans avoir à redémarrer tout httpd, tout ça est vraiment du temps gagné.
Après, je suis d'accord que, quand j'ai à faire un "script-minute", le mode projet de l'IDE est un peu lourdingue. Je trouve dommage qu'on ne puisse pas avoir un mode "bloc-note" détaché de tout projet (rien que pour la sélection verticale, par exemple, quand je dois manipuler des CSV un peu pourris) ; là, si je veux profiter des outis intégré à l'IDE, je dois jongler avec des inclusions de fichiers externes dans un projet (ou alors avoir les outils en double, dans l'IDE et en standalone, mais ça n'a aucun sens vu que mon IDE est ouvert dans 99% du temps).
avatar
Pen^2 (./2) :
Je suppose que ton refactoring à base de grep n'est absolument pas limité par sa portée, et personnellement ça me semble limite suicidaire — deux variables portant le même nom sont renommées même si elles n'ont rien à voir et qu'elles sont dans des portées différentes ?
Le grep est là pour trouver les occurrences, pas effectuer les remplacements : dans tous les cas (y compris avec un outil automatique) je préfère vérifier ce qui va être affecté. C'est de moindre intérêt pour un renommage de variable (mais là encore c'est pas vraiment le cas d'utilisation qui m'intéresse le plus), en revanche pour des choses plus impactantes je préfère passer en revue ce que je modifie même si l'outil m'assure que ça compilera encore après le changement (ce qui est une bonne chose, mais insuffisante je trouve).
Pen^2 (./2) :
Je ne partage pas tellement ton opinion concernant le fait qu'il soit néfaste de devoir avoir à disposition un bon IDE pour apprécier le langage. Pour moi c'est un peu comme les gens qui disent que le C++ est un bon langage et que ça n'a rien à voir avec le fait que la STL soit de qualité discutable.
Pour moi, le langage, le framework et l'IDE forment un tout, et tous les trois concourent à une bonne efficacité.En fait je ne vois pas ce que ça apporte de pertinent de les évaluer séparément.
Du coup tu vois l'intégralité de ta chaine logicielle comme une seule brique ? Je vois l'IDE comme un outil optionnel au développement, au même titre que mon OS, Git, mon framework de test, ou encore Firefox et les CSS quand je fais du développement web. Comme pour tous ces autres exemples j'aime bien pouvoir choisir un à un les logiciels que j'utilise et prendre ceux qui me semblent les plus adaptés ; en l'occurrence pour mes projets perso c'est très souvent des outils simples parce que je n'ai pas besoin des fonctionnalités que m'apporterait une IDE et que j'ai l'impression d'être plus productif de cette façon (pour refaire le lien avec l'origine de la discussion).

La question me semble tout aussi pertinente pour C++, puisque tu cites cet exemple : dirais-tu aux gens qui font régulièrement du C++/Qt qu'ils ont fait un mauvais choix parce que la STL est pourrie, alors qu'ils ne l'utilisent pas ? Tout l'intérêt d'une chaine logicielle modulaire c'est de pouvoir choisir les maillons, je trouve un peu dommage de se fermer à cette possibilité.
Pen^2 (./2) :
Tiens, d'ailleurs, tu fais comment pour dessiner tes fenêtres de GUI avec notepad++ (ou équivalent) ? Tu fais tes fenêtres manuellement ?
Non en effet, c'est un bon exemple, c'est l'un des cas où j'utilise une IDE. En l'occurrence je fais plutôt ça en C# et j'utilise SharpDevelop qui est minimaliste comparé à Visual Studio, essentiellement parce qu'il apporte cette fonctionnalité. Après ça ne me semblerait pas non plus absurde de faire à la main : c'est comme ça que je fais du web et ça a aussi ses avantages (meilleur contrôle sur le résultat, langage déclaratif souvent plus concis pour obtenir un résultat donc reviews de code plus faciles, etc.).



Petit c/c de ma réponse à Folco sur IRC, suite à une remarque très pertinente de sa part :
22:32 <@Zeph> pour moi c'est ça la clé de la discussion
22:33 <@Zeph> les gens qui mettent l'accent sur la facilité d'écriture du code ne pourront pas s'entendre avec ceux qui mettent l''accent sur la facilité de lecture
22:33 <@Zeph> exemple basique : un langage comme Perl, qui te propose 654 raccourcis pour faire du code plus concis, mais tout le monde s'accorde à dire que c'est illisible
22:35 <@Zeph> perso je considère qu'un code, ***dans un projet à plusieurs*** (c'est la partie importante), sera lu N fois (avec N > 1) alors qu'il sera écrit 1 fois22:35 <@Zeph> donc je privilégie toujours la lecture à l'écriture
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Je suis d'accord avec toi sur la lecture du code. Mais justement, même quand je suis tout seul à coder (j'ai quelques projets perso sur le feu), l'IDE va me donner un code naturellement beaucoup plus propre : pas d'include inutiles, normes de code respectées, …

Ensuite, je ne vois pas comment on peut naviguer correctement dans un code sans IDE : l'IDE va permettre d'aller et venir beaucoup plus facilement vu qu'il sait où est définie la fonction que je souligne (potentiellement dans une lib externe), ou la définition d'origine de la méthode overridée.

Pour le refactoring, j'en fais beaucoup de façon très locale (sur 10-15 lignes), et ça permet de gagner pas mal de temps de le faire automatiquement.
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Ah, du coup tu me fais penser à un autre argument que j'ai oublié alors que c'est probablement l'un de ceux qui m'importent le plus : j'essaie d'éviter d'utiliser plusieurs outils différents pour faire la même chose. Ça m'ennuie (et ça me ralenti considérablement) d'utiliser Visual Studio quand je fais du C# mais IDEA quand je fais du Scala, et ça m'ennuierait encore plus d'utiliser PHPStorm ou PyCharm ou je ne sais quoi pour d'autres environnements. Tous ces outils sont différents donc il faut que je réapprenne N fois à faire les mêmes choses, à mémoriser des raccourcis clavier différents, à me familiariser avec des menus qui contiennent les mêmes options mais organisées de façon totalement différentes, à m'habituer à plein de petit changements de comportement subtils pour des opérations que je vais utiliser 100 fois par jour, etc.

Je pense que s'il y avait un IDE capable de gérer tous ces langages, avec des fonctionnalités réduites pour éviter d'en faire une machine à gaz (donc pas Eclipse par exemple) je pourrais probablement être converti rapidement. C'est d'ailleurs exactement comme ça que je vois Notepad++ : c'est un éditeur (très) limité mais qui fait son job rigoureusement de la même façon quel que soit le langage que j'utilise, et c'est un atout précieux.
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Je suis d'accord, sauf qu'un truc généraliste ne fera rien vraiment correctement (à mes yeux grin).
C'est un peu l'avantage de Jetbrains : ils ont un IDE par langage (en gros), mais ils sont tous sur la même base et tu n'as pas à tout réapprendre pour passer de l'un à l'autre. J'utilise pas mal IntelliJ ou PyCharm, assez indifféremment. J'aurais probablement un projet dans quelques mois à faire avec un langage plus performant (C, C++ ou Swift), il y a des chances que j'utilise CLion (sauf si je passe à Xcode pour des questions de sous vu que ça sera un projet perso grin)
Il faut plutôt voir ça comme des distrib d'Eclipse spécialisées plutôt que des IDE différents.
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Voilà, je suis globalement d'accord avec Flan : un IDE multi langage, c'est Eclipse ou Netbeans, c'est lourd (très lourd), et pas forcément utile dans bien des cas (sauf dans de rares situations, on ne fait pas en même temps du C#, du Java et du PHP). En plus, ça ne fera que rarement très bien tous les langages (Eclipse PDT pour PHP était vraiment mal fichu, à mes yeux).

Par contre, les IDE de chez JetBrains, s'ils sont spécialisés, ont tous les mêmes fonctionnalités, les mêmes raccourcis clavier, etc. Et ils ne sont pas spécialisés pour "un langage", mais plutôt pour "un mode d'utilisation" (PhpStorm inclut les outils JS, HTML et CSS de la version de l'IDE purement Web).
avatar
(D'autant que, dans le cas d'Eclipse/Eclipse PDT, on se retrouve au final avec un socle commun, mais les fonctionnalités de PDT font qu'on a un environnement différent d'Eclipse de base, donc c'est moins homogène que deux IDE JetBrain, par exemple)
avatar
OK, peut-être que si c'est un ensemble d'IDE fournis par le même éditeur il y a un peu de cohérence, mais je reste convaincu qu'on peut tout à fait avoir quelque chose de multi-langage si on élimine les fonctionnalités les plus avancées. Un autre avantage est qu'en faisant ça on tend vers un logiciel plus léger ; je ne connais pas les autres IDE de JetBrains mais IDEA est vraiment ridicule à ce niveau, on est clairement dans l'inutilisable pour moi.
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)
Perso, en théorie je suis d'accord avec Flanker (un IDE devrait faire partie des outils qui augmentent la productivité d'un programmeur), mais en pratique je suis d'accord avec Zeph (pour de multiples raisons, je continue d'utiliser un éditeur "simple"). Voilà qui va beaucoup faire avancer le débat embarrassed

Pour préciser un peu plus, outre ce qu'a déjà expliqué Zeph, j'ai constaté que le temps que je passe à coder est fortement dominé par la reflexion. Ce qui veut dire que, quand bien même j'aurais un moyen 2 fois plus rapide d'écrire ou de modifier du code, le temps de développement resterait sensiblement le même. D'expérience, si jamais ce n'est pas le cas, très souvent ça veut dire deux choses :

- si je passe plus de temps à écrire qu'à réfléchir, c'est parce que je n'utilise pas le bon langage ou les bonnes bibliothèques. Ca revient en quelque sorte à faire du "brute force" pour obtenir un résultat. Pour prendre un exemple concret, même si Folco avait utilisé le meilleur IDE du monde pour écrire et débugger son "framegen" en C (700 lignes réparties dans 16 fichiers), il y aurait passé beaucoup plus de temps que ce qu'il m'aurait fallu pour faire la même chose en langage de script dans Notepad, que ce soit les 20 lignes de Perl ou un peu plus en Python, bien lisible avec de la doc et des tests.

- ou bien, si le code est légitimement fastidieux à écrire, et que je me retrouve quand même à être limité par le manque de completion automatique ou de contexte, etc... c'est que j'écris du code un peu en mode "pilote automatique" et dans ce cas je préfère me mettre à coder le pilote automatique qui codera à ma place. Typiquement, j'écris des générateurs de code. Même si au final je ne gagne pas forcément du temps, je préfère effectuer une activité stimulante intellectuellement plutôt que faire un travail de robot. Exemples : quand c'est la dixième fois que tu codes un parseur à la main et que t'as pigé la technique tu vas commencer à réfléchir à plutôt faire un générateur de parseur, pareil quand tu codes un système de RPC avec du marshalling de données, ou des bindings pour faire interagir deux langages, etc... Le but est de se retrouver à devoir coder quelque chose qui va demander plus de réflexion que de code à écrire.

Maintenant, je conçois tout a fait qu'un IDE permet de grapiller des secondes et des minutes par-ci, par-là, mais je le vois plutôt comme du confort "local". Pour moi, c'est comme quand je dis à tout le monde que j'utilise Vim parce que le mode d'édition est plus efficace qu'un éditeur classique, et que du coup je suis beaucoup plus rapide avec. En vrai, je suis bien content d'utiliser Vim parce que j'en ai l'habitude, mais si je mesure effectivement le temps gagné sur une journée ou une semaine, je suis à peu près certain que c'est négligeable. Pas de quoi casser trois pates à un canard.

Par contre, si on me présente un IDE qui permet vraiment d'aller 10 fois plus vite, en éditant directement le programme en fonctionnement (live editing), qui donne accès à toutes les valeurs du programme, même dans le passé (time travel debugging), qui permet de visualiser le résultat des algorithmes graphiquement de manière simple, etc... alors là c'est autre chose. Mais on n'y est pas encore. Aujourd'hui les IDE sont un peu archaïques, et leurs désavantages (lourdeur, spécialisation pour tel ou tel environnement, manque de flexibilité, etc...) sont trop nombreux à mon goût par rapport aux gains apportés.
nitro (./11) :
time travel debugging
Ah, qu'est-ce que j'aimerais que PhpStorm le fasse love
avatar
Quasi full-pencil avec nitro.

Quand aux IDE qui font du live editiing, certains language/ide s'en approche: Swift (et un autre dont j'ai oublié le nom..)

Mais est-ce vraiment un moyen plus efficace de programmer? Je sais pas, comprendre certains points du programme oui probablement, mais un "vrai" programme qui travaille sur des données complexe ou doit faire quelques milliers de boucles pour un truc basique, tu te perds rapidement dans des trucs comme le debuggage/liveediting..
avatarProud to be CAKE©®™
The cake is a lie! - Love your weighted companion cube

->986-Studio's Wonder Project!<-
yN a cassé ma signature :o
Bah, ça arrive souvent que tu es en train de single-stepper ton programme, et tu vois apparaître devant tes yeux la prochaine ligne, qui, vu les valeurs actuelles de tes variables, ne pourra tout simplement pas marcher. Tu as forcément envie d'aller éditer cette ligne et continuer l'exécution avec la ligne éditée.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Zeph (./10) :
OK, peut-être que si c'est un ensemble d'IDE fournis par le même éditeur il y a un peu de cohérence, mais je reste convaincu qu'on peut tout à fait avoir quelque chose de multi-langage si on élimine les fonctionnalités les plus avancées. Un autre avantage est qu'en faisant ça on tend vers un logiciel plus léger ; je ne connais pas les autres IDE de JetBrains mais IDEA est vraiment ridicule à ce niveau, on est clairement dans l'inutilisable pour moi.
Je trouve qu'IntelliJ s'est malheureusement dégradé à ce niveau (tout comme PyCharm, même s'il reste nettement plus réactif qu'IntelliJ), et en Scala c'est encore pire qu'en Java. J'espère vraiment qu'ils vont faire des progrès sur ce point.
L'IDE me sert justement à naviguer plus facilement dans le code, bien mieux que vim.

Je suis tout à fait d'accord pour dire qu'on passe beaucoup plus de temps à lire qu'à écrire du code. C'est une des raisons pour lesquelles j'apprécie le Python : le code est lisible, et comme tout le monde a la même norme et les mêmes habitudes, le code des autres est en général très lisible. Bref, tout le contraire de Scala #troll#

Je vous rejoins aussi sur le fait qu'il vaut mieux un IDE qui soit réactif qu'un IDE avec plein de fonctions. C'est dur de trouver le bon compromis, tous les IDE commencent leur vie comme étant super légers et ajoutent des fonctions peu à peu et deviennent trop lourd. Dur de faire marche arrière ! Je trouve qu'IntelliJ commence à passer du mauvais côté de la barrière. Le fait d'avoir un IDE par langage mais une base commune a tout de même permis de retarder ce moment, sans avoir vraiment un IDE différent par langage (bon, côté facturation, c'est autre chose cheeky ).

Par contre, l'IDE m'aide à écrire, vu que le moindre code écrit a beaucoup, beaucoup plus de chances de fonctionner avant le test. Et ça, j'apprécie tongue
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
TL;DR: pencil nitro

Je peux citer le gros mastodonte, niveau IDE Windows ? grin

J'avais utilisé SharpDevelop un moment, ne pouvant pas installer Visual Studio sur une machine empruntée. C'étais bien foutu, rapide, er ça crashait peu.

Et puis je suis revenu à Visual Studio. Je ne dirais pas que ma productivité a augmenté, mais j'avais deux plugins géniaux: ReSharper (C#) et VA-X (C/C++). J'avais des templates de code que j'injectais dans mon fichier en quelques clics.

Je fais ça assez fouilli parce qu'il est 3h du mat et que j'arrive pas à dormir, donc je m'occupe sur mon téléphone (ce qui n'aide pas au sommeil grin); j'ai lu en diagonal le topic, mais je pense qu'à force d'utiliser un IDE on en vient à être plus rapide avec parce qu'on connaît ses raccourcis, ses bugs, les bons addons... Tout ça forme un tout.

Ça ne m'empêche pas d'utiliser vim et de compiler en ligne de commande dès que possible, quand j'écris des programmes de moins de 1000 lignes où je me fous d'avoir quelque chose d'orienté objet; par contre, je ne vois absolument pas travailler avec Vim ou tout autre éditeur « basique » sur des projets où on en est à avoir un exécutable qui injecte une DLL dans un processus, ladite DLL chargant le CLR .Net et chargeant une DLL .Net, tout ça pour communiquer par WCF avec une appli serveur, sur le même PC ou pas. On me dira que c'est excessif, que j'aurais dû faire plus simple. Je suis d'accord, mais ce projet utilise du code que j'ai écrit il y a plusieurs mois, qui a été longuement testé, et dont je sais qu'il correspond à ce que je cherche.

En fait, l'IDE n'importe pas tellement; quand on en change, on finit par s'y retrouver après un temps d'adaptation. Ce qui compte, ce sont les bouts de code qu'on a écrit avant, auxquels on a sérieusement réfléchi et qui sont soit totalement réutilisables d'emblée, soit qui nécéssitent quelques ajustements au cas par cas.

Mais de l'autre main, Visual Studio qui crashe de façon aléatoire quand on utilise les flèches directionnelles pour bouger le curseur, ça rend juste malade.

#Zzz#