¿Qué debo hacer para ser independiente del lenguaje?

52

Por ahora trabajo con asp.net y C #. También he hecho un trabajo decente en Java. Estoy planeando mi carrera de tal manera que algún día sea agnóstico del lenguaje. ¿Cuáles son las cosas que necesito aprender?

Primero serían los paradigmas de OOP, ya que habla sobre el diseño de la Clase. ¿Hay otros?

Gopi
fuente
2
¿Está tratando de: evitar ser etiquetado, tener flexibilidad laboral o realizar alguna búsqueda de visión?
JeffO
2
@Jeff ¡Sí! para evitar ser etiquetado y no luchar para que mi idioma sea EL MEJOR;)
Gopi
Sería más probable que contratara a un tipo con una opinión fuerte que no estuviera de acuerdo con la mía. Porque entonces podría escribir el Java.
Erik Reppen
Si lo hicieras, los reclutadores pasarían por alto tu currículum.
gonzobrains

Respuestas:

67

Para ser independiente del idioma, debe tener experiencia en todos los estilos y tipos de idiomas comunes.

  • Un lenguaje imperativo (le dices qué hacer, paso a paso. Ej. - C)
  • Un lenguaje declarativo (le dices tu objetivo, se da cuenta de qué hacer. Por ejemplo, SQL / HTML / Prolog)

