Que dois-je faire pour être agnostique?

52

Je travaille maintenant avec asp.net et C #. J'ai également fait un travail décent en Java. Je planifie ma carrière de telle manière que je devrais être un jour agnostique envers les langues. Quelles sont les choses que j'ai besoin d'apprendre?

Premièrement, les paradigmes de la POO car ils parlent de la conception de la classe. Y en a-t-il d'autres?

Gopi
la source
2
Essayez-vous: d'éviter d'être étiquetés, d'avoir une flexibilité d'emploi ou une quête de vision?
JeffO
2
@ Jeff Oui! pour éviter d'être étiqueté et ne pas combattre le fait que ma langue est LA MEILLEURE;)
Gopi
Je serais plus susceptible d'embaucher un gars avec une opinion forte qui n'est pas d'accord avec le mien. Parce qu'alors il pourrait écrire le Java.
Erik Reppen
Si vous le faisiez, les recruteurs ignoreraient votre CV.
Gonzobrains

Réponses:

67

Pour être agnostique, vous devez avoir une expérience de tous les styles et types de langages courants.

  • Un langage impératif (Vous lui dites quoi faire, étape par étape. Par exemple - C)
  • Un langage déclaratif (vous lui dites votre objectif, il détermine ce qu'il faut faire. Par exemple - SQL / HTML / Prolog)

Aussi:

  • Un langage fonctionnel (les fonctions sont essentielles, il faut éviter les effets d'état et les effets secondaires. Par exemple, Haskell / OCaml / Lisp / F #)
  • Un langage orienté objet (Architecture dans laquelle les objets encapsulent les données associées et les méthodes qui les agissent). Par exemple - Java / C #)

Quelques styles de frappe:

  • Un langage à typage statique (Les types de données sont définis et vérifiés lors de la compilation. Par exemple - C #)
  • Un langage à typage dynamique (les types de données sont vérifiés à l'exécution. Par exemple, Python / Javascript). Une
    expérience du typage fort par opposition au typage faible est également utile.

Quelques styles d'exécution différents:

  • Quelque chose compilé (par exemple - C ++)
  • Quelque chose interprété (par exemple - PHP)
  • Quelque chose géré (par exemple - C # / Java)

Trucs de niveau inférieur:

  • Quelque chose d'assez bas niveau (par exemple - C)
  • Certains dialectes de l' assemblée (par exemple, MSNA)

En plus de cela, je dirais que vous avez besoin d’expérience de la programmation concurrente et de quelque chose d’ événementiel . Vous devriez probablement aussi vous assurer de connaître les différents domaines tels que la programmation Web (client et serveur), le développement de client enrichi / le bureau, les jeux. Vous voudrez peut-être aussi en savoir plus sur la programmation intégrée ou sur du matériel dédié (comme les consoles de jeux), et le développement mobile devient un domaine de plus en plus pertinent.

D'autres ont également mentionné qu'il valait la peine de se familiariser avec les approches de programmation générique et de méta-programmation .

Lorsque vous apprenez ces paradigmes, évitez simplement d’apprendre la syntaxe et d’écrire dans votre ancien style. J'ai vu de nombreux développeurs C # écrire du code JavaScript comme s'il était typé de manière statique. Ne faites pas cela, essayez d'apprendre les paradigmes de la langue et de les adopter.

Si vous avez fait tout cela, les différences entre les langues deviendront en grande partie syntaxiques et le changement deviendra un exercice assez simple d'apprentissage d'une nouvelle syntaxe.

N'oubliez pas cependant que la programmation moderne dépend presque toujours d'un cadre, il est donc également essentiel de se familiariser avec les cadres communs et populaires de chaque langue que vous apprenez. Connaître C # n'est pas pertinent sans .net.

Simon P. Stevens
la source
9
Comment HTML est-il déclaratif dans le sens donné? "Objectif -> Action"? Ça ne fait rien vraiment.
Felix Dombek
3
Prolog est un très bon langage déclaratif que je ne peux que vous recommander. C'est différent de tout le reste - pas de fonctions (mais des relations qui fonctionnent dans tous les sens), pas de flux de contrôle explicite (l'interprète résout tout pour vous), juste une superbe structure de données (termes, rien d'autre n'est nécessaire.) C'est incroyablement rapide en faire ce qu'il fait, faire des millions d'unifications et d'inférences par seconde - et le temps nécessaire pour développer quelque chose est à peu près aussi court qu'en Python par rapport à C / C ++.
Felix Dombek
3
@Felix: HTML, goal = "Je veux une étiquette et une zone de texte". Action = Les moteurs de présentation et graphiques déterminent comment les dessiner. Les détails dépendent des navigateurs individuels. Vous définissez seulement ce que vous voulez et non comment le faire. Voir ici . Je suis d'accord cependant, ce n'est pas vraiment un "langage" en tant que tel. Prolog est un meilleur exemple, je vais mettre à jour.
Simon P. Stevens
1
+1 Pour une bonne liste de types, les choix de langue sont un peu éloignés du paradigme par endroit, mais globalement excellent.
Orbling
2
A propos, vous devriez ajouter "Différents domaines / niveaux d’abstraction": Web, Web interactif, outils de bureau, jeux de bureau, jeux persistants ne sont pas construits de la même manière car les contraintes et la distance par rapport au matériel sont différentes, ce qui rend le choix des langues ( ou même l'existence) plus évident pour celui qui veut comprendre ce que c'est d'être agnostique.
Klaim
4

Je ne pense pas que vous puissiez devenir vraiment agnostique envers les langues. Je trouve que je "pense" dans mon langage courant (en ce moment C #).

Cependant, cela dit, je pense que vous pourrez peut-être séparer la conception du code en essayant de penser en pseudo-code plutôt qu'en un langage spécifique et de l'écrire dans ce format. Cela pourrait vous aider à vous concentrer sur les décisions de conception et d'architecture plutôt que sur la mise en œuvre dans votre langage actuel. Comme le souligne Simon, l'inconvénient, c'est que le langage et le cadre que vous utilisez en fin de compte vont inévitablement influencer la conception. Ainsi, à mesure que votre conception évoluera, elle deviendra de plus en plus liée au langage et au cadre.

ChrisF
la source
+1 pour "Vous ne pouvez pas être vraiment agnostique envers les langues". Mais je ne suis pas tout à fait d'accord avec votre deuxième paragraphe. Je pense qu'il est important de concevoir le langage et le cadre que vous allez utiliser.
Simon P Stevens
@Simon - vous avez un bon point pour concevoir pour le framework. Je vais mettre à jour la réponse.
ChrisF
3

En lisant votre question et certaines des réponses, vous pouvez avoir l’impression que vous égalez "agnosticisme linguistique" avec "connaître tous les paradigmes de la planète".

Je ne sais pas si connaître tous les paradigmes existants ou connaître une gamme de langues variée, couvrant plusieurs paradigmes et types de langues, vous rend "agnostique des langues".

C'est comme dire qu'avoir pratiqué toutes les religions vous rend agnostique sur le plan religieux.

Je pense qu'une personne agnostique en matière de langages de programmation devrait être quelqu'un qui ne sait pas programmer dans une langue du tout ou qui ne se soucie pas de la langue dans laquelle on lui demande de programmer.

Cela dit, certaines personnes disent qu'un vrai programmeur peut programmer dans n'importe quelle langue avec un accès à la documentation de cette langue.

Si c'est ce que vous entendez par "langue agnostique", alors presque tout programmeur expérimenté peut programmer dans n'importe quelle langue avec laquelle il / elle est contraint de travailler, en ayant accès à la documentation linguistique.

Peut-être que vous voulez être un "langage polythéiste".

Je suis moi-même compétent dans plusieurs paradigmes linguistiques, mais je préférerais la programmation orientée objet quand cela s’applique. Donc je suppose que je ne suis pas agnostique.

Vous trouverez difficilement quelqu'un qui ne préfère pas un paradigme ou une langue donnée, mais qui a la liberté de choisir.

Tulains Córdova
la source
0

Il n’ya pas que les langues, Java en soi a tellement de modes différents que vous pourriez passer des années à les apprendre tous. Vous pourriez apprendre:

  • Fonctions J2EE telles que Messaging and Persistence et les différents serveurs
  • toolkits orientés jsp et Apache
  • ant, maven et autres systèmes de construction (les langages eux-mêmes).
  • Le monde entier Groovy / Grails
  • toutes les API apache commons
  • systèmes de test (Mocking, JUnit)
  • Constructeurs d'interface graphique comme Swing, GWT ...

Et cent choses me manquent - JUST in java.

Si vous passez des années à couvrir toutes les langues (apprendre toutes les langues), vous aurez du mal à acquérir la profondeur nécessaire pour travailler efficacement dans l’une d’elles.

Je ne dis pas qu'apprendre une nouvelle langue est un problème, vous devriez le faire activement! J'essaie de choisir mon prochain travail en fonction de ce que je peux apprendre (ce que je n'ai pas encore fait), mais je ne choisis pas souvent une langue au hasard et ne l'apprends plus - La dernière fois que j'ai essayé, c'était avec Scala et moi laissé un peu humble ...

Bill K
la source
Au "monde entier de Groovy / Grails", vous pouvez ajouter ", au monde entier de Scala / Play! 2, au monde entier de JRuby / Rails et au monde entier de Clojure / Noir".
Vorg van Geir
1
Je suis d’accord, j’ai écrit cela il ya quelque temps et j’étais en train de tirer des choses de mon esprit - bien que j’ai probablement choisi un seul des cadres Web et que je les utilise.
Bill K