¿Necesito entender los aspectos internos de un lenguaje de programación?

11

Soy principiante en Python y realmente me gusta hasta ahora. Una pregunta que me viene a la mente muy a menudo es si necesito entender y, por lo tanto, aprender lo interno de un lenguaje de programación (como en mi caso Python). Como sabrás, Python está escrito en C.

Entonces mi pregunta es: ¿Qué tan profundo tiene que sumergirse en un lenguaje de programación para ser competente o fluido en este lenguaje? Comparo esta pregunta con los idiomas "naturales". No conozco todos los detalles de la gramática en mi idioma materno, pero puedo expresarme sin problemas en ese idioma. Esto es cuando digo que hablo con fluidez un idioma. ¿Eso se aplica también a los lenguajes de programación?

Flo Schönfeld
fuente
44
Los aspectos internos se vuelven importantes cuando tienes que preocuparte por el rendimiento.
Gort the Robot
77
Sé bastante sobre los componentes internos de CPython y PyPy, pero el 80% del tiempo no son de utilidad (o incluso dañinos, como para distraer) para mi programación de Python. Sin embargo, me alegra saber que eso representa el otro 20%, y no es solo para el rendimiento, sino también para comprender mensajes de error estúpidos y evitar comportamientos no portátiles.
2
No y no. Definitivamente no es un duplicado de ninguno de esos.
1
Depende de lo que quieras decir con "lo interno", pero sé que no es raro que los programadores profesionales de C # y Java tengan al menos algo de conocimiento de la CLI o JVM.
user16764

Respuestas:

8

No necesita saber nada sobre los aspectos internos de un lenguaje de programación para escribir programas en ese lenguaje. Sin embargo, cuanto mejor comprenda el idioma, mejores serán sus programas.

  1. El conocimiento de las estructuras de datos y los algoritmos lo ayudará a elegir las estructuras de datos más apropiadas para su tarea particular. Algunos idiomas poseen estas estructuras de datos internamente.

  2. Comprender la "cultura" del lenguaje le ayuda a escribir programas que siguen las "mejores prácticas", haciéndolos más fáciles de entender, más mantenibles y con mejor rendimiento.

  3. Escribir un compilador para ese idioma (o un compilador para otro idioma en ese idioma) puede darle una comprensión profunda del idioma y mejorar sus programas más allá de ser simplemente promedio.

  4. Ser competente en otros idiomas (especialmente los de un paradigma diferente) lo convierte en un mejor programador en su idioma principal, ya que puede utilizar esas habilidades y herramientas en su idioma principal.

Como corolario, no necesita saber nada sobre su computadora para escribir programas en ella. Pero saber cómo funciona tu computadora te hace mejor escribiendo programas para ella.

Robert Harvey
fuente
7

No conozco todos los detalles de la gramática en mi idioma materno, pero puedo expresarme sin problemas en ese idioma. Esto es cuando digo que hablo con fluidez un idioma. ¿Eso se aplica también a los lenguajes de programación?

En pocas palabras, sí. Mientras pueda expresarse bien (y comprender a los demás) bien, entonces se lo considera fluido en el idioma.

Dicho esto, simplemente ser fluido no es suficiente para algunos trabajos. Ciertos tipos de autores, trabajos que requieren habilidades ejemplares para hablar en público y algunos académicos que se centran en el idioma necesitan saberlo "mejor que con fluidez". Del mismo modo, algunas especialidades de programador requieren el conocimiento de los aspectos internos del lenguaje, pero para la mayoría de las personas conocer el lenguaje de programación equivalente a cómo pedir su número o pedir una hamburguesa con queso es suficiente.

Telastyn
fuente
0

Definiría "competente" con un lenguaje como:

  • Comprenda la mayoría de la sintaxis y el conocimiento suficiente para investigar cualquier característica nueva que encuentre en el código de otras personas.
  • Conocimiento práctico de cualquier biblioteca y / o marco estándar, y la capacidad de encontrar, leer y comprender la documentación oficial sobre cualquier cosa nueva que necesite usar.
  • Comprensión y habilidad para usar modismos comunes y convenciones de nomenclatura para el idioma.

Observe que el funcionamiento del lenguaje no está en esta lista, pero hay una gran cantidad de "capacidad de aprender". Tener al menos una comprensión superficial de las partes internas puede ser útil, pero no es necesario ser competente. Sin embargo, es una buena idea conocer lo suficiente sobre ellos como para poder comprender cualquier referencia en la documentación que está leyendo.

Por ejemplo: sé que tanto VB.NET como C # se compilan en IL (lenguaje intermedio) de .NET, que luego se compila para el marco de destino. No sé mucho sobre IL, pero sé lo suficiente como para reconocerlo cuando lo veo, y entender en un sentido general cómo maneja ciertas cosas. Me considero competente en C #, pero no en VB.NET, aunque las "partes internas" son las mismas, y mi comprensión de ellas no es profunda.

Bobson
fuente