¿Cómo aprendes uno mismo un nuevo idioma o te haces mejor en uno? ¿Desarrolla sus propias pautas de estilo y se adhiere a ellas?

Mi respuesta exacta dependerá de por qué quiere o necesita aprender el idioma. Hay dos razones principales para aprender un idioma: lo necesita ahora para un proyecto de trabajo o escuela, o está agregando al conjunto de idiomas que espera utilizar en el futuro. Como ingeniero de software, siempre debe buscar agregar a las herramientas que guarda en su bolsa de herramientas profesionales, y aprender nuevos idiomas a lo largo del tiempo es importante a medida que nuevos idiomas y paradigmas de idiomas continúan emergiendo.

¿Cómo empezar?

La clave de cualquier lenguaje es su gramática (sintaxis) y su metodología (¿es un lenguaje de procedimiento? Orientado a objetos? Un híbrido, como PHP, donde puede escribir de cualquier manera). Había visto C ++ en la década de 1980, pero tenía poca o ninguna razón para usarlo, por lo que Java fue mi primer lenguaje OO y los conceptos de polimorfismo y herencia eran ajenos. Entendí la gramática muy rápidamente (un lenguaje es un lenguaje …), pero los medios para explotar el lenguaje requieren que yo aprenda las cosas que no son parte de la gramática.

Hoy en día hay muchos libros (XYZ para Dummies, The Idiot’s Guide to XYZ, varios libros de O’Reilly sobre XYZ con fotos de animales no relacionados en la portada) que pueden ayudarlo a aprender lo básico del idioma y cómo construir programas adecuadamente. ese idioma. Lea varios, trabaje en los ejemplos, estudie las muestras, modifique los diversos ejemplos y muestras, y así sucesivamente.

¿Cómo mejorar?

Aquí, creo, depende de por qué estás aprendiendo. Si está aprendiendo para un trabajo, debería poder estudiar el trabajo de sus colegas. Debería poder ver programas y módulos en el repositorio de código fuente de su empleador y aprender tanto el estilo como el diseño del código que otros han escrito. Si hay una guía de estilo formal, también podrías estudiar eso. Si está aprendiendo por su cuenta, le sugiero que busque en los proyectos de código abierto escritos en el idioma que elija, que haga cosas que disfrute o que espere que necesite en el futuro. Muchos idiomas han creado sus propios estilos comunes y los IDE intentarán imponerlos. Eclipse advierte sobre clases de Java con nombres en minúsculas y métodos con nombres en mayúsculas, por ejemplo.

La clave, creo, es mirar todo el trabajo de los demás como puedas. A menos que esté aprendiendo un idioma completamente nuevo, habrá un gran cuerpo de trabajo de código abierto disponible a través de sitios web como GitHub o SourceForge.

¿Cómo aprendes o desarrollas un estilo?

Recomiendo encarecidamente a cualquier ingeniero de software que aprenda un nuevo idioma para encontrar el estilo de idioma dominante para su idioma elegido y lo acepte. Cuando era un líder de desarrollo con un gran equipo, realmente creí que el software debería estar escrito en una sola “voz”. No desea que el código se “pudra” con el tiempo y se convierta en una maraña de estilos y metodologías en conflicto.

Este es un tipo bastante típico de programa Java-ish. Tiene un constructor y un método getter, y el formato de los nombres es probablemente muy parecido a lo que esperaría encontrar:

public class ValueHider { private int hiddenValue = 0; public int getValue() { return this.hiddenValue; } public ValueHider(int value) { this.hiddenValue= value; } } 

Nadie va a escribir un programa de C para hacer esto, porque C no está tan metido en la ocultación de datos, pero aquí verá la diferencia en la asignación de nombres:

 static int hidden_value = 0; int get_value() { return hidden_value; } void set_value(int value) { hidden_value = value; } 

Lo último que quiere hacer, cuando comienza ese nuevo proyecto, es tomar las convenciones estilísticas de uno (nombres de camellos, por ejemplo) y usarlos en el otro. Por ejemplo, NO agregue un nuevo método de establecimiento a la clase ValueHider () con el nombre set_value ().

Si obtiene suficiente exposición al idioma, verá que la mayoría de los desarrolladores se han conformado con ciertas convenciones y, con frecuencia, aprenderá por qué: usar los métodos de establecimiento y obtención en los idiomas OO es realmente importante cuando se trata de asegurar que los valores sean los adecuados. Validado y cualquier efecto secundario tiene lugar correctamente. No es solo un “estilo” para encapsular “hiddenValue” en el ejemplo anterior.

¿Qué tipo de código estudiar?

Una vez más, vuelve a por qué estás aprendiendo el idioma. Para su trabajo actual o una nueva posición, lea el código actual que se encuentra en producción hoy. A nadie le gusta trabajar gratis, pero pasar tiempo después de que se complete su trabajo programado es tiempo bien empleado. Debes tener un mentor, así que revisa su código. Si su jefe técnico o arquitecto no es su mentor (a veces es una buena idea), revise su código.

Si está haciendo esto para su propio beneficio, nuevamente, vuelva a los repositorios de código de código abierto que mencioné anteriormente y encuentre el código en su área de interés. Encuentre a los miembros del equipo con más experiencia, asumiendo que el proyecto no es solo el trabajo de una sola persona.

Esto plantea un punto importante y es que muy poco software se trata únicamente de informática y / o ingeniería de software por su propio bien. Las bibliotecas de tiempo de ejecución (E / S de archivos, asignadores de memoria, manipuladores de datos abstractos, clasificadores, etc.) son una excelente forma de probar algoritmos (mejores clasificaciones, mejores E / S en búfer, mejores asignadores de memoria), pero es probable que tarde o temprano tratando con “algo más”. Eso significa que tiene que bajar el teclado, tarde o temprano, y leer sobre el campo: aprender qué es el Álgebra Relacional mientras aprende SQL mientras aprende a escribir aplicaciones de base de datos en su nuevo idioma. También necesita aprender sobre la complejidad del tiempo y el hardware de almacenamiento y el ancho de banda de E / S, y muchas cosas, todas las cuales no son código. Y ese es un punto extremadamente importante, porque no se trata solo de “codificación”. La “codificación” lo convertirá en un “programador”, no lo convertirá en un ingeniero.

¿Qué trucos utilizo?

Yo no. No hay atajos, balas de plata, trucos o salidas fáciles. Escribí mi primer programa en 1976, recibí mi primer cheque de pago relacionado con el software en 1979, mi primera computadora doméstica en 1981, y todavía tengo que dedicar tiempo, todos estos años más tarde, para mantener mis habilidades afiladas. La buena noticia es que disfruto lo que hago y disfruto ayudando a los nuevos ingenieros de software a convertirse en buenos ingenieros de software.

Estudiar. Práctica. Repetir.

Personalmente, encuentro que aprendo mejor haciendo. Entonces, cuando quiero aprender un nuevo idioma, técnica o patrón, elijo un proyecto paralelo y aprendo a medida que avanzo, justo a tiempo. Puede ser frustrante, pero hasta que conozca los conceptos básicos, las consideraciones de orden superior como el estilo entran por un oído y salen por el otro de todos modos.