También:

  • Un lenguaje funcional (las funciones son clave, evitando el estado y los efectos secundarios son los objetivos. Por ejemplo: Haskell / OCaml / Lisp / F #)
  • Un lenguaje orientado a objetos (Arquitectura donde los objetos encapsulan datos relacionados y los métodos que actúan sobre ellos). Por ejemplo, Java / C #)

Algunos estilos de escritura:

  • Un lenguaje de tipo estático (los tipos de datos se definen y verifican en tiempo de compilación. Por ejemplo, C #)
  • Un lenguaje de tipo dinámico (los tipos de datos se comprueban en tiempo de ejecución. Por ejemplo, Python / Javascript) La
    experiencia de escribir fuerte frente a débil también es útil.

Algunos estilos de tiempo de ejecución diferentes:

Cosas de nivel inferior:

  • Algo de nivel bastante bajo (Ej. C)
  • Algún dialecto de ensamblaje (Ej. NASM)

Además de eso, diría que necesita experiencia en alguna programación concurrente y algo impulsado por eventos . Probablemente también debería asegurarse de saber algo sobre los diversos dominios, como la programación web (cliente y servidor), desarrollo de clientes enriquecidos / escritorio, juegos. También es posible que desee aprender sobre programación integrada o hardware dedicado (como consolas de juegos), y el desarrollo móvil se está convirtiendo en un dominio cada vez más relevante.

Otros también han mencionado que vale la pena adquirir algo de experiencia en programación genérica y enfoques de programación Meta .

Cuando aprenda estos paradigmas, evite simplemente aprender la sintaxis y escribir en su antiguo estilo. He visto a muchos desarrolladores de C # escribir JavaScript como si estuviera estáticamente escrito. No hagas esto, trata de aprender los paradigmas del lenguaje y abrázalo.

Si ha hecho todo esto, las diferencias entre los idiomas se volverán en gran medida sintácticas, por lo que el cambio se convertirá en un ejercicio bastante simple de aprender una nueva sintaxis.

Sin embargo, no olvide que la programación moderna casi siempre depende de un marco, por lo que familiarizarse con los marcos comunes y populares para cada idioma que aprende también es fundamental. Saber que C # es irrelevante sin .net.

Simon P Stevens
fuente
99
¿Cómo es HTML declarativo en el sentido dado? "Objetivo -> Acción"? Realmente no hace nada.
Felix Dombek
3
Un gran lenguaje declarativo que solo puedo recomendar es Prolog. Es diferente de cualquier otra cosa: no hay funciones (pero relaciones que funcionan en ambos sentidos), no hay flujo de control explícito (el intérprete resuelve todo por usted), solo una gran estructura de datos (términos, no se necesita nada más). Es increíblemente rápido en lo que hace, hacer millones de unificaciones e inferencias por segundo, y el tiempo necesario para desarrollar algo es tan corto como en Python en comparación con C / C ++.
Felix Dombek
3
@Felix: HTML, goal = "Quiero una etiqueta y un cuadro de texto". Acción = Los motores de diseño y gráficos descubren cómo dibujarlos. Los detalles se reducen a los navegadores individuales. Solo define lo que quiere, no cómo hacerlo. Vea aquí . Sin embargo, estoy de acuerdo, no es realmente un "lenguaje" como tal. Prolog es un mejor ejemplo, lo actualizaré.
Simon P Stevens
1
Para una buena lista de tipos, las opciones de idioma están un poco alejadas del paradigma en algunos lugares, pero en general son excelentes.
Orbling
2
Por cierto, debe agregar "Diferentes dominios / niveles de abstracción": la web, la web interactiva, las herramientas de escritorio, los juegos de escritorio, los juegos persistentes no se construyen de la misma manera, ya que las restricciones y la distancia al hardware son diferentes, lo que hace que los idiomas sean diferentes ( o incluso existencia) más obvio para el que quiere entender qué es ser agnóstico.
Klaim
4

No creo que puedas convertirte en un verdadero agnóstico del lenguaje. Me parece que "pienso" en mi idioma actual (en este momento C #).

Sin embargo, una vez dicho esto, creo que podría separar el diseño del código al tratar de pensar en un pseudocódigo en lugar de un lenguaje específico, y realmente escribirlo en este formato. Esto podría ayudarlo a concentrarse en las decisiones de diseño y arquitectura en lugar de la implementación en su idioma actual. El inconveniente con eso, como señala Simon, es que el lenguaje y el marco que finalmente utilices influirán inevitablemente en el diseño. Entonces, a medida que su diseño se desarrolle, estará cada vez más vinculado al lenguaje y al marco.

ChrisF
fuente
+1 para "No puedes ser verdaderamente agnóstico del lenguaje". Pero no estoy del todo de acuerdo con su segundo párrafo. Creo que es importante diseñar para el lenguaje y el marco que vas a usar.
Simon P Stevens
@ Simon: tienes un buen punto sobre el diseño para el marco. Actualizaré la respuesta.
ChrisF
3

Al leer su pregunta y algunas de las respuestas, uno puede tener la impresión de que usted iguala el "agnosticismo del lenguaje" con "conocer cada paradigma en la tierra".

No estoy seguro de si conocer cada paradigma que existe o conocer una variedad de idiomas, abarcando varios paradigmas y tipos de idiomas, lo hace "agnóstico del lenguaje".

Es como decir que haber practicado todas las religiones te hace religioso agnóstico.

Creo que una persona independiente del lenguaje con respecto a los lenguajes de programación debería ser alguien que no sabe programar en ningún idioma o que no le importa con qué idioma se le pide que programe.

Dicho esto, algunas personas dicen que un verdadero programador puede programar en cualquier idioma con acceso a la documentación de ese idioma.

Si eso es lo que quiere decir con "agnóstico del lenguaje", entonces casi cualquier programador experimentado puede programar en cualquier idioma con el que se vea obligado a trabajar, dado el acceso a la documentación del idioma.

Quizás quieras ser "politeísta del lenguaje".

Yo mismo soy competente en varios paradigmas de lenguaje, pero preferiría OOP cuando se aplique. Entonces supongo que no soy agnóstico.

Difícilmente encontrará a alguien que no prefiera un cierto paradigma o lenguaje dada la libertad de elegir.

Tulains Córdova
fuente
0

No son solo los lenguajes, Java tiene tantos modos diferentes que podrías pasar años aprendiéndolos todos. Podrías aprender:

  • Funciones J2EE como mensajería y persistencia y los distintos servidores
  • jsp y kits de herramientas orientados a Apache
  • hormigas, maven y otros sistemas de construcción (los propios idiomas).
  • Todo el mundo Groovy / Grails
  • todas las API de apache commons
  • sistemas de prueba (burla, JUnit)
  • Constructores de GUI como Swing, GWT ...

Y cien cosas que me faltan, SOLO dentro de Java.

Si pasa años cubriendo la amplitud (aprendiendo cada idioma), tendrá problemas para ganar la profundidad para trabajar eficazmente en cualquiera de ellos.

No digo que aprender un nuevo idioma sea NUNCA un problema, ¡debes hacerlo activamente! Intento elegir mi próximo trabajo en función de lo que puedo aprender (lo que aún no he hecho), pero no suelo elegir un idioma aleatorio y no lo aprendo más. La última vez que lo intenté fue con Scala y yo. dejó algo humilde ...

Bill K
fuente
A "todo el mundo Groovy / Grails" podría agregar ", todo el mundo Scala / Play! 2, todo el mundo JRuby / Rails y todo el mundo Clojure / Noir".
Vorg van Geir
1
Estoy de acuerdo, escribí eso hace un tiempo y solo estaba sacando cosas de la parte superior de mi cabeza, aunque probablemente solo elegiría uno de los marcos web y lo seguiría.
Bill K