2009-04-13 10 views
7

¿Qué significa realmente 'saber un idioma'?¿Qué significa ser bueno en un lenguaje de programación?

Estoy seguro de que es más que saber solo la sintaxis.

¿Es

  • sabiendo todo/la mayor parte de las bibliotecas disponibles
  • saber cómo se implementan las características de la lengua

¿Cómo se enteró el idioma que son competentes en?

+0

@epochwolf - ¡Gracias por la edición, parece mucho más claro ahora! – Pranav

Respuesta

7

"Conocer" un lenguaje de programación es muy similar a "conocer" un idioma humano: habla con fluidez cuando no tiene que volver continuamente a un libro o hacer una pausa para recordar la palabra correcta.

Creo que "conocer un idioma" significa poder leer y comprender la mayoría de los programas (~ 90%) sin buscar nada en un recurso de referencia, y saber exactamente dónde buscar los detalles técnicos en partes más oscuras de Un marco. Para idiomas/plataformas que no tienen un "marco" per se, es tener ese conocimiento de las principales bibliotecas comúnmente aceptadas por la comunidad.

Para escribir en ese idioma, significa pasar ~ 90% + tiempo en el diseño de lo que está escribiendo, incluida la investigación sobre el diseño, y menos del 10% buscando información de referencia técnica.

+0

El libro 'Effective Java' hace una conexión similar entre el lenguaje humano y los de programación, en su Introducción. (El libro b.t.w es muy recomendable) –

4

realmente 'saber' un lenguaje para describir a sí mismo como 'bueno' significa

  • sabes sobre todas las características de la lengua, incluyendo tanto
    • los/buenas características únicas y cuándo utilizarlos, así como
    • las esquinas polvorientas y qué evitar
  • que sabe sobre el convenciones comunes
  • (como usted menciona) conoce las bibliotecas de la plataforma
  • que saben los enteros herramientas principales (IDE, construir proyectos, depuradores, perfiladores) para que pueda dominar el idioma
2

Creo que realmente depende de la definición de "bueno" o del propósito de "ser bueno".

Por ejemplo, consideremos Java.

La mayoría de los trabajos no se conformarían con que seas bueno en el lenguaje central, esperarían que seas competente con API específicas (por ejemplo, Swing para GUI) o incluso API de terceros (como todas las cosas Apache) . No necesariamente tiene que saber cada caso de esquina.

La investigación académica e industrial puede requerir que usted realmente conozca el idioma por dentro y por fuera.Por ejemplo, si escribe una herramienta de análisis estático o una optimización del compilador, es mejor saber de los casos límite.

En educación y en control de calidad, a menudo es importante conocer todos los rincones extraños y sus riesgos. Esto es típico con C++. En educación, porque puedes contar con estudiantes que cometen estos errores accidentalmente. En QA, porque ahí es donde se encuentran algunos de los errores más extraños (por ejemplo, las condiciones de carrera en la inicialización estática).

En cuanto a cómo se implementan las características, creo que puede ser un gran programador sin saber cómo se implementan ciertas cosas (por ejemplo, detalles de la VTBL en C++), pero es importante saber cómo se implementan otras cosas (por ejemplo, recolección de basura, administración de memoria, algunas librerías) para escribir código realmente bueno y eficiente.

0

dado un algoritmo, si se puede implementar una solución que es

  • más rápido (que muchos otros programas)
  • eficiente (usar menos recursos que muchos otros programas)
  • más pequeño (utiliza una huella de memoria pequeña)
  • elegante (fácil de entender y mantener)

creo que usted sabe mejor el idioma ...

1

En mi opinión esto significa que usted puede pensar en ese idioma. Poder ver partes del código surgir en su mente a medida que avanza en la declaración del problema es una buena indicación de lo competente que es en un idioma.

3

Dada una línea de código en el lenguaje X, esa línea se escribe una vez y es probable que se lea muchas más veces (y potencialmente modificada, por supuesto). Entonces, el dominio de un idioma es, en gran parte, la comprensión de lectura. Para un corpus de programas escritos en X, ¿qué tan rápido puede leer los programas y comprender lo que están haciendo?

¿Es

  • sabiendo todo/la mayor parte de las bibliotecas disponibles? No lo creo, ya que hay una cantidad arbitraria de bibliotecas de uso común que se crean mientras lo estás aprendiendo. Incluso las bibliotecas base para muchos idiomas hoy en día tienen miles de conceptos (clases) distintos y decenas de miles de funciones.
  • saber cómo se implementan las características del idioma? Esa es una propiedad de una implementación dada del lenguaje en lugar del lenguaje en sí mismo. Pero creo que contribuye. Saber que las expresiones regulares a menudo se implementan como máquinas de estado (y conocer la teoría para esto) es bastante relevante para la comprensión de los lenguajes de expresiones regulares. Aunque saber cómo funciona el código de bytes de Java nunca ha tenido relevancia en las aplicaciones Java en las que he trabajado ... [1] Creo que algunos lenguajes tienen una separación más clara de sus posibles implementaciones que otros: esta puede ser una diferencia clave entre los altos y lenguajes de bajo nivel.

Si tiene un lenguaje en particular en mente, una buena prueba es ver ejemplos serios en él. Para el caso de C, lectura (p.) el kernel de Linux, las utilidades del sistema operativo GNU, PostgreSQL o Subversion, y entendiendo cómo funcionan no es solo una indicación, sino que también puede ser una buena práctica.

[1] Hubo una tarea sobre el análisis estático de bytecode; pero la solución real podría haber sido escrita en cualquier cosa.

0

Quizás desee considerar lo que significa no saber realmente un idioma. Por ejemplo, a menudo me encuentro con personas que suponen que conocen OCaml porque conocen el estándar ML (otro idioma de la misma familia) cuando, de hecho, no están al tanto de las diferencias entre los idiomas o sus implicaciones prácticas. Entonces, diría que parte de conocer un idioma es saber qué lo diferencia de otros idiomas.

C vs C++ es otro ejemplo. Mucha gente solía decir que conocía C++ y luego escribía el código C en C++.

Cuestiones relacionadas