¿Cómo puedo asegurarme de que realmente estoy aprendiendo a programar en lugar de simplemente aprender los detalles de un idioma? [cerrado]

82

A menudo escucho que un programador real puede aprender fácilmente cualquier idioma en una semana. Me han dicho que los idiomas son solo herramientas para hacer las cosas. La programación es la habilidad definitiva que se debe aprender y dominar.

¿Cómo puedo asegurarme de que realmente estoy aprendiendo a programar en lugar de simplemente aprender los detalles de un idioma? ¿Y cómo puedo desarrollar habilidades de programación que se puedan aplicar a todos los idiomas en lugar de solo uno?

Ryan
fuente
25
Intenta aprender otro idioma. Intenta resolver problemas que ya sabes cómo resolver en tu primer idioma en tu nuevo idioma. No será fácil al principio. Pero sabrá que está aprendiendo una vez que volver a resolver viejos problemas de una manera nueva se vuelve notablemente más fácil (nota: esto puede llevar un poco de tiempo).
FrustratedWithFormsDesigner
42
Además, las personas que afirman poder aprender un idioma en una semana necesitan definir lo que quieren decir cuando dicen "Aprender". "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 semana después:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL
99
Hay que hacer una pregunta. ¿Construye su lógica en sintaxis o utiliza un modelo mental más rápido y eficiente? Encuentro que los programadores novatos tienden a pensar usando la sintaxis.
ChaosPandion
10
@PaulR: No me tomó 10,000 horas aprender a andar en bicicleta. O nadar, para el caso.
Robert Harvey
77
@PaulR El dicho es acerca de que toma 10k horas dominar una habilidad, no simplemente "aprenderla"
Tobias Kienzler

Respuestas:

96

No se preocupe por conocer algún concepto ridículo de "habilidad" tan comúnmente escuchado en declaraciones como:

  • Todos los lenguajes de programación son básicamente iguales.
  • Una vez que aprenda bien un idioma, puede elegir cualquier otro idioma de forma rápida y sencilla.
  • Los idiomas son solo herramientas, hay algo de magia cerebral que realmente hace que el software.

Estas declaraciones se basan en una premisa errónea y revelan la falta de experiencia en un espectro más amplio de lenguajes de programación. Son declaraciones muy comunes y muy creídas por una gran cantidad de programadores, no discutiré eso, pero sí discutiré su precisión.

Esto se demuestra simplemente: Pase una semana (o realmente cualquier cantidad de tiempo mayor que un par de días) tratando de aprender los fundamentos de Haskell , Prolog o Agda . Poco después comenzará a escuchar la vieja canción de Sesame Street en su cabeza "Una de estas cosas no es como las otras ...".

Como resultado, hay una gran cantidad de lenguajes de programación, técnicas y enfoques que son tan extraños de lo que el 95% de nosotros hacemos o hemos hecho. Muchos desconocen por completo que cualquiera de estos otros conceptos existen, lo cual está bien y estos conceptos no son necesarios para ser un programador empleado e incluso efectivo.

Pero el hecho sigue siendo: estas técnicas y enfoques existen, son buenos para muchas cosas diferentes y pueden ser muy útiles, pero no son como a lo que estás acostumbrado y la gente no puede simplemente aprenderlos con una tarde de violín.

Además, diría que la mayoría de los casos en que las personas afirman que tienen o pueden aprender cosas tan complejas como lenguajes de programación tan rápido como una semana, sufren un poco del efecto Dunning Kruger , Wikipedia (énfasis mío):

El efecto Dunning-Kruger es un sesgo cognitivo en el que las personas no calificadas sufren de superioridad ilusoria, por error calificando su capacidad mucho más alta que el promedio. Este sesgo se atribuye a una incapacidad metacognitiva de los no calificados para reconocer sus errores.

Recomendaría a las personas a esta visión más experimentada sobre el concepto de aprender a programar de Peter Norvig: aprender a programar en diez años .

Investigadores (Bloom (1985), Bryan y Harter (1899), Hayes (1989), Simmon y Chase (1973)) han demostrado que lleva unos diez años desarrollar experiencia en cualquiera de una amplia variedad de áreas, incluido el ajedrez, la música composición, operación telegráfica, pintura, piano, natación, tenis e investigación en neuropsicología y topología. La clave es la práctica deliberativa: no solo hacerlo una y otra vez, sino desafiarse a sí mismo con una tarea que está más allá de su capacidad actual, probarla, analizar su desempeño mientras y después de hacerlo, y corregir cualquier error. Entonces repite. Y repite de nuevo.


¡Seguramente, hay un conjunto de principios generales que harán que todos los idiomas sean fáciles de aprender!

Quizás, pero diría que este conjunto de principios es tan amplio que casi siempre habrá idiomas fuera de su alcance de una semana. A medida que agrega nuevos conceptos a la lista con la que está familiarizado y cómodo, esta lista de idiomas fuera de su alcance inmediato puede reducirse, pero me cuesta creer que alguna vez desaparecerá. La lista de enfoques de computación conceptual para las cosas es tan amplia que es desconcertante, desde lenguajes concatenantes hasta lenguajes basados ​​en vectores y lenguajes especializados en IA o metaprogramación ( o lenguajes que existen completamente para admitir expresiones regulares ).

Después de diez años, generalmente podrás programar. Esto significa que puede escribir código algo decente en algún idioma o estilo de idiomas. Entonces, después de 10 años, está listo para comenzar a abordar estos innumerables conceptos transversales para el resto de su vida, y si no es Edsger W. Dijkstra , Donald Knuth o John D. Carmack , no llegará a todos de ellos.

Jimmy Hoffa
fuente
11
Enh. Hay una diferencia entre "conocer" un idioma y ser lo suficientemente competente como para descubrir y corregir un error menor en uno. Un buen programador puede hacer esto último bastante rápido, incluso en lenguajes arcaicos.
Telastyn
55
@ CharlesE.Grant Creo que sobreestimas lo que la mayoría aprende en la universidad, también cuánto tiempo lleva llegar a ser incluso semi-competente en un idioma como Haskell o Prolog. Yo diría que un ingeniero experto en la industria con experiencia y sin experiencia en programación funcional tomaría significativamente más de una semana para poder corregir su primer error en un programa Haskell.
Jimmy Hoffa
11
Todavía argumentaría que el conjunto fundamental de conceptos es bastante compacto. Una vez que comprenda la reescritura de términos , tiene una herramienta para definir el cálculo lambda, el cálculo SK, la máquina de Turing, el algoritmo de Markov, etc. Un pequeño número de ideas verdaderamente fundamentales puede abarcar la mayor parte de la informática. Pero, por supuesto, se requiere experiencia para poder ver los patrones simples en cosas aparentemente complejas.
SK-logic
44
Yo diría que no es tanto el efecto Dunning-Kruger, como simplemente asumir que "lenguaje de programación" = "lenguaje de programación estilo c". Después de conocer una cantidad decente de c ++, una cantidad decente de C # y algunos conocimientos de perl y python, espero que pueda llegar a ser razonablemente fluido en Java, PHP, etc. en una semana. No necesariamente experto, pero al menos bastante fluido. Me hice recoger Javascript en unos pocos días. En ese punto, se trata principalmente de aprender las diferencias entre ellos. Nota: el lenguaje más popular del mundo real es c-like. Lo mismo no necesariamente sería cierto para, por ejemplo, Prolog.
neminem
2
@WayneWerner En serio, la diferencia entre Haskell o Prolog y los idiomas algol es mucho más que sintaxis, solo estás perpetuando el mito. Realice mi prueba anterior: pase una semana tratando de aprender Haskell y vea cómo funciona para usted. Honestamente, será bueno para ti, hay mucho que aprender al hacerlo.
Jimmy Hoffa
51

... ¿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 mainy 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ó ).

