Un code source lisible en C

Plus exactement : lisible, compréhensible et fonctionnel

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Présentation

Je me présente rapidement afin que vous sachiez quand même de quoi il retourne ^^ :
- Je suis actuellement un (grand) débutant en programmation et en informatique en général :)
- J'ai 16 ans et des brouettes si ça n'a pas encore changé, j'adore les maths, la physique et la création de tous pleins de trucs utiles ou pas du tout :)
- Je me suis lancé dans la programmation en juin dernier environ, quand Apple a présenté Swift. Après cela j'ai regardé partout où je le pouvais afin de voir ce qui me plaisait vraiment et surtout dans le but de commencer par un langage déjà bien travaillé, pour avoir des ressources en français et en anglais de qualité :)
- J'ai récemment décidé de regarder du côté de la sécurité logicielle et du libre (dès que je saurais le faire je compte contribuer à des projets comme ZdS :) ) - J'ai tout d'abord regardé Python (proche de Swift mais plus ancien et avec plus de ressources disponibles sur le Net) mais j'ai finalement décidé il y a peu de commencer par le C, afin de m'attaquer tout d'abord aux bases pour faciliter l'apprentissage d'un langage OO ensuite :)

J'ai pris, pour apprendre le C, un cours de référence parmi la communauté française : celui disponible en ligne sur OpenClassrooms.

