[Programmation] Votre methode pour apprendre?

Répondre
Partager Rechercher
Citation :
Publié par Amalo Whatkin
Qu'est ce qu'il ne faut pas lire.

Tu prends Haskell, Python et Scala, ça n'a rien à voir. Des philosophies totalement différentes, quasiment rien en commun. Et j'ose même pas rajouter Scheme à la liste…
Ah oui, évidemment.
Faudrait inventer l'équivalent du point Godwin pour les discussions traitant de programmation, en remplaçant les nazis par Scheme.
Tellement pertinent de parler de ça sur un thread où l'OP est en train d'apprendre les structures conditionnelles.
Java c'est une plateforme (et accessoirement un langage), et c'est pas plus accessible que le C pour un débutant. De plus, le Java est complètement OO, a des comportements bien spécifiques qui peuvent souvent dérouter un débutant (il est impossible de passer quoi que ce soit par référence, tout est passé par valeur, par exemple)

Le Pascal ou le C sont les meilleurs langages pour débuter.

Mais, apprendre la programmation c'est loin d'être aussi simple que d'apprendre un langage hein, comme l'ont déjà dit plusieurs personnes avant moi, procure toi un bon bouquin de principe et méthodes de programmation, et ensuite seulement attaque toi à la syntaxe sur ton langage favoris.
Citation :
Java c'est en constante évolution et utilisé par une majorité de programmeurs.
Ca n'en fait pas un bon langage. Et l'évolution est dans le mauvais sens avec Java.

Citation :
Si y'a un langage has been, c'est bien C. Faudrait plutôt s'orienté vers C# voir C++ pour un langage récent.
N'importe quoi, tu mélanges tout. C est utilisé dans toutes les applications embarquées, dans tous les systèmes d'exploitation, dans les librairies et les interpréteurs/compilateurs de tes langages préférés.
C'est juste chaud de lire ça.
Et mettre C# et C++ sur le même niveau d'utilisation que C, c'est drôle. A part lâcher des noms, tu sais de quoi tu parles au moins?

Citation :
Python, et surtout Ruby, ça me semble un peu marginal.
Wat? Django, Rails, ça ne te dit rien? Marginal en quoi?
Rejeter en bloc un truc auquel tu n'as visiblement jamais touché, c'est très idiot.

Citation :
Mais l'OP veut apprendre à programmer, et Java c'est simple, y'a de très bons EDI et une large communauté.
Java n'est pas simple quand on le compare à Ruby. Les librairies sont affreusement bloatées, le typage affreux, l'OO n'est pas respectée, la syntaxe est lourdingue, les performances sont minables, la prétendue portabilité n'a jamais servi à rien...je continue?
Citation :
Publié par Amalo Whatkin
Qu'est ce qu'il ne faut pas lire.

Tu prends Haskell, Python et Scala, ça n'a rien à voir. Des philosophies totalement différentes, quasiment rien en commun. Et j'ose même pas rajouter Scheme à la liste…
J'adore le ton hautain de merde que tu emplois Et tu as raison, tu aurais osé ajouter Scheme, j'aurais pensé que tu étais en train de troller, ou alors que tu n'aurais tout simplement pas pris la peine de lire le message du posteur, au choix.

Bref c'est exactement le type d'intervention qui ne donne pas envie de répondre à un débutant qui demande conseil sur le labo au sujet de la programmation, on simplifie ou omet un détail, hop un random qui monte sur ses grands chevaux, chouette Je te laisse lui faire un cours sur la programmation impérative/fonctionnelle, la récursivité ou la métaprogrammation, c'est sûr pour un débutant qui se lance là dedans en autodidacte c'est d'une très forte utilité. Il est sur C, C++ et Java sont similaires s'il souhaite passer au stade oop, point. S'il maîtrise déjà un paradigme, en autodidacte, ça sera déjà très bien.
Citation :
Publié par Raizin
Si y'a un langage has been, c'est bien C. Faudrait plutôt s'orienté vers C# voir C++ pour un langage récent.
A se demander pourquoi le C est encore utilisé pour programmer la totalité des OS.

@OP : ben, c'etait l'objet des cours de mon école donc bon :P

Pour t'aiguiller, vu que tu es sur code::block il gère les instruction POSIX, donc tu peux te servir de l'instruction "write". Ca te fera bosser sur les pointeurs aussi
Donc le prototypage (le "modèle") de write c'est :
Write(int fd, char *str, int len)


le fd, ne t'en occupe pas, et laisse le sur 1 (ca sert a indiquer ou tu veux écrire, et 1 c'est l'écran, en gros.)



le char *str, c'est un "pointeur". un pointeur c'est une variable qui pointe vers une adresse. C'est a dire qu'au lieu de dire a ta fonction "lit/ modifie la variable x" tu lui dis d'aller écrire a l'emplacement mémoire x. en l'occurence, l'emplacement memoire x (et ceux qui le suivent, jusqu'a la fin de ce que tu veux afficher) va contenir un caractere.
exemple : char *str = "toto42";
la 1ere case (notée str[0]) va contenir un t. str[1] va contenir o, etc.
Pour te représenter la chose, dit toi que c'est comme un tableau, qui ici ressemblerait a [t,o,t,o,4,2] (enfin, du point de vue du systeme, ca contient la valeur ascii de chacun des caracteres)



le int len, c'est la taille sur laquelle tu lui demandes de lire.

Pour faire un exemple simple "write(1, "toto42", 6);" affichera toto42 sur ton écran.

Mais t'es une grosse feignasse, et t'as pas envie de compter le nombre de caracteres que compose ton char*. Une solution simple existe : en C pour délimiter une chaine de caractere, elle se termine TOUJOURS (sauf si tu la crées toi meme et que tu le fais pas) par le caractere '\0'. Avec cette info, tu devrais être en mesure de savoir comment calculer automatiquement la taille de ta chaine de caractere avec une fonction que tu appelerais "my_strlen" par exemple.

apres il te suffit te taper "write(1, str, my_strlen(str);" pour afficher le toto42 que nous avons stocké précédement dans str.

et en lisant la table ascii, tu devrais aussi etre capable d'afficher n'importe quel nombre également
Citation :
Publié par Mr.Hide
#include <stdio.h>
#include <stdlib.h>

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

int resultat = 0, nombre1 = 0, nombre2 = 0;

Printf("Entrez le premier nombre : ");
scanf("%d", &nombre1);
printf("Entrez le second nombre : ");
scanf("%d", &nombre2);

resultat = nombre1 + nombre2;

prinf("%d + %d = %d", nombre1, nombre2, resultat);

return 0;

}
Par contre, pour raconter des conneries, y'a du monde.

edit: Simple synonyme. Change aussi le nom des variables si ca t'éclate.
Citation :
Publié par Zeil l'exilé
Par contre, pour raconter des conneries, y'a du monde.
Ouais enfin tant qu'a faire
Code:
#include <stdio.h>

int main(int argc, char **argv)
{
  int return_value

 if (argc == 3)
   {
    prinf("%c + %c = %d", argv[1], argv[2], (atoi(argv[1]) + atoi(argv[2])));
   return_value = 0;
   }
 else
  {
   printf("utilisation : %c valeur1 valeur2", argv[0]);
   return_value = 1;
   }
  return (return_value);
}
Mon livre de chevet :
http://www.amazon.com/Algorithm-Desi.../dp/0321295358

C'est assez complexe, mais tellement important.

Sinon, C, très bon choix, on peut difficilement faire mieux pour démarrer, en partant du C tu peux t'orienter un peu vers tout ce que tu veux : applicatif, OS, Web, ...

Pour apprendre, pas de secret, la pratique, la pratique et encore la pratique. Trouve toi des petits projets qui te permettent de découvrir de nouveau aspect du langage, tout en t'amusant, je trouve qu'il y a rien de plus chiant que de programmer pour programmer. Par exemple regarde du coté de l'open source, il y a des tonnes de projet software sur lesquels tu peux te faire les dents, voir comment c'est fait, c'est très instructif et permet d'avoir un résultat sous les yeux.

@Raizin: Tellement has been, que c'est un pre-requis pour la plupart des postes a pourvoir chez Google, Facebook ou n'importe quelle grosse boite du monde informatique.
Dans un milieu comme le web, le C est encore bien présent des qu'il s'agit d'optimiser un site, ou pour écrire des extensions PHP par exemple (un exercice que je recommande a tout dev PHP, ça renforce les connaissances et la compréhension du langage)
Aujourd'hui, oui.
L'informatique c'est un domaine voué a évolué. ca sert a rien d'être un crack dans un langage précis. Ce qui est important c'est d'être capable d'apprendre rapidement un nouveau langage.
Et pour cette tâche, apprendre le C, c'est tres bien.
Citation :
Publié par Locke / Rezard
Ah oui, évidemment.
Faudrait inventer l'équivalent du point Godwin pour les discussions traitant de programmation, en remplaçant les nazis par Scheme.
Tellement pertinent de parler de ça sur un thread où l'OP est en train d'apprendre les structures conditionnelles.
Bizarrement, Lisp et Scheme sont aussi des très bonnes manières d'apprendre à programmer. Et non je déconne pas.

Citation :
Publié par Bob Loblaw
J'adore le ton hautain de merde que tu emplois Et tu as raison, tu aurais osé ajouter Scheme, j'aurais pensé que tu étais en train de troller, ou alors que tu n'aurais tout simplement pas pris la peine de lire le message du posteur, au choix.
Oh, c'était un petit troll gentillet. Mais avec un gros fond de vérité.

Tout ce que je dis, c'est que l'argument : les différences entre langages ne sont que syntaxiques donc commence par de l'algo est totalement foireux.
Et d'ailleurs l'argument l'OP est un débutant donc on peut se permettre de dire des conneries pour simplifier est tout aussi fallacieux.

Maintenant, effectivement, commencer par faire de l'algo, oui c'est bien. Mais la raison importante pour laquelle il faut faire de l'algo, c'est que ça permet d'abstraire ce qu'on est en train de faire avant de l'implémenter, et ipso facto l'implémentation devient alors un détail.

Citation :
Je te laisse lui faire un cours sur la programmation impérative/fonctionnelle, la récursivité ou la métaprogrammation
Oh une bataille-de-buzzwords. C'est moi qui ait la plus grosse ! "programmation événementielle", "message passing", "PSPACE-complete", "JIT", "duck typing". Blah ?




Bref, pour l'OP :
Arrête le C.
Achète un bon bouquin d'intro à l'algorithmique.
Et ensuite apprends Python.
Ok j'ai voulu faire le malin avec le peu que j'avais lu sur le net, autant pour moi.

Mais de toute façon, si on apprend le java en 1ere année de BTS Info aujourd'hui, c'est forcément que 1/ c'est accessible (et c'est le cas je trouve) et 2/ que c'est demandé par les entreprises.
Citation :
Publié par Raizin
Ok j'ai voulu faire le malin avec le peu que j'avais lu sur le net, autant pour moi.

Mais de toute façon, si on apprend le java en 1ere année de BTS Info aujourd'hui, c'est forcément que 1/ c'est accessible (et c'est le cas je trouve) et 2/ que c'est demandé par les entreprises.
ofc, le Java c'est le langage le plus demandé en entreprise je pense.
Citation :
Publié par Malka
.
je n'en suis pas encore à la

Citation :
Publié par Zeil l'exilé
Par contre, pour raconter des conneries, y'a du monde.

pourquoi? j'ai mal écrit quelque chose?

edit: Simple synonyme. Change aussi le nom des variables si ca t'éclate.

ca m'arrive oui, mais surtout pour me souvenir a quoi correspond ma ligne.
Citation :
Publié par Malka
Aujourd'hui, oui.
L'informatique c'est un domaine voué a évolué. ca sert a rien d'être un crack dans un langage précis. Ce qui est important c'est d'être capable d'apprendre rapidement un nouveau langage.
Et pour cette tâche, apprendre le C, c'est tres bien.

Citation :
Publié par Amalo Whatkin

Bref, pour l'OP :
Arrête le C.
Achète un bon bouquin d'intro à l'algorithmique.
Et ensuite apprends Python.
il faudrait vous mettre d'accord
Une chose qui n'a pas encore été évoqué c'est la nécessité de faire relire tes algos ou ton code par quelqu'un de compétent.
Sans cela tu risque de chopper de très mauvaises habitudes. Il y a suffisamment de site d'apprentissage ou tu pourras demander une revue de tes algos ou code.
Car ce n'est pas forcement parce que ton code compile et que tu obtient le résultat sur quelques tests qu'il est forcement correct. De plus cela te forcera à faire du code "propre" car il devra être lisible et compréhensible par quelqu'un d'autre.
Citation :
Publié par Raizin
Ok j'ai voulu faire le malin avec le peu que j'avais lu sur le net, autant pour moi.

Mais de toute façon, si on apprend le java en 1ere année de BTS Info aujourd'hui, c'est forcément que 1/ c'est accessible (et c'est le cas je trouve) et 2/ que c'est demandé par les entreprises.
En BTS info j'ai appris le Java mais aussi le VB (LOL)
Citation :
Publié par Amalo Whatkin

Oh une bataille-de-buzzwords. C'est moi qui ait la plus grosse ! "programmation événementielle", "message passing", "PSPACE-complete", "JIT", "duck typing". Blah ?
Je faisais qu'indiquer quelques mots clés concernant les langages que tu as cité, si jamais ça intéressait l'Op, qu'il puisse se documenter. Mais j'ten prie, continue de jouer avec ta bite tu t'amuses bien ça fait plaisir

Sinon pour résumer, si tu as les moyens / l'envie, oui commence par l'algo, et implémente tes solutions dans le langage que tu auras choisi ( le C reste un bon choix, même si je n'ai pas débuté moi même par ça )
c'est comme si vous disiez que pour commencer à bricoler il vaut mieux apprendre avec un marteau qu'un tournevis...beaucoup ici ne comprennent pas que les langages sont de simples outils.

Si ma problématique c'est de récuperer des infos dans un fichier texte de 200 000 lignes j'utiliserai Perl
si je veux faire de la programmation 3D j'utiliserai C/C++
si je veux faire un machin avec 2 boutons qui fasse un calcul à deux balles j'utiliserai C#
si je veux que mon programme fonctionne à la fois sous windows et linux ou même sur un téléphone j'utiliserai Java
si je veux faire un site web vite fait avec une petite base de données j'utiliserai PHP
si je veux faire un programme de recherche scientifique qui s'appuie sur des algorithmes sophistiqués j'utiliserai Eiffel
si je veux faire un programme avec des règles logiques j'utiliserai prolog
si je veux faire un programme assez complexe mais qui doit prendre un minimum d'espace j'utiliserai Forth
si je veux faire un programme lisible et facile à maintenir j'utiliserai Delphi

etc...etc..etc...

Au plus tu en apprendras, au plus tu maitriseras d'outils et tu sauras faire des choses différentes. Maintenant pour débuter on considère que c'est le Pascal le plus adapté, et en objet je dirai Eiffel.
Bon je vais profiter du topic pour poser ma question liée au sujet.

Actuellement j'ai appris en cours tout ce qui est conditions, boucles et tableaux à une dimension (j'ai vu qu'il y avait des tableaux multidimensionnelle par la suite) en algo et java.

Pour l'instant j'ai fais quelques jeux liés aux chiffres, et un jeu de combats Pokemon en mode texte, et en fait c'est à peu près tout ce que je peux faire je crois. J'ai réfléchis sur comment faire un morpion en mode texte, mais je bloque sur plusieurs choses avec mes connaissances actuelles (rien que pour afficher le plateau qu'une seule fois et placer les coups sur le plateau au fur et à mesure).

Sachant que j'aimerais faire un petit jeu en 2D (genre un snake ou un shmup) en java, il me faut quoi de plus comme notions importantes ?
Comme on t'as dit, tout d'abord il te faut bases en algo, histoire d'avoir une idée sur la façon de résoudre le problème (indépendamment du langage). Ca t'aidera aussi à passer plus facilement d'un langage à un autre.

Après, le top pour apprendre ça reste quand même d'avoir des projets concrets à réaliser (pas forcément un truc utile, juste quelque chose qui te motive à coder et un petit peu plus complexe à chaque fois) aidé de docs online/google ou de livres, surtout au début quand t'auras souvent besoin de vérifier la syntaxe/...
Citation :
Publié par Raizin
J'ai réfléchis sur comment faire un morpion en mode texte, mais je bloque sur plusieurs choses avec mes connaissances actuelles (rien que pour afficher le plateau qu'une seule fois et placer les coups sur le plateau au fur et à mesure).

Sachant que j'aimerais faire un petit jeu en 2D (genre un snake ou un shmup) en java, il me faut quoi de plus comme notions importantes ?
Je crois que la seule application un peu compliquée que j'ai réussi à coder du début à la fin, c'est un jeu de morpion.
Alors comme notions chiantes, je pense que je peux citer le parcours d'abres et la récursivité, à ma connaissance c'est indispensable pour implémenter une IA.
On dirait pas comme ça, mais ton algo de morpion, tu ne peux pas le faire en faisant des switch/case pour évaluer l'état du plateau et choisir la case que l'ordinateur va jouer en fonction de celles déjà remplies... enfin, ça doit être faisable, mais ça doit être une galère sans nom, et c'est inapplicable dès que ça devient plus compliqué.
Déjà que le morpion, c'est sympa en terme de possibilités de plateaux différents, je te laisse imaginer pour les échecs.

Bref, il faut se représenter une partie sous la forme d'un arbre de possibilités.
Imagine que tu places un rond dans la case en haut à gauche, l'ordi doit se dire "bon, à partir de ce cas-là, je vais voir comment peut se dérouler la partie en fonction de ce qu'on va faire ensuite".
Alors, il teste de foutre sa croix au milieu, en haut au milieu, en bas à droite... bref, partout où il pourrait mettre une croix au prochain coup, donc ça laisse 8 possibilités.
Pour chacune de ses possibilités, il doit ensuite pouvoir se représenter chaque cas où tu pourrais ensuite mettre ton rond, soit 7 possibilités (fois les 8 du niveau d'au-dessus), et ainsi de suite.

Le "niveau de profondeur" de l'arbre jusqu'où l'ordinateur va aller détermine le niveau de difficulté, tu t'imagines bien que si l'ordinateur évalue juste le prochain coup pour placer sa croix, il sera plus facile à battre que si il évalue toutes les possibilités restantes, dans sa tête il aurait 8 coups d'avance.
Et si je me trompe pas, "toutes les possibilités", ça revient à faire un factoriel 9 dans le cas où c'est l'ordi qui commence la partie, soit 362880 possibilités.

Ça c'est juste pour que tu voies que tu ne peux pas coder ça à la main.
La notion d'arbre est assez facile à comprendre, la notion de récursivité un peu moins (c'est ce qui va permettre à l'ordi d'évaluer les coups à jouer et de parcourir les 362880 possibilités en une seule ligne de code ), mais tu devrais pouvoir trouver de la doc là-dessus.
La difficulté c'est plutôt d'expliquer à l'ordi comment il doit évaluer les coups à jouer, faut qu'il comprenne qu'il aura intérêt à jouer un certain coup plutôt qu'un autre car ça lui donnera plus de chances de gagner.

Honnêtement, c'est pas facile à expliquer, c'est pas non plus évident à comprendre, mais c'est pas non plus impossible.

Si je peux te donner un conseil, oublie l'idée de le faire en texte (qui a envie de jouer à un morpion en mode texte ?).

Perso, c'est un projet que j'ai dû faire pour les cours, avec libre choix du langage ; je me suis lancé un peu au hasard dans Flex (c'est le même langage que le Flash, c'est aussi Adobe qui le fait, mais c'est plus orienté développement que graphisme) en connaissant juste le C et le Java et sans rien connaître à l'ActionScript 3, et j'ai franchement bien aimé, la syntaxe ne te dépaysera pas.
Et puis, avec ça, tu as vite fait de faire une jolie interface en pas beaucoup de temps... ça joue pour la motivation.

Si ça peut te rassurer, je pense que le morpion c'est l'exemple type du jeu qui implémente une IA, et ça doit pas manquer de tuto pour comprendre le principe de programmation sur internet.
Pour débuter en IA, tu peux commencer par coder un minimax, c'est pas trop dur à faire. Tu écris une fonction d'évaluation que tu appelleras pour chaque coup possible.

Admettons que tu as 3 coups possibles, le meilleur sera le max des 3 mais comme pour chaque coup l'adversaire va jouer, tu vas évaluer ses coups en inversant le signe, le meilleur coup c'est donc le max des 3 + le min de l'adversaire, d'où le nom minimax.

Si c'est pas clair google
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés