web-dev-qa-db-fra.com

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

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

Eh bien, quand je parle de langages de programmation, je me réfère aux langages agiles et dynamiques comme PHP, Perl, Ruby, etc. mais pas aux anciens langages de programmation d'un passé lointain.

Je n'ai travaillé que sur Java, groovy et flex dans une certaine mesure. Donc, compte tenu du fait que je suis un programmeur amateur mais un apprenant rapide, sur une base approximative, combien de temps cela prendrait-il pour prendre pied sur l'une de ces langues?

33
Vamsi Emani

Oui, sur réservation.

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 exemples d'extraits de code, trouvé toutes les bibliothèques intéressantes et écrit mon programme. C'est fait et ça marche. La semaine dernière, j'ai acheté un livre JavaScript et je l'ai lu, et mon 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 travailler avec, 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 des produits de mauvaise qualité dans une nouvelle langue. Si vous connaissez Java, vous pouvez assez rapidement choisir C, C++, PHP, Python, JavaScript, mais seulement assez bien pour modifier le code ou écrire des fonctions bien définies. (Perl peut être plus difficile car les regex sont complexes.) Afin de bien architecturer un système dans un nouveau langage, vous voudrez probablement un an de développement professionnel sous la direction de mentors expérimentés.

46
Brad

Fondamentalement, la réponse est oui ... et non ... cela dépend de ce que vous entendez par fondamentaux et maîtrisés facilement .

FAIT

  • Connaître les bases de la programmation vous sera utile quelle que soit la langue. Par principes fondamentaux, j'entends ici des choses qui ne sont pas spécifiques à un paradigme donné. Des choses comme l'algorithmique, les niveaux d'abstraction, l'isolement, etc.

  • Connaître bien les fondamentaux d'un paradigme donné (POO, fonctionnel, etc.) facilitera l'apprentissage des langues supportant le même paradigme. On pourrait dire que bien connaître une langue vous permettra de saisir rapidement des langues de la même famille.

  • Avec toutes les langues apprises dans la même famille, la suivante me sera beaucoup plus facile, je ne serais pas surpris si cette courbe d'apprentissage était exponentiellement plus rapide comme vous en savez plus.

MYTHE

  • Lorsque vous passez à un nouveau paradigme différent, bien connaître une langue du premier paradigme ne sera pas aussi utile que d'apprendre une langue dans la même famille. En fait, en fonction de la différence entre eux, vous devrez peut-être d'abord désapprendre quelques choses avant de pouvoir avancer et vraiment saisir le nouveau paradigme.

--- dernière section modifiée sur la base des commentaires ---

Fait...

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

mais

Mythe

  • Ne soyez pas arrogant, cela peut tout aussi bien vous ralentir ou ne vous être d'aucune utilité pour le troisième paradigme.
28
Newtopian

pour n'importe quelle langue similaire, oui

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

exemple: vous connaissez le C++, vous voulez apprendre Java, du gâteau; vous connaissez VB.NET, vous voulez apprendre Prolog ... le gâteau entier, peut-être trois ou quatre gâteaux

14
Steven A. Lowe

Je crois que la brève réponse est: "en quelque sorte vrai mais difficile à vérifier". Il est très difficile d'apprendre l'API, les usages, les idiomes et les paradigmes étroitement associés (OO, fonctionnels, etc.) que la syntaxe réelle d'un langage. Je pense que le langage lui-même est facilement conquis si vous avez des connaissances et une expérience solides sur les principes de programmation et certaines connaissances du compilateur, mais difficiles à maîtriser en raison de choses auxiliaires.

Un exemple clair serait de passer d'une langue à une autre; C vers 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à fait C, la syntaxe du langage ne serait pas le problème, c'est le reste.

Cela vient de moi qui connaît Java, C #, Javascript, HTML, CSS, Delphi, etc. Je ne connais peut-être pas tous les coins et recoins des frameworks ou bibliothèques que j'utilise, mais je connais mon chemin et je peux apprendre rapidement grâce à mon expérience en utilisant les différents précédents. Pour un "apprenant rapide", tout est vraiment une réflexion latérale.

4
Spoike

Les bases de l'informatique que vous devez connaître incluent non seulement les fondements 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 OOP, mais ce bit n'est pas obligatoire), une fonctionnelle désireuse, une fonctionnelle paresseuse, une logique, une concaténative ou basée sur la pile.

Avec cette base, vous seriez en mesure d'apprendre facilement une nouvelle langue donnée en un rien de temps. Si certains morceaux manquent, vous pourriez vous retrouver face à une résistance sévère.