Comunidad
fuente
3
No necesitas disculparte. Creo que has escrito una respuesta impresionante.
ChaosPandion
Quería dar crédito a la persona que me hizo pensar en eso en esa dirección para escribir la respuesta.
3
Esta es una muy buena respuesta. Ojalá pudiera votar dos veces.
Wayne Werner
2
En realidad, esta es exactamente la razón por la que no deberías aprender OO primero, ya que esto formatea tu cerebro con uno de los peores AST imaginables.
Morg
1
@ Jimmy Jimmy - Puede que tengas razón. Siempre he enseñado inicialmente usando un idioma y poco a poco introduzco más. Aún así, creo que vale la pena explorarlo, ya que siempre puedo frenar y hacer que se centren en un idioma. (SML parece una muy buena elección en realidad.)
ChaosPandion
12

Elija un idioma y comience a codificar. Python es una buena opción para un principiante, y hay tutoriales disponibles en línea , para que pueda aprender cómo hacerlo correctamente.

Todo se sigue de eso. Sus intereses lo llevarán a marcos y conceptos de diseño que agregarán sofisticación a sus programas. Descubrirá que hay cursos en línea que puede tomar que lo basarán en los fundamentos y la teoría, y que existen diferentes paradigmas de programación que puede explorar, etc.

Y sí, descubrirá idiomas como Haskell que le enseñarán algo nuevo, una vez que tenga una base sólida en los fundamentos.

Algunos programadores probablemente piensan que todos los idiomas son iguales porque no han sido expuestos a ninguno que los haga pensar de manera diferente. Todos los idiomas más utilizados se derivan de Algol (son esencialmente lenguajes de procedimiento), y de ellos, la mayoría son lenguajes de llaves similares a C. Todos ellos hacen esencialmente las mismas cosas, aunque algunos con más sofisticación que otros.

Robert Harvey
fuente
2
¿Pero esto no es realmente cierto? Algunos lenguajes de programación codifican todo como funciones puras (incluidas las decisiones + bucles). Otros se pueden modelar empujando y haciendo estallar objetos de conjuntos, etc., etc.
jozefg
1
¿Qué no es verdad? Tienes que aprender a gatear antes de poder caminar o correr.
Robert Harvey
1
Ah, debo especificar, quise decir el último párrafo, estoy de acuerdo con el resto de la respuesta
jozefg
1
He reemplazado el último párrafo con uno que mejor se hace eco de mi sentimiento.
Robert Harvey
5

La programación se trata de resolver problemas de tal manera que la solución se pueda expresar en una gramática tan restringida que se pueda implementar con un lenguaje de programación. El arte de la programación es, por lo tanto, el arte de resolver problemas.

Ciertos lenguajes invitan a otros paradigmas de programación, como la orientación a objetos, eventos, multihilo y basados ​​en MVC. Todos estos son solo modelos y patrones y no tienen nada que ver realmente con la implementación.

Si puede sentarse y resolver un problema en papel de tal manera que pueda traducirse fácilmente a código y esté asociado con un modelo apropiado para su plataforma, entonces usted es un programador. Si todo lo que puede hacer es tomar esas soluciones e implementarlas en nuestro idioma elegido, entonces ese es otro asunto.

He estado programando durante 30 años (¡OMFG!) Y todavía lo uso php.netpara buscar comandos en PHP porque no es mi primer idioma.

Diría que la experiencia en idiomas es inversamente proporcional a la frecuencia con la que mira el manual o el stackoverflow. La experiencia en programación es la facilidad con que se resuelven los problemas de manera compatible con los lenguajes de programación de computadoras.

En noticias relacionadas, aprendí Ruby la semana pasada. Aunque no soy un "experto", puedo resolver un problema que podría escribir en Perl, por ejemplo, y luego pasar una edad traduciéndolo a Ruby mientras lo aprendo un poco más.

stevemarvell
fuente
¡Tu comentario es el primero que leo sobre modelos y patrones! Estoy 100% con tu comentario, una cosa es obtener un idioma y comenzar a hacer un programa. Otra es pensar en el problema y encontrar las herramientas adecuadas para resolverlo, luego comienza a buscar un lenguaje y comienza a programar.
3

