Cher journal, je suis un étudiant en première (bientôt deuxième si tout ce passe bien) année d'école de commerce et j'aimerais bien me mettre _vraiment_ à la programmation.
Je n'ai encore jamais été très loin dans aucun langage (excepté HTML/CSS et encore, je sais même pas si on peut appeler ça de la programmation) et j'ai tâté un peu celui de la TI(89) quand j'en avais encore l'utilité (en TS).
J'ai déjà essayé (pas très ardemment c'est vrai) de me mettre au C et j'ai pas trop accroché à sa syntaxe. Mais dernièrement j'ai découvert l'O'Caml sur un site d'olympiades d'informatique [1] et je dois dire que ce que j'en ai vu m'a plu (syntaxe, pas de gestion manuelle de la mémoire, etc).
Toutefois j'ai également un Mac et je dois dire que ça me déplairait pas de savoir également programmer des applications pour.
C'est compliqué, hein? :!
Tout ça pour dire que je ne sais pas vraiment ce qui est le plus utile/malin d'apprendre pour commencer... est-ce que je dois impérativement passer par le C ? est-ce que le C devient intéressant une fois qu'on a dépassé le bête stade de l'apprentissage de sa syntaxe ? est-ce que l'O'Caml n'est pas au final un langage ultra-élitiste fait que pour les matheux ? est-ce que l'Obj-C c'est intéressant pour linux ?
Je suis ouvert à toutes les propositions, merci ;-p
PS. j'espère ne pas avoir lancé de vieux troll des cavernes
[1] http://www.france-ioi.org/(...)
# Que veux-tu faire ?
Posté par DPhil (site web personnel) . Évalué à 9.
Pour débuter, je crois que Python est pas mal ( pas de phase de compilation, interfaçage avec la plupart des toolkits graphiques, syntaxe simple, possibilité de faire de la programmation objet mais pas obligatoirement, documentation abondante, portable ).
Si tu veux développer des applications plus pointues qui accèdent à des fonctionalités bas niveau, le C est presque incontournable.
[^] # Re: Que veux-tu faire ?
Posté par Thomas Maurin (site web personnel) . Évalué à 5.
A la base je suis un étudiant frustré qui aurait voulu faire des études en informatique (mais la morosité du marché de l'emploi blablabla) et pour ça je pense pas qu'il faille vraiment un but.
[^] # Re: Que veux-tu faire ?
Posté par Mark Havel . Évalué à 3.
Moui enfin, c'est dommage, je suis pas sûr que la conjoncture soit si morose que ça dans ce genre de secteurs qui ont plutôt leur avenir devant eux question développement.
Je pense que pour apprendre la programmation, il faut commencer par le C qui donne au moins les bases syntaxiques des langages les plus utilisés (C, C++, Java, C#) et apprend la programmation impérative. Après, on s'attaque à la programmation objet avec le C++ ou le Java/C#. Enfin en tous cas, c'est comme ça que j'ai appris à la fac.
[^] # Re: Que veux-tu faire ?
Posté par Mat (site web personnel) . Évalué à 4.
Certes le C est la base de tous ces langages. Mais equi débute donc, pour lui, je pense que le mieux c'est de commencer par un langage qui soit simple et qui ne lui impose pas la gestion de la mémoire, les pointeurs et qui propose un bon débogueur.
Amha le caml est une bonne idée pour débuter, mais peu de projets sont en caml, cela peut donc représenter un handicap s'il souhaite participer à des projets.
M'enfin ce n'est que mon avis...
[^] # Re: Que veux-tu faire ?
Posté par Mark Havel . Évalué à 2.
[^] # Re: Que veux-tu faire ?
Posté par pifou . Évalué à 10.
Et alors quel est l'intêret de commencer à apprendre avec un langage aussi 'primitif' que C si on n'utilise même pas ses 'features' les plus intéressantes. Franchement à ce niveau autant commencer par un langage dit "de haut niveau" (Java, SmallTalk, O Caml ...) où justement on ne se préoccupe que de l'algorithmique et par la suite on peut faire de C pour bien se rendre compte de comment marche une machine et un OS.
Enfin, c'est comme ça que j'ai appris l'informatique (Java pour les bases de la programmation (forcement orienté objet du coup) et Perl pour les TP système et réseau)) et ça ne m'a jamais empéché de faire du C ensuite (même si j'ai l'impression de perdre du temps sur des choses que ne m'interesse pas (gestion rudimentaire de la mémoire, des processus, des accès réseau et système de fichier ...)). Bref, je ne suis pas un développeur du noyau Linux :).
Pour répondre à la question posée dans le journal, je proposerais Ruby comme langage objet à tester. De toute façon au bout d'un certain nombre de langage étudié, on se rend compte que nos préférences sont plus une histoire de goût que basé sur un plus technique (par exemple avec Ruby je peux faire la même chose qu'avec Python mais je préfére tout de même la manière de faire en Ruby (c'est surement du à mon expérience des différents langages que j'ai pu croiser depuis mes dépuis en informatique)).
[^] # Re: Que veux-tu faire ?
Posté par lasher . Évalué à 1.
Ben justement, le langage est simple. Pour apprendre à programmer, y'a rien de tel : tu codes ton truc, et dès que tu as besoin d'une fonctionnalité avancée, tu te la programmes. C'est comme ça qu'on apprend. C'est très très formateur d'apprendre à réécrire la libc par exemple (c'est d'ailleurs plus ou moins l'approche utilisée dans le Kernighan & Ritchie, mais le bouquin en lui-même n'est pas pour les débutants).
Cela dit, tu peux déjà programmer pas mal de choses en C rien qu'avec la notion de tableaux.
Et tu utilises une syntaxe "propre" pour masquer les pointeurs dans les cas où tu en as besoin, du genre
typedef char CHAINE20[21];
Plus le langage est simple, plus il est facile d'apprendre a s'en servir. Cela dit, faire de la programmation « sérieuse » proprement en C, c'est une autre paire de manches.
De plus, commencer par utiliser un langage totalement orienté objet (comme Java ou Ruby), même si on peut toujours détourner le langage pour en garder le côté procédural, est une mauvaise idée à mon avis. Les algos sont rarement orientés objet au départ; ils sont adaptés au paradigme objet, mais proviennent pour la plupart des travaux de recherche effectués dans les années 60/70...
[^] # Re: Que veux-tu faire ?
Posté par pifou . Évalué à 3.
Je ne trouve vraiment pas le langage C 'simple' car il contient trop d'élément de syntaxe différent (boucle, affectation, pointeur, référence, tableau, fonction, macro ...).
Bref, quand je parlais d'algo, je pensais plutôt à des trucs basiques comme un quick sort ou la création de listes chainées. Prend le code Java (ou Ruby ou O'Caml) et compare avec un code en C, tu verras qu'en C tu te prendra la tête avec des notions de syntaxes et d'allocations de mémoires pas évidentes (pour la liste chainée) alors qu'avec un langage de haut niveau tu pourras rapidement te focaliser sur le "sens" profond (sémantique) de ton algo plutôt que sur son enrobage (syntaxe).
Après, je ne comprend pas ta réflexion sur le langage objet tu ne vas pas commencer à faire un framework à la Struts pendant ton premier TP. Donc le paradigme objet ne te servira à pas grand chose au début, la seule chose c'est que Java par exemple permet de se détacher un minimun de la machine (pas de gestion de mémoire). Je pense qu'on peut être d'accord pour dire que C++ est un mauvais langage pour apprendre à programmer (à la limite ça peut être pas mal pour écoeurer les gens :) : il a une syntaxe super lourde, il est trop permissif niveau utilisation de fonctions C, et n'est pas évident à utiliser pour faire de l'objet et on se retrouve avec références/pointeurs dans tous les sens.
[^] # Re: Que veux-tu faire ?
Posté par lasher . Évalué à 1.
Euh, boucles, affectations, tableaux, fonctions, tout ça tu le retrouves (heureusement) dans tous les langages. Quant aux références, c'est du Java et pas du C. Tiens d'ailleurs, un truc tout bête :
en C, tout est passé par valeur. TOUT. En Java, les types primitifs sont passés par valeur (donc par copie), mais tous les types "complexes" (les objets) sont passés par référence. Et note bien que j'ai parlé de la simplicité du langage/de sa syntaxe, pas de la facilité à programmer avec le langage C. Je trouve que ce dernier est plutôt rapide à mettre en oeuvre justement parce qu'il n'y a pas trop de concepts à connaître (mis à part la notion de pointeur, mais honnêtement, comme je l'ai dit, il n'y a pas besoin de manipuler les pointeurs pour commencer à programmer).
quand je parlais d'algo, je pensais plutôt à des trucs basiques comme un quick sort ou la création de listes chainées
Quand tu commences à programmer, un quicksort ou un algo de listes chaînées n'est pas simple, quel que soit le langage.
Prend le code Java (ou Ruby ou O'Caml) et compare avec un code en C
Je ne connais pas Ruby. En ce qui concerne Java, si tu n'as aucune notion de comment est allouée la mémoire, de comment fonctionne le garbage collector, etc., je ne vois pas comment tu peux comprendre la signification d'un NullPointerException. Java te fait croire qu'il n'y a pas de pointeurs, alors qu'il n'y a que ça, partout. Si tu ne comprends pas le principe d'une référence, je ne vois pas trop comment tu peux faire des choses un tant soit peu complexes en Java, ce qui revient à comprendre les pointeurs en C. Dans les deux cas, il faut parler d'adresse mémoire.
Donc le paradigme objet ne te servira à pas grand chose au début, la seule chose c'est que Java par exemple permet de se détacher un minimun de la machine
La méthode objet ne sert à rien au début. Si on te fait prendre l'habitude dès le départ (enfin, très vite, dirons-nous) de programmer sous forme de modules (fonctions/procédures), les concepts objets seront relativement simples à comprendre (il faut quand même une période d'adaptation, bien sûr). Et justement, prends Java : lorsque tu fais de la prog non objet, tu te retrouves avec le corps minimal suivant :
public class MaClasse {
public static void main(String[] args) {
// programme
}
}
Tu dois donc dire à l'étudiant en prog "oui bon, ben, oublie tout le squelette pour le moment, je t'expliquerai plus tard". En C, tu peux aisément expliquer les choses :
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* ... *
return EXIT_SUCCESS;
}
(et encore, les #include étant comparables aux import, je ne devrais pas les mettre dans le "source").
Pour ce qui est des macros, tu ne les utilises pas au début, et bizarrement ça ne manque pas.
[^] # Re: Que veux-tu faire ?
Posté par Mark Havel . Évalué à 2.
Enfin, personnellement, je suis bien d'accord avec toi, je préfère très nettement avoir affaire à un langage gérant tout seul la mémoire comme un grand.
[^] # Re: Que veux-tu faire ?
Posté par Erwan . Évalué à 5.
[^] # Re: Que veux-tu faire ?
Posté par Lol Zimmerli (site web personnel, Mastodon) . Évalué à 10.
Quelle horreur que de faire passer de telles choses avant son propre bien-être...
La gelée de coings est une chose à ne pas avaler de travers.
[^] # Re: Que veux-tu faire ?
Posté par Thomas Maurin (site web personnel) . Évalué à 4.
Mes études commerciales me plaisent beaucoup mais à la base, comme la plupart des lycéens de S qui s'orientent vers le commerce, ça n'est clairement pas ce que je souhaitais faire.
Et il y a toujours une spécialisation (salvatrice ?) en 4ème année :D
[^] # Re: Que veux-tu faire ?
Posté par tgl . Évalué à 8.
http://www.ulg.ac.be/cifen/inforef/swi/download/python_notes.pdf(...)
Quant à OCaml, bah c'est vraiment un autre genre. Je pense que son l'apprentissage demande plus de rigueur, mais c'est clair que c'est un très beau langage. Et non, je ne le réserverais pas aux matheux : c'est vrai que pour des raisons probablement historiques ou culturelles, la plupart des gens qui l'utilisent ont plutôt un background de thésard en info, mais d'un point de vu applicatif, c'est un langage en fait assez générique, et non pas un de ces langage vraiment purement universitaires qui permettent de faire des gros algos mais rien autour. Donc si il te plait, bah pourquoi pas...
[^] # Re: Que veux-tu faire ?
Posté par Damien Metzler . Évalué à 4.
En fait c'est un bouquin d'apprentissage à la programmation avant d'être un bouquin sur python. C'est très largement tiré de "how to think like a computer scientist" qui me semble une bonne introduction à la programmation (il utilise même la tortue de tk !!!)
Sinon, python c'est simple à apprendre et très puissant. Comme dit plus haut, il commence par la programmation impérative et pass aux objets par la suite. C'est ce qui est bien avec Python : t'es pas obligé de faire de l'objet contrairement à Java où t'es obligé de faire au moins une classe pour faire un programme.
[^] # Re: Que veux-tu faire ?
Posté par Pierre . Évalué à 3.
La syntaxe du C est tres utile a connaitre, car beaucoup de langages s'en inspirent (java, objC, C#, mais aussi php, et dans une moindre mesure perl et csh)
La maniere de coder dans les 2 langage est assez differentes. En python, on utilise beaucoup la bibliotheque tres touffue (pour ca les docs en lignes sont indispensables) et en C, on aurra tendance a souvent reinventer la roue (ce qui peut etre utile dans un contexte d'apprentissage de la programmation).
[^] # Re: Que veux-tu faire ?
Posté par Krunch (site web personnel) . Évalué à 7.
http://www.joelonsoftware.com/articles/fog0000000319.html(...)
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Que veux-tu faire ?
Posté par Nap . Évalué à 1.
# Mon cas ...
Posté par Nelis (site web personnel) . Évalué à 6.
Ensuite, on continue le C en abordant d'autres concepts (les IPC par exemple), en parallèle on apprends les principe de la POO et on commence le C++.
Enfin (tout en continuant le C et le C++), on aborde des languages de plus haut niveau comme le Java ...
Maintenant, ça dépend du temps que tu veux y consacrer et si tu as envie de savoir coder des p'tits trucs comme ça ou de faire les choses proprement ...
[^] # Re: Mon cas ...
Posté par Thomas Maurin (site web personnel) . Évalué à 3.
[^] # Re: Mon cas ...
Posté par totof2000 . Évalué à 5.
[^] # Re: Mon cas ...
Posté par Fanf (site web personnel) . Évalué à 3.
Qui plus est, avec son typage fort et la boucle d'interpretation de haut niveau, tu disposes d'un bon moyen d'éviter les erreurs au début (beaucoup d'erreurs de typages/de syntaxe quand on débutte...) tout en n'ayant pas à compiler à chaque fois ton programme. Et lorsque tu maitriseras les bases de la programmation/de l'algorithmique, tu pourras venir naturellement à l'utilisation des paradigmes impératif et objets, toujours en utilisant OCaML...
Par contre, si tu veux apprendre la programmation système, évidemment C/Assembleur semblent incontournables.
Pour ce qui est d'objective-C, on peut dire que c'est une surcouche objet élégante à C. Son problème étant qu'en déhors de GNUStep, OpenGroupware.org et Apple, peut de personne l'utilise. Mais il est plaisant de programmé avec lui, et je crois que sous MacOS il existe de très bons outils (ProjectBuilder, InterfaceBuilder). Par contre, comme pour C/C++, tu devras gérer ta mémoire à la main, mais c'est formateur ;)
[^] # Re: Mon cas ...
Posté par Nelis (site web personnel) . Évalué à 2.
[^] # Re: Mon cas ...
Posté par totof2000 . Évalué à -1.
Pas d'accord.
Le C n'est qu'un assembleur évolué. Même s'il n'apprend pas l'assembleur de facon poussée, ce n'est pas une raison pour lui déconseiller. Ca ne pourra que lui être utile.
Y a un langage qui me plait bien (que j'ai découvert depuis peu), c'est le Forth.
Après, comme dit plus haut, tout dépend de ce que tu veux faire.
[^] # Re: Mon cas ...
Posté par Mark Havel . Évalué à 5.
Non franchement, je pense que l'assembleur, c'est utile dans un cadre où l'on souhaite aborder un peu tous les types de langages de programmation mais après, je vois pas trop l'utilité surtout pour programmer en amateur.
[^] # Re: Mon cas ...
Posté par totof2000 . Évalué à 3.
Pas forcément ....
c'est se prendre bien trop la tête pour dépasser le stade du programme trivial. Quitte à avoir quelque chose de proche de la machine, autant prendre le C qui n'est pas spécifique à une architecture donnée et où il existe tout de même le minimum de fonctions nécessaires.
Les meilleurs développeurs C que je connais ont aussi un minimum de connaissance de l'assembleur.
Je n'ai pas dit non plus d'écrire des programmes complets en assembleur, mais de l'apprendre pour au moin savoir ce qui se cache sous le C. Après effectivement, tout dpend des cas, et selon le compilateur qu'on utilise et les besoins en perf, il peut être plus efficace de coder des bouts de code en assembleur. Mais c'est une autre histoire.
Autre détail: dire que le C n'est pas spécifique à une architecture donnée ne signifie pas qu'un programme développé sur une architecture A n'aura pas besoin d'être adapté sur l'archi B.
[^] # Re: Mon cas ...
Posté par fork_bomb . Évalué à 2.
Moi, j'ai appris le C en premier, et l'assembleur est venu après, à force de débugguer des applications dont je n'ai pas le source, regarder les sources de linux...
[^] # Re: Mon cas ...
Posté par Obsidian . Évalué à 10.
1) Il y a tellement de langages qu'on ne peut plus se permettre de commencer par la base et évoluer vers le haut comme l'on fait les langages. Ce serait pourtant très salutaire car l'évolution des langages a toujours suivi des besoins qui se sont présentés aux programmeurs et des événements historiques. Voir les choses dans l'ordre permet d'expliquer bon nombre d'états de faits en informatique que l'on inculque aux universitaires comme des dogmes et sans explication préalable.
2) Contrairement à ce que les gens qui ont commencé trop haut et qui n'ont jamais eu la curiosité d'aller ouvrir le capot de leur bécane peuvent penser, l'assembleur n'est pas un langage comme les autres. Non seulement parce que tout programme quelque soit son dialecte finit toujours à l'exécution par être traduit, aux travers d'un nombre variable de couches, en langage machine, mais également parce que cela permet de réellement savoir comment fonctionne un microprocesseur. Cela me semble être une évidence pour un professionnel de l'informatique, et à plus forte raison pour un programmeur, mais j'ai l'impression que la plupart des nouveaux venus dans le domaine inventent des raisons toutes plus ou moins farfelues pour justifier le passage sous silence de ce domaine « délicat ».
Personnellement, j'avais commencé avec le BASIC 128 de mon MO6 en 1987 et je suis très vite passé à l'assembleur, avec lequel j'ai pu réaliser monts et merveilles. Bien plus tard (en 1999 ! lorsque Linux m'a offert la possibilité de programmer sans pirater) cela m'a permis d'apprendre le langage C en 15 jours parce que toutes ses subtilités avaient un sens, spécialement les pointeurs [...].
On ne peut pas apprendre la programmation comme on apprend les mathématiques. En maths, les concepts enseignés sont immuables, ils existent pour la plupart depuis l'antiquité, et décrivent les lois de la nature qui sont « comme ils sont », et qui n'ont pas attendu l'apparition de l'intelligence pour régir le monde. La programmation, c'est une invention technique humaine qui a trente ans (pour son exploitation sérieuse). Cela veut dire que les premières personnes a avoir mis cela au point sont pour la plupart encore en vie.
En considérant en plus la vitesse à laquelle le tout évolue, cela veut dire que la programmation est un domaine qu'il faut comprendre, déduire, et qui fait appel à l'intuition. Le par-coeur académique échoue complètement ce domaine, à mon goût.
[^] # Re: Mon cas ...
Posté par Yusei (Mastodon) . Évalué à 4.
Il suffit d'apprendre le lambda-calcul (des maths), et puis d'apprendre le Lisp :)
[^] # Re: Mon cas ...
Posté par pepone (site web personnel) . Évalué à 3.
(Il (suffit d'apprendre (le lambda-calcul (des maths))), (et puis d'apprendre) (le Lisp))
->[]
[^] # Re: Mon cas ...
Posté par GTof . Évalué à 7.
Comme tu l'as dit il y a de plus en plus de langages et je ne crois pas que ca s'arrêtera. Je suis d'accord avec toi, étudier l'évolution des langages a travers les années est important pour bien comprendre pourquoi ce qui se fait aujourd'hui est ce qu'il est. Mais ca devient une tâche trop grande et le risque c'est que ca finisse par devenir un catalogue de langages appris par coeur, ce qui est stérile. Alors il faut faire un choix, approndir le passé pour comprendre d'où on vient soit insister sur les avancés récentes pour continuer a avancer.
En caricaturant, est il plus important à l'heure actuelle pour un programmeur de savoir manipuler la mémoire à merveille mais d'ignorer les avancés en génie logiciel comme la programmation orienté objet ou le polymorphisme ou alors d'ignorer le fonctionnement de la mémoire mais être capable de produire une application conséquente avec du code certifié en peu de temps ? Et de nos jours, est t'il plus important d'avoir des gens qui savent optimiser au maximum le code assembleur d'une suite bureautique ou internet ou alors qui savent produire ces suites ?
Au cas ou certains me dirais qu'on peut faire les deux, c'est partiellement vrai. Certes on peut survoler les deux mais pour que cela serve a quelque chose il faut faire plus que survoler et ca demande du temps, beaucoup de temps.
Je crois que la programmation atteind le point ou un seul homme ne peut en faire le tour.
L'exemple des mathématiques que tu prends est très bon et sur ce point tu as tort. Les mathématiques sont loin d'être immuable, certes ce qui est vrai un jour l'est aussi le lendemain mais c'est pareil en programmation, "i = i + 1" sera toujours une incrémentation de la variable "i" de 1, les opérations élémentaires ne changent pas. Ce qui évolue se sont les langages tout comme le font les théories mathématiques. Certes les vérités sont immuables mais les théories qui sont des inventions humaines évoluent.
Et si on regarde l'évolution des mathématiques, notre génération est bien moins forte dans le calcul technique que la génération de nos parent (mes profs de maths me l'ont toujours répété très souvent, cela les exaspérait) qui elle même était bien moins forte dans le même domaine que la sienne. En revanche notre génération est meilleure dans les concepts. On voit des gens qui ne savent plus diviser de tête mais qui savent résoudre des problèmes conceptuels compexes, tout comme on voit en programmation des gens qui bien qu'ignorant l'usage manuel de la mémoire savent faire des applications de plus en plus complexes. Et d'ailleurs en maths aussi le par coeur académique ne fonctionne pas, j'en ai vu quelques uns se planter à cause de ca.
[^] # Re: Mon cas ...
Posté par Guillaume Knispel . Évalué à 8.
Toi t'es riche et t'as un P IV :) (ou un AMD 64 ptet) avec 1 Go de RAM nan ?
Ca m'ennuit toujours les discours consistant à dire : certes, on pourrait faire mieux, mais vous comprenez on est pressé et avec le Java (C#, whatever, ...) on peut faire 2x plus de fonctions en 2x moins de temps avec 2x moins de programmeurs 2x moins doués et des machines 10x plus puissantes.
Et vous savez quoi ? Au final ca bug vraiment pas moins qu'avant...
Honnetement je préfère essayer de faire des choses élégantes, en plus au final ca pollue moins car j'achete moins de PC et le mien consomme moins de courant qu'un neuf ;)
[^] # Re: Mon cas ...
Posté par Mark Havel . Évalué à 5.
Après, il faut voir si on pense que ce que l'on perd en performances et en occupation mémoire compense ou non ce qu'on gagne en temps de conception. C'est pas du "certes on pourrait faire mieux", c'est du "on pourrait passer 5 ans à programmer ça en C ou en C++, on préfère vous le livrer en un an en Java". Et on arrête de dire des conneries, les différences de performances sont pas si énormes que ça, sinon ces langages ne seraient pas aussi utilisés et répandus je crois. Et un Pentium ou un Athlon avec un giga de mémoire, c'est parfaitement abordable.
Mais puisqu'on a la puissance nécessaire et que ça tourne suffisamment bien, c'est une connerie que de ne pas en profiter.
Je pense que ce genre d'évolution est l'une des raisons d'être des ordinateurs : prendre en charge les taches répétitives et ennuyeuses. Et il y a des applications où on ne veut pas avoir à se prendre la tête avec ces détails.
Ca fait partie intégrante de la conception d'un programme que de choisir le langage le plus adapté. Si c'est pour faire une application web comme un CMS, c'est vraiment une perte de temps que de passer par du C. Si c'est pour faire un moteur 3D de jeu, c'est vraiment idiot de prendre du Java.
[^] # Re: Mon cas ...
Posté par totof2000 . Évalué à 2.
[^] # Re: Mon cas ...
Posté par GTof . Évalué à 6.
Puis aller plus vite pour coder une tâche ne sinifie pas mettre deux fois moins de temps au total car tu peux peux profiter du temps que tu as gagné pour mieux penser ton programme et ses algorithmes. Dans un programme une améloiration d'un algorithme est souvent bien plus efficace qu'une maipulation astucieuse de la mémoire ou du processeur. De plus si on prend le compilateur d'O'Caml, il optmise pas mal et rien ne dit qu'a la main tu fasses mieux que lui.
J'ai envie de faire une anlalogie. Trouves tu normal que linxs, Firefox, Konqueror et j'en passe des tonnes, pour lire un fichier sur un serveur, implémentent des fonctions de connection au serveur ? Moi pas ! Je préfère nettement la solution du Hurd qui consiste a monter un ftp, http sur le vfs comme ca l'application n'a plus qu'a faire ouvrir le fichier comme s'il était local. Comme ca il n'y a qu'un seul code, et celui qui veut faire une application pour lire un fichier distant n'a plus a ce soucier de la connection, tout comme dans les langages de haut niveau où le programmeur n'a plus a ce soucier de la gestion de la mémoire. Les applications sotnt plus simple a écrire, les bug de connections sont éradiqués et il n'est plus utile pour lire un fichier distant de savoir ce connecter a au serveur. Ceci pour répondre a ton "2x plus de fonctions en 2x moins de temps avec 2x moins de programmeurs 2x moins doués". Mais là ou tu te trompe c'est que la machine n'a pas a être 10 fois plus puiisante, c'est le système qui est 10 fois mieux concu ! Pour les langages de haut niveau c'est pareil, ils simplifient la vie, réduisent les doublons et demandent moins de connaissances pour arriver aux mêmes buts mais ils ne sont pas 10 fois plus gourmands,.
[^] # Re: Mon cas ...
Posté par totof2000 . Évalué à 3.
Oui, j'en suis certain (d'ailleurs certains l'ont appris en même temps que moi).
Moi, j'ai appris le C en premier, et l'assembleur est venu après, à force de débugguer des applications dont je n'ai pas le source, regarder les sources de linux...
Moi c'est le contraire (assembleur sur microprocesseur 8 bits 6809, assembleur 68k, microcontroleurs 68hc11 et x386, mais a l'époque essentiellement sous MSDOS). Et contrairement à ce que l'on croit, l'assembleur n'est pas si fastidieux que ca, c'est une question d'habitude. Quand on est rodé, on devient très efficace.
Mais attention, je n'ai jamais dit qu'il fallait absolument commencer par l'assembleur. On peut très bien apprendre le C (qui n'est ni plus ni moins qu'un assembleur évolué), et en même temps apprendre l'assembleur. Même si par la suite on ne continue pas à coder en asm, c'est quand même très formateur.
[^] # Re: Mon cas ...
Posté par Calim' Héros (site web personnel) . Évalué à 3.
Sinon il faudrait 3 langages je pense
- un en programation Impérative (exemple C)
- un en programation Objet (exemple java, ada)
- un en programation Fonctionnel (exemple lisp)
Enfin plus d'info par la http://fr.wikipedia.org/wiki/Programmation.(...)
[^] # Re: Mon cas ...
Posté par Yusei (Mastodon) . Évalué à 7.
[^] # Re: Mon cas ...
Posté par hocwp (site web personnel) . Évalué à 2.
[^] # Re: Mon cas ...
Posté par GuieA_7 (site web personnel) . Évalué à 2.
# GNUstep
Posté par Eric Heintzmann . Évalué à 1.
Par contre le language recommendé est l'Objective C, une extension (orienté objet) du C. Java et ruby sont aussi possibles.
http://www.gnustep.org/experience/DevelopmentDemonstration.html(...)
http://www.xdev.org/gnustep/demo.html(...)
# Objective Caml est bien
Posté par GTof . Évalué à 10.
Je pense que premièrement prendre un langage qui gère tout seul l'allocation mémoire est une bonne chose, c'est une raison massive de bug. Ne pas avoir a faire un malloc, sans oublier de mettre le free et une seule fois et au bon endroit avec le bon transtipage est compliqué au début. O'Caml, Java, Ada et beaucoup d'autres le font, mais pas le C ni le C++. D'ailleur le C ne mérite pas d'être appelé par certains "langage de haut niveau", ce n'est pas son but.
Ensuite tu as le style de programmation que tu préfère. Là c'est une histoire de goût. Il y a des langages impératifs, ce sont les plus répendus. Ce sont ceux des affectation de variables, des bloucles for et while. Ils ont l'avantage d'être assez natuels quand on débute. On peut y coder les chose facilement et en peu de temps mais elle est plus diffcile a déboguer, on peut se perdre dans "a quel moment telle variable à t'elle valeur ?". Faut pas s'embrouiller.
Les langages fonctionnels demandent de mieux penset ton programme avant de le coder. Ils sont basé sur des fonctions que tu emboite pour calculer le resultat et pas contrairement aux langages impératifs, aux valeurs que tu met dans des vairables. En contre partie ils sont plus aisés a débogger, et ont une structure basé sur les fonctionnalités ce qui les rend plus lisibles.
Il y a aussi la programmation par objets. Elle est très utile pour la réutilisabilité du code. Mais comme dans ce monde tout est objet, il faut tout définir en terme d'objets ce qui parfois engendre des complications inutiles comme par exemple pour additionner deux entier, tu appèle la méthode de l'un où tu passe le second en argument ce qui a pour condéquences des fois de retrourner un nouvel objet ou de modifier la valeur du premier.
Le typage est également très important, plus un langage t'embête avec le typage plus il détectera des erreurs et moins tu en fera, c'est très ennyeux quand on compile mais avec un langage qui a des types très exigents comme O'Caml, quand ton programme compile tu es sur d'avoir éliminé beaucoup d'érreur d'étourderie.
Concernant le typage il y a aussi autre chose de pratique, c'est le polymorphisme. Si tu fais une fonction pour calculer la taille d'une liste, tu aimerais que ta fonction serve pour des listes quelconques et pas a avoir une fonction qui calcule la même chose pour chaque type de liste. Le polymorphisme ca sert à ca, ca permet de définir une même fonction pour différents types d'arguments (avec différents types de retour).
Autre point virtal, les bibliotèques. Il est préférable de prendre un langage où il existe déjà beaucoup de bibliothèques et pas à avoir a réinventer la roue a chaque fois.
Concernant O'Caml il est fonctionnel mais sait faire aussi de l'impératif et est aussi orienté objet (d'où son nom), il gère automatiquement l'allocation de mémoire. Le typage est statique c'est a dire que le compilateur essaie de trouver les erreurs de typage à la compilation et pas à l'execution, il est polymorphe, possède de nombreuses bibliotèques dont des binings de la SDL,Gtk, OpenGL, etc ... Son compilateur natif lui permet d'avoir un code rapide qui rivalise avec du C. En bytecode, c'est 5 fois plus lent mais c'est portable. Il est en QPL pour le compilateur et LGPL pour les bibliothèques.
De plus caml à un outil très sympa : un top-level. Le top-level est un peu comme un shell dans lequel tu entre du code Caml et qui le compile à la volé. C'est très pratique pour tester ses fonctions sans avoir à faire un programme de teste spécifique. Et c'est encore mieux pour apprendre car tu peux expérimenter a ta guise et dans effort. Il y aussi un livre très bien fait en ligne qui se nome "Developpement d'application avec Objective Caml" ( Dehttp://www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html(...) ) . Il est très bien fait mais depuis le langage a évolué donc un petit tour de temps en temps du coté du manuel en ligne ne sera pas mal.
Un autre langage très en vogue est java, complètement orienté objet il gère aussi la mémoire. Il possède une immence quantité de bibliotèques. Malheureusement la serion de Sun, c'est pas libre et les projets libres ne sont pas 100% compatibles avec les dernieres versions de Sun.
Je n'ai pas parlé de la programmation logique, c'est vrai, mais pour débuter je n'y crois pas. Si ca t'intéresse ily a Prolog qui est bien fait et peut rendre parfois quelques services.
Pour les autres langages, je ne les connais pas trop donc je ne peux pas trop d'aider mais j'ai entendu beaucoup de bien de Ada et Python.
Bonne chance pour choisir le langage qui te convient.
[^] # XS : programmez en XML
Posté par GTof . Évalué à 3.
<for var="n" from="100" to="0" step="-1">
<print> n, " bottles of beer on the wall"</print>
<print> n, " bottles of beer"</print>
<print> "Take one down, and pass it around..."</print>
<print> n-1, "bottles of beer on the wall\n"</print>
</for>
Ca doit être bien sympa couplé avec XSLT.
[^] # Re: XS : programmez en XML
Posté par wismerhill . Évalué à 4.
Par contre c'est facile de vérifier la syntaxe, il suffit de la DTD, les vérificateurs XML sont légions.
[^] # Re: XS : programmez en XML
Posté par Matthieu Lemerre (site web personnel) . Évalué à 3.
In the end,
everyone will be writing lisp in one form or another. The current
trends shown by Big Software is to use XML for all data formats. It
won't be long before we have XML interpreters, XML data being
interpreted as functions:
plus
4
5
But why wait? We have it all already.
En resume: l'evolution des langages de programmation les font se rapprocher de Lisp, et ce nouveau langage en est un pas de plus.
http://l-lang.org/ - Conception du langage L
[^] # Re: XS : programmez en XML
Posté par hocwp (site web personnel) . Évalué à 1.
(loop for n from 100 downto 1 do
(format t "~A bottles of beer on the wall " n)
(format t "~A bottles of beer " n)
(format t "Take one down, and pass it around... ")
(format t "~A bottles of beer on the wall~%" (- n 1)))
Ou pour faire vraiment dans le même style quand XML:
(defun my-print (&rest args)
(format t "~{~A~}" args))
(loop for n from 100 downto 1 do
(my-print n " bottles of beer on the wall ")
(my-print n " bottles of beer ")
(my-print "Take one down, and pass it around... ")
(my-print (- n 1) " bottles of beer on the wall" #\Newline))
# pour conclure...
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
Je me mettrais personnelement bien à O'caml et a Qt en C++. Malheureusement, je n'ai reussi qu'à apprendre Perl et je code en C ANSI pour ma boite (pas glop :/).
Bref, si tu n'as pas d'impératif de boulot et que tu cherches une certaine productivité future Ocaml est un bon choix grace à tout les testes fait par le compilo.
"La première sécurité est la liberté"
[^] # Re: pour conclure...
Posté par Thomas Maurin (site web personnel) . Évalué à 3.
Pour ce qui est des impératifs de boulot, mon école est très "light" sur l'informatique. Cette année ça a été Excel, Powerpoint et un site web (je parle bien de site web, pas de progra web, la plupart de mes camarades étudiants ne connaissent même pas l'existence du HTML). L'an prochain ce devrait être Access, et dans deux ans VB.
Je pense pas que ce soit insurmontable et de toutes façons je n'ai pas du tout envie d'apprendre le VB tant que je n'y serai pas obligé :-p
# Avis
Posté par Yusei (Mastodon) . Évalué à 5.
L'OCaml, c'est intellectuellement très joli, en pratique très efficace, mais esthétiquement c'est (à mon avis) une horreur. Quand on est habitué à des langages à la syntaxe plus amicale, c'est assez dur de se forcer à apprendre celle de l'OCaml, bien que ça vaille surement le coup. Quitte à l'apprendre un jour, je pense qu'il vaut mieux le faire le plus tôt possible. Par contre, c'est un langage qui repose sur des concepts assez avancés qui risquent d'être durs à aborder si tu ne fais pas d'études d'info.
Le plus facile pour l'apprentissage, c'est un langage à la syntaxe assez souple, et qui permet d'obtenir rapidement des trucs qui marchent. Pour ça, je conseille Ruby parce que c'est ce que je connais, mais d'autres conseillent Python et je pense que les deux se valent. Le Ruby c'est joli, agréable à utiliser, propre (si on fait un peu attention), de haut niveau, et rapide à programmer... par contre si tu as un jour à faire des calculs intensifs, il faudra utiliser autre chose :)
Finalement, je me rend compte que je te conseille de commencer à la fois par le C, l'OCaml et Ruby. Comme ça ne va pas être pratique, je vais conclure en te conseillant --si tu cherches un seul langage-- de commencer par Eiffel. C'est plus simple que le C, plus élégant (à mon avis) que l'OCaml, presque aussi souple et bien plus rapide que Ruby.
[^] # Re: Avis
Posté par GTof . Évalué à 3.
Chacun pense ce qu'il veut d'O'Caml mais dire qu'il est dur a aborder sans étude d'info est complètement faux. On peut parfaittement utiliser un langage sans comprendre toutes les subtilités de la théorie derrière. L'important c'est juste de savoir utiliser le langage, et sur ce point O'Caml est aussi accessible qu'un autre. Et d'ailleurs tu conseilles le C mais mâitrises tu complètement la sémantique du C ? Ca aussi c'est un thèmes de recherche actuel en info ce qui n'empêche pas des milliers de programmeur a travers le monde de maitriser le C.
Dire que ca syntaxe n'est pas amicale n'a pas de sens, ca dépend des goûts de chacun. Personnellement je suis incapable de suivre un code C conséquent sans m'embrouiller. Et même quand c'est moi qui le code je m'emmêle toujours dans les calculs alors qu'avec la couche fonctionnelle d'O'Caml j'ai aucun problème et je connais des gens pour qui c'est exactement l'inverse. C'est pour ca qu'il est important de voir quelques langages pour se faire une idée et prendre celui qui nous convient le plus.
[^] # Re: Avis
Posté par Yusei (Mastodon) . Évalué à 2.
Je le trouve dur à aborder en ayant fait des études d'info (rien d'insurmontable ceci dit), et je n'ai fait qu'extrapoler en supposant que ce devrait être encore plus dur pour quelqu'un qui n'en avait pas fait.
En particulier, la notation de l'inférence de types n'est pas évidente pour qui n'a pas fait de lambda calcul. L'imbrication des let et autres let rec, la différence entre les fonctions renvoyant quelque chose et les instructions de renvoyant rien mais agissant par effets de bord... c'est pas spécialement évident non plus.
Je n'ai jamais prétendu que le C était simple, bien au contraire. La seule raison pour laquelle je pense que le C est utile, c'est parce que si on sait coder en C, on a une bonne intuition de la manière dont fonctionne un vrai ordinateur, et je pense qu'avoir cette intuition est utile.
Aurais-tu, par hasard, omis de remarqué que je précisais entre parenthèses "à mon avis" ? Effectivement, ça dépend des goûts de chacun, mais la syntaxe d'OCaml est bourrée d'exceptions, et ça n'en facilite pas l'apprentissage. En particulier, le fait qu'il y ait un opérateur par type pour une même opération, c'est super chiant. Certes, ça permet l'inférence de types, mais ça reste super chiant de devoir se rappeler de la liste des opérateurs de chaque type.
Au niveau de la syntaxe, un langage comme le Scheme est beaucoup plus rapide à apprendre, parce qu'il existe très peu de règles et qu'elles n'ont pas d'exceptions. En 10 minutes n'importe qui peut comprendre et retenir la syntaxe de Scheme.
[^] # Re: Avis
Posté par Vivi (site web personnel) . Évalué à 1.
pas vraiment, ça n'a rien à voir. Tel qu'il est présenté traditionnellement, le lambda-calcul est non-typé.
Et l'inférence de types, c'est conceptuellement assez simple. (« j'aditionne 2 à x ? donc x est un entier ; j'applique List.length à x ? donc x est une liste, etc.)
la différence entre les fonctions renvoyant quelque chose et les instructions de renvoyant rien
au contraire, c'est beaucoupl plus simple qu'en C et consorts car en caml il n'y a que des expressions, pas de distingo expressions / instructions.
on a une bonne intuition de la manière dont fonctionne un vrai ordinateur, et je pense qu'avoir cette intuition est utile.
bof, le C est déjà bien loin de la machine (et de toutes façons je ne pense pas que cette "intuition" soit trés utile).
En particulier, le fait qu'il y ait un opérateur par type pour une même opération, c'est super chiant. Certes, ça permet l'inférence de types, mais ça reste super chiant de devoir se rappeler de la liste des opérateurs de chaque type.
ouais enfin il n'y a que deux familles d'opérateurs, ceux pour entiers et ceux pour flottants qui ont un point en plus. C'est pas la mort à mémoriser. Remarque que certains langages à inférence de type se débrouillent avec un seul jeu d'opérateur.
[^] # Re: Avis
Posté par Yusei (Mastodon) . Évalué à 1.
Tu as vu que je parlais de la notation de l'inférence de type, et pas la notion ? Cette notation est la même notation que celle utilisée pour le lambda-calcul typé, ce qui est une bonne chose si on en a déjà fait, mais qui n'est pas évident sinon.
Tu sais, le fameux: (e -> e -> e) qui désigne une fonction qu'en C on écrirait "e f(e, e)".
Oui, et contrairement à d'autres langages fonctionnels plus "purs", il y a des expressions qui ne retournent pas de valeur mais on des effet de bord. C'est pratique mais ça complique les choses.
C'est faux, il y a des opérateurs différents pour tous les types. Par exemple l'opérateur de "construction de liste" (je ne sais pas comment ça s'appelle exactement) est différent selon le type de "liste" que l'on manipule. Pour une liste c'est [ et ], pour un vecteur c'est [| et |]. C'est comme ça pour tous les opérateurs, puisqu'un opérateur est une fonction dont le type ne peut pas varier.
[^] # Re: Avis
Posté par MrLapinot (site web personnel) . Évalué à 1.
Pour quelqu'un qui n'a jamais fait de programmation, les deux sont aussi (non) intuitifs, amha. J'aurais même tendance à préférer la version caml, qui traduit bien l'idée (avec des flèches) : je prends a, puis b, puis c, ... et je sors le résultat. De plus, une fois l'idée comprise, ça permet de visualiser la notion d'application partielle d'une fonction très facilement.
Enfin bon, j'ai commencé le Caml au lycée pour le plaisir alors je ne suis pas forcément une référence en matière d'intuition du programmeur débutant ;-)
[^] # Re: Avis
Posté par Yusei (Mastodon) . Évalué à 2.
Je ne donnais la version en C que pour que les non initiés comprennent ce que veux dire (e -> e -> e), mais ceci dit, à la réflexion, je pense quand même que c'est plus intuitif: on a une fonction qui a clairement deux arguments et une valeur de retour. Ça serait encore plus intuitif noté comme en maths, f: (e, e) -> e.
La notation du lambda-calcul, elle, contient un "piège", qui est que l'on n'a pas besoin de donner tous les arguments, et que dans ce cas on obtient une fonction. En réalité, il aurait fallu que je note (e -> (e -> e)). Attention, je ne critique pas ça, je trouve les langages fonctionnels très pratiques et élégants, mais pour quelqu'un qui vient des maths traditionnelles, je ne trouve pas ça spécialement intuitif :)
[^] # Re: Avis
Posté par Germain Saval . Évalué à 2.
C'est faux, quand une fonction agit par effet de bord, la valeur retournée par cette fonction est du type unit. Ce type ne contient qu'une valeur.
[^] # Re: Avis
Posté par Germain Saval . Évalué à -1.
C'est faux, quand une fonction agit par effet de bord, la valeur retournée par cette fonction est du type unit. Ce type ne contient qu'une valeur.
[^] # Re: Avis
Posté par bobefrei . Évalué à 4.
Moi j'ai appris dans l'ordre:
- assembleur
- C
- C++
- PHP/Pascal...
- Java/C#/Python/...
- Erlang/Ruby/...
Ce n'est pas forcément le bon ordre, mais je suis allé toujours vers plus de haut niveau. Les personnes que je connais qui ont fait l'inverse ont beaucoup plus de mal que moi lorsqu'il s'agit de débugger ou d'optimiser, car ils comprennent moi bien ce qui se passe sous le capot.
Je te conseillerai de faire un peu d''assembleur, un peu de C puis Ruby pour commencer.
[^] # Re: Avis
Posté par pepone (site web personnel) . Évalué à 1.
Je ne peux qu'applaudir devant tant de gout ;-)
# Si tu aimes le web
Posté par JoeBar . Évalué à 6.
En revanche, si tu aimes bien le web, que tu veux apprendre un langage facile, permissif (parfois trop !), rapide à comprendre, avec une syntaxe proche du C, sans gestion manuelle de la mémoire... Tout le monde aura déjà compris que je parle de PHP.
Il paraît que PHP5 peut être bien orienté objet, mais pour ce que je connais de PHP4, je ne le recommanderais pas pour apprendre la prog OO. En revanche pour débuter dans un langage impératif, c'est excellent !
La doc est très bien, pleine d'exemples de code ( http://www.php.net/manual/fr/(...) ), la communauté est fournie, et c'est immédiatement fun à développer.
Après, comme disait l'autre, ça dépend de ce que tu veux faire. Même s'il aimerait peut etre sortir de son rôle unique de langage web, php est rarement utilisé hors de ce contexte. Question d'habitudes certainement.
PS : n'allez pas croire que je sois un fan inconditionnel de PHP, j'essaie juste de répondre à son attente :)
[^] # Re: Si tu aimes le web
Posté par Matthieu Lemerre (site web personnel) . Évalué à 5.
Et pourtant je suis globalement d'accord avec ca. Sur la facilite, effectivement c'est facile quand on programme en imperatif bete, mais
je trouve la syntaxe tres peu claire des qu'on veut faire quelquechose d'un peu plus haut niveau, par exemple: (de memoire)
$chose = (mysql_get_array($truc))[0]; marche pas,
alors que:
$array = mysql_get_array($truc);
$chose = $array[0] marche.
Il y a beaucoup d'autres exemples de syntaxe un peu lourde, les noms des fonctions sont pas coherents... On peut aimer le modele bazaar, mais il faut quand meme un minimum controler.
C'est peut etre bien pour apprendre, mais je pense qu'il faut savoir passer a autre chose, par exemple Ruby offre beaucoup plus de place pour pouvoir conceptualiser et ecrire des algorithmes rapidement, et offre la possibilite de mixer les paradigmes imperatifs et fonctionnels.
Un langage simple a apprendre et extremement puissant est tout simplement Lisp. Tout le monde est braque sur les parentheses, alors qu'au bout de 3 heures on ne les voit plus. Au contraire, la syntaxe est la plus simple, aucune ambiguite n'est possible, c'est simple a aprehender au debut et c'est le langage le plus flexible (grace aux macros, on peut transformer lisp en le langage le plus adapte au type de probleme que l'on veut resoudre, c.f. http://www.paulgraham.com/progbot.html(...)
http://l-lang.org/ - Conception du langage L
# Prog pour MacOS X
Posté par Miguel Moquillon (site web personnel) . Évalué à 4.
Si c'est la cas, alors bienvenu dans un des environnements de programmation le plus avancé : Cocoa (implémentation d'OpenStep).
Pour ce faire:
- tu peux te mettre à l'ObjC qui est une couche objet au-dessus du C empruntant la syntaxe de Smalltalk. Toutefois, pour débuter, il peut paraitre rebutant,
- sinon, tu as aussi Java pour lequel un binding Cocoa existe. Il est plus facile à appréhender,
- et pour finir tu as l'extraordinaire F-script. C'est un langage de script élaboré par Apple et basé sur Smalltalk et qui te permet de faire rapidement des choses assez poussées. La syntaxe de smalltalk se distingue des autres mais, pour y avoir goûter, je la préfére aux autres car je trouve qu'elle aide à acquérir un esprit ... comment dire ... plus objet ? plus naturelle ? L'avantage de ce langage est qu'avec tu vas pouvoir optimiser ton utilisation de MacOS X ;)
Enfin voilà mon avis.
# my 2 cents
Posté par kra . Évalué à 4.
c'est quand meme un concept important a maitriser.
sinon, personne n'en a parle ici, mais je trouve le turbo pascal plutot pas mal pour aborder la programmation imperative.
un peu comme le C, mais un peu plus agreable a apprendre.
Pas trop longtemps quand meme, le temps de comprendre l'imperatif quoi, pis apres un peu de C, histoire de comprendre comment fonctionne un programme.
Pas la peine de passer trop de temps non plus sur le C, c'est quand meme assez aride comme langage.
En fait, je suis pas un grand fan des langages imperatifs, ptetre une question de gout apres tout.
apres, objet ou fonctionnel, je sais pas trop lequel aborder en premier..
perso, j'ai fait du fonctionnel avant de faire de l'objet, ca c'est plutot bien passe.
OCaml est vraiment un langage fabuleux avec une courbe d'apprentissage tres plate au debut puis qui creve le plafond passe un certain stade.
le typage fort fait souffrir au debut, puis quand on a prit quelques (bonnes) habitudes, on se demande comment on a fait sans avant..
Apres, la programmation fonctionnelle est loin d'etre adaptee a tous les besoins, mais ya moyen de faire de l'imperatif/objet avec.
En fait, caml est tres peu utilise dans le monde pro (manque de libs, d'ide, debogueur etc.), mais pour une utilisation "fun", je trouve que c'est un excellent langage.
Pour l'objet, je dirais de commencer avec Java, pour tous les tutoriels, docs, outils etc. dispo et aussi pour la facilite d'abordage du langage. Pourquoi pas du 1.5 qui propose des evolutions interessantes (raaaaah les List typees, je reve que de ca.. vivement que ca se generalise tout ca).
Quand les concepts objets sont bien maitrises, s'interesser aux fonctionnalites supplementaires proposees par C++ (heritage multiple, templates tout ce genre de choses).
Une fois arrive a ce point, t'auras deja passe pas mal de temps, hurle de rage devant ton ecran un nombre incalculable de fois, danse de joie tout seul comme un con devant ton ecran a peu pres le meme nombre de fois.
Et surtout, ben tu pourras te choisir un langage de predilection dans la jungle des langages et l'etudier en profondeur pour en faire ce que bon te semble. :)
[^] # Re: my 2 cents
Posté par Pierre Tramonson . Évalué à 2.
ouais, le genre de choses qui rend le code inmaintenable donc...
Jamais de ma vie je ne voudrais avoir à refaire du C++, c'est encore plus facile d'être porçin et incompréhensible qu'en C.
Je ne suis pas sur que commencer par un langage objet soit vraiment ce qu'il y a de plus simple. La prog impérative est quand même plus proche des algo de math qu'on a l'habitude de voir...
[^] # Re: my 2 cents
Posté par kra . Évalué à 2.
pour eclaircir ma pensee :
d'abord imperatif pour une approche simple.
ensuite ocaml pour le typage fort et toutes ses autres feature qui forcent a bien coder et donc ne pas etre tente de prendre des habitudes de goret.
puis une fois les bons reflexes de programmation acquis, objet.
apres, t'es normalement capable d'apprendre n'importe quel langage rapidement et facilement.
sauf le perl, mais ca c'est normal. :)
# Quelle jungle
Posté par JoeBar . Évalué à 8.
Je crois que chaque opinion émise a été récriée au moins deux fois pour des raisons différentes... Personne n'a le même avis, en définitive. Personne n'a appris l'informatique de la même manière et ça se sent.
Fais donc comme tout le monde et laisse le destin choisir ;)
[^] # Re: Quelle jungle
Posté par Thomas Maurin (site web personnel) . Évalué à 2.
Merci pour toutes ces précisions
[^] # Re: Quelle jungle
Posté par DPhil (site web personnel) . Évalué à 2.
[^] # Re: Quelle jungle
Posté par Erwan . Évalué à 2.
* Oui, un langage avec lequel on ne se prend pas la tete. Pour ca un langage de haut niveau est tres bien. La gestion de la memoire ca peut tres bien s'apprendre plus tard.
* MAIS un langage fortement type, sinon les choses ne sont pas claires dans la tete.
J'aurais tendance a recommander Ruby, pour les memes raisons que d'autres ont recommande Python.
En tout cas, ce qui est important c'est d'avoir des petits projets a faire (meme des trucs tout simples qui ne servent pas a grand chose et qui existent deja) car si tu essayes d'apprendre un langage sans l'appliquer rapidement tu ne vas pas saisir bien les concepts, tu vas te demotiver vite et tu vas oublier vite. C'est comme apprendre la grammaire d'une langue vivante sans essayer de lire, ecrire ou parler.
# Vive le OCaml !
Posté par TaXules . Évalué à 4.
En plus, en commençant par lui, tu ne seras pas pollué par les habitudes de la programmation impératives qui empêchent de l'apprécier à sa juste valeur.
Ses avantages: portable, sûr, rapide, efficace, facile et complet ! (que demander de plus ?)
Sans oublier les 3 niveaux de compilation qui sont disponibles, interprété, bytecode ou natif.
Je te déconseille de commencer par le C, tu vas t'e***rder pour rien avec la gestion de la mémoire, des tonnes de lignes de code qui ne font que combler le manque de ce langage archaïque ! En plus s'il ne t'attire pas, je ne vois pas l'interêt de te forcer.
Et puis surtout, je vois pas pourquoi il faudrait commencer par apprendre un langage impératif. C'est pas parce qu'on le fait en général que c'est le mieux. D'ailleurs je pense que c'est l'une des raisons du faible nombre de programmeurs caml, l'approche est très différente et la plupart n'ont pas envie de s'investir pour comprendre la force de ce langage (mais il faut aussi avouer qu'il est peu et mal enseigné (dans ma fac en particulier)).
Maintenant c'est à toi de choisir, mais comme tu dis que le caml semble te plaire, fonce !
[^] # Re: Vive le OCaml !
Posté par kra . Évalué à 1.
ben l'avantage de l'imperatif pour commencer, c'est que c'est simplissime a comprendre (quoique, les mode de passage des parametres sont pas forcement evident au premier abord).
Ca fait vraiment recette de cuisine qui se deroule dans l'ordre.
perso j'ai commence la programmation avec le caml et j'ai franchement pas aime du tout et pas du tout saisi les subtilites (bon, faut dire aussi, nous faire coder sous notepad avec l'interpreteur boggue, c'etait peut etre pas la meilleur solution..).
Ensuite, on m'a fait faire du pascal, ca s'est tres bien passe et ensuite re caml et la c'est passe nickel.
my 2 cents, oublie pas de demander conseil a ton moniteur toussa.
# Inform, objc et python
Posté par B16F4RV4RD1N . Évalué à 3.
c'est sans doute pareil pour la programmation, on arrive souvent dans un cercle vicieux (ou vertueux, si on considère que l'on pourra ainsi connaitre une dizaine de langages ;) ), et c'est vrai que la meilleure réponse dépend certainement de ce que tu veux faire, et aussi de tes capacités.
Si tu es doué et as besoin de coder des applications où la rapidité est primordiale, alors va y direct en objectif C ou en C++ l'avantage du C++ est qu'il est plus "répandu". Par contre objectif C me semble plus élégant, et ceux qui connaissent bien le préfèrent au C++ généralement. Cela te marginalisera sans doute un peu, mais tu pourras coder pour Mac OSX et pour GNUstep. Et même ailleurs sans doute également. Tu dois connaitre le site si tu t'intéresses à la question, mais voici un lien vers une vidéo présentant la facilité de programmation avec Gorm / Project Center / objc : http://www.gnustep.org/experience/DevelopmentDemonstration.html(...) (valable également pour xcode et mac os x)
De plus autre avantage à cela, Apple fournit bcp de doc gratuites sur son site, ainsi que tous les outils de développement. Le fait que GNUstep existe permet de savoir que l'on ne sera jamais inféodé à Apple si on veut changer d'air un jour.
Par contre sur bcp de tutoriels que l'on trouve, ils semblent considérer comme acquit que tu connais déjà bien le C... (on en revient à mon introduction).
J'avais essayé le C il y a qques années, mais j'ai trouvé cela trop dur par rapport à mes capacités et l'investissement que je voulais mettre dedans, du coup j'ai arrêté. Mais mon intérêt grandissant pour objc me fais me replonger un peu dedans. Le problème avec C ce sont les déclarations etc, c'est un peu la galère, si bien que dans un premier temps on ne peut pas faire grand chose d'impressionnant avec et cela rebute un peu.
Du coup, si on n'a pas besoin spécialement d'un langage de bas niveau, rapide et optimisé, il est possible de débuter en programmation avec python. Bon, bcp on déjà conseillé cela, et je pense que tout a été dit (y compris le lien vers l'excellent cours de python). Moi qui suis pourtant un grand débutant en programmation, en suivant ce cours et du fait de la facilité de ce langage de haut niveau orienté objet, j'ai pu créer très rapidement et très facilement de petites applications qui correspondaient vraiment à mes besoins. Je pense que cela permet de mettre un pied à l'étrier sans être rebuté, quitte à étudier ensuite le C et ses dérivés si besoin est (attention, je ne dis pas que python est moins bien que C, mais que les 2 sont pour des objectifs différents : il faut savoir utiliser le bon outil au bon moment).
enfin, je voulais aussi parler du langage inform, dédié à la création de jeux d'aventures textuels. C'est un langage simple, mais qui est fait uniquement pour ce but, même si certains ont pu programmer des choses différentes avec (petits hacks pour la machine virtuelle qui va avec). Il y a des déclarations, cela permet d'avoir une introductions aux procédures, boucles etc dans une forme proche du C tout en obtenant rapidement quelque chose d'utilisable (c'est gratifiant quand on débute, et pousse à aller plus loin). C'est un langage idéal pour les débutants, mais bien entendu limité pour son domaine d'utilisation :
http://www.inform-fiction.org/(...)
http://ifiction.free.fr/(...) (en français)
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.