Qu'est-ce qui fait la beauté d'un logiciel ?
D'après un bloggeur, cela n'a rien à avoir avec la technologie et la beauté du code source

Le , par Michael Guilloux, Chroniqueur Actualités
On a l’habitude de discuter de la beauté d’un code ou d’une architecture logicielle. Mais il s’agit d’un aspect que ne voit pas l’utilisateur final pour lequel le logiciel est développé. Suite à plusieurs débats interminables sur ce sujet, on peut résumer que la beauté d’un code peut être définie par plusieurs critères. On peut rappeler entres autres, la clarté du code, le style d’écriture c’est-à-dire le nommage, l’utilisation intensive ou limitée de commentaires, les espaces, etc. Certains développeurs associent parfois la beauté du code à la performance. Bref, il s’agit d’une appréciation subjective qui est souvent liée à la technologie utilisée, mais là encore il s’agit d’un aspect que les utilisateurs finaux ignorent totalement.

Ce que les utilisateurs finaux voient, c’est l’interface utilisateur. Et ce qu’ils peuvent apprécier, c’est la convivialité du logiciel, comment est-ce qu’il leur permet de résoudre leurs problèmes et combien agréable c’est d’interagir avec le logiciel. Si les codeurs ont un penchant pour le code, c’est le logiciel qui compte pour les utilisateurs. Il est alors important de se demander ce qui caractérise un logiciel capable d’emballer les utilisateurs, étant donné que c’est par leur appréciation que l’on peut définir le succès du logiciel.

Pour le bloggeur Ole Lensmar, un beau logiciel est difficile à caractériser mais c’est quelque chose qui doit respecter les critères d’intégrité, d’utilisabilité et d’innovation.

« Un beau logiciel résout un problème, et il le fait mieux que tout autre », a écrit Lensmar. L’intégrité veut que le logiciel soit sans relâche fidèle à son objectif, c’est-à-dire le problème à résoudre. Il ne doit s’écarter ni à gauche, ni à droite pour flirter avec d’autres fonctionnalités. Il doit également rester fidèle à son « ton » avec l’utilisateur.

Selon le bloggeur, « un beau logiciel vous enseigne la danse, même si vous êtes nouveau à la musique ». Il dit cela pour faire allusion à l’utilisabilité. En d’autres mots, le logiciel doit être capable de guider l’utilisateur à travers les tâches à accomplir sans aucune ambiguïté, tout « en minimisant les risques d’un malentendu ou une mauvaise utilisation de ses fonctionnalités ». Il simplifie l’utilisation pour les utilisateurs moyens, mais permet également aux utilisateurs avancés d’exploiter son plein potentiel sans aucun problème.

En ce qui concerne l’innovation, Lensmar ne parle de nouvelles fonctionnalités comme on pourrait toute de suite le penser. Pour lui, un beau logiciel n'a pas peur de résoudre les problèmes dans de nouvelles façons. Autrement dit, il doit être flexible de sorte à permettre à l’utilisateur de résoudre un problème d’une manière différente de la façon dont il résout habituellement le problème. Cela doit être le genre de logiciel capable d’ouvrir les yeux de l’utilisateur sur de nouvelles opportunités, qui existaient déjà mais dont l’utilisateur n’était pas au courant.

Une chose est de définir ce qu’est un beau logiciel, mais c’en est une autre de pouvoir en arriver là. Pour Ole Lensmar, la technologie et la qualité du code ne suffisent pas pour créer un beau logiciel. Ce qu’il faut, c’est « une véritable vision du produit, nourrie par son créateur, le propriétaire du produit et l'équipe produit », et cela ne peut pas être exprimé dans un carnet de commandes ou traduit par une expression de besoins des utilisateurs. Le développeur doit aimer ses utilisateurs et investir dans leur interaction avec le logiciel.

Source : Smartbear

Et vous ?

Qu’en pensez-vous ?

Qu’est-ce qu’un beau logiciel ? Quelle est la place de la technologie et la qualité du code dans la création d’un beau logiciel ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Amnésix Amnésix - Membre à l'essai https://www.developpez.com
le 04/07/2015 à 12:54
Effectivement, si on se place du côté du développeur ou de celui de l'utilisateur, on aura certainement une définition différente de ce qu'est un beau logiciel. Je suis développeur mais j'ai été sensibilisé (et essaie de le resté) à l'aspect pratique de ce que je développe vis à vis de l'utilisateur final. Après tout, c'est pour ce dernier que je travaille (et aussi pour gagner de l'argent si on se veux plus bassement terre à terre).

Mais un autre aspect doit-être pris en considération. Les clients pour qui je travaille on souvent des demandes d'évolutions, il peut aussi y avoir des bugs (personne n'est parfait). Et je ne suis pas forcément disponible (vacances, déplacement...). Il faut donc que le code soit lisible, facilement compréhensible pour quiconque aurait à le maintenir. C'est un aspect extrêmement important il me semble.
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 04/07/2015 à 15:34
L'utilisateur final déteste se qui n'est pas universelle.