Après avoir lu de nombreux articles (principalement sur ce site d'ailleurs :) !) sur la lisibilité d'un code source, sa logique et tout le barda, j'ai décidé qu'il était temps de savoir si je partais dans la bonne direction à ce sujet.

Dans le cadre de code qui se trouve au paragraphe Ma Solution, vous trouverez donc le code source en C de l'exercice proposé ici.

Énoncé

Voici l'énoncé dans son intégralité, afin de vous éviter la relecture de l'ensemble de la page d'OpenClassroms plusieurs fois :)

Le principe du programme

Principe de base
  • L'ordinateur tire au sort un nombre entre 1 et 100.
  • Il vous demande de deviner le nombre.
  • Vous entrez donc un nombre entre 1 et 100.
  • L'ordinateur compare le nombre que vous avez entré avec le nombre « mystère » qu'il a tiré au sort. - Il vous dit si le nombre mystère est supérieur ou inférieur à celui que vous avez entré.
  • Puis l'ordinateur vous redemande le nombre.
  • Et il vous indique si le nombre mystère est supérieur ou inférieur.
  • Et ainsi de suite, jusqu'à ce que vous trouviez le nombre mystère.
Améliorations possible
  • Faites un compteur de « coups ». Ce compteur devra être une variable que vous incrémenterez à chaque fois que vous passez dans la boucle. Lorsque l'utilisateur a trouvé le nombre mystère, vous lui direz « Bravo, vous avez trouvé le nombre mystère en 8 coups » par exemple.
  • Pouvoir faire plusieurs parties de suite. Lorsque l'utilisateur a trouvé le nombre mystère, le programme s'arrête. Pourquoi ne pas demander s'il veut faire une autre partie ?
  • Implémentez un mode 2 joueurs ! Attention, je veux qu'on ait le choix entre un mode 1 joueur et un mode 2 joueurs !
  • Créez plusieurs niveaux de difficulté. Au début, faites un menu qui demande le niveau de difficulté. Par exemple :
    • 1 = entre 1 et 100 ;
    • 2 = entre 1 et 1000 ;
    • 3 = entre 1 et 10000.

Le but du jeu, bien sûr, est de trouver le nombre mystère en un minimum de coups.

Ma solution

J'ai mis en place toutes les améliorations proposées.
De plus tout est en anglais (je me force à le faire) mais je ne suis pas sur que tout soit parfaitement correct.

  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
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
//
//  main.c
//  LessOrMore
//
//  Created by Poliorcetics on 08/02/2015.
//  Copyright (c) Poliorcetics. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <time.h> // for the random

int main(int argc, const char * argv[]) {

    // Initialization of random
    srand(time(NULL));

    // Initialization of constants
    const int MIN = 1; // MIN constant, for the range

    // Initialization of variables
    int continuePlaying = 0; // Used as a boolean (default = 0)
    int numberOfPlayer = 1; // The number of player (1 or 2, default = 1)
    int searchedNumber; // The number to found
    int typedNumber; // The number the player enter in the shell
    int numberOfTests = 0; // The number of tests to find the mysterious number
    int difficulty = 1; // The difficulty of the game (default = 1)
    int maximumNumber = 100; // The maximum number of the range (default = 100)

    // MAIN GAME LOOP
    do
    {
        // Introduce the game in the shell
        printf("=== Less Or More Game ===\n\n");

        // Choice of the difficulty
        printf("-- Difficulty --\n");
        printf("1. Mysterious number is in range [1;100]\n");
        printf("2. Mysterious number is in range [1;1000]\n");
        printf("3. Mysterious number is in range [1;10000]\n");
        printf(">> To choose a difficulty, enter 1, 2 or 3.\n");

        // Loop for the choice of the difficulty
        do
        {
            printf("Choose a difficulty (1, 2 or 3): ");
            scanf("%d",&difficulty);

            // Initialization of the 'maximumNumber' of the range
            continuePlaying = 1;// Go out of the loop if the user doesn't enter
                                // an invalid number 
            switch (difficulty)
            {
                case 1:
                    maximumNumber = 100;
                    break;
                case 2:
                    maximumNumber = 1000;
                    break;
                case 3:
                    maximumNumber = 10000;
                    break;
                default:
                    printf("You choose a wrong difficulty, choose again.\n");
                    continuePlaying = 0; // The user finally make a mistake
                    break;
            }
        } while (continuePlaying == 0);

        //Select the number of player(s)
        // Display
        printf("\n-- Number of Player --\n");
        // Choice
        do
        {
            // Display to select
            printf("Please, select a number of player (1 or 2) :\n");
            scanf("%d", &numberOfPlayer);
            // Result of the selection
            switch (numberOfPlayer)
            {
                case 1:
                case 2:
                    continuePlaying = 1;
                    break;
                default:
                    printf("ERROR: the selected number of player is wrong.\n");
                    continuePlaying = 0;
                    break;
            }
        } while (continuePlaying == 0);

        if (numberOfPlayer == 2)
        {
            // Display
            printf("\n-- Two Players Mode --\n");
            printf("Player One : enter the secret number (in range [%d;%d]): ",
MIN, maximumNumber);

            // Initialization of searchedNumber
            scanf("%d",&searchedNumber);

            // To hide the secret number to the second player
            for (int i = 0; i < 1000; i++)
            {
                printf("\n");
            }
        }
        else // numberOfPlayer == 1
        {
            // Display
            printf("\n-- Single Player Mode --\n");
            printf("Calculation of the mysterious number ...");

            // Initialization of 'searchedNumber'
            searchedNumber = (rand() % (maximumNumber - MIN + 1)) + MIN;
            // printf("\n%d\n",searchedNumber);
            // Uncomment if you want the solution in 'One Player Mode'
        }

        // Rules of the Game
        // Displayed every new turn.
        printf("\n-- Rules --\n");
        printf("1. The game (or the first player) will create a mysterious \
number.\n");
        printf("2. The game will ask you to enter a number.\n");
        printf("3. This number MUST BE include in the selected range [%d;%d]."
, MIN, maximumNumber);
        printf("\n4. This number MUST BE an integer.\n");
        printf("5. If the number you type is in range and is higher \
than the mysterious number, the game will say \"That's less !\", else it will \
say \"That's more !\".\n");
        printf("6. You have to find the mysterious number with a minimum \
number of test.\n");

        // Display in the shell (for fun)
        printf("\nHave Fun !\n\n");
        printf("-- Game --\n");

        // If numberOfPlayer == 2, we announced that it's now to the second
        // player to play
        if (numberOfPlayer == 2)
        {
            printf("\nSecond Player, it's your turn !\n");
        }

        // Beginning of a turn
        do
        {
            // Increment of 'numberOfTests'
            numberOfTests++;

            // The player is invited to enter a number
            printf("Please, enter an integer between %d and %d included : ",
MIN, maximumNumber);
            scanf("%d",&typedNumber);

            // The number IS NOT in range
            if (typedNumber > maximumNumber)
            {
                printf("ERROR : The number you entered is too high.\n");
            }
            else if (typedNumber < MIN)
            {
                printf("ERROR : The number you entered is too low.\n");
            }
            // The number IS in range
            else
            {
                // Verification of 'typedNumber'
                if (typedNumber < searchedNumber)
                {
                    printf("That's more !\n");
                }
                else if (typedNumber > searchedNumber)
                {
                    printf("That's less !\n");
                }
                else // typedNumber == searchedNumber
                     // End of the Game
                {
                    printf("\n>>> YOU WIN ! CONGRATULATIONS ! <<<\n");
                    printf("You've made %d test(s) to find the mysterious \
number, which was %d.\n", numberOfTests, searchedNumber);
                }
            }

        } while (typedNumber != searchedNumber);
        // End of a turn if typedNumber == searchedNumber

        // Ask the current player to know if he wants to play again
        printf("\nDo you want to play again ? (Enter 0 to quit, enter any \
number to play again)\n");
        scanf("%d", &continuePlaying);
        printf("\n\n");

    } while (continuePlaying !=0);
    // END OF THE MAIN GAME LOOP

    // Notes
    printf("-- Notes -- \n");
    printf("Game made by Poliorcetics.\n");
    printf("Version : 4.0.1\n\n");

    return 0;
}

Voici mes questions :
1. Est-ce que ce code est compréhensible, commentaires inclus ?
2. La logique adoptée au niveau rédaction est-elle viable (toujours mettre des {} par exemple, même pour une seule instruction) ? 3. La logique utilisée pour résoudre le problème est-elle juste elle aussi (je sais qu'il existe plusieurs solutions, j'aimerais surtout savoir si j'ai fait des choses totalement inutiles ^^ ) ? Pour cette question, prenez en compte le fait que les fonctions, j'en ai entendu parler mais je ne sais pas encore les faire ;) .
4.
La question subsidiaire* Pour ceux qui auront eu le courage de le copier/compiler : tourne-t-il correctement chez vous :) ?

