Code Complete indica que siempre debe codificar en un idioma en lugar de codificar en él. Con eso quieren decir
No limite su pensamiento de programación solo a los conceptos que su lenguaje admite automáticamente. Los mejores programadores piensan en lo que quieren hacer, y luego evalúan cómo lograr sus objetivos con las herramientas de programación a su disposición. (capítulo 34.4)
¿No conduce esto a usar un estilo de programación en cada idioma, independientemente de las fortalezas y debilidades particulares del idioma en cuestión?
O, para poner la pregunta en un formato más responsable:
¿Propondría que uno debe tratar de codificar el problema de la manera más clara posible con los detalles del lenguaje de uno, o debería buscar la solución más elegante en general, incluso si eso significa que necesita implementar construcciones posiblemente incómodas que no existen de forma nativa en el idioma de uno?
fuente
Respuestas:
Hay un enfoque aún mejor: olvídate de tu patético lenguaje de programación fijo. Codifique su problema en un lenguaje que acaba de inventar, derivado de los términos del dominio del problema relevante, codifíquelo de la forma más natural posible, y solo entonces piense en implementar este nuevo lenguaje de programación o reducir su código a las limitaciones de lenguaje existente
Este enfoque se llama programación orientada al lenguaje . Existen muchas técnicas para implementar los lenguajes específicos de dominio de manera eficiente, y es un tema especialmente candente para la comunidad Ruby.
fuente
Creo que la respuesta correcta, y la que pretende el libro es:
Al programar en un lenguaje, siempre asumí que era usar técnicas fuera del estilo normal del lenguaje, lo que conduciría a un beneficio . Esta es una diferencia clave para escribir en un estilo en todos los idiomas.
Por ejemplo, aprender Haskell mejoró enormemente mi habilidad para usar funciones de orden superior. Ahora, cuando programo en c #, utilizo varios
IEnumerable
métodos, comoSelect
más a menudo, ya que el uso de estos métodos conduce a un código más limpio que escribir bucles. También tiendo a usar las funciones de pasar y usar (es decirFunc<int, int>
) con más frecuencia debido a mi experiencia en haskell. Mi uso de la herencia ha disminuido debido a esto, y la mayoría de las veces el resultado es un código más simple.Sin embargo, no uso conceptos como mónadas o tipos de datos algebraicos en c #. Esto se debe a que ninguno de los dos es claramente representable en C # y genera pocos beneficios a cambio de mucha oscuridad.
Entonces uso las herramientas del lenguaje para usar las habilidades que tengo para el mejor efecto. Creo que eso es programar en el lenguaje.
fuente
El punto es que los buenos programadores no tienen un lenguaje. La cita del libro habla de "herramientas de programación a su disposición", lo que significa que si conoce perl y Java, entonces tal vez debería usar perl para esa rápida manipulación de cadenas. Los lenguajes de programación no son cuadros para limitarnos, sino herramientas que usamos para resolver problemas. Esto es (imo) a lo que se refiere Code Complete. No codifique en un cuadro de lenguaje / entorno de programación, coloque la mejor solución en el mejor lenguaje / entorno de programación para usted, su problema y su solución.
fuente