Les logiciels qui n'ont pas un thème classique par rapport l'os (Nvidia GeForce Experience par exemple), sa agace l'utilisateur.

Moins c'est exotique (l'interface graphique ou les ligne de commande a rentrer), plus c'est beau. C'est ma définition.

Chez Apple ils l'ont bien compris, l'interface de MacOS n'a pas énormément changée en 10ans.
Avatar de koyosama koyosama - Membre éprouvé https://www.developpez.com
le 04/07/2015 à 16:32
Qu’en pensez-vous ?
  • Cela existe la beauté d'un logiciel ? Je croyais que c'était un myth de développeur (:p)
  • Du peu d'experience que j'ai a partir de N+1 ou N+2 vers l'infini, ils en ont rien a f***re de la qualité logiciel. C'est le temps et le cout de developpement.
  • J'ai deja vu des logiciels qui implantaient des design Pattern juste pour que ce soit jolie. Mais au final, cela servait a rien.


Qu’est-ce qu’un beau logiciel ? La technologie et la qualité du code ont-elles vraiment une place dans la création d’un beau logiciel ?
  • Je pense que la qualité d'un code n'est pas donne a tout le monde. C'est comme un sabre, il faut beaucoup de pratique et de pragmatique. Dans le monde de l'entreprise, le temps est un bien précieux. La plupart du temps (Ce n'est pas vrai partout) on corrige plus de bugs qu'on développe.


Apres tout le monde le sait, l'utilisateur regarde juste l'interface graphique ou si il va cliquer de la meme facon que sont autre logiciel p****ri (un bouton de plus ou de moins, va le destabilise).
Avatar de foetus foetus - Expert confirmé https://www.developpez.com
le 04/07/2015 à 17:18
Citation Envoyé par koyosama Voir le message
Apres tout le monde le sait, l'utilisateur regarde juste l'interface graphique ou si il va cliquer de la meme facon que sont autre logiciel p****ri (un bouton de plus ou de moins, va le destabilise).
Et pourtant si

Imagines, tu utilises un logiciel et il y a 2 boutons: "Sauvegarder" et "Exporter"

Ou inversement, il n'y a que "Rechercher", mais toi tu veux "Rechercher et Remplacer" ("Remplacer" est une option de "Rechercher"
Avatar de psychadelic psychadelic - Membre expert https://www.developpez.com
le 04/07/2015 à 23:30
pff..

Si les utilisateurs avaient réellement du gout, le sens de l'esthétique et de la qualité, ça se saurait.
et ce n'est uniquement pour le monde des logiciels que cette "grande question" se pose...
Avatar de bruneltouopi bruneltouopi - Membre confirmé https://www.developpez.com
le 05/07/2015 à 0:27
Un beau logiciel repond d'abord aux fonctionnalités puis l'ergonomie ensuite la facilité d'exécution des tâches. Lorsque l'utilisateur retrouve 80% de cela alors pas de souci
Avatar de martopioche martopioche - Membre éclairé https://www.developpez.com
le 05/07/2015 à 1:12
Est ce que quelqu'un a un lien vers un post de blog d'un ingénieur méca présentant le concept d'une "belle machine à laver" ? Ou un menuisier posant les fondation de ce qu'est une "belle scie sauteuse" ? Sérieux, quand on bosse dans l'IT on n'a tellement rien à dire qu'on ouvre un sujet sur la définition d'un "beau logiciel" ? Un logiciel est un outil, on s'intéresse réellement à la "beauté" d'un outil ? À la rigueur, ça se trouve dans les objets qui trônent dans notre salon (disons B&O) ou dans le bureau (un bureau avec un iMac a quand même plus la classe qu'avec une boite en plastic cheap :p ) mais un logiciel une fois qu'on ne s'en sert plus, on ne le voit plus... Enfin, je ne sais pas, certains le laissent peut être actif parce qu'il est Bô...
Avatar de cbleas cbleas - Membre éprouvé https://www.developpez.com
le 05/07/2015 à 7:25
Est ce que quelqu'un a un lien vers un post de blog d'un ingénieur méca présentant le concept d'une "belle machine à laver" ? Ou un menuisier posant les fondation de ce qu'est une "belle scie sauteuse" ? Sérieux, quand on bosse dans l'IT on n'a tellement rien à dire qu'on ouvre un sujet sur la définition d'un "beau logiciel" ? Un logiciel est un outil, on s'intéresse réellement à la "beauté" d'un outil ? À la rigueur, ça se trouve dans les objets qui trônent dans notre salon (disons B&O) ou dans le bureau (un bureau avec un iMac a quand même plus la classe qu'avec une boite en plastic cheap :p ) mais un logiciel une fois qu'on ne s'en sert plus, on ne le voit plus... Enfin, je ne sais pas, certains le laissent peut être actif parce qu'il est Bô...
D'accord mais c'est ce qui explique que certains informaticiens sont incompris de leurs uilisateurs.
ils ont fait un beau code mais ca répond pas au besoin. c'est pas grave c'est beau
Avatar de - https://www.developpez.com
le 05/07/2015 à 13:03
Beau code ? hmm

Pouvez-vous donnez vos conceptions de beaux codes par des exemples, bien beau de parler d'art de programmation, mais je doute que tous aient une notion commune x) (langage web )

Perso je me pencherais plus vers:
- le squelette du code, comment il tient debout
- son workspace
- sa compilation
- ses dépendances (trop = très mauvais )
- certains tours de passe-passe permettant de raccourcir le code
- organisation des instructions (asm/c/c++/...) du code pour l'aérer lors de sa lecture (alignement de bloc d'instru par colonne, isolation de bloc de code en mini fonction si possible, ...)
- documentations inline dans le code
- Et un peu d'art-ascii pour "habiller" le code
- Et enfin une un peu de couleur dans le code, après tout un tableau en couleur est plus beau/vivant qu'un en noir et blanc.

skeleton:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
close loop
{
    if (keyboard(z, q, s, d, alt, ²) or mouse(right_click + move_mouse)) is active, then
    {
        if msg = (alt + ²)                 , then quit the close loop
        if msg = (z, q, s, d)              , then move   the camera
        if msg = (right_click + move_mouse), then rotate the camera

        clear  the screen
        update the scene(object) (by applying object rotation/movement and camera rotation/movement      )
        update the screen        (by project the scene into the array_screen through perspective equation)
        show   the screen        (by send the array_screen to the screen                                 ) 
    }

    show the frame per second
}

quit the program
workspace:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
HackEngine:
|Headers:
||library:
||- ASM_library.h
||
||source:
||- source_def.h
||- source_macro.h
||
||WinAPI:
||- WinAPI_def.h
||- WinAPI_macro.h
||
||- function_ext.h
|
|Resources:
||custom_exe:
||help:
||obj3D:
||screenshot:
|
|Sources:
||data:
||- scene.asm
||- values.asm
||
||garbage:
||
||update_scene:
|||camera:
|||- 1-manage_camera.asm
|||- 2-manage_camera.asm
|||- 3-manage_camera.asm
|||
|||object:
|||- 1-manage_object.asm
|||- 2-manage_object.asm
|||
|||scene:
|||- 1-manage_scene.asm
|||- 2-manage_scene.asm
||
||update_screen:
||- update_screen.asm
||
||- create_obj.asm
||- manage_event.asm
||- source_function.asm
||- WinAPI_function.asm
|
|- source.asm
|- readme.txt
compilation:
Code : Sélectionner tout
1
2
3
4
nasm -f win64 1.ASM/HackEngine/source.asm
gorc /o /machine x64 1.ASM/HackEngine/Resources/custom_exe/custom_exe.rc
golink /console /entry start 1.ASM/HackEngine/source.obj 1.ASM/HackEngine/Resources/custom_exe/custom_exe.obj C:\Windows\System32\kernel32.dll C:\Windows\System32\user32.dll C:\Windows\System32\gdi32.dll C:\Windows\System32\msvcrt.dll C:\Windows\System32\winmm.dll
dépendances :
Code : Sélectionner tout
1
2
3
4
5
6
kernel32.dll
user32.dll
gdi32.dll
msvcrt.dll
winmm.dll
aeration du code:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        start:
       ;{
            mov     [instance]         , rcx
            mov     [previous_instance], rdx
            mov     [cmd_line]         , r8
            mov     [cmd_show]         , r9d

            LoadImageA_     0, "data\Hackengine_logo.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE
            mov             [init_windows.icon_program], rax

            system_     "color 0A"
            system_     "title HackEngine"

            ; Set personalize resolution
                mov     [float_length], f32(1203.0)
                mov     [float_width ], f32(899.0)
                mov     [int_length  ], i32(1203)
                mov     [int_width   ], i32(899)

            call_   set_info_screen, init_windows

            .l1:
           ;{
                call_   windows_event, show_fps
           ;}
            jif  [quit] ,=, i32 false, .l1

            system_     "echo DONE"

            ret
       ;}
documentations inline:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        func:
       ;{
            ;=============================================================================================.
            ; Name    : func(...)                                                                        ;|
            ; Purpose : None                                                                             ;|
            ; Input   : None                                                                             ;|
            ; Output  : None                                                                             ;|
            ; Destoy  : None                                                                             ;|
            ; Define  : None                                                                             ;|
            ; Data    :                                                                                  ;|
                        [section .data]                                                                  ;|
                       ;{                                                                                ;|
                                ; None                                                                   ;|
                       ;}                                                                                ;|
                        [section .code]                                                                  ;|
            ;=============================================================================================.
           ;{                                                                                            ;|
                ; Code                                                                                   ;|
           ;}                                                                                            ;|
            ;=============================================================================================.
            ; / func                                                                                      |
            ;=============================================================================================.

            ret
       ;}
art-ascii:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;==========================================================================================================================================================================================================
; HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER      HEADER
;==========================================================================================================================================================================================================
;{
        %include    "1.ASM\HackEngine\Headers\source\source_def.h"
        %include    "1.ASM\HackEngine\Headers\source\source_macro.h"
        %include    "1.ASM\HackEngine\Headers\WinAPI\WinAPI_def.h"
        %include    "1.ASM\HackEngine\Headers\WinAPI\WinAPI_macro.h"
        %include    "1.ASM\HackEngine\Headers\library\ASM_library.h"
        %include    "1.ASM\HackEngine\Headers\function_ext.h"
;}
;==========================================================================================================================================================================================================
; END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER      END_HEADER
;==========================================================================================================================================================================================================

;==========================================================================================================================================================================================================
; CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE      CODE
;==========================================================================================================================================================================================================
[section .code]
;{
        start:
       ;{
            mov     [instance]         , rcx
            mov     [previous_instance], rdx
            mov     [cmd_line]         , r8
            mov     [cmd_show]         , r9d

            LoadImageA_     0, "data\Hackengine_logo.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE
            mov             [init_windows.icon_program], rax

            system_     "color 0A"
            system_     "title HackEngine"

            ; Set personalize resolution
                mov     [float_length], f32(1203.0)
                mov     [float_width ], f32(899.0)
                mov     [int_length  ], i32(1203)
                mov     [int_width   ], i32(899)

            call_   set_info_screen, init_windows

            .l1:
           ;{
                call_   windows_event, show_fps
           ;}
            jif  [quit] ,=, i32 false, .l1

            system_     "echo DONE"

            ret
       ;}
;}
;==========================================================================================================================================================================================================
; END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE      END_CODE
;==========================================================================================================================================================================================================

;==========================================================================================================================================================================================================
; FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION      FUNCTION
;==========================================================================================================================================================================================================
[section .code]
;{
Voilà à vous maintenant de définir votre conception de l'art.

Sinon j'ai remarqué une nette tendance de la disparition de cet art au fur et à mesure qu'on acquiert un langage de niveau supérieur
Avatar de RyzenOC RyzenOC - Inactif https://www.developpez.com
le 05/07/2015 à 14:11
- ses dépendances (trop = très mauvais )
Je ne suis pas d'accord avec vous sur ce point.
Un bon code dois justement utiliser a mon sens un maximum de bibliothèques/dépendances existante (si nécessaire bien sur), car en générale, les développeurs (dont moi y compris) réinventent très mal la roue.

En python j'arrive a faire un code aussi puissant que si je l'avais fais en C ou en assembleur, car j'utilise des bibliothèques bien optimisé, pour le calcule scientifique par exemple, je défis quoiqu'onques de faire un code plus performant que numpy (qui est fais en C).
numpy est conçue par de brillant mathématiciens et ce depuis plus de 10ans , aucun développeur ne peut faire mieux dans le temps qui lui est impartis pour faire son projet, et même au delà, je connais très peu de personnes qui soient des génies en informatique et en mathématiques.

- certains tours de passe-passe permettant de raccourcir le code
C'est le gros défauts des langages de haut niveau, manipuler par les débutants.
En php ou en python, on arrive a faire de ces trucs que parfois on se demande comment le langage peut accepter de telles ineptie.
Contacter le responsable de la rubrique Accueil