... ¿cómo puedo desarrollar habilidades de programación que se puedan aplicar a todos los idiomas en lugar de solo uno?
La clave de esta pregunta es trascender el idioma y pensar no en el idioma en el que está codificando.
WAT?
Los programadores políglotas experimentados piensan en el árbol de sintaxis abstracta (AST) de su propio modelo mental del lenguaje. Uno no piensa "Necesito un bucle for aquí", sino más bien "Necesito recorrer un bucle sobre algo" y se traduce en eso al apropiado para, o mientras que, o iterador o recursión para ese idioma.
Esto es similar a lo que uno ve al aprender un idioma hablado. Las personas que hablan muchos idiomas piensan con fluidez el significado , y sale en un idioma determinado.
Uno puede ver alguna pista de este AST en el par de videos de seguimiento ocular Code Comprehension with Eye Tracking y Eye-Tracking Code Experiment (Novato) donde se observan los movimientos del ojo de un principiante y un programador experimentado. Uno puede ver al programador experimentado 'compilar' el código en su modelo mental y 'ejecutarlo' en su cabeza, mientras que el principiante tiene que iterar sobre el código palabra por palabra clave.
Por lo tanto, la clave para desarrollar habilidades de programación para aplicar a todos los idiomas es aprender varios idiomas para que uno pueda distanciarse de tener el modelo mental de un idioma y desarrollar la capacidad de generar el AST para un problema por sí mismo en un idioma principal que luego se traduce a un idioma determinado.
Una vez que uno tiene esta capacidad de usar el AST en la cabeza, aprender otro idioma dentro de una escuela de pensamiento similar (ir a Befunge es un poco un salto desde Java, pero no tanto desde Forth ) se vuelve mucho más fácil: es 'solo' traducir el AST a un nuevo idioma que es mucho más fácil la tercera, cuarta y quinta (etc.) vez que se hace.
Hay un artículo clásico, Los programadores reales no usan Pascal . Parte de esto dice:
... el programador real determinado puede escribir programas Fortran en cualquier idioma
También hay bits para los que no puedes usar el AST mental, también debes pensar en el lenguaje. Esto lleva un poco de tiempo para lograrlo (todavía estoy acusado de escribir código Perl en Python y mi primer código Lisp fue revisado diciendo "Este es un muy buen programa en C").
A esto, debo señalar un artículo publicado por la ACM, Cómo no escribir Fortran en cualquier idioma . El tercer párrafo del artículo (que no son citas destacadas) aborda directamente la pregunta en cuestión:
Hay características de buena codificación que trascienden todos los lenguajes de programación de uso general. Puede implementar un buen diseño y un estilo transparente en casi cualquier código, si se aplica a él. El hecho de que un lenguaje de programación le permita escribir código incorrecto no significa que tenga que hacerlo. Y un lenguaje de programación que ha sido diseñado para promover un buen estilo y diseño todavía puede usarse para escribir código terrible si el codificador es lo suficientemente creativo. Puede ahogarse en una bañera con una pulgada de agua, y puede escribir fácilmente un programa completamente ilegible e imposible de mantener en un idioma sin números de línea o gotos, con manejo de excepción y tipos genéricos y recolección de basura. Ya sea que esté escribiendo Fortran o Java, C ++ o Smalltalk, puede (y debe) elegir escribir un código bueno en lugar de un código malo.
No es suficiente tener el AST, es necesario tener el AST que se pueda traducir a otros idiomas. Tener un Fortran AST en tu cabeza y escribir código Fortran en Java no es algo bueno. También se debe estar lo suficientemente familiarizado con el idioma y sus expresiones idiomáticas para poder pensar en el idioma (a pesar de lo que dije en la parte superior).
He visto código Java escrito por alguien que no había dejado de escribir código C. Había un objeto con un método principal. En este objeto había un montón de métodos estáticos llamados main
y clases internas privadas que tenían campos públicos (y por lo tanto se parecían mucho a los puntales). Era un código C escrito en Java. Todo lo que se hizo fue traducir la sintaxis de un idioma a otro.
Para superar este punto, uno debe continuar escribiendo código en varios idiomas, no pensar en esos idiomas al diseñar el código, sino pensar en ellos al traducir el diseño al código para que funcione correctamente con las expresiones idiomáticas del lenguaje.
La única manera de llegar allí, siendo capaz de desarrollar habilidades de programación que se puedan aplicar a todos los idiomas, es continuar aprendiendo idiomas y mantener ese lenguaje de programación mental flexible en lugar de estar vinculado a un idioma.
(Mis disculpas a ChaosPandion por tomar mucho de la idea que presentó ).