Creo que, como con cualquier cosa, la práctica hace la perfección. Simplemente no se encasille en hacer siempre lo mismo o siempre usar el mismo idioma y seguir aprendiendo cosas en cada proyecto.

Creo que puedes dibujar fácilmente un paralelo a algo como aprender a tocar la guitarra. Cualquier buen músico puede aprender a tocar una nueva canción en un período de tiempo muy corto, porque ya conoce todos los acordes y toda la teoría detrás de por qué los acordes se tocan como son. ¿Cómo se ponen tan bien? Simplemente han tocado tantas canciones que todos los patrones se han mezclado, mientras que al mismo tiempo complementaron su conocimiento con la teoría real documentada de que esos patrones también se suscriben.

Entonces, quizás puedas tocar algunas canciones muy bien, pero no puedes desviarte o aprender nuevas canciones rápidamente. Este es probablemente el equivalente de un programador .NET que continúa haciendo la misma aplicación CRUD una y otra vez, en algún momento intente algo nuevo, agregue algunas llamadas de servicio web o una IU avanzada, o escríbala en un idioma completamente nuevo. Cuando llegue a un punto crítico, vea por qué las cosas suceden de la manera en que suceden, haga preguntas en Stack Exchange, etc. Eventualmente, verá todos los patrones que surgen continuamente y conocerá algunas de las teorías subyacentes y aprenderá un nuevo idioma. parece casi tan desalentador.

KDiTraglia
fuente
1

No voy a abordar cuánto tiempo lleva aprender un idioma o lo que significa aprender un idioma, sino que voy a abordar su problema real: cómo determinar si ha aprendido a programar o ha aprendido un lenguaje de programación .

Has aprendido a programar si has aprendido a dividir un problema en procesos discretos y luego usar esos procesos para resolverlo. Ha aprendido un lenguaje de programación si ha aprendido la sintaxis de un idioma y sabe cómo ajustar cómo funciona un proceso, cuando se implementa en ese idioma.

Esto no quiere decir que deba programar en Fortan cuando use Lisp o sumar los valores de una columna en una tabla en una base de datos usando un cursor. Solo que el lenguaje es un detalle de implementación. Uno que puede cambiar los procesos que se necesitan, pero no la necesidad de identificar y crear procesos: al final hay una implementación en el mundo real, con entrada / salida y resultados deseados.

jmoreno
fuente
1

Mi estrategia siempre ha sido centrarme en habilidades puras en lugar de habilidades específicas.

En lugar de aprender la sintaxis especial de Python (o cualquier idioma) para lo que sea que quiera hacer, dedique sus ciclos cerebrales a resolver problemas abstractos, como la mejor manera de resolver cada problema en esa categoría.

De esa manera, sabrá qué hacer sin importar el idioma, y ​​en su mayoría poseerá habilidades atemporales que se pueden usar para programar en cualquier idioma.

Específicamente, evite las herramientas que están llenas de trampas, como MySQL o lenguajes obstinados, como Java, ya que lo que aprenda al usar estas herramientas tendrá una gran proporción de conocimiento específico de la herramienta que seguramente se volverá inútil bastante rápido.

Al contrario de lo que se ha dicho en muchas respuestas, NO escuche a otros programadores, usted es un novato y no hay forma de distinguir lo falso de lo real, por lo que es mejor tomar todo con una cucharada de sal.

Desea cuestionarse todo el tiempo y aceptar solo cuando la solución es rápida, elegante y confiable.

Morg
fuente
1
"NO escuches a otros programadores" , sí, claro. "- ¿Cómo sabría si ha escrito código legible y fácil de mantener? - Su compañero le dice después de revisar el código. Justificación: No puede determinar esto usted mismo porque sabe más como autor que lo que el código dice por sí mismo. Una computadora no puede decirte, por las mismas razones que no puede decir si una pintura es arte o no. Por lo tanto, necesitas otro humano, capaz de mantener el software, para ver lo que has escrito y dar su opinión ... " ( fuente de la cita )
mosquito
@gnat haz lo que quieras. Solo te digo que, dado que la mayoría de los programadores no pueden codificar mierda, sus comentarios son potencialmente dañinos, y debes llevar bolsas y bolsas de sal para lidiar con eso. También creo que "editable y legible por imbéciles" no es una señal de calidad en absoluto. Cree lo que quieres pero no andes -1 solo porque la gente no está de acuerdo con tu visión.
Morg
mi voto indica una evaluación de la calidad de la publicación , no si estoy de acuerdo o en desacuerdo (acuerdo de wrt, prefiero pensar que tiene razón aquí). Cité otra opinión no porque sea opuesta, sino porque tiene una explicación sólida (ver "JUSTIFICACIÓN"). Si puede pensar en una explicación igualmente sólida para respaldar su opinión, considere editar la publicación para agregarla
mosquito
lo que sea. contenido> formulario. mantén tu forma, yo conservaré mi contenido.
Morg
0

Ahí está el enfoque teórico. Aprender sobre cómo funcionan realmente las computadoras bajo la cubierta. Cómo se unen las instrucciones básicas del procesador para hacer que las operaciones y estructuras más complejas que damos por sentado en la programación de alto nivel.

Luego está el enfoque de programación más práctico. El principal punto de fricción que las personas plagadas suelen etiquetar como "no buenos programadores" es que realmente solo saben un idioma. E incluso si conocen a otros, programan en ellos de la misma manera que lo hacen con su lengua materna . Ese es un ciclo que uno debe romper si realmente quieren aprender a programar. La respuesta predeterminada a eso es aprender al menos un lenguaje de cada paradigma de programación. Aprenda un lenguaje OOP, un lenguaje funcional, un lenguaje de script ... etc. Y al aprender no me refiero a aprender la sintaxis . Aprendes un idioma al usarlo para crear algo.

Personalmente, cuando quiero aprender un nuevo idioma, uso los acertijos del Proyecto Euler . Voy a un rompecabezas que ya he resuelto en un lenguaje OOP (como ejemplo) y trato de resolverlo usando uno funcional mientras trato de seguir las mejores prácticas del nuevo lenguaje. Cuando resuelve el mismo problema utilizando dos enfoques fundamentalmente diferentes, no solo ve cuáles son las diferencias reales, sino que también le muestran dónde están las áreas comunes. Estas áreas comunes que comparten todos los idiomas es la programación real , las diferencias son solo diferentes formas de lograrlo.

Se cayó el sistema
fuente
44
No llamaría aprender sobre el comportamiento físico de una computadora un "enfoque teórico", un "enfoque teórico" sería aprender la teoría, leer la tesis de la iglesia y aprender sobre el isomorfismo curry howard, aprender el cálculo lambda y el conceptos básicos de la teoría de números, estos son fundamentos teóricos. No digo que tu respuesta sea correcta o incorrecta, solo digo que me referiría a eso como un enfoque concreto no teórico porque carece de teoría.
Jimmy Hoffa
@JimmyHoffa - ¡Buenos puntos!
Sistema
1
"Cómo se combinan las instrucciones básicas del procesador (...)" parece una idea terrible para los principiantes (OP no dijo que es uno, pero supongamos que por razones de argumento. Enseñaría 'micro optimizaciones' sin realmente enseñar cómo para optimizar (la arquitectura de 3 a 5 etapas puede considerarse un poco desactualizada ...) No me malinterpreten, CA es fascinante, pero la apreciación 'adecuada' requeriría palabras como 'fuera de servicio' y 'multiescalar', y probablemente venga después de una experiencia básica de programación.
Maciej Piechotka
0

Bueno, la mayoría de las cosas que quería decir ya se han dicho. Lo que me gustaría agregar es una analogía muy simple.

Si los lenguajes de programación se consideran meras herramientas, incluso entonces no hay absolutamente ninguna lógica en ser bueno en uno hace que ser bueno en el otro sea un juego de niños.

Solo considera a un grupo de maestros espadachines de renombre, de repente bajó sus espadas y se fue a la batalla con lanzas después de 7 días de entrenamiento. ¿Qué pasaría? Serían masacrados.

Los idiomas a menudo no son difíciles de aprender, pero se necesita paciencia y ejercicio para ser bueno en eso. Además, no hay una forma correcta de aprender a programar.

Aprender una programación es como jugar un juego de rol. A veces usas espadas, a veces lanzas, a veces un escudo. Cada enemigo que matas, obtienes puntos de experiencia. Una vez que tienes suficientes puntos de experiencia, subes de nivel. Ahora dominar una espada no te hará excelente con arcos y flechas. Pero una parte de la experiencia que ganó anteriormente aumentará su resistencia y velocidad.

Aquí hay un par de cosas que quizás quieras hacer al aprender un idioma.

  • Lee sobre el idioma. si suena interesante, pruebe las aplicaciones de hello world usted mismo.
  • Lee algunos tutoriales, trucos, blogs.
  • Crea aplicaciones simples solo por diversión.
  • Prueba diferentes características.
  • Si realmente te gusta, compra algunos libros y / o videos tutoriales.
  • Busca buenas bibliotecas.
  • Busque respuestas, pregunte solo si no puede encontrar las respuestas.
  • Ayude a otros a pedir respuestas (¿dónde mejor que aquí?)
  • Haz algo útil. Hacer una aplicación de calculadora puede ser un buen ejercicio, pero si crea una aplicación de lista de tareas y realmente la usa en su PC / teléfono, la sensación es 100 veces satisfactoria.

Experimente nuevos idiomas, explore nuevas bibliotecas, aprenda nuevos trucos en su tiempo libre. Antes de que te des cuenta, te sorprenderás con tu propia habilidad.

Sayem Shafayet
fuente
0

En mi caso, aprendo cómo programar realmente a través de lo siguiente:

  1. Aprende de los maestros. Escuche podcasts de programación, lea blogs profesionales en su tema de programación de elección, lea / vea maravillosos tutoriales hechos por gurús que se encuentran dispersos por toda la web y, por último, leyendo libros épicos como The Pragmatic Programmer . Este libro tiene muchas gemas de programación que se han acumulado a lo largo de la carrera de los autores. Una forma segura de aprender a codificar realmente es saber cómo lo hacen otros programadores exitosos.
  2. Experiencia haciendo. Leer sobre eso y saber es una cosa, en realidad ponerlo en práctica y hacer que funcione es otra. No hay mejor maestro que experiencia, así que ponte tu gorra de codificación y comienza.
  3. Pregúntale a alguien que sepa. Tal como lo está haciendo ahora, no tenga miedo de preguntar acerca de las mejores prácticas o mejores formas de hacer las cosas de las personas mayores en su equipo, o si tiene la mala suerte de no tener acceso a dichas personas mayores o mentores o gurús, entonces todavía queda el resto de stackexchange e internet para preguntar.

Además, como han mencionado sus comentaristas, no olvide dominar sus herramientas también. Aprender todas las mejores prácticas y las mejores teorías no sirve de nada o se implementará de manera deficiente si no conoce lo suficiente sobre su herramienta, en este caso, un lenguaje de programación.

Maru
fuente
0

Creo que si puedes pensar analíticamente, tienes un buen comienzo.

Aprenda el idioma que desee y trabaje usted mismo a través de una serie de ejemplos, por ejemplo, tal como se presentan en casi todos los libros que enseñan programación.

Luego intenta resolver tus propios problemas. Intenta encontrar diferentes soluciones y compáralas. La velocidad y el uso de la memoria son factores de uso común que importan. Discuta sus soluciones con otros programadores.

Lea el código de otros programadores e intente comprender por qué resolvieron el problema de esta manera.

También debe leer algunos libros sobre algoritmos para obtener una visión general sobre los enfoques estándar. Los problemas nuevos son a menudo modificaciones de problemas viejos.

Mucha práctica y trabajar con código también en equipos lo ayudará a aumentar sus habilidades paso a paso.

Espero que mi opinión responda a su pregunta al menos parcial.

MrSmith42
fuente