Quel paradigme de langage de programmation correspond à quel travail?

StackOverflow https://stackoverflow.com/questions/188934

  •  06-07-2019
  •  | 
  •  

Question

Pour autant que je sache (pas grand chose que je vais admettre), les paradigmes de programmation actuellement populaires sont orientés objet (Java, C #, Ruby) vs fonctionnels (F #). En tant que personne familiarisée avec le premier paradigme, j’ai plusieurs questions à poser:

  • Un programmeur peut-il simplement s'en tenir à un paradigme toute sa vie? Autrement dit, tous les problèmes peuvent-ils être réduits à des clous pour un marteau?
  • Si non, quel outil convient à quel type de tâche? Par exemple: sur le bureau ou sur le Web, création d’interfaces élégantes et réactives, capable de traiter rapidement des données, etc.
  • Les gens ont-ils déjà eu besoin d'apprendre un nouveau paradigme? Pour mes deux derniers emplois, mes postes de travail nécessitaient Java et C #. Existe-t-il des lieux de travail qui utilisent spécifiquement des langages non-OO?

Évidemment, il n'y a pas de "meilleur" langues, mais je me demande si cela vaut la peine d'investir du temps et de l'énergie pour apprendre un nouveau paradigme. Merci d'avance!

Était-ce utile?

La solution

"Ou, en d'autres termes, tous les problèmes peuvent-ils être réduits à des clous pour un seul marteau?" Oui. Période. Tout langage de programmation que vous rencontrerez sera aussi complet que tous les autres. Il existe en fait une définition formelle de " complétude " pour un langage de programmation.

"Les gens ont-ils déjà eu besoin d'apprendre un nouveau paradigme?" Toujours.

Il existe en réalité une astuce pour suivre les hauts et les bas du "changement de paradigme". Au cours des 30 dernières années de ma carrière, j'ai constaté que la programmation est passée d'un modèle impératif / procédural relativement simpliste à un certain nombre de modèles beaucoup plus riches qui incluent un meilleur équilibre entre processus et données.

J'ai remarqué ce qui suit ...

Une partie de la force motrice est la communauté de l'intelligence artificielle. Beaucoup de ces "nouveaux modèles" commencé en tant que schémas de représentation du savoir AI. Ils ont eu la traction là-bas, puis ils ont coulé dans des applications plus grand public.

Le modèle de relation d'entité était à l'origine pour la représentation de connaissances, pas de transactions commerciales. De même, le modèle Object était destiné à la représentation des connaissances. Ensuite, les gens de la simulation l'ont trouvé. Maintenant, le reste d'entre nous l'ont.

Voici ma conclusion.

Un logiciel est une représentation des connaissances.

Votre choix de paradigme, modèle, approche ou style est basé sur la réponse à la question suivante:

"Comment puis-je représenter au mieux ce problème?"

Si le problème a des objets et des relations, OO. Si le problème a des algorithmes et des transformations, mappe, filtre et réduit, fonctionnel. Si le problème est dynamique, changeant et flexible, dynamique. Si le problème est statique et s’agrandit rapidement, Static.

Autres conseils

Cela vaut la peine d’apprendre d’autres paradigmes (OO, fonctionnel, procédural, dynamique, etc.), car cela vous aidera à réfléchir aux problèmes de différentes manières.

Par exemple, réfléchissez à la différence entre la résolution linéaire d’une traversée d’arbres (la première fois que je l’ai fait) et l’utilisation de la récursion. Ou encore, la combinaison de Google Map et de Mapse pour les aider à indexer Internet.

De nouvelles manières de penser appliquées aux vieux problèmes peuvent aider à résoudre certains des problèmes les plus difficiles.

Le paradigme est indépendant d’une langue. Vous pouvez développer un style OO en C (jetez un coup d'œil à GTK). Quand je programme en Java, j'utilise principalement un style fonctionnel.

Cela vaut la peine de connaître autant de paradigmes que possible. Certains problèmes sont triviaux à résoudre dans un paradigme et nécessitent une élaboration délicate dans un autre.

À titre d'exemple (trivial), comparez les implémentations Quicksort en Java et Ocaml, ou mieux, Haskell, sur cette page: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(Cela ne signifie pas que la fonctionnalité est meilleure. Il existe des problèmes mieux résolus avec OO).

  

Tous les problèmes peuvent-ils être réduits à des clous pour un marteau?

Euh oui. Vous pouvez résoudre les problèmes avec un seul marteau. Il suffit de scier que la porte en deux prend beaucoup plus de temps.

  

Les gens ont-ils déjà eu besoin d'apprendre un nouveau paradigme? Pour mes deux derniers emplois, mes postes de travail nécessitaient Java et C #. Existe-t-il des lieux de travail qui utilisent spécifiquement des langages non-OO?

Les développeurs doivent le faire tous les 15 à 20 ans environ.

Il existe bel et bien toute une industrie de petites entreprises avec des systèmes basés sur Access écrits avec VBA procédural. (et je pense avoir travaillé pour la plupart d'entre eux). Les développeurs ASP classiques doivent apprendre ASP.NET. Les développeurs Perl apprennent Python. Le développement par lots cède la place au développement par événements.

Je pense que vous trouverez des réponses partout dans le tableau. Plus je travaille, plus je trouve que c'est "utile". connaître les autres. en tant que développeur C # / VB / SQL Server, je trouve plus utile d’apprendre un peu sur F # et sur d’autres langages afin d’obtenir une visibilité plus large afin de vraiment déterminer quel outil est le bon ...

Le dynamisme me fait peur, mais Ruby on Rails est de loin le meilleur système de développement que j'ai jamais vu pour le Web. Je ne suis pas à l'aise avec son utilisation pour un très gros projet de maintenance lourde, car il est trop facile de modifier la signification d'un code existant, compilé et fini. Il est également trop facile pour le style de codage d’une personne d’en faire une nouvelle langue.

Dynamic / scripting est également utile à connaître pour les administrateurs système et tous les utilisateurs d’un système Linux. Écrire un script rapide dans BASH ou Ruby permet à l’enfer de tenter d’implémenter les mêmes fonctionnalités en Java, ou en C ++.

OO facilite beaucoup la compréhension de grandes quantités de code. Si vous avez une grande équipe ou plusieurs grandes équipes et avez besoin de donner une vue d'ensemble rapidement, OO facilite beaucoup la description et l'isolation d'une fonctionnalité donnée. Je devrais dire correctement OO!

Je comprends que la fonctionnalité est bonne pour la programmation multi-thread car tout tend à être immuable.

Développer les compétences de conception et d’architecture en ayant à l’esprit la programmation orientée objet est l’ensemble de compétences le plus souhaitable pour une carrière agnostique linguistique.

L’avantage lorsque vous codez dans Oops concerne à la fois les autres membres de l’équipe et l’organisation dans son ensemble. Parce que le code sera compréhensible pour tous et si les développeurs quittent le travail, l'entreprise n'a pas à s'inquiéter beaucoup. Dans l’autre cas, si vous suivez un style fonctionnel, il sera très difficile pour les autres de comprendre ce que vous avez fait.

Comme la plupart des autres l’ont dit, vous pouvez généralement utiliser n’importe quel langage pour résoudre n’importe quel problème et vous pouvez généralement écrire dans le style d’un paradigme dans un autre.

Si vous prenez le temps d'apprendre à utiliser les différents paradigmes tels qu'ils sont conçus, vous apprendrez différentes choses sur la représentation des connaissances et la résolution de problèmes qui peuvent être utiles dans n'importe quel paradigme que vous utiliserez à l'avenir.

Bien qu'il existe un certain alignement entre les paradigmes et les domaines, il est généralement préférable de choisir une langue en fonction des spécificités de l'environnement dans lequel votre logiciel doit fonctionner.

  • Faut-il qu'il s'exécute sur plusieurs plates-formes de bureau?
  • S'il s'agit d'une application de bureau, faut-il qu'elle ait une apparence native?
  • L'itération rapide des conceptions est-elle importante
  • Comment doit-il être maintenu?
  • Avec quels systèmes tiers doit-il fonctionner?
  • Connaissances / compétences / préférences existantes du programmeur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top