Passer de Java à c++


Je développe des applications basées sur C# (. net) et Java (J2EE) depuis 3 ans.

Mais maintenant je pense que Java, C# vous rend boiteux (du point de vue de l'apprentissage) et vous pouvez développer vos applications rapidement mais vous ne parvenez pas à comprendre les concepts de base sous-jacents de la programmation.

Donc, j'essaie d'apprendre C++, mais je le trouve un peu "déroutant" en raison du pointeur, de l'héritage multiple, de certaines conventions et d'autres concepts de C++ qui n'existent pas en Java. Alors, de quoi avez-vous les gars proposer? Comment dois-je ressenti?

Merci

PS: Je suis un étudiant, donc avoir tout le temps dans le monde et en fait changer.

Author: Ispirer SQLWays Migrations, 2010-04-05

16 answers

À mon avis, vous devriez d'abord apprendre C afin de bien comprendre la base sur laquelle C++ est construit. Prenez une copie de "The C Programming Language" de Kernighan et Ritchie, largement considéré comme la meilleure référence sur le langage, et commencez à le lire. Une fois que vous avez bien compris C, vous aurez la base de bas niveau dont vous avez besoin.

 11
Author: avpx, 2010-04-04 22:36:34

C++ n'est pas plus "basique et sous-jacent" que tout autre langage de programmation moderne. Il a un modèle d'ordinateur (un espace d'adressage de mémoire plat), mais le système d'exploitation et le processeur simulent simplement ce modèle en utilisant de nombreuses couches de mise en cache et de pagination, ce n'est donc pas "réel". Le résultat est que la même opération peut prendre parfois 1000s de fois plus de temps qu'à d'autres moments.

En outre, le C++ moderne a beaucoup d'abstractions puissantes qui n'ont pas de relation plus directe avec le fonctionnement d'un ordinateur que faites les abstractions fournies en Java et C#. L'OP mentionne l'héritage multiple-clairement pas plus élémentaire que l'héritage dans d'autres langues OO. De nombreuses autres fonctionnalités de C++ omises de Java sont des abstractions de haut niveau (ou vous permettent de les construire) et donc, à certains égards, Java est le langage de bas niveau. En Java, la signification des symboles d'opérateur est toujours la même, alors qu'en C++, un simple == peut construire un objet qui sera plus tard utilisé pour générer une expression SQL au lieu d'être exécuté en cours de processus.

Les runtimes JVM et CLR sont (presque certainement) écrits en C et/ou C++, donc dans ce sens, ils forment évidemment des couches aujourd'hui. Mais à la couche C/C++, vous travaillerez toujours dans une abstraction qui n'est pas "comment la machine fonctionne vraiment", vous apprendrez donc simplement un ensemble différent d'abstractions, plutôt que la "réalité". Et un système d'exploitation (ou même une puce matérielle) peut être conçu spécifiquement pour que les runtimes de type JVM ou CLR soient la couche native de bas niveau du système; sur un tel système, ce serait le runtime C/C++ qui nécessiterait une couche d'émulation" de haut niveau " (coûteuse) pour fonctionner.

Il ne vaut donc probablement pas la peine d'essayer d'apprendre à programmer en "réalité". Personne ne fait vraiment ça de nos jours; c'est une perte de temps. Vous feriez mieux d'apprendre comment les abstractions de programmation vous aident à écrire des programmes corrects. Si une langue vous rend la vie difficile, cela ne prouve pas que vous faites la "vraie chose". Cela signifie juste que vous choisi la mauvaise langue pour ce que vous essayez de faire.

 9
Author: Daniel Earwicker, 2010-04-04 23:27:48

Je ne suis pas d'accord avec le sentiment que vous devez d'abord apprendre le langage C ou assembleur. C++ et C peuvent être similaires en théorie mais sont très différents en termes d'utilisation pratique. On gagne peu ou rien à la manière des idiomes C++ en utilisant uniquement le C, et s'il est bon d'avoir une expérience pratique dans plusieurs langues, c'est un exercice futile de spécifier des prérequis dans l'apprentissage des langues. Je pense que la meilleure façon d'apprendre les concepts de la programmation est de s'asseoir avec quelqu'un qui comprend les bien et juste en parler, que ce soit sur StackOverflow, dans les forums, ou, si vous êtes chanceux, en personne.

À la fin de la journée, je pense que la programmation n'est vraiment pas si difficile, et vous aurez peut-être besoin de quelqu'un pour l'expliquer juste une fois pour que tout clique. Il s'agit de ressasser les mêmes concepts simples encore et encore pour construire des machines complexes et belles.

 5
Author: Jon Purdy, 2010-04-04 23:03:59

Pour apprendre le c++, je recommande la lecture de C++ pour les programmeurs Java par Mark Allen Weiss. Cela m'a beaucoup aidé lors du passage de Java à C++ car il est très bon pour mettre en évidence les différences entre les langages.

 3
Author: SiPe, 2010-04-05 07:31:32

Mais, maintenant je pense que Java, C# vous rend boiteux (du point de vue de l'apprentissage) et vous pouvez développer vos applications rapidement mais vous ne parvenez pas à comprendre les concepts de base sous-jacents de la programmation.

Si vous essayez d'apprendre les concepts de programmation, plutôt que l'architecture machine, il n'y a pas beaucoup d'avantages à apprendre le C++. Je suggérerais d'aller avec quelque chose de différent de Java tous ensemble. Une variante Lisp, peut-être.

Comment concevoir des programmes est un joli bon livre.

 2
Author: Dennis Zickefoose, 2010-04-05 00:17:02

Si vous voulez comprendre les concepts sous-jacents de la programmation langages, je suggère un livre tel que Les concepts de John Mitchell dans les langages de programmation. Suivez cela en écrivant quelques analyseurs / interprètes pour des langues simples. Une autre bonne ressource est SICP, qui est spécifique à Scheme (un dialecte LISP), et disponible en entier ici. Une fois que vous avez appris quelques langues, il ne faut pas trop de temps pour récupérer la syntaxe et la sémantique d'une nouvelle (les bibliothèques de base d'autre part, peut prendre un certain temps pour se familiariser avec).

Si vous voulez en savoir plus sur le fonctionnement des ordinateurs d'aujourd'hui, je vous recommande d'apprendre le C et de lire des livres tels que les systèmes d'exploitation modernes de Tanenbaum. C est utile dans ce contexte principalement pour lire le code au niveau des systèmes. La mise en œuvre d'un système d'exploitation (très) simple peut être incroyablement éducative. Cependant, quelque chose d'aussi simple que d'implémenter un shell de base (comme bourne shell, sauf plus simple) est probablement un meilleur endroit pour commencer. Je recommanderais également d'apprendre comment le réseau fonctionne spécifiquement, car il fait partie intégrante des systèmes informatiques modernes.

 1
Author: Andreas, 2010-04-04 23:16:18

C et C++ rendent certains concepts de programmation sous-jacents de base plus évidents, mais ils n'ont pas été conçus par Dieu. Je soutiendrais la suggestion d'étudier les systèmes de bas niveau réels derrière votre code de bas niveau: systèmes d'exploitation, compilateurs/runtimes (essayez "Essentials of Programming Languages") et architecture machine.

PS En général, il peut être préférable d'étudier C++ seul, plutôt que de commencer par C , mais pour votre but particulier getting devenir plus intime avec le bas niveau, constructions dangereuses telles que les pointeurs, après avoir déjà appris Java I je pense qu'il vaut mieux commencer par C (et K&R) où ceux-ci sont au centre.

 1
Author: Max Strini, 2010-04-04 23:56:09

Je suggère d'abord d'apprendre le langage assembleur. Cela vous donnera une base très solide dans ce qui se passe à un niveau bas. Cela contribuera également à renforcer l'idée que "tout n'est vraiment qu'une adresse".

Prendre un cours qui se concentre sur le langage assembleur est conseillé car cela vous "forcera" à l'apprendre (personnellement, je ne pense pas que l'ASM soit /ça/ amusant, mais ça valait la peine [et une exigence pour l'obtention du diplôme] pour moi de prendre le cours).

Après que vous sachiez l'assemblée, allez sur le C et le C++.

Avoir beaucoup de plaisir!

 0
Author: Jay Taylor, 2010-04-04 22:41:03

Il semble que vous évitiez la première erreur que la plupart des gens font, qui suppose que la nouvelle langue est la même que l'ancienne. C++ est différent et devrait être appris comme un langage neww(-ish).
Une référence que je suggérerais serait C++ Comment programmer qui est utilisé dans mon université pour les classes d'introduction C++.

Après cela, regardez les logiciels Java précédents que vous avez écrits et voyez comment vous les traduiriez en C++. La syntaxe peut facilement être référencé à partir de CPlusPlus.com . Tout en faisant cela, il est important de garder à l'esprit ce que toutes les différentes syntaxes représentent, et comment cela change ce qui se passe dans le logiciel (c'est-à-dire les différences entre les deux langues). Ceci a l'avantage supplémentaire de vous permettre de voir comment l'architecture sous-jacente est représentée pour les deux langues (et pour les langages de programmation en général). Je ne connais pas un bon livre qui explique comment les langages de programmation fonctionnent sous les couvertures, ou je recommander que.

Si vous êtes, cependant, intéressé à apprendre comment la programmation fonctionne, alors le langage Assembleur serait un bon endroit pour commencer. Langage d'assemblage pour les ordinateurs Intel est ce que j'ai utilisé pour apprendre le langage d'assemblage et c'était très utile.

 0
Author: chustar, 2010-04-04 22:54:52

Langage d'assemblage.

Commencez par le Z-80. Puis ajoutez ' x86. Ensuite, essayez 68000. Puis la série TI 320 de DSP. Vous pouvez également ajouter le Z-8. Juste pour voir comment les différentes machines le font.

 0
Author: MSimon, 2010-04-04 22:59:25

Si vous voulez vraiment en savoir plus sur la programmation de bas niveau, je vous recommande d'apprendre le C et l'assemblage. C++ est beaucoup plus complexe que C mais ne vous donne vraiment pas beaucoup plus d'informations sur les problèmes de bas niveau. Cela pourrait être intéressant si vous voulez en savoir plus sur le type de concepts et de constructions d'un langage de programmation, car C++ en a beaucoup.

Il y a aussi un niveau inférieur de votre machine virtuelle que vous ne semblez pas encore connaître et que vous voudrez peut-être explorer. De en savoir plus sur les composants internes de Java Je recommanderais d'apprendre à programmer la JVM en langage Assembleur (Java). Jasmin ( http://jasmin.sourceforge.net / ) est l'assembleur/syntaxe de référence pour ce type de programmation. Une autre excellente ressource est la spécification du langage Java ( http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html ) qui contient beaucoup d'internes Java. Lorsque vous avez appris le C vous pouvez également utiliser des API de niveau inférieur fournies par la JVM ( http://java.sun.com/javase/6/docs/technotes/guides/jvmti / ) qui vous permettent de récupérer des informations de bas niveau sur une JVM en cours d'exécution et d'écrire des choses intéressantes comme les débogueurs.

Si vous apprenez ce genre de choses et faites du piratage par vous-même, vous apprendrez comment fonctionne la JVM et ce que le compilateur met réellement dans vos fichiers de classe. Il est également très probable que vous découvriez de nouvelles choses sur le langage de programmation Java lui même que vous ne connaissiez pas auparavant même si vous pensez savoir tout à propos d'elle.

Vous pouvez également programmer la VM.Net en assembly en passant.

 0
Author: ahe, 2010-04-05 00:19:25

Je pense que vous devriez commencer par C, mais pas comme préambule nécessaire pour apprendre C++. En d'autres termes, pendant que vous apprenez C, mettez vos efforts dans l'apprentissage de la langue, ressentez la philosophie de la langue et concentrez-vous sur la laisser siroter dans votre peau. Être un bon programmeur C et vous serez un bon programmeur, période. Pas seulement un bon programmeur C++ this cela n'a rien à voir avec l'apprentissage du C but mais un bon programmeur.

Il y a une autre raison pour apprendre C premier. C'est plus facile que C++, beaucoup plus facile que C++, et il relie bien à C++ (contrairement à Java, qui ne le fait pas dans tous les aspects mais les plus superficiels orientés objet). Je ne parle pas des similitudes de syntaxe: je parle de programmation de bas niveau. Je parle des concepts de pointeurs, qui existent eux-mêmes et sous la forme d'itérateurs en C++. Vous pouvez passer autour des fonctions en C, et vous pouvez passer autour des objets de fonction en C++. C est rapide à apprendre, et il vous réchauffera très efficacement.

Apprendre C éliminera également la peur des fonctions libres que certains programmeurs OO purs ont tendance à avoir. C++ est un langage hybride, et C est vraiment un sous-ensemble de C++, pas seulement par la syntaxe mais aussi par la philosophie.

Commencez par vous procurer le livre K&R et le boire. Vous ne regretterez pas cela.

 0
Author: wilhelmtell, 2010-04-05 02:04:25

Quoi que vous commenciez, ma suggestion serait de vider lesE à part entière. Utilisez de bons éditeurs de texte (vim/emacs)

La courbe d'apprentissage est meilleure lorsque vous utilisez des éditeurs de texte car tout doit être écrit par vous-même. Pas d'invites et pas de code pré-écrit.

Vous avez toutes les meilleures réponses ci-dessus, en tout cas. :)

  • Ivar
 0
Author: topgun_ivard, 2010-05-19 10:47:28

Configurez un environnement de compilation C++ performant tel queMicrosoft Visual C++ 2008 Express et parcoureztous les liens du site de Bjarne StrousrupThe C++ Programming Language, en commençant par C++ Style and Technique FAQ . Si vous êtes expérimenté dans une autre langue, vous n'avez pas besoin de plus: -)

 0
Author: Alain Rist, 2011-09-27 13:41:38

Apprenez C et C++ en même temps, je parle d'expérience ici. Très souvent, je rencontre du code qui mélange C et C++, il est donc préférable de connaître les deux et leurs différences. Choisissez K & R pour C (comprendre les pointeurs, les fichiers d'en-tête et l'allocation et le nettoyage manuels de la mémoire...qui ne sont pas utilisés par Java!) et tout livre de débutant C++ décent (j'ai choisi Prata, mais quoi que vous soyez plus à l'aise avec). Pratiquez les mêmes exemples en faisant des versions de C, C++ de manière séquentielle, orientée objet (OO) mode, mode générique / modèle etc. C++ a une bibliothèque standard plus grande que C: templates, conteneurs STL (pas besoin de pointeurs, mais vous pouvez faire un réglage fin du pointeur en écrivant votre propre conteneur), threads (depuis C++11). Vous pouvez toujours utiliser C si vous n'avez pas le choix (ou booster les bibliothèques), tout compilateur C++ le permettra.

Si vous venez de Java, vous devriez déjà connaître les concepts OO pour C++, et, peut-être, une programmation générique comme dans les modèles C++. C++ est considéré à tort comme un langage OO, mais c'est plus que ça. BTW, les objets sont un concept dynamique (runtime), alors que les modèles sont statiques (temps de compilation), alors apprenez les CONCEPTS de langage, pas seulement la syntaxe! Une fois que vous avez appris les concepts, lisez le livre de Stroustrup (il a créé C++) pour apprendre sa philosophie pour les meilleures règles de conception pour le code C++.

Apprenez la dernière norme C++ (C++11) car elle ajoute beaucoup de nouvelles choses au langage (auto, nullptr, threads, fonctions lambda, nouveaux conteneurs, etc.). Dernier mais non le moindre, veuillez utiliser Doxygen en C / C++ de la même manière que vous avez utilisé Javadoc....il n'y a rien de pire que du code non documenté et illisible, quelle que soit la langue que vous utilisez.

 0
Author: wgodoy, 2013-02-01 01:11:19

Apprendre De Suite. Il a de meilleurs objets. Et c'est une machine virtuelle. Sauf si vous voulez une vraie machine, voir les tableaux verts ou Sandpiper/John Rible pour cela.

Versions interprétées threadées libres sont partout sur le 'net. Pour la pratique. Lorsque vous le comprenez, écrivez votre propre version Threadée directe. Ou voir Forth Inc et acheter un pour votre machine ou utiliser leur version gratuite de Windows.

Java est un hybride Forth/C, donc si vous voulez aller en Java, vous aurez certaines des choses sous votre ceinture.

Éducation:

Départ - Brodie Penser en avant - Brodie

Le second est excellent pour n'importe quelle langue car c'est le meilleur livre sur l'affacturage que je connaisse. Versions gratuites des deux sur le net.

Si vous voulez faire un matériel / FPGA Forth Stack Machines: La Nouvelle vague de Koopman

Tous les livres sont gratuits sur le net.

 -2
Author: MSimon, 2010-04-04 22:50:45