Et la meilleure façon d'apprendre la langue à l'envers est d'implémenter un compilateur jouet ou un interprète 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 n'importe quelle langue).

3
SK-logic

Je pense que le consensus ici 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 ramasser les idiomes de la langue, et je pense que pour maîtriser une langue, vous devez l'écrire idiomatiquement.

Par exemple, vous pouvez écrire des rames de C # complètement correct sans jamais utiliser l'instruction using pour éliminer automatiquement les objets, mais en C # idiomatique bien écrit, vous verrez using {...} une bonne affaire. Je ne connais pas de langages none-.Net qui ont cette construction (bien que je connaisse très peu d'autres et mon Java est plutôt rouillé donc je peux me tromper), donc même un expert venant à partir d'une autre langue qui ne dispose pas de cette fonctionnalité devra apprendre cet idiome à partir de zéro pour ainsi dire.

2
Steve

C'est un vrai énoncé pour une définition de "assez bien" et "facilement".

Mieux vous comprenez les fondamentaux, plus il est facile de passer d'une langue à une autre. Si vous êtes un expert Java programmeur qui a une solide compréhension des langages orientés objet, par exemple, les différences de syntaxe de base entre Java et C # doivent être relativement facile à 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 mappent de l'une à l'autre, mais vous aurez probablement une bonne poignée sur les bibliothèques de base dans un mois ou deux. Ensuite , il s'agit de déterminer les cas où l'approche standard d'un problème en langage A ne se traduit pas directement par l'approche standard en langage B (c'est-à-dire que vous souhaitez utiliser LINQ en C # plutôt que JPA en Java) et être suffisamment à l'aise dans la nouvelle langue que vous y pensez plutôt que de penser dans l'ancienne langue et de "traduire". Cela prendra probablement de trois à six mois selon la qualité des fonctionnalités que vous utilisez généralement les cartes. À six mois, l'expert Java serait probablement une efficacité raisonnable développeur Ct nt 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 généralement à vous améliorer en tant que développeur dans cette langue.

1
Justin Cave

Je dirais que cela dépend complètement de l'enthousiasme d'une personne pour apprendre la nouvelle langue. Lorsque les fondamentaux sont solides et s'il peut comprendre comment la nouvelle langue interprète quoi que ce soit, 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 fait la plupart de mon travail en C # mais j'ai commencé ma carrière en C et j'ai continué à apprendre C++, Java, VB, PHP, les langages de script, Perl et ainsi de suite. N'importe où durant ce trimestre, je n'ai jamais eu l'impression de ne pas pouvoir apprendre cette langue.

1
JPReddy

Je n'ai jamais eu de mal à apprendre un nouveau langage de programmation, 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, car je ne pouvais pas saisir l'idée derrière elles, 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. D'autres exemples sont PHP et Groovy. Avec PHP j'ai essayé de comprendre pourquoi on en aurait besoin en premier lieu, étant donné qu'il y a Perl. Peut-être que quelqu'un peut Avec Groovy, je ne comprends pas non plus un peu les concepts qui le sous-tendent.

1
Ingo

Tout dépend.

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

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

Beaucoup de gens venant de OO et connaissent tous les modèles de conception, pourraient ne pas avoir d'indices de modèles de conception fonctionnels ou des choses comme la compréhension de liste, le curry, la récursivité de la queue, les fermetures ...

Alors OUI: si les fondamentaux signifient les fondamentaux de tous les paradigmes.

Dans ce cas, le problème est que javascript utilise beaucoup de paradigmes, comme procédural, OO et fonctionnel un peu et a une portée étrange provenant de Java, c ++, ...

Donc, les principes fondamentaux ne sont pas utiles dans ce cas, mais ramasser plus de principes fondamentaux ici et continuer à convertir dans une autre langue peut devenir de plus en plus facile à mesure que vous obtenez plus de modèles dans votre boîte à outils.

1
Peter

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 que font, de Java pour accéder à 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 un langage terrible. Le HTML peut être excellent si vous n'êtes pas bâclé.

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 sur un projet à moins d'avoir déjà vu et joué avec la langue X.

0
Andy Canfield

La réponse est "Ce n'est pas un mythe!"

Je suis comme vous, j'ai également travaillé dans différentes technologies, à savoir. Java, .net et récemment travaillé avec iPhone, Android et blackberry.

Le net est plein de ressources, il suffit de parcourir les informations pour comprendre cela, mettre en œuvre cela et aller plus loin.

En fait, "la technologie est faite pour les développeurs, pas les développeurs sont faits pour les technologies, les technologies changent mais pas les développeurs".

:)

0
necixy