Voilà, j'ai enfin tout dit, merci d'avance à vous tous !

Édité par Poliorcetics

Hey, moi c'est polio, et je te souhaite une bonne lecture :p !

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

  1. En le regardant vite fait, oui
  2. Très dépendant des dev ça. Perso ça m'horripile mais je peux le comprendre. Le plus important est que soit cohérent : que ce soit bien partout pareil. Pour un débutant je conseillerais de les mettre (si tu en avais pas mit et que tu rajoute une instruction dans la boucle sans penser à les rajouter => bugs).
  3. sans fonction, et à ton niveau de connaissance, c'est plutot bien fait
  4. j'ai la flemme mais il existe des compilateurs en ligne si ça t’intéresse.

Pour le reste, si ton but est d'aller vers des langages plus haut niveau (tu parle de la POO), je te déconseille de passer par le C. La suite logique que tu va voir partout est de poursuivre par le C++ mais le C te fera prendre de mauvais habitudes. Si ce que tu veux c'est faire un langage de POO, commence directement par un langage Objet. Aujourd'hui le C n'est vraiment utile que quand tu touche au système et à l'embarqué. En dehors de ces cas, il vaut mieux utiliser un autre langage plus adapté à l'apprentissage.

+1 -0

Cette réponse a aidé l'auteur du sujet

j'ai finalement décidé il y a peu de commencer par le C, afin de m'attaquer tout d'abord aux bases pour faciliter l'apprentissage d'un langage OO ensuite :)

Je ne pense pas que ce soit pertinent, cela dit c’est toi qui décide ce que tu veux apprendre.

J'ai pris, pour apprendre le C, un cours de référence parmi la communauté française : celui disponible en ligne sur OpenClassrooms.

Idem.

Dans la balise secret qui se trouve au paragraphe Ma Solution

Tu n’utilise pas la balise secret, ce n’est pas très grave mais un peu de cohérence ne fait jamais de mal.

  1. Est-ce que ce code est compréhensible, commentaires inclus ?

Oui, même si tu t’exprime en anglais comme une chaussette. Ce n’est pas bien grave au demeurant c’est loin d’être spécifique au débutant, ou même aux français. Mais c’est bien quand même, s’il y a la moindre probabilité pour que le code soit lu par un non francophone, il t’en remerciera. Dans la même optique, si on suppose que le code sera relu, être gratuitement grossier dans les commentaires n’est pas utile.

| 2. La logique adoptée au niveau rédaction est-elle viable (toujours mettre des {} par exemple, même pour une seule instruction) ?

Oui.

| 3. La logique utilisée pour résoudre le problème est-elle juste elle aussi.

Oui.

| 4. La question subsidiaire Pour ceux qui auront eu le courage de le copier/compiler : tourne-t-il correctement chez vous :) ?

Mon compilateur ne gueule pas trop, ça tourne mais comme les saisies ne sont pas sécurisé il est très facile à faire planter. Mais bon, tu ne dois pas encore savoir comment faire ça.

Globalement le code est bon pour ton niveau, continue comme ça. Accroche toi, les vrais difficultés ne vont pas tarder à pointer le bout de leur nez.

La répétition est la base de l’enseignement. — ☮ ♡

+1 -0
Auteur du sujet

Je ne pense pas que ce soit pertinent, cela dit c’est toi qui décide ce que tu veux apprendre.

simbilou

Tu n'es pas le premier à me le dire donc je me pose la question : pourquoi ne le serait-ce pas ? (Je ne dis pas que j'ai fait le bon choix, mais comme la majorité des écoles d'ingé ont un programme commençant par du C je me suis dit que ça devait être une bonne base :) ).

Tu n’utilise pas la balise secret, ce n’est pas très grave mais un peu de cohérence ne fait jamais de mal.

simbilou

Oui, j'avais prévu de l'utiliser mais j'ai pas réussi à faire fonctionner code+secret, je corrige ça :)

Oui, même si tu t’exprime en anglais comme une chaussette. Ce n’est pas bien grave au demeurant c’est loin d’être spécifique au débutant, ou même aux français. Mais c’est bien quand même, s’il y a la moindre probabilité pour que le code soit lu par un non francophone, il t’en remerciera. Dans la même optique, si on suppose que le code sera relu, être gratuitement grossier dans les commentaires n’est pas utile.

simbilou

J'avais oublié les deux lignes dont tu parles ^^ je vais essayer de corriger ça :)

Oui.
Oui.

simbilou

Merci :)

Mon compilateur ne gueule pas trop, ça tourne mais comme les saisies ne sont pas sécurisé il est très facile à faire planter. Mais bon, tu ne dois pas encore savoir comment faire ça.

simbilou

Effectivement, j'ai essayé de le faire à la main (je suis assez maniaque sur ce genre de problèmes) puis j'ai vu que ça venait plus tard donc j'ai choisi d'attendre, pour éviter de tout mélanger sans comprendre vraiment.

Globalement le code est bon pour ton niveau, continue comme ça. Accroche toi, les vrais difficultés ne vont pas tarder à pointer le bout de leur nez.

simbilou

Merci ! Ça fait doublement plaisir :), premièrement car c'est un compliment, deuxièmement car j'ai compris pour le pointer

Hey, moi c'est polio, et je te souhaite une bonne lecture :p !

+1 -0

Cette réponse a aidé l'auteur du sujet

Tu n'es pas le premier à me le dire donc je me pose la question : pourquoi ne le serait-ce pas ? (Je ne dis pas que j'ai fait le bon choix, mais comme la majorité des écoles d'ingé ont un programme commençant par du C je me suis dit que ça devait être une bonne base :) )

Le C est un vieux langage, enseigne dans les écoles "parce qu'on a toujours fait comme ca". A moins d'avoir des contraintes de performances/temps reel, ce n'est pas pertinent de faire du C (ou du C++) compare a des langages plus haut-niveau comme le Python, le java, le c# etc qui te permettront de te consacrer plus a l'application/algo plutôt qu'aux contraintes du langages.

Tu gagnes ainsi en productivité et en plus tu travailles des compétences qui sont populaires dans le monde du travail.

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+1 -0

Cette réponse a aidé l'auteur du sujet

Tu n'es pas le premier à me le dire donc je me pose la question : pourquoi ne le serait-ce pas ? (Je ne dis pas que j'ai fait le bon choix, mais comme la majorité des écoles d'ingé ont un programme commençant par du C je me suis dit que ça devait être une bonne base :) ).

Le C est utilise comme support pratique pour un cours de programmation procedurale. Le C++ ou Java pour de la programmation objet. Ces langages ne sont que des supports pour illustrer un paradigme particulier, pas dans un but de former des experts dans le langage, ni meme pour les qualites intrinseques du langages (le choix repose surtout sur le fait que le langage soit connus des entreprises et demandes - ce qui permet tout de meme d'avoir quelques connaissances techniques utilisables en sortie d'ecole). Tu pourrais tres bien faire ca dans l'ordre inverse que cela ne changerait pas grand chose.

Édité par KFC

+0 -0

Cette réponse a aidé l'auteur du sujet

Le C++, enseigné de manière moderne, peut tout à fait être un bon premier langage, bien meilleur que C d'ailleurs. Pour le coup, je ne vois pas qu'il aurait à envier à C# et Java de ce côté. D'autant qu'en C++, on peut utiliser n'importe quel paradigme avec comme seul contrainte une certaine lourdeur sur la syntaxe.

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+3 -0
Staff

Cette réponse a aidé l'auteur du sujet

Tu n'es pas le premier à me le dire donc je me pose la question : pourquoi ne le serait-ce pas ? (Je ne dis pas que j'ai fait le bon choix, mais comme la majorité des écoles d'ingé ont un programme commençant par du C je me suis dit que ça devait être une bonne base :) ).

Comme je te le disais, aujourd'hui le C n'est utilisé que pour la programmation système (très proche de l'OS) ou pour de l'embarqué. Et encore ça évolue. Le C est un langage simpliste (au niveau sytaxique) : il n'y a pas beaucoup de concepts différents et très peu d'abstraction (les classes/objets sont une abstraction par exemple). Au final tu te retrouve a écrire du code de manière très proche de ce que va réellement faire ton processeur. Ça a son utilité justement quand tu es sur un petit processeur (l'embarqué) où le moindre cycle processeur et le moindre octet en mémoire à de l'importance. Pour la majorité des système aujourd'hui (ton ordi, ton telephone, etc.), c'est beaucoup moins vrai. Ils sont tellement performant que ces gains on généralement un intérêt négligeable.

Le C t'oblige donc a faire toi même pleins de choses que des langages pourraient faire pour toi (entre autre la gestion de la mémoire). Faire le choix d'un langage plus haut niveau permet donc en général de développer plus vite et de faire des applications plus sûrs. Enfin, dans ton cas, une personne qui apprend, ça a aussi des conséquence :

  • Tu va devoir apprendre les concepts d'algorithmies et les concepts proches du matériel comme la gestion mémoire. Partir sur un langage plus haut niveau évite ce problème puisque tu n'a souvent plus accès direct à la mémoire.
  • Si tu évolue vers une des suite souvent proposé, le C++, tu risque de faire mal les choses. Tu aura tes habitudes de developpeur C avec les pointeur. Tu risque donc de faire pareil en C++ alors qu'avec les références et les derniers ajouts du C++, il est dans 90% des applications possible de se passer de pointeur pour quelque chose d'aussi efficace et plus sûrs.
+1 -0
Auteur du sujet

C'est assez déprimant d'un côté parce que j'ai l'impression d'avoir commencé pour rien :/ , mais de l'autre je me dis que toutes ces réponses vont m'éviter de faire une erreur.

Donc je vais poser une nouvelle question :
Quel langage me conseilleriez vous pour débuter ? J'ai vu passer plusieurs fois Java, Python et C# (C# est réservé à Windows non ?) mais je sais pas lequel choisir et j'avoue être un peu perdu.

Hey, moi c'est polio, et je te souhaite une bonne lecture :p !

+0 -0

Ce ne sera jamais pour rien car d'une part tu a decouvert un langage procedural, encore tres utilises (meme si souvent a tord) et cela fait parti de la culture d'un bon developpeur.
Je ne toucherais pour rien au monde du C mais j'en ai fais et je suis content de pouvoir en faire si besoin.

Cela te permet d'avoir des points de repere pour comparer sainement des technologies. Dans "la vraie vie", on ne choisi pas un langage parce qu'on l'aime ou non mais parce qu'il correspond le mieux a ses besoins et de fait, une vaste culture des caracteristiques de chaque langage est importante.

+2 -0
Staff

C'est assez déprimant d'un côté parce que j'ai l'impression d'avoir commencé pour rien :/ , mais de l'autre je me dis que toutes ces réponses vont m'éviter de faire une erreur.

Non. La majorité des choses que tu as déjà apprises tu les retrouvera dans les autres langages et/ou ce sont des connaissances qui te seront toujours utile.

Quel langage me conseilleriez vous pour débuter ? J'ai vu passer plusieurs fois Java, Python et C# (C# est réservé à Windows non ?) mais je sais pas lequel choisir et j'avoue être un peu perdu.

C# n'est pas réservé à Windows (il existe mono sous Linux et OsX qui permettent une certaine compatibilité) mais c'est sur Windows qu'il est principalement utilisé.

Pour le reste, difficile à dire : C++, Java, Python (mon préféré ;) ), etc. sont probablement tous des choix valides si tu as un cours adapté et de bonne qualité.

+0 -0

Pour débuter Python est à la mode. Il demande au débutant d'avoir une certaine rigueur dans l'écriture (sans la masquer), pour autant je trouve son typage un poil faible.

Côté C++, les bons cours sont assez rares celui de @gbdivers est encore en cours d'écriture et le livre @koala01 partant des bases n'est pas encore écris. Les bouquins comme le C++ primer sont vraiment bons mais en anglais.

Je reste assez dubitatif quant à Java et C# en terme de cours parce que beaucoup ont hérités de la manie débile de coller des setters et des getters partout et d'appeler ça programmation orientée objet alors que c'est juste une mauvaise pratique.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+4 -0
Auteur du sujet

Je comprends plutôt bien l'anglais, c'est plus quand il vient de moi qu'il est problématique.

Je vais quand même regarder Python d'un peu plus près (j'accorde une importance particulière à l'IDE, je déteste les trucs moches ou pas pratiques).

Merci à vous tous :D , ça fait vraiment plaisir de trouver des gens pour nous aider !

Hey, moi c'est polio, et je te souhaite une bonne lecture :p !

+0 -0
Staff

Je vais quand même regarder Python d'un peu plus près (j'accorde une importance particulière à l'IDE, je déteste les trucs moches ou pas pratiques).

Pour Python, celui que je trouve le plus adapté est PyCharm qui existe en version "community" gratuitement. Tant que tu ne fais pas de dev web, il sera adapté. Il y a aussi une version Educational avec des cours intégrés mais j'ai jamais essayé.

Mais sinon dans l'absolue, Python est un langage très courant, presque tous les éditeurs et IDE le supporte (PyDev pour Eclipse, SublimeText, etc.)

+0 -0
Staff

Salut,

Il y a une chose qui me dérange profondément dans les différents commentaires publiés (mis à part le fait qu'ils déconseillent d'apprendre le C) : c'est d'une part que certains se basent sur l'utilisation qui est actuelement faite du langage sur le plan professionnel et, d'autre part, qu'ils supposent qu'il est mauvais d'être confronté à des détails matériels durant l'apprentissage de celui-ci.

Concernant le premier argument, poliorcetics dit avoir seize ans. Cela suppose que si l'informatique l'intéresse, il entreprendra sans doute des études et/ou formations dans cette voie et qu'il n'est en conséquence pas sur le point d'entrer dans une entreprise. Il lui est donc loisible (et à mon sens profitable) de découvrir d'autres langages que ceux qu'il gobera au jour le jour durant son travail. De plus, la création de nouveaux langages pour un oui ou pour un non semble être à la mode ces temps ci, aussi rien ne dit que ceux qui sont incontournables-trop-de-la-balle aujourd'hui le seront encore demain.

Sans négliger le fait que des débouchées professionnelles peuvent être importantes, je pense sincèrement que les arguments qui se basent sur celles-ci sont trop nombreux et qui plus est trop souvent les seuls. Honnêtement, s'il veut programmer en entreprise en C#/Java/Swift/Language-de-la-mort-qui-tue-sorti-hier, ce ne sont pas les formations qui manque dans ce domaine, il suffit de lire les offres à ce sujet (y compris au sein des cursus universitaires).

Pour ce qui est du deuxième argument, je souhaite simplement faire part de mon expérience (qui est peut-être, voire sans doute marginale) : le fait d'être confronté aux détails techniques est justement ce qui m'a plu en C et qui m'a poussé à appronfondir mes connaissances dans ce domaine. Dans la même veine, la programmation OO est quelque chose que je n'ai jamais réussi à assimiler (peut-être par manque de motivation ou d'envie) et les abstractions ne sont pas particulièrement des choses que j'apprécie. De ce point de vue, le C est pour moi un vrai bonheur.

Bref, je trouve que cela manque d'ardeur et de passion ! Tu souhaites apprendre le C/C++/Java/C#/Swift/Objective-C/Pascal/PHP/Python/Rubis/Lisp/Haskell/Etc ? Fonce et ne te retourne pas !

Édité par Taurre

+1 -0

[…] les abstractions ne sont pas particulièrement des choses que j'apprécie.

<Troll>Ce qui permet de comprendre pourquoi tu etudies le droit (me semble-t-il)</Troll>

Plus serieusement je ne crois pas que quiconque l'ai incite a se tourner vers un langage pour des raisons profesionnelles, au contraire. On lui dit qu'en general on utilise un langage pour ce a quoi il est dedie. A priori il faut le decourager de faire du developpement web avec du C et l'avertir que le C est un langage dedie a de l'embarque ou de la programmation systeme et qu'il se sentira probablement plus a l'aise avec d'autres langages pour faire d'autres choses.

Franchement tu fais preuve de mauvaise foi lorsque tu parles de C#/Java comme des Language-de-la-mort-qui-tue-sorti-hier alors que ce sont de vieux langages, tres bien implantes en entreprise. C'est d'autant plus contradictoire lorsque tu l'incites a decouvrir des langages peu utilises en entreprise ou en tout cas pas dans une vision professionnelle alors que tu adules le C (qui est probablement encore autant utilise que le Java par exemple - souvent a tord comme je le disais). L'inertie du monde professionnel vis a vis des nouvelles technologies est au contraire tres lente pour un tas de raisons, economique principalement.

Édité par KFC

+0 -0

(mis à part le fait qu'ils déconseillent d'apprendre le C)

Taurre

Personnellement, je ne déconseille pas d'apprendre C, je déconseille d'apprendre C comme premier langage. Ce qui est à mon avis fondamentalement différent. Quand on débute, écrire un algorithme c'est déjà vachement compliqué, ajouter le traitement systématique des retours de fonctions, des allocations, etc … dès le début est une difficulté qui peut larguer pas mal de débutant, pas nécessairement tous, certains s'en sortiront bien, mais à mon avis ça n'augmente pas les chances de réussite.

En revanche, connaître C est effectivement intéressant (ça peut transformer un très bon programmeur C++ en excellent programmeur C++ par exemple :lol: ).

Dans la même veine, la programmation OO est quelque chose que je n'ai jamais réussi à assimiler (peut-être par manque de motivation ou d'envie) et les abstractions ne sont pas particulièrement des choses que j'apprécie. De ce point de vue, le C est pour moi un vrai bonheur.

Taurre

En ce qui me concerne, je pense qu'il est important d'être capable de jongler avec les paradigmes. Connaître plusieurs paradigmes permet de mieux jauger les forces et les faiblesses de ceux-ci face à une tâche donnée et choisir au mieux.

Puis des abstractions, on en fait aussi en C, encore heureux.

Bref, je trouve que cela manque d'ardeur et de passion ! Tu souhaites apprendre le C/C++/Java/C#/Swift/Objective-C/Pascal/PHP/Python/Rubis/Lisp/Haskell/Etc ? Fonce et ne te retourne pas !

Taurre

Sur ce point je suis d'accord. Le plus important, ça reste d'être motivé à apprendre.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte