Programmation sous Linux, comment s'y retrouver ?

Bonjour,

j’ai appris le mois dernier à programmer en C# avec XNA sous Windows. J’ai réalisé un shoot’em up en 2D comme premier projet. Il est à un stade avancé mais pas terminé. J’aurais aimé le terminé mais je suis sur Debian Squeeze 6.0. J’ai tenté d’installer Mono qui fonctionne parfaitement mais je n’arrive pas à installer MonoGame.

J’ai donc envie de m’orienter vers un autre langage de programmation où je pourrais changer facilement de système d’exploitation (Linux / Windows). C’est dommage, car j’aime beaucoup C# et XNA. J’ai assimiler beaucoup de choses, et devoir repartir à zéro est quand même frustrant.

Y a t-il un langage de programmation similaire au C# et XNA sous Linux ?

Voici une vidéo de mon jeu que j’ai réalisé :
youtube.com/watch?v=I_EnQXef3OQ

Deux remarques par rapport à ça :

  • C’est le problème quand on choisit des technos propriétaires.
  • Tu ne repartiras jamais complètement à zéro : même si tu dois réécrire le code tu auras au moins acquis des connaissances au passage, c’est de loin le plus important. Ces connaissances te resserviront toujours même avec d’autres langages. Au contraire à mon avis c’est plutôt une bonne chose de changer de langage aussi tôt, ça te permettra d’assouplir ta manière de penser et de ne pas t’encroûter dans un seul langage. :wink:

Au vu de ta vidéo, je ne m’aventurerai pas à te conseiller un langage : je n’ai pour ainsi dire aucune expérience dans les bidules graphiques de ce genre.
Je pense que la lib SDL est un bon point de départ (à confirmer par quelqu’un qui connaît mieux que moi la couche graphique), reste à voir dans quels langages elle est disponible et lequel est le plus adapté pour toi.

Merci pour ta réponse qui m’encourage à changer de langage de programmation. Je pense effectivement que je dois changer pour diverses raisons, surtout si je veux rester sur Linux.

Quand j’ai commencé à programme sous Windows avec le C# et XNA, je me suis rapidement confronter à des restrictions de Microsoft comme par exemple payer un abonnement annuel pour publier ses jeux sur le Live et de profiter de l’accès à certaines fonctions.

Je pense qu’il serait peut être judicieux de me tourner vers le C++, à moins qu’il soit, lui aussi, propriétaire ?

[quote=“Shingo”]
Je pense qu’il serait peut être judicieux de me tourner vers le C++, à moins qu’il soit, lui aussi, propriétaire ?[/quote]

Bonjour,

C++ n’est pas propriétaire (à condition de ne pas utiliser de librairie propriétaire) mais par contre de mon expérience je te dirai que c’est un langage fantastique question vitesse d’exécution mais il faudra te passer du ramasse-miette (garbage collector) tu devras gérer tes variables et allocations de mémoire aux petits oignons

un compromis serait le java, qui est disponible sur pleins de plateforme, et qui est assez proche de C# d’un point de mon point de vue (mais je ne connais pas XNA)

tu auras une machine virtuelle java pour lancer tes programmes compilés sur n’importe quelle plateforme où il existe un Java Runtime Environment (JRE) (existe sous linux, windows,…)

mais après je ne m’avancerai pas à dire que ce n’est pas un langage propriétaire (propriété d’Oracle depuis le rachat de SUN)

Sauf qu’il existe des versions libre de java (JRE et JDK libre) mais je ne sais pas bien où ça en est question compatibilité avec les versions officielle de Java distribuée par Oracle

Sur Debian c’est un même un JDK libre qui est installé par défaut (le JDK d’Oracle ne doit pas respecter la Charte Debian) :

$ java -version java version "1.6.0_18" OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2) OpenJDK Server VM (build 14.0-b16, mixed mode)

Non le C++ n’est pas propriétaire, si tu développes correctement c’est un des langages, avec le C, les plus portables qui soient.

Par contre c’est un langage aussi complexe qu’il est puissant. Si tu commences tout juste la programmation je ne te le conseillerais pas tout de suite, tu péterais un câble. Le problème c’est qu’avant d’utiliser le C++ correctement il vaut mieux d’abord bien connaître le C (sachant que le C++ est, à quelques détails près, un sur-ensemble du C) ne serait-ce que pour éviter les écueils du langage et savoir ce qu’il ne faut pas faire.

[quote=“Bjarne Stroustrup (créateur du C++)”]C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg.

En C c’est très facile de se tirer dans le pied. En C++ c’est plus difficile, mais quand tu le fais c’est toute ta jambe qui explose.[/quote]
Si tu tiens absolument à te diriger vers le C++, vaut mieux prendre ton mal en patience et commencer par d’autres langages histoire d’acquérir des bonnes bases. L’apprentissage du C est une étape importante sur ce chemin, mais pas forcément la première non plus.

Contrairement à Miniloser je ne recommanderais pas Java, mais c’est juste parce que j’ai une dent contre ce langage. Et entre nous il n’est pas vraiment adapté non plus aux débutants, il est encore trop complexe même s’il l’est moins que le C++.

J’ai aussi une petite dent contre Python (décidément :mrgreen:) mais il est beaucoup plus adapté à un débutant malgré ses quelques défauts (on dit souvent que c’est le BASIC des temps modernes : simple à appréhender et permettant quand même de faire beaucoup de choses). Reste à savoir si ça convient pour le projet que tu veux faire… Il me semble que oui, entre pysdl et pygame il y a déjà de quoi faire, mais encore une fois à confirmer par quelqu’un qui connaît mieux que moi cet environnement.

En effet, le C++ et le C, me semble trop complexe pour mon niveau. Il reste donc le Java et Python. J’avais déjà essayé Python sous Windows mais je n’ai pas du tout aimé car c’est une syntaxe bien trop simple à mon goût ou trop différente de ce que j’ai eu l’habitude d’écrire. On va dire, que mes premiers débuts de programmation (au collège) était Delphi 5. Mais après quelques années j’ai abandonné car je n’arriverais pas vraiment à faire quelque chose de concret. Puis j’ai dû apprendre le PHP car je voulais créer mon site de jeux vidéo. Je pense que c’est à partir de ce moment que j’ai réellement appris les bases de la programmation, même si Delphi ma bien initié.

J’ai essayé de faire quelques essais sous Python mais ça me semble toujours aussi étrange qu’un langage de programmation soit aussi simple. Le C# est plus complexe, mais il est plus parlant et plus logique pour moi. J’aime beaucoup la structure du code. Cela ma permis d’évoluer très rapidement et de me sentir à l’aise devant l’écran.

Concernant, le Java, je dirais pourquoi pas. Je me suis jamais lancé dans le Java pour la simple raison, que j’ai jamais été fan de cette technologie mais peut être que je devrais m’ouvrir un peu et tenter le coup car après je ne vois pas quel autre langage de programmation pourrait me convenir, d’autant plus qu’il est très proche du C# selon certains avis sur divers forums.

Je suis en train de voir quelques exemples avec Java et effectivement, le C# est quasi identique au Java. C’est quand même fou…

Faut pas t’arrêter à la syntaxe, Python est beaucoup plus puissant qu’il n’en a l’air au premier abord. C’est juste qu’il est moins verbeux que le C++ / C# / Java (comprendre : pas besoin de taper autant de signes inutiles). :wink:

Faut pas t’arrêter à la syntaxe, Python est beaucoup plus puissant qu’il n’en a l’air au premier abord. C’est juste qu’il est moins verbeux que le C++ / C# / Java (comprendre : pas besoin de taper autant de signes inutiles). :wink:[/quote]

Oui c’est vrai, mais j’ai remarqué qu’il fallait écrire pas mal de choses avec Python pour obtenir certaines choses. Après peut être que ma critique n’est pas valable vu que je n’ai pas essayé Python pendant plus d’une heure. Au point où j’en suis, j’aimerais bien essayer Python et Java pour me faire un vrai avis. Mais avant toute chose, il faudrait que je sache si Python dispose d’un environnement de travail comme Eclipse par exemple. Allez, partons faire quelques recherches sur Google.

Oui, on peut trouver des trucs qui sont un peu plus longs à écrire en Python, comme on peut trouver des trucs qui sont très compacts en C++.
Ça ne change rien au fait que, dans l’ensemble, Python est un langage assez compact et que Java / C# sont beaucoup plus verbeux. :wink: (je ne parle même pas du C++, lui il est hors concours :mrgreen:)

Python a quand même tout un tas de procédures, qui peuvent vraiment diminuer le nombres de caractères à écrire.
Bien que python aie ses défauts comme le dit syam, il ne faut pas oublier ses très nombreuses qualités : facile à apprendre, dispose de bibliothèques riches, portable car il suffit d’installer l’interpréteur, de la documentation à foison (help(fonction)) et j’en oublie.
Pour les défauts, c’est moint inquiétant pour le débutant : un langage interprété donc plus lent qu’un compilé (mais 1000 fois plus rapide que le java!), et quelques soucis ernièrement de compatibilité avec les anciennes versions. Mais à priori, ce dernier point doit tendre à se corriger petit à petit.

Il va falloir arrêter un jour avec cette légende urbaine, Java est extrêmement rapide. Il faut bien dissocier vitesse du langage et démarrage de la machine virtuelle.
Cf : http://shootout.alioth.debian.org/

Honnêtement, ce qui me freine avec Python c’est l’IDE. Je ne sais pas si c’est une bonne chose, mais je suis habitué aux IDE façon Visual Studio / Delphi. Ecrire un programme dans un fichier texte, c’est très difficile pour moi car personne ne vérifie si mon code est valable dans sa syntaxe ou pas. Par exemple, avec Visual C# 2010, mon code est très bien analysé et je sais où chercher l’erreur. Sous Python c’est un peu vague, après peut être que je me fais de fausses idées mais dans l’ensemble j’ai trouvé l’apprentissage plus rapide / facile avec C# que sous Python. J’étais parti voir un peu du côté de Pygame pour créer mon jeu, et ça ne ma pas parlé. Peut être que je devrais chercher un livre, mais c’est tellement “barbant” de lire les mêmes choses partout alors que j’ai juste besoin de comprendre comment ça fonctionne après je ferais ma sauce.

Le Java, j’ai rapidement testé mais je pense que c’est aussi l’IDE qui me convient pas : Eclipse. Je ne le trouve pas intuitif et peu commun avec ce que j’ai l’habitude voir. Par exemple, pour installer SDL avec Eclipse, je ne trouve aucune information sur Internet, juste des questions sur des forums sans réponses. J’ai essayé Netbeans, mais cet IDE est très lourd !

Pour le moment, je n’ai trouvé aucun équivalent à Visual C# Express sous Linux, si ce n’est Momo qui est plutôt bien foutu. Je ne sais pas ce que vous en pensez, mais j’ai vraiment du mal à écrire un programme dans un terminal avec VIM par exemple ou me contenter d’un simple programme plus ou moins similaire à gedit. J’ai besoin d’ergonomie et d’intuitivité (…). 20 ans sous Windows, ça s’efface pas comme ça, malheureusement.

Il va falloir arrêter un jour avec cette légende urbaine, Java est extrêmement rapide. Il faut bien dissocier vitesse du langage et démarrage de la machine virtuelle.
Cf : http://shootout.alioth.debian.org/[/quote]
Ouais, je me suis mal exprimé tu as raison. Disons plutot : Java est très lourd et long à démarrer!

Tu as essayé idle ou scite comme éditeurs?

En même temps, Eclipse est un IDE principalement orienté Java (même s’il peut gérer d’autres langages notamment C/C++ avec CDT).
Comme la SDL est une librairie C, ce n’est pas vraiment le meilleur candidat pour développer en Java car les bindings sont obsolètes.
Tu peux par exemple aller voir du côté de LWJGL (fameuse pour être utilisée entre autre par Minecraft), où tu trouveras ce genre d’info.
Pour Eclipse comme pour Netbeans qui sont des outils puissants et complexes, tu ne peux pas espérer en faire le tour en 15 minutes juste en cherchant à les utiliser comme les IDE que tu connais. Il va falloir accepter d’apprendre autre chose, même si tu as l’impression de perdre du temps au début :wink:

Il va falloir arrêter un jour avec cette légende urbaine, Java est extrêmement rapide. Il faut bien dissocier vitesse du langage et démarrage de la machine virtuelle.
Cf : http://shootout.alioth.debian.org/[/quote]
Ouais, je me suis mal exprimé tu as raison. Disons plutot : Java est très lourd et long à démarrer![/quote]
Ah c’est donc pour ça qu’Eclipse est si lourd et lent (et ça, ne t’en déplaise, c’est pas une légende, c’est une constatation) : en fait c’est qu’il redémarre la JVM à chaque clic ou frappe sur une touche ? :mrgreen:
Ok je sors… :laughing-rolling:

On parle de Java ou d’Eclipse ?
Oui Eclipse est lourd et lent à démarrer, encore faudrait-il voir ce qu’il fait en échange… Ce n’est pas un outil qu’on lance toutes les 5 minutes. Il est capable de gérer de très gros projets sans broncher et possède un grand nombre de plugins spécialisés pour s’adapter à la majorité des configurations de développement pro actuelles.
De là à dire qu’il est lent en édition de code standard, ça ressemble un peu à de la mauvaise foi, mais bon l’Eclipse bashing ne date pas d’aujourd’hui :wink:
Alors oui Eclipse n’est pas parfait, nécessite une configuration matérielle correcte, mais il est certainement l’un des IDE les plus puissants actuellement.

Pour ce que j’en ai vu, Eclipse n’est pas lent du tout !

Deux exemples qui me rendent marteau :

  • quand je passe d’un onglet à l’autre (simples fichiers de code) j’ai des lags perceptibles, parfois jusqu’à une seconde
  • quand je tape du code il arrive souvent que l’affichage ne suive pas, les caractères n’apparaissent qu’après un certain délai (à vue de nez, plusieurs centaines de millisecondes entre chaque caractère, ce qui est particulièrement déroutant quand tu ne regardes que l’écran pendant la frappe)
    Tout le reste est à l’avenant, il y a un manque total de réactivité et par moments il s’emballe on ne sait pas pourquoi (CPU à 100%).

Ça me le fait sur mes deux machines de travail (multicores 2.6 et 2.9 GHz, 3 et 4 Go RAM, Debian i386 et amd64, JVM Sun et OpenJDK, une des machines est même sur SSD), je doute que la configuration matérielle soit en cause.
Enfin en pratique ça ne me gêne pas plus que ça : au final j’édite mon code dans un éditeur fonctionnel et je ne me sers de l’usine à gaz que pour compiler / simuler / déboguer.

Ok, je ne remet pas en doute tes constatations. A titre personnel je n’ai jamais observé ce genre de problème dans l’éditeur Java même sur des classes monstrueuses. Pourtant j’y suis sensible car je tape à l’aveugle et j’ai souffert de ce genre de latence dans d’autres outils. Peut-être qu’un plugin met le bazar dans ta config ou alors tu n’as pas augmenté la mémoire maximum allouée au démarrage (-Xmx) et le GC est sollicité constamment.