IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

C++ ou C# ou C ?


Sujet :

Langages de programmation

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut C++ ou C# ou C ?
    Salut,

    Comme beaucoup ici je pense, je suis autodidacte et je ne suis pas un DEV a la base. Mais un admin réseau/système qui a commencé comme technicien and co et maintenant je suis spécialiste MS/Exchange pour de grosses entreprises...

    en tant "qu'administrateur système" je commence a me faire chier j'ai fait le tour.. le seul truc qui m'amuse pour le moment c'est scripter tout mon boulot..

    depuis +10 ans je suis passionné de sécurité informatique et j'ai vraiment envie de bosser dans ce milieu ! même si je sais que c'est un cercle plutôt fermé..

    mais pour cela j'ai besoin de devenir bon en programmation pour pouvoir enfin me faire mes outils etc..

    j'ai un bon niveau en powershell..
    j'ai fait un peu de C et VB un peu plus jeune mais surtout les bases, avec les FILE PILE ..bref surtout de l'algo de bases..
    j'ai essayé récemment le C# pour compléter le powershell et pour pouvoir développer mes outils.. mais je sais pas j'ai du mal avec le C#..

    d'après ce que j'ai pu comprendre le C# pour dev rapidement c'est top !
    mais quand on veut faire du bas level ou de la prog système c'est très limité j'ai l'impression ? il faut faire du mass P/invoke ?

    je veux dev des outils Forensics, antimalware and co & pouvoir faire pas mal de programmation système sous Windows ..voir trouver un job dans la sécu dans quelques années..

    quel serait le langage le plus adapté pour moi ?

    je ne voulais pas partir sur le C++ mais de plus en plus je sens que ca serait la meilleur des solutions..
    en C# on ne gère pas la mémoire, du moins on n'est pas obligé...? du coup je me dit que je risque d'avoir un manque de compétences a ce niveau

    je trouve que le C++ est plus documenté sur le net

    et il parait que quand on sait bien prog en C++ on peu facilement faire du C & C# et pas inversement

    bref j'attends vos avis !

    et avez vous des pistes pour bien débuter la programmation système ?

    merci beaucoup

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Bonjour.

    C et C++ (les deux doivent aller de pair*) sont évidemment la valeur sûre et que je te recommande, au moins parce qu'ils sont prédominants et que tu les retrouveras partout, de Windows à Linux. Mais disons-le clairement : ces langages ont mal vieilli, souffrent d'erreurs de jeunesse, etc. Travailler avec eux n'est pas une partie de plaisir et on trouve bien mieux sur le marché, à commencer par D ou Go puisque ces derniers se placent en compétition directe. Malheureusement ils sont encore trop peu répandus. Mentionnons au passage Objective-C, indispensable dans le monde Apple, inutile partout ailleurs.

    Quant au C# il est en effet plutôt inadapté à la programmation système: comme tu l'as deviné on doit faire du p/invoke en masse et la manipulation des pointeurs n'y est pas naturelle. Toutefois, pour beaucoup d'outils c'est finalement peu gênant puisque les traitements et l'UI pèsent beaucoup plus lourds en lignes de code que les quelques appels natifs, et que sur ce terrain C# tire aisément son épingle du jeu. Et on pourrait ajouter qu'à l'avenir Microsoft mise clairement sur des technos dérivées de C# pour les futures versions de Windows (voir le boulot de Joe Duffy, l'architecture Midori, le projet N, etc).

    En effet tu parles de programmation système mais il faut bien voir qu'il y a une grosse évolution en cours du fait des préoccupations de sécurité(**) et que le C/C++ est purement et simplement inadapté pour écrire un code sûr et fiable. L'arithmétique de pointeurs sera dans pas si longtemps que ça du passé (sauf exceptionnellement via des API dédiées aux pilotes pour communiquer avec le matériel), et avec elle les algorithmes génétiques et autres choses difficilement vérifiables.

    Enfin, dernière remarque : les langages de haut-niveau c'est très bien pour la productivité. Mais ça masque beaucoup de mécanismes de bas-niveau qu'il te faudra apprendre et comprendre. On peut les apprendre avec un langage de haut-niveau mais c'est sans doute plus rapide avec un langage de bas-niveau qui te met le nez dedans.

    * C++ est plus productif mais certaines de ses fonctionnalités sont problématiques en mode noyau. De toute façon C et C++ tendent à cohabiter donc tu dois savoir lire et écrire dans les deux.
    ** On est aussi en recherche d'un modèle de concurrence simple, scalable et vérifiable.


    PS : Modern operating systems, de Tanenbaum, est la référence incontournable sur le sujet. Quant au C ça doit toujours être le Kernighan et Ritchie mais je n'ai jamais lu ce dernier.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    merci pour avoir pris le temps de me repondre

    du C# avec du p/invoke en mass ne pourri pas les perfs and co ?

    que penses tu du c++11 ?

    a ma place tu partirais sur le c++ ?

    merci !

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 367
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 367
    Points : 20 406
    Points
    20 406
    Par défaut
    Citation Envoyé par puke502 Voir le message
    mais quand on veut faire du bas level ou de la prog système c'est très limité j'ai l'impression ? il faut faire du mass P/invoke ?

    je veux dev des outils Forensics, antimalware and co & pouvoir faire pas mal de programmation système sous Windows ..voir trouver un job dans la sécu dans quelques années..

    l:
    .NET sera totalement inadapté.
    En désassemblant on tombe sur l'Intermediate Language qui est une surcouche au-dessus du code natif.
    Oui il faut approfondir le langage C voire carrèment l'assembleur x86,les Device Drivers..si tu veux bosser dans la sécurité.
    C++ je ne serais pas fana parce qu'il y a toute la couche RTTI, gestion des exception,...

    Citation Envoyé par puke502 Voir le message
    et il parait que quand on sait bien prog en C++ on peu facilement faire du C & C# et pas inversement
    oui lorsqu'on sait bien programmer en C++ on peut facilement faire du C mais en C il faut tout recréer comme la classe std::string.
    Et puis pas de Programmation Orientée Objet en C évidemment

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    C++ je ne serais pas fana parce qu'il y a toute la couche RTTI, gestion des exception,...
    c'est a dire ?

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?


    on vient de me conseiller un map road

    du C a mort puis ASM puis par exemple du C# ?
    reste a savoir si le P/invoke de mass garde de bonne performance?

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    .NET sera totalement inadapté.
    En désassemblant on tombe sur l'Intermediate Language qui est une surcouche au-dessus du code natif.
    Il serait inadapté pour écrire un code en kernel-mode, pas pour écrire un antivirus. Or c'est plutôt ce dernier type de programmes qui l'attire. Pour ce genre de tâches le C# conviendrait. Même si ce n'est pas le choix que je lui recommande.

    Citation Envoyé par puke502 Voir le message
    du C# avec du p/invoke en mass ne pourri pas les perfs and co ?

    que penses tu du c++11 ?

    a ma place tu partirais sur le c++ ?
    a) On s'en fiche puisque les appels natif ne pèsent généralement pas lourd. Comme je te l'ai dit le C# serait un bon choix pour les développements où l'UI et les traitements de données pèsent lourd. En termes de perfs le C# a généralement tout ce qu'il faut sous le capot.
    b) Le C++ est irrécupérable mais le C++ 11 est une bonne évolution qui va lui offrir quelques décennies de répit en plus.
    c) Comme je te l'ai dit je te recommande du C et du C++. Les deux ensemble. Mais si tu ne devais en choisir qu'un, prends le C. Ton projet de faire asm -> C -> C++ -> C# paraît excellent (il y a un paquet de boulot par contre mais de toute façon ton projet de devenir un dév "système" se compte en années)

    Citation Envoyé par puke502 Voir le message
    c'est a dire ?
    Le mode kernel est un autre monde : pile d'appels limitée à quelques ko, ancrage des pages mémoire, pas d'opérations en virgule flottante, etc. On y code généralement en C, pas en C++. Ce dernier peut cependant être utilisé à condition de faire l'impasse sur des fonctionnalités pourtant centrales. Disons que c'est du demi-C++.

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?
    On n'utilise pas l'asm pour écrire des programmes. A la rigueur pour écrire de petites parties d'un programme pour des raisons de performances (et encore : c'est de plus en plus inutile). Tu auras besoin de l'asm pour comprendre des binaires, notamment si tu veux détecter des malwares et autres, puisque tous les déassembleurs te montreront un code asm.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    merci Donquiche pour cette réponse complète
    oui l'asm je compte juste l'apprendre pour pouvoir faire reverse engineering de malwares voir des crack me pour le fun ..

    mais comme tu dis ca fait beaucoup de boulot en plus du miens lol

    et que penses tu du Delphi ? cela pourrait être une bonne alternative ?

    ps : trendmicro est écrit en c# il me semble

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 367
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 367
    Points : 20 406
    Points
    20 406
    Par défaut
    Citation Envoyé par puke502 Voir le message
    c'est a dire ?

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?
    en win32 / C c'est suffisant pour faire une simple interface avec une fenêtre de dialogue avec une fenêtre en ressources,un WinMain et un CreateDialog...
    Pas besoin de C++
    Citation Envoyé par puke502 Voir le message
    du C a mort puis ASM puis par exemple du C# ?
    reste a savoir si le P/invoke de mass garde de bonne performance?
    mais pourquoi utiliser du C# ? Tu vas devoir passer par des surcouches diverses et variées, en langage C tu as des pointeurs directement sur la mémoire
    Ensuite en C/C++ on peut mixer du code source assembleur soit avec la directive asm{} soit en incorporant un fichier source .asm au projet.
    Ce qui n'est pas possible avec .NET

  9. #9
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 367
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 367
    Points : 20 406
    Points
    20 406
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    En termes de perfs le C# a généralement tout ce qu'il faut sous le capot.
    .
    le C# et tout ce qui est dot NET ça rame comme c'est pas possible...c'est normal il y a toujours les Mo octets (inutiles) du Framework.

    Je viens de finir un projet migré de VB6 à VB.NET l'interface est incroyablement lente il faut attendre des plombes pour charger un écran.
    Remarque je suis peut-être de mauvaise foi car l'architecture du projet est totalement défaillante quand c'est pas catastrophique
    Le Framework .NET c'est ni plus ni moins que des API Windows emberlificotées par Microsoft pour que ça soit plus lourd encore; l'avantage c'est que ça limite les plantages et les fuites mémoires
    Ensuite avec .NET on ne gère pas la mémoire comme on veut, et rien qu'à considérer une boucle le framework doit constament faire des vérifications pour voir s'il n'y a pas d'exceptions levées.

    C'est parfait pour de la compta mais pour des performances en temps réel j'en doute
    Bon je sais que je vais me faire des ennemis ici

  10. #10
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    mais pourquoi utiliser du C# ?
    Parce que la productivité et la sécurité comptent, et que 80% des effets de développement de MS sont concentrés sur ces nouvelles technos.

    Citation Envoyé par Mat.M Voir le message
    le C# et tout ce qui est dot NET ça rame comme c'est pas possible...
    Ca fait dix à quinze ans que je suis passé du C/C++ au C# et j'ai codé à peu près n'importe quoi dans ce langage, de problèmes temps-réel à du calcul lourd et de la 3D en passant par des interfaces sexy et des outils de développement.

    Le point commun de toutes ces réalisations ? Elles sont toutes fluides. Le dernier programme que j'ai créé démarre en moins d'une seconde et affiche une UI dynamique, riche, vivante, qui réagit au quart de tour, pour une empreinte mémoire de 40Mo. Précisons aussi qu'en général nous n’avons fait aucun effort d'optimisation et que j'ai même eu la main lourde en privilégiant la simplicité du code et une solution de programmation réactive.

    Le secret ? Éviter de coder avec ses pieds ou d'utiliser des machins hyper-architecturés avec réflexion à tous les étages. Ton projet actuel qui rame comme une bouse en C# aurait planté comme une bouse en C++. C'est la différence.

  11. #11
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Le Framework .NET c'est ni plus ni moins que des API Windows emberlificotées par Microsoft pour que ça soit plus lourd encore
    Je reviens sur cette partie : il y a dix ans ça aurait pu avoir un sens même si déjà les 90% du framework étaient entièrement codés en dotnet (manipulation des chaînes, etc). Mais de nos jours, entre les nombreuses API purement dotnet, de WCF à WPF, et la systématisation des API COM pour Windows 8 (dont l'usage est davantage "emberlificoté" en C++ qu'en C#), ça n'est plus du tout pertinent.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    lol plus ca va donquiche plus tu me donnes envie de faire du C# directement surtout si tu me dis que les P/invoke n'auront pas d'impact sur les performances

  13. #13
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Citation Envoyé par puke502 Voir le message
    lol plus ca va donquiche plus tu me donnes envie de faire du C# directement surtout si tu me dis que les P/invoke n'auront pas d'impact sur les performances
    Entendons-nous bien : le C# est très plaisant. Mais...
    * Pas de programmation en mode kernel.

    * Il faut un code tordu pour récupérer des données depuis l'adresse d'un autre processus, ou pour exécuter une routine depuis une adresse, ou ce genre de choses, ou pour appeler du code natif. Le problème n'est pas les perfs mais la laideur et le code alambiqué. Après ça c'est beau mais cette étape-là est laide.

    * Si je programme efficacement en C# c'est parce que je sais construire de A à Z une techno comme dotnet, du compilateur au GC en passant par le framework. A tout instant je comprend ce qui s'y passe et c'est peut-être parce que je suis passé par asm/C/C++ avant ça. Quand tu abordes un langage de plus haut niveau, ton réflexe doit être de te demander comment tu mettrais en œuvre telle ou telle de ses fonctionnalités dans ton langage de plus bas niveau habituel.


    Si ton but est de faire de la prog système, pour moi il faut d'abord apprendre asm, C et C++. Même si en pratique de nombreuses choses dans ce domaine (mais pas toutes) peuvent être faîtes en C#.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    ah ok je vois

    pas facile.. j'ai du boulot pour 20 générations pendant mes temps libre lol

    et le Delphi (pascal object pour être plus precis) tu en penses quoi ?

  15. #15
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 486
    Points
    5 486
    Par défaut
    Mon plus proche contact avec Delphi a été par le biais d'un collègue qui codait en Delphi et avec lequel je partageais un bureau. Je ne peux donc pas beaucoup en parler. Il est réputé plus productif que le C++ (mais moins que Java ou C#) tout en ayant à peu près la même puissance que le C++. Sauf qu'en pratique il a les mêmes limites que le C++ (inadapté au kernel mode), il est moins répandu, il ne peut pas directement utiliser des biblios comme Qt ou Boost et le C++ 11 semble désormais avoir l'avantage dans certains domaines. Il avait ses avantages à l'époque (bon outil de RAD) mais faute d'avoir la même base d'utilisateurs et de code existant que le C++ sa position me semble précaire.

    PS : Oui le voyage sera long. Mais ce qui importe c'est le voyage, pas la destination. Fais en sorte que ton voyage soit plaisant et fructueux. Si la prog système t'attire, il y a des chances que tu t'éclates déjà bien à faire de l'assembleur.

    PPS : autre problème avec C#, son lien trop fort avec MS. Windows existera t-il encore dans dix ans ? On ne peut pas en être sûr. Quelle sera sa place ? Si ça se trouve dans dix ans nous coderons tous en C++ et javascript. Deux mauvais choix sur le plan technique mais deux choix incontournables.

  16. #16
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Quand tu abordes un langage de plus haut niveau, ton réflexe doit être de te demander comment tu mettrais en œuvre telle ou telle de ses fonctionnalités dans ton langage de plus bas niveau habituel.
    Voilà un très bon conseil qui me semble valable dans n'importe quel contexte (programmation système ou pas).

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    Merci DonQuiche je sais ou aller maintenant !

    après on verra dans 2-3ans si j'ai le niveau pour trouver un job la dedans ou que mon futur logiciel me rende riche et célèbre

    perso pour moi Windows est pas prêt de mourir surtout entreprise..
    et quand on voit que Windows xp a +10 ans et qu'il représente encore une majorité ..

    merci encore

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Juste mon grain de sel: Une fois que tu connaîtras à la fois C# et C++, fais un détour pour apprendre C++/CLI, ça ne mange pas de pain.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo