Sé que al aprender un idioma, simplemente puedes comprar un libro, seguir los ejemplos y, siempre que sea posible, probar los ejercicios. Pero lo que realmente estoy buscando es cómo dominar el idioma una vez que lo hayas aprendido.
Ahora sé que la experiencia es un factor importante, pero ¿qué pasa con el aprendizaje de lo interno del idioma, cuál es la estructura subyacente, etc.
Hay artículos que dicen leer este libro, leer ese libro, hacer este juego y ese juego. Pero para mí esto no significa dominar un idioma. Quiero poder leer el código de otras personas y comprenderlo, no importa lo difícil que sea. Comprender cuándo usar una función y cuándo otra, etc., etc.
La lista podría seguir y seguir, pero creo que he hecho el punto. :)
Y finalmente, tome cualquier lenguaje como ejemplo si es necesario, aunque lo mejor sería si se tomara C como ejemplo.
fuente
Respuestas:
Tengo que responder: "Todo lo anterior". La gente discute sobre si la codificación es un arte, un oficio, una disciplina de ingeniería o una rama de las matemáticas, y creo que es más justo decir que es parte de cada uno. Como tal, cuantas más técnicas traigas al dominio del idioma, mejor. Aquí está una lista parcial:
Usa el idioma todo el día, todos los días. Por lo general, esto significa estar empleado a tiempo completo en el idioma.
Lee todo lo que puedas sobre el idioma. Especialmente, "mejores prácticas" y modismos.
Únase a un grupo de usuarios para hablar con otros sobre el idioma y lo que hacen con él.
¡Trabaja con el código de otras personas! No hay una forma más rápida de aprender qué no hacer en un idioma que tener que limpiar después de alguien que hizo algo horrible.
Apoye el código que escribe: ¡cada error se convierte en un recorrido por sus peores decisiones!
Estudiar informática y lenguas en general.
Aprende un idioma muy diferente. Un gran complemento para C sería un lenguaje funcional como Lisp. Esto cambiará la forma en que piensas sobre tu lenguaje procesal al revés.
Aprenda a usar los marcos y las API disponibles para ese idioma.
Tómese el tiempo para hacer sus propios experimentos con el idioma. SICP no es aplicable a C, pero la actitud de aprender un idioma probando sus límites es muy productiva.
Lea la historia del idioma para saber por qué se hizo de la forma en que está.
Asista a conferencias para escuchar el idioma que hablan los autores, o para escuchar lo que los líderes de la industria están haciendo con el idioma.
Toma una clase en el idioma.
Enseñar el idioma a otros (gracias a Bryan Oakley )
En resumen, haga todo lo que pueda pensar. No hay forma de saberlo todo sobre la mayoría de los idiomas. Cada técnica de aprendizaje que utiliza aporta una perspectiva adicional a su comprensión.
fuente
Every technique you use to learn brings and additional perspective to your understanding.
Se necesitan 10,000 horas de práctica.
Lea "Enseñe a programar en diez años"
Puntos clave desde arriba:
fuente
NUNCA te consideres el maestro de todo el idioma hasta que hayas implementado un lenguaje mejor que ese. Lo que significa que, para aprender cómo funciona un idioma en particular desde abajo, obtenga un libro que le enseñe los conceptos del compilador / intérprete del idioma. Por ejemplo:
C: El libro del compilador de LCC
C ++: el diseño y la evolución de C ++ (y luego siga compilando su propio compilador de C ++ o al menos comprenda la implementación de uno utilizando el código del compilador C ++ de GNU)
Java: Obtenga "Inside JVM" y obtenga el código fuente de javac. El código .C de "java" también es útil
Python: implementación de CPython.
ObjectiveC: Casi cualquier material de Apple sobre los aspectos internos de ObjC runtime env y los códigos fuente del compilador lo ayudarán.
Lisp: SICP Book (te enseña Scheme y un compilador-intérprete básico para lenguaje similar al lisp): Lisp in Small Pieces (otro buen libro).
fuente
Intente usar el idioma para algo para lo que no fue diseñado. Escriba un controlador de dispositivo en Python o una biblioteca de manipulación matricial en COBOL. Creo que una de las mejores maneras de dominar un idioma es realmente impulsarlo, tratando de hacer que sus fortalezas superen sus debilidades.
fuente
Te lo pondré fácil. Nunca dominarás un idioma. Período. Si crees que sí, entonces obviamente no lo has hecho. No hay una cima de montaña que de repente alcances y digas "Bueno, ahora, he dominado completamente ese idioma. ¿Y ahora qué?" Incluso los programadores experimentados que han trabajado con el mismo idioma durante décadas le dirán que a veces todavía se encuentran con nuevas ideas, procesos, prácticas, etc. El verdadero objetivo es dominar su comprensión conceptual de un idioma o idiomas. La capacidad de aprender nuevos conceptos y la velocidad con la que puede adoptar características nuevas o modificadas en el idioma es mucho más importante que el conocimiento de memoria de cada palabra clave y sintaxis. Deje de preocuparse por "dominar" un idioma y simplemente preocúpese por mejorar y refinar continuamente la calidad y la eficiencia de su código.
fuente
The true goal is to master your conceptual understanding of a language or languages.
Exactamente. Eso es lo que realmente quise decir.Ya sabes la respuesta a esto
Todo se reduce al trabajo duro y la determinación y por todo lo que nunca puede llegar allí.
Piense de dónde obtenemos el término: para convertirse en un maestro artesano, tenía que ser un aprendiz y luego un oficial y solo ellos tendrían la oportunidad de convertirse en un maestro. En el camino se te enseñaría y practicarías y observarías e interrogarías a otros en su oficio y (con suerte) aprenderías de ellos.
No hay bala mágica ...
fuente
Comience leyendo y entendiendo qué es SDLC (también conocido como ciclo de vida de desarrollo de software). Es un proceso iterativo que implica superación personal, aprendizaje,
**practicing, practicing...**
Eso abriría sus horizontes sobre qué áreas necesita aprender o mejorar. Hay varios libros básicos de ingeniería de software que también le resultarán muy útiles para leer una vez que cree un par de aplicaciones por su cuenta.
Además, una vez que se sienta seguro con un lenguaje OOP , puede comenzar a aprender patrones de diseño , y Head First Design patterns es realmente un buen libro para considerar. Amo este libro.
fuente
No hay sustituto para la experiencia. Para dominar algo, tienes que hacerlo / usarlo, en gran medida, para muchas cosas diferentes.
Así que adelante y use ese lenguaje para ejercicios (como el Proyecto Euler ) y proyectos personales, cosas que realmente necesita o cosas que cree que son interesantes. Escribe un juego, escribe una aplicación web, escribe un analizador, lo que quieras. Y en cada paso, esfuércese por comprender lo que está haciendo en lugar de simplemente pegar el código o seguir las instrucciones.
Eso es algo que puede hacer de inmediato una vez que haya entendido la sintaxis básica. Simplemente tome un código y tómese el tiempo para descifrarlo en detalle. Busque cosas que no entienda o haga preguntas específicas en lugares como Stack Overflow .
fuente
En el lado de alto nivel del problema, aprenda sobre arquitectura: cómo organizar sus proyectos, cuál es su estructura. No dejes que crezcan al azar.
En el nivel medio, aprende diferentes técnicas y paradigmas. Cuantas más herramientas diversas tenga en su repertorio, más poder tendrá para usted. Si solo ha estudiado java, python y ruby, ha estado expuesto solo a una muy pequeña porción del espacio de programación. Aprenda programación imperativa y funcional, aprenda prólogo y J. La idea no es "dominar" cien idiomas, sino aprender sobre diferentes formas de resolver los mismos problemas.
En el lado de bajo nivel del problema, una cosa que podría ayudarlo a ser un mejor programador (de hecho, mejor en lo que sea que haga) es tener un buen modelo mental de la plataforma. Por ejemplo, puede aprender cómo funcionan las estructuras de control de C y conocer las bibliotecas más comunes, pero si no tiene un modelo mental de cómo funcionan los punteros y la memoria, tendrá problemas con expresiones moderadamente complejas.
fuente
¿Puedo hacer un par de sugerencias?
Primero, si puede encontrar un mentor para discutir su uso del idioma, y para obtener los mejores consejos y trucos, y para responder cuando una técnica es mejor que otra.
En segundo lugar, practique tanto como sea posible y pruebe el idioma al máximo. Solía trabajar en equipo, eso (por diversión) escogía un verbo u otra parte del lenguaje de programación del manual cada día. Fue una marca de honor si pudieras incluirlo en tu código ese día. Esto significaba que todo el equipo de programación necesitaba ver y comprender el término (a veces) oscuro para comprenderlo y usarlo de manera efectiva. Algunos días fallamos, ¡pero ese equipo fue divertido de trabajar y realmente se encendió técnicamente!
fuente
Los lenguajes de programación reflejan las ideas detrás de los paradigmas de programación que se desarrollaron para el desarrollo de software de propósito general o para desarrollar software de propósito especial. Por ejemplo, un lenguaje de programa como Java representa el paradigma del programa orientado a objetos, pero AspectJ (una extensión de Java) se usa para programar de acuerdo con la programación orientada a aspectos.
Dada esta breve introducción, para dominar realmente un idioma, comprar y leer un libro por sí solo no sería de mucha ayuda. Debería comprender el entorno en el que puede programar utilizando el lenguaje deseado, aprender sobre el paradigma y, lo que es más importante, crear una aplicación significativa utilizando el lenguaje. Desarrollar una pequeña aplicación que pueda darle una idea de las diversas herramientas proporcionadas por el lenguaje es un enfoque de aprendizaje realmente útil.
He visto personas provenientes de la comunidad C pura sin aprender nada sobre la orientación a objetos y la lucha para aprender Java u objetivo-c. También he visto a personas luchar con la programación de interfaces de usuario cuando realmente no han comprendido los elementos de la interfaz de usuario, la programación basada en eventos, etc.
¡Espero que esto ayude!
fuente
Agregaría dos elementos a la lista de Glen
fuente
Para construir sobre lo que dijo @TMN. He tenido un gran éxito en el aprendizaje de idiomas al escribir el mismo programa en un idioma diferente.
Por ejemplo, escribir un programa que lee en un archivo CSV, analiza el texto y luego lo vuelve a escribir en un segundo CSV con las columnas en orden inverso.
Me gusta esto,
a
Esto le dará una comprensión básica o el idioma. Entonces vea qué más puede hacer. Tal vez permita la sustitución de valores o el reordenamiento o la lectura desde la línea de comandos. Hazlo tan complejo como quieras.
También creo lo que dijo @GlenPeterson sobre
Es una gran idea. Sugeriría un lenguaje como Haskell porque en las últimas versiones puedes programar usando los cuatro paradigmas de programación de OO, de procedimiento, lógico o funcional. Aunque en realidad es un lenguaje funcional, puede implementar con algún esfuerzo los otros paradigmas que serían una buena experiencia de aprendizaje.
Gran lenguaje para jugar.
fuente
No puedes aprender un idioma del libro. Todo lo que necesitas es practicar y practicar. No piense que puede aprender un idioma de ese libro en particular o de esa fuente en particular. Simplemente piense que el lenguaje de programación es el mismo que el lenguaje humano. No puede simplemente aprender inglés o francés leyendo un libro en particular. Todo lo que necesita es usarlo en el día para vida del día Codifique desde cero, amplíe su funcionalidad, intente construir algo que lo haga sentir un poco satisfecho. Y si está pensando en dominar un idioma como saber el lenguaje completo y usar cada elemento del lenguaje de programación en la codificación práctica ... NO PUEDE. O incluso si puede, puede llevar entre 10 y 15 años.
fuente