¿Cómo puedo realmente dominar un lenguaje de programación?

100

Sé que aprendiendo 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 los aspectos internos del idioma, cuál es la estructura subyacente, etc.

Hay artículos por ahí que leen 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 entenderlo, sin importar lo difícil que sea. Para entender cuándo usar una función y cuándo otra, etc. etc.

La lista podría seguir y seguir, pero creo que ya lo he dicho. :)

Y finalmente, tome cualquier lenguaje como ejemplo si es necesario, aunque sería mejor si C fuera tomado como ejemplo.

    
pregunta cprogcr 30.09.2012 - 18:55

14 respuestas

162

Tengo que responder, "Todo lo anterior". La gente discute 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 algo de cada uno. Como tal, cuantas más técnicas aporte al dominio del idioma, mejor. Aquí hay 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 expresiones idiomáticas.

  • Únete 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 manera más rápida de aprender qué no hacer en un idioma que tener que limpiar después de alguien que hizo algo horrible.

  • Apoya el código que escribes, ¡cada error se convierte en un recorrido por tus peores decisiones!

  • Estudia informática y lenguajes en general

  • Aprende un idioma muy diferente. Un gran cumplido para C sería un lenguaje funcional como Lisp. Esto hará que tu forma de pensar acerca de tu lenguaje de procedimientos sea completamente diferente.

  • 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 al probar sus límites es muy productiva.

  • Lea la historia del idioma para saber por qué se hizo de la manera correcta.

  • Asista a conferencias para escuchar el lenguaje de 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ñe el idioma a otros (gracias a Bryan Oakley )

En resumen, haz todo lo que puedas imaginar. No hay manera de saber todo sobre la mayoría de los idiomas. Cada técnica de aprendizaje que utilice le brinda una perspectiva adicional para su comprensión.

    
respondido por el GlenPeterson 10.10.2017 - 18:42
52

10,000 horas de práctica es lo que se necesita.

Lea "Enseñe la programación en diez años"

Puntos clave desde arriba:

  
  • Haga que se interese en la programación y haga algo porque es divertido. Asegúrate de que siga siendo lo suficientemente divertido para que estés dispuesto   para poner en sus diez años / 10.000 horas.
  •   
  • Programa. El mejor tipo de aprendizaje es aprender haciendo.
  •   
  • Habla con otros programadores; lee otros programas.
  •   
    
respondido por el vartec 20.09.2012 - 10:46
33

NUNCA considérese el maestro de todo el lenguaje hasta que haya implementado un lenguaje mejor que ese. Lo que significa, para aprender cómo funciona un idioma en particular desde abajo, obtenga un libro que le enseñe los conceptos de 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 construye el tuyo El compilador de C ++ o al menos entiende la implementación de uno usando el código del compilador GNU C ++)

  • Java: obtenga "Inside JVM" y obtenga el código fuente de javac. "java" 's .C el código 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á.

  • Lisp: SICP Book (te enseña Scheme y un compilador-intérprete básico para lenguaje lisp) : Lisp in Small Pieces (otro buen libro).

respondido por el Aniket Inge 20.09.2012 - 03:35
11

Intenta usar el idioma para algo para lo que no estaba destinado. Escriba un controlador de dispositivo en Python o una biblioteca de manipulación de matrices en COBOL. Creo que una de las mejores maneras de dominar un idioma es empujarlo realmente, intentando que sus fortalezas superen sus debilidades.

    
respondido por el TMN 19.09.2012 - 17:09
10

Te lo pondré fácil. Nunca dominarás un idioma. Período. Si crees que tienes, entonces obviamente no tienes. No hay una cima de la montaña a la que alcances repentinamente y digas "Bueno, ahora, he dominado completamente ese idioma. ¿Ahora qué?" Incluso los programadores experimentados que han estado trabajando con el mismo idioma durante décadas le dirán que a veces aún 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 preocuparse por mejorar y perfeccionar continuamente la calidad y la eficiencia de su código. Eso es lo que hacen los "maestros".

    
respondido por el Chris Pratt 19.09.2012 - 18:10
5

Ya sabes la respuesta a esto

  • Tienes que usar el idioma. Mucho. Para resolver el mayor número posible de problemas,
  • Tienes que leer (e, idealmente, trabajar con) el código de otras personas, preferiblemente aquellos que tienen un grado de dominio (es decir, una comprensión profunda de al menos algún aspecto del lenguaje). Por extensión, si puede hablar con la gente sobre cómo resolver problemas con el idioma, entonces mucho mejor.

Todo se reduce al trabajo duro, a la determinación y, por todo lo que nunca puedes conseguir.

Piensa de dónde obtenemos el término: para convertirte en un maestro artesano, tenías que ser un aprendiz y luego un oficial, y solo a ellos podrías tener la oportunidad de convertirte en un maestro. En el camino, se le enseñaría y practicaría, observaría y cuestionaría a otros en su oficio y (con suerte) aprenderá de ellos.

No hay una bala mágica ...

    
respondido por el Murph 19.09.2012 - 16:11
2

Comience por leer y comprender lo que es SDLC (también conocido como Vida del desarrollo de software -ciclo). Es un proceso iterativo que implica la superación personal, el aprendizaje, **practicing, practicing...**

Esoabriríasushorizontesenquéáreasnecesitaaprenderomejorar.Hayvarioslibrosbásicosdeingenieríadesoftwarequetambiénleseríanmuyútilesdeleerunavezquecreeunpardeaplicacionesporsucuenta.

Además,unavezquetesientasseguroconunlenguajeOOP,puedescomenzaraaprenderpatronesdediseñoy Head First Design patrones es un libro muy bueno para considerar. Me encanta este libro.

    
respondido por el EL Yusubov 20.09.2012 - 12:43
2

No hay sustituto para la experiencia. Para dominar algo, tienes que hacerlo / usarlo, por lotes, para muchas cosas diferentes.

Así que sigue adelante y usa ese lenguaje para ejercicios (como Project Euler ) y proyectos personales, cosas que realmente necesitas o cosas que simplemente crees es interesante. Escribe un juego, escribe una aplicación web, escribe un analizador, lo que quieras. Y en cada paso, esfuérzate por entender lo que estás haciendo en lugar de simplemente pegar código o seguir instrucciones.

  

Quiero poder leer el código de otras personas y entenderlo, sin importar lo difícil que sea.

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 figurarlo en detalle. Busque cosas que no entienda o haga preguntas específicas en lugares como Desbordamiento de pila .

    
respondido por el Michael Borgwardt 29.09.2012 - 00:18
2

En el lado de alto nivel del problema, aprenda sobre arquitectura: cómo organizar sus proyectos, cuál es su estructura. No solo dejes que crezcan al azar.

En el nivel medio, aprende diferentes técnicas y paradigmas. Cuantas más herramientas diversas tengas en tu repertorio, más poder tendrás para ti. Si solo has estudiado java, python y ruby, has estado expuesto solo a una pequeña parte del espacio de programación. Aprenda programación imperativa y funcional, aprenda prólogo y J. La idea no es "dominar" cientos de idiomas, sino aprender sobre diferentes maneras de resolver los mismos problemas.

En el lado bajo 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 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.

    
respondido por el José Dinuncio 29.09.2012 - 15:21
1

¿Puedo hacer un par de sugerencias?

Primero, si puede encontrar un mentor para hablar sobre el uso del idioma y obtener los mejores consejos y trucos, y para responder cuándo una técnica es mejor que otra.

En segundo lugar, practica lo más posible y prueba el idioma al máximo. Solía trabajar en un equipo, que (como una cuestión de diversión) elegía un verbo u otra pieza del lenguaje de programación del manual todos los días. Fue una marca de honor si pudiera trabajar en su codificación ese día. Esto significaba que todo el equipo de programación necesitaba mirar y comprender el término (a veces) oscuro para entenderlo y usarlo de manera efectiva. Algunos días fallamos, ¡pero fue divertido trabajar en ese equipo y realmente fue técnicamente activado!

    
respondido por el Nicholas Sibson 19.09.2012 - 18:16
0

Los lenguajes de programación reflejan las ideas detrás de los paradigmas de programación que se desarrollaron dirigidos al 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 de 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. Necesitará comprender el entorno en el que puede programar utilizando el idioma deseado, aprender sobre el paradigma y, lo que es más importante, crear una aplicación significativa utilizando el idioma. Construir 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 a personas provenientes de la comunidad de 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 que luchan con la programación de interfaces de usuario cuando en realidad no han comprendido los elementos de la interfaz de usuario, la programación dirigida por eventos, etc.

Espero que esto ayude!

    
respondido por el hsnm 19.09.2012 - 20:52
0

Agregaría dos elementos a la lista de Glen

  • Intenta resolver el problema difícil que otros tienen, por ejemplo. dar respuestas en SO
  • Leer los diseñadores de idiomas blogs / libro. Ese es el mejor recurso de conocimiento profundo. Usted sabría cuál es la decisión de diseño detrás de la razón X.
respondido por el Lukasz Madon 19.09.2012 - 20:55
0

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, al escribir un programa que lee 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,

  

Columna1, Columna2, Columna3

a

  

Columna3, Columna2, Columna1

Esto te dará una comprensión básica o el idioma. Entonces ve que más puedes hacer. Tal vez permita la sustitución de valores, la reordenación o la lectura desde la línea de comandos. Hazlo tan complejo como quieras.

También pienso en lo que dijo @GlenPeterson,

  

Aprende un idioma muy diferente. Un gran cumplido para C sería un lenguaje funcional como Lisp. Esto hará que tu forma de pensar acerca de tu lenguaje de procedimientos sea completamente diferente.

Es una gran idea. Sugeriría un lenguaje como Haskell porque en las últimas versiones puede programar usando los cuatro paradigmas de programación de OO, procedimiento, Lógica o funcional. Aunque en realidad es un lenguaje funcional, puede implementar algunos otros paradigmas, lo que sería una buena experiencia de aprendizaje.

Excelente lenguaje para jugar.

    
respondido por el Dan 19.09.2012 - 21:55
0

No puedes aprender un idioma del libro. Todo lo que necesitas es práctica y práctica. No piense que puede aprender un idioma de ese libro en particular o de esa fuente en particular. Solo 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 dia Codifique desde cero, extienda su funcionalidad e intente construir algo que lo deje un poco satisfecho. Y si está pensando en dominar un lenguaje como saber un lenguaje completo y utilizar cada elemento del lenguaje de programación en la codificación práctica ... NO PUEDE. O incluso si puedes puede llevarte de 10 a 15 años.

    
respondido por el sumit 01.07.2013 - 04:57

Lea otras preguntas en las etiquetas