Tout langage de programmation peut être facilement maîtrisé si les bases de la programmation sont solides. Un fait ou un mythe? [fermé]

33

Est-il vrai qu’une personne disposant de bases assez bonnes en programmation peut facilement apprendre n’importe quel langage de programmation?

Eh bien, lorsque je parle de langage de programmation, je me réfère aux langages agiles et dynamiques tels que PHP, Perl, Ruby, etc., mais pas aux langages de programmation anciens d’un lointain passé.

J'ai travaillé uniquement sur java, groovy et flex dans une certaine mesure. Donc, compte tenu du fait que je suis un programmeur amateur, mais que je suis un étudiant rapide, approximativement, combien de temps faudrait-il pour maîtriser l'une de ces langues?

Vamsi Emani
la source
1
Remplacez "Tous" par "Le plus".
4
Qu'est-ce qui rend une langue 'agile'? Je pensais que l'agile était un processus de développement .
Oosterwal
17
Maîtrisé facilement? Non Appris facilement? Oui. La maîtrise implique un niveau d'expertise qui nécessite des années d'utilisation dans toutes les langues. Apprendre à utiliser n'importe quelle langue une fois que vos principes fondamentaux sont en place devrait être une évidence.
Joel Etherton
1
Non, c'est juste vrai pour des langues similaires. Connaître Java ne vous aidera pas à apprendre Haskell, mais à apprendre le C ++, etc. Connaître PHP ne vous aidera pas à apprendre l'assemblage, mais cela vous aidera à apprendre Ruby.
iveqy

Réponses:

46

Oui, avec des réserves.

Il y a quatre semaines, je dirais que j'avais des compétences de niveau professionnel en C et C ++ et des compétences de niveau amateur en Java. Mon patron m'a demandé d'écrire un logiciel en JavaScript, avec lequel je n'avais aucune expérience, et je suis parti.

Au cours des deux semaines suivantes, j'ai lu de nombreux extraits de code, trouvé toutes les bonnes bibliothèques et écrit mon programme. C'est fait et ça marche. La semaine dernière, j’ai acheté un livre JavaScript, que je lisais et, garçon, je ne savais pas ce que je faisais. Maintenant, je comprends pourquoi mes objets agissaient si étrangement.

Alors maintenant je dis, je connais un peu JS. Je peux le lire et l'utiliser, mais je suis sûr que ce que j'écris est inefficace, difficile à lire et ne suit pas les meilleures pratiques.

En général, un apprenant rapide peut prendre une semaine et commencer à produire un produit de qualité médiocre dans une nouvelle langue. Si vous connaissez Java, vous pouvez très rapidement utiliser les langages C, C ++, PHP, Python, JavaScript, mais seulement suffisamment pour modifier le code ou écrire des fonctions bien définies. (Perl peut être plus difficile parce que les expressions rationnelles sont complexes.) Pour bien concevoir un système dans une nouvelle langue, vous voudriez probablement une année de développement professionnel avec des mentors expérimentés.

Brad
la source
18
J'oserais dire que cela prend deux ans. La première année devrait vous laisser relativement compétent, la deuxième année devrait vous laisser relativement efficace.
Tim Post
4
J'ai vécu cette expérience il y a plusieurs années (après avoir appris une douzaine de langues) ... Je devais travailler à Ada. L'écriture de code dans Ada a pris quelques jours. Pour entrer vraiment dans l’espace libre des concepteurs de systèmes de langage / d’exécution et écrire du code BON, cela a pris un an.
Rapidement maintenant
1
Pour être honnête, j’ai aussi appris Java. Je suis actuellement à la barre des 1 ans et je dirais que "relativement compétent" est exact.
Brad le
1
La raison en est que vos fondamentaux, même forts peut-être, n’étaient pas vastes. Si vous connaissiez d’autres langues, avec des fermetures, une compréhension de la liste, d’autres structures de données et d’autres règles de portée avant jscript, vous auriez peut-être eu moins de problèmes.
Peter
J'ai eu une expérience similaire avec VB.net, jusqu'à ce que je lise le code que mon patron (avec plusieurs années d'expérience de VB) avait écrit ... oh mon Dieu. Code a une odeur de code dupliqué qui transcende les langues!
DisgruntledGoat
28

En gros, la réponse est oui ... et non ... cela dépend de ce que vous entendez par principes fondamentaux et que vous maîtrisez facilement .

FAIT

  • Connaître les bases de la programmation aidera peu importe la langue. Par fondamentaux, je veux dire des choses qui ne sont pas spécifiques à un paradigme donné. Des choses comme l'algorithmique, les niveaux d'abstraction, l'isolement, etc.

  • Bien connaître les bases d’un paradigme donné (POO, fonctionnel, etc.) facilitera l’apprentissage de langues prenant en charge le même paradigme. On pourrait dire que bien connaître une langue vous permettra de maîtriser rapidement les langues de la même famille.

  • Avec chaque langue apprise dans la même famille, la suivante me sera beaucoup plus facile. Je ne serais pas surpris que cette courbe d'apprentissage soit exponentiellement plus rapide, car vous en savez plus.

MYTHE

  • Lorsque vous passez à un nouveau paradigme différent, connaître une langue du premier paradigme ne sera pas aussi utile que l’apprentissage d’une langue dans la même famille. En fait, selon la différence qui les sépare, il se peut que vous deviez au préalable désapprendre un certain nombre de choses avant de pouvoir aller de l'avant et adopter le nouveau paradigme.

--- édité la dernière section en fonction des commentaires ---

Fait...

  • Connaître un premier paradigme peut vous aider à apprendre le prochain ...

mais

Mythe

  • Ne soyez pas arrogant, cela peut tout aussi bien vous ralentir ou ne pas vous aider du tout pour le troisième paradigme.
Newtopien
la source
tout va bien sauf le dernier. de façon anecdotique, connaître un langage de programmation procédural tel que C n’était d'aucune aide pour apprendre un langage logique tel que Prolog, et dans mon cas, cela m'a gêné, par exemple, "Q: comment coder une boucle dans prolog?" ==> "A: vous ne le faites pas".
Steven A. Lowe
2
Les preuves anecdotiques que j'ai entendues ici et là suggèrent que vous pouvez créer un débutant en programmation sur Scheme assez facilement, mais que c'est beaucoup plus difficile si vous avez déjà programmé en BASIC ou en C #.
David Thornley
1
@Steven & David: Je n'étais pas tout à fait sûr de ce dernier. Je suis passé de procédural à objet en fonctionnel, mais je n’ai pas encore essayé de logique familiale. Je trouvais cela plus facile avec le temps et l'expérience mais n'osais pas généraliser. Je vais modifier la réponse en fonction de votre commentaire.
Newtopian
14

pour une langue similaire , oui

pour des langues avec des paradigmes radicalement différents, pas tellement

exemple: vous connaissez le C ++, vous voulez apprendre Java, un morceau de gâteau; vous connaissez VB.NET, vous voulez apprendre Prolog ... tout le gâteau, éventuellement trois ou quatre gâteaux

Steven A. Lowe
la source
1
Je suis d'accord. Certaines langues suivent une philosophie complètement différente. il n'est donc pas anodin de passer par exemple d'un langage impératif tel que C à un langage de programmation logique tel que Prolog sans faire d'effort.
Sakisk
4

Je crois que la réponse brève est: "un peu vrai mais difficile à vérifier". Il est très difficile de connaître les API, les utilisations, les idiomes et les paradigmes (OO, fonctionnel, etc.) étroitement associés à la syntaxe réelle d'un langage. Je pense que le langage lui-même est facilement conquis si vous possédez des connaissances et une expérience approfondies des bases de la programmation et des connaissances du compilateur, mais qu'il est difficile à maîtriser en raison de son caractère auxiliaire.

Un exemple clair serait de passer d’une langue à l’autre; C à Java. La syntaxe du code ressemble beaucoup aux programmes de style C, mais vous devez également connaître les API java (génériques, garbage collection, etc.) et très probablement, dans notre "paysage informatique" actuel, certains frameworks tiers (Spring, jUnit , Hibernate et ainsi de suite) pour faire quelque chose d’utile pour les entreprises. Donc, si vous avez déjà utilisé C, la syntaxe du langage ne serait pas le problème, mais le reste.

Cela vient de moi qui connais les langages Java, C #, Javascript, HTML, CSS, Delphi, etc. mon expérience en utilisant différents de plus tôt. Pour un «apprenant rapide», c’est vraiment une pensée latérale.

Spoike
la source
Je suis complètement d'accord avec ça. Apprendre les meilleures pratiques / apis / bibliothèques populaires / etc. prend beaucoup, beaucoup plus de temps que d'apprendre la syntaxe d'un langage de programmation, et c'est là que réside le véritable défi, et on ne peut l'acquérir qu'en passant un peu de temps à travailler avec le langage et ses écosystème.
Jviotti
3

Les bases de l’informatique à connaître comprennent non seulement les bases mathématiques (théorie des ensembles, logique, théorie des graphes, algèbre, théorie de l’information, théorie de l’information algorithmique, etc.), mais également un certain nombre de langages de programmation, au moins un de chaque groupe - c'est-à-dire un impératif (éventuellement avec la POO, mais ce bit n'est pas obligatoire), un fonctionnel enthousiaste, un fonctionnel fainéant, un logique, un concaténatif ou une pile.

Avec cette base, vous seriez capable d'apprendre facilement n'importe quelle nouvelle langue en un rien de temps. S'il manque des bits, vous risquez de vous heurter à une résistance sévère.

Et la meilleure façon d’apprendre le langage à l’intérieur est de mettre en œuvre un compilateur ou un interprète jouet pour un sous-ensemble significatif de celui-ci (bien sûr, sans bibliothèque standard - c’est la partie la plus compliquée et la plus ennuyeuse de toutes les langues).

SK-logic
la source
2

Je pense que le consensus est qu’avoir de bons fondamentaux aidera dans une certaine mesure, et je ne suis pas en désaccord avec cela. Cependant, un point qui manque dans les autres réponses est la question de capter les idiomes de la langue, et je pense que pour maîtriser une langue, vous devez l'écrire de manière idiomatique.

Par exemple, vous pouvez écrire des groupes de C # complètement corrects sans jamais utiliser l' usinginstruction pour vous débarrasser automatiquement des objets, mais en C # idiomatique bien écrit, vous en verrez using {...}beaucoup. Je ne connais pas de langages non-.Net qui possèdent cette construction (bien que j'en connaisse très peu et que mon Java soit plutôt rouillé et que je puisse me tromper), donc même un expert venant d'une autre langue ne possédant pas cette fonctionnalité devra apprendre cette idiome à partir de zéro pour ainsi dire.

Steve
la source
Il y a des idiomes similaires largement utilisés dans Lisp et Scheme, donc ce ne sera pas une nouveauté pour quelqu'un venant de ce fond, et on cherchera délibérément cette fonctionnalité dans toute nouvelle langue.
SK-logic le
Oui, mais si vous venez de, disons, Pascal ou ADA, ce serait un tout nouvel idiome que vous ne sauriez même pas surveiller avant de l'avoir vu.
Steve
c'est exactement la raison pour laquelle je pense qu'il faut connaître au moins une langue de chaque groupe pour pouvoir apprendre une nouvelle langue et choisir judicieusement les outils.
SK-logic le
@ SK-logic: Quand j'ai vu des choses comme "utiliser" et "essayer ... enfin", je n'ai eu aucun problème à les comprendre en tant qu'équivalent approximatif du Common Lisp "undind-protect". Cependant, de telles fonctionnalités linguistiques peuvent ne pas apparaître dans une sélection de langues présentant plusieurs paradigmes.
David Thornley
1

C'est une affirmation vraie pour une définition de "assez bon" et "facilement".

Plus vous comprenez mieux les principes fondamentaux, plus il est facile de passer d’une langue à l’autre. Si vous êtes un programmeur expert Java ayant une solide connaissance des langages orientés objet, par exemple, les différences de syntaxe de base entre Java et C # devraient être relativement faciles à maîtriser en une semaine ou deux. Il faudra plus de temps pour comprendre comment les fonctionnalités de toutes les bibliothèques associées se mappent de l'une à l'autre, mais vous aurez probablement un bon aperçu des bibliothèques de base dans un mois ou deux. Ensuite, il faut déterminer les cas où l’approche standard d’un problème en langage A ne correspond pas directement à l’approche standard en langage B (c’est-à-dire que vous souhaitez utiliser LINQ en C # plutôt que JPA en Java) et vous mettre à l'aise. assez dans la nouvelle langue que vous ' y penser plutôt que penser dans l’ancienne langue et "traduire". Cela prendra probablement entre trois et six mois, selon la qualité des fonctionnalités que vous utilisez habituellement dans les cartes. Au bout de six mois, le programmeur expert Java serait probablement un développeur C # raisonnablement efficace et compétent. Mais comme pour tout, vous pouvez passer des années à apprendre tous les détails complexes, à maîtriser diverses bibliothèques et modules complémentaires qui ne font pas partie du langage, mais font partie de l'écosystème environnant, et s'améliorent généralement en tant que développeur dans ce langage. l'expert en programmation Java serait probablement un développeur C # raisonnablement efficace et compétent. Mais comme pour tout, vous pouvez passer des années à apprendre tous les détails complexes, à maîtriser diverses bibliothèques et modules complémentaires qui ne font pas partie du langage, mais font partie de l'écosystème environnant, et s'améliorent généralement en tant que développeur dans ce langage. l'expert en programmation Java serait probablement un développeur C # raisonnablement efficace et compétent. Mais comme pour tout, vous pouvez passer des années à apprendre tous les détails complexes, à maîtriser diverses bibliothèques et modules complémentaires qui ne font pas partie du langage, mais font partie de l'écosystème environnant, et s'améliorent généralement en tant que développeur dans ce langage.

Justin Cave
la source
1

Je dirais que cela dépend complètement de l'enthousiasme d'une personne d'apprendre la nouvelle langue. Lorsque les fondamentaux sont solides et s’il peut comprendre la manière dont la nouvelle langue interprète quelque chose, il est assez facile d’apprendre n’importe quelle langue.

Le meilleur exemple est mon moi. J'ai travaillé avec pas mal de langages, même si j'ai effectué l'essentiel de mon travail en C #, mais j'ai commencé ma carrière par le C et ai ensuite appris le C ++, le Java, le VB, le PHP, les langages de script, le langage perl, etc. Partout au long de ce mandat, je n'ai jamais eu l'impression de ne pas pouvoir apprendre cette langue.

JPReddy
la source
3
Et les langues que vous avez décrites sont plus ou moins similaires. Pour un défi, essayez d'apprendre Haskell, ou Scheme, ou Forth, ou Prolog.
David Thornley
1

Je n'ai jamais trouvé difficile d'apprendre un nouveau langage de programmation, bien au contraire, c'était très amusant la plupart du temps. Pourtant, il y a des langues que j'ai regardées mais que je n'ai jamais comprises, parce que je ne pouvais pas saisir l'idée qui les sous-tendait, s'il y en avait. Un exemple est COBOL, je n'ai jamais compris ce qui devait aller dans quelle DIVISION et SECTION et pourquoi. PHP et Groovy sont d’autres exemples. Avec PHP, j'ai essayé de comprendre pourquoi on en aurait besoin, étant donné qu'il existe perl. Peut-être que quelqu'un peut expliquer. Avec Groovy, je ne comprends pas non plus un peu les concepts sous-jacents.

Ingo
la source
1

Tout dépend.

Je sais que c'est souvent la réponse ...

Mais que signifient les fondamentaux ?? Beaucoup de gens qui ont des principes fondamentaux pour un paradigme (comme OO) ne les ont pas pour d'autres paradigmes (comme fonctionnel).

Un grand nombre de personnes venant de OO et connaissant tous les modèles de conception n'ont peut-être aucune idée de modèles de conception fonctionnels ou d'éléments tels que la compréhension des listes, le currying, la récursion de la queue, les fermetures, etc.

Donc, OUI: si les fondamentaux sont les fondamentaux de tous les paradigmes.

Dans ce cas, le problème est que javascript utilise un grand nombre de paradigmes, tels que la procédure, OO et un peu fonctionnel, et a une portée étrange provenant de java, c ++, ...

Ainsi, les principes fondamentaux ne vous aident pas dans ce cas, mais ramasser plus de fondamentaux ici et continuer à convertir dans une autre langue peut devenir de plus en plus facile si vous avez plus de motifs dans votre boîte à outils.

Peter
la source
0

N'oubliez pas que l'art de la programmation informatique est l'art de rester EXACTEMENT ce que vous voulez dire. Donc, tout moyen de dire à l'ordinateur ce qu'il faut faire, de Java à Access, d'Excel à Visual Fortran, est un langage de programmation.

Et certaines langues sont tout simplement mauvaises. IMHO Excel et Basic sont de mauvaises langues; Java et C ++ sont de bons langages. Les scripts FileMaker sont une langue terrible. Le HTML peut être excellent si vous n'êtes pas négligé.

Pouvez-vous l'apprendre? Si c'est bon, oui. Si c'est mauvais, cela dépend de votre seuil de dégoût. Les choses qui vous donnent envie de vomir sont difficiles à apprendre.

Ne vous engagez pas tous à utiliser la langue X dans un projet, sauf si vous avez déjà vu et joué avec la langue X.

Andy Canfield
la source
0

La réponse est "Ceci est un fait, pas un mythe!"

Je suis comme vous. J'ai également travaillé dans diverses technologies, à savoir. Java, .net et récemment travaillé avec iPhone, Android et BlackBerry.

Le réseau est plein de ressources, il suffit de consulter l'information pour comprendre cela, de le mettre en œuvre et d'aller plus loin.

En fait "La technologie est faite pour les développeurs et non les développeurs sont faits pour les technologies, les technologies changent mais les développeurs ne le sont pas".

:)

necixy
la source