¿Construye la lógica de su solución en sintaxis o en un modelo mental más rápido y eficiente?

7

Soy un novato, estudiando programación y me encontré con esta pregunta hoy:

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

Un comentarista, ChaosPandion, hizo la pregunta si el programador piensa en sintaxis o en un modelo mental más rápido .

Mientras escribo una solución, siempre pensaré en la cantidad de bucles o condiciones que se utilizarán (por ejemplo). ¿Lo estoy haciendo mal? Si es así, ¿cómo puedo corregirme y qué debo aprender?

    
pregunta Vignesh Palani 16.10.2013 - 08:16

3 respuestas

8

La manera en que un programador piensa sobre un problema (y una solución) depende en gran medida de cómo piensan sobre las cosas en general, el problema en sí y su nivel de experiencia en particular. Vamos a revisarlos en orden:

Cómo piensa la gente en general

Diferentes personas aprenden, y piensan diferente. Personalmente, soy un pensador extremadamente visual y tiendo a usar mucha intuición sobre cómo "encajan" las cosas. Eso es literalmente porque tengo un modelo mental para diferentes patrones, módulos y dependencias dentro del código. Cuando no puedo organizarlos en una forma agradable, sé que la solución no es adecuada.

Otros son muy lógicos, tienen conjuntos de hechos que buscan reducir en un resultado. Sin embargo, otros están ligados al aprendizaje verbal o auditivo. Necesitan escuchar un problema descrito para entender las relaciones y enfatizarlo. Y, por supuesto, nadie es "solo" visual o "simplemente" verbal. Se mezclan y combinan en diferentes niveles.

El problema en sí mismo

Diferentes problemas requieren diferentes soluciones. Cuando estoy diseñando una arquitectura para manejar miles de transacciones por segundo, pienso en ello de manera diferente a como intento hacer un algoritmo de programación. Tienen diferentes necesidades, y el uso de diferentes enfoques de resolución de problemas me permite ser más efectivo que usar el mismo enfoque para todo.

El nivel de experiencia del programador

Cuando los principiantes comienzan, conocen la sintaxis y (si tienen suerte) tienen un buen conocimiento del concepto de variables. Cuando se les presente un problema de programación, lo abordarán con estos conceptos, porque eso es lo que saben.

A medida que ganan experiencia ( especialmente con diferentes lenguajes / paradigmas ), comienzan a abstraer la sintaxis concreta en conceptos. En lugar de pensar "oh, haz una clase que herede de XYZ", pueden pensar "Necesito una especie de polimorfismo aquí". Los patrones de diseño (cuando se usan bien) son el tipo de cosa que se extiende más allá para que el programador pueda pensar en herramientas que abarquen franjas más amplias de sintaxis.

Esta es la razón principal por la que "aprender una variedad de paradigmas del lenguaje de programación" es una sugerencia común en el desarrollo de los programadores. También es la razón por la que C ++ ha caído en desgracia como primer lenguaje de programación (en algunos círculos): pasas demasiado tiempo pensando en la sintaxis y no aprendiendo a resolver problemas.

( tl; dr ) En general, para la mayoría de los problemas, los programadores pasan de pensar en sintaxis a pensar en su propio modelo mental a medida que ganan más experiencia.

    
respondido por el Telastyn 16.10.2013 - 16:14
3

Su afirmación de que a veces piensa en el "número de bucles o condición que se utilizará" es en realidad un punto de discusión particularmente bueno.

Observe este código aquí, donde tiene que pensar explícitamente sobre la cantidad de bucles y la condición:

for(i=0; i<data.size(); ++i) { action_func(data[i]); }

y este código aquí, que logra el mismo resultado, donde no:

std::foreach(data.begin(), data.end(), action_func);

Mi interpretación de lo que es un modelo mental de programación eficiente / más rápido es que alguien que tiene uno, no agrega complejidad cuando no es necesaria y ve directamente el problema central y no los periféricos. Esto es importante porque la programación consiste en ver capas de abstracción desde el nivel más alto al más bajo, se trata de trabajar verticalmente en una pila a través de estas capas, sin complicar las cosas horizontalmente. Esa es la única manera de lograr la escritura del código de la aplicación que realmente funciona en un plazo razonable. Embellecimiento dentro de una capa viene más tarde. Think Agile: obtenga de A a B (por ejemplo, la GUI del cliente a la base de datos del lado del servidor) lo más rápido posible.

Por lo tanto, en el ejemplo anterior, no es necesario hablar de bucles o condiciones. No es lo que se intenta lograr, por lo que no se preocupa por eso y utiliza las construcciones de programación a su disposición para evitar ese problema ( y toda una clase de errores asociados con él). Tal vez más adelante, si action_func se convierte en algo más complejo, es posible que necesite contar explícitamente el bucle. La programación consiste en expresar lo que quieres hacer de la manera más concisa. En muchos sentidos, no te importa la sintaxis: el compilador / intérprete te ayudará a hacerlo bien. Te importa más la exactitud conceptual de lo que estás tratando de hacer (entonces simplemente buscas en SE para saber cómo escribir eso con la sintaxis correcta :)

En cuanto a la pregunta, ¿qué aprender? Mi consejo es aprender técnicas de programación funcional / aprender un lenguaje funcional donde haya una clara separación entre el algoritmo y los efectos secundarios, y la mayoría de los conceptos que aprenderá tendrán kilometraje en todos los lenguajes de programación principales.

    
respondido por el Benedict 16.10.2013 - 16:53
0

Solo sigue programando. Teniendo en cuenta la práctica suficiente y diversa, se dará cuenta un día (puede ser dentro de un año), que está en la nueva altura y que puede "programar todo".

Es difícil decirlo sobre los programadores en general, pero no creo que esté "pensando en sintaxis". Uno simplemente traduce el pensamiento en sintaxis, que generalmente se convierte en un habbit. Es por eso que los lenguajes dinámicos y expresivos como Python son tan populares: permiten escribir a la velocidad del pensamiento.

Así que sí, con la práctica llegarás a un modelo mental más rápido que, con aún más práctica, abarcará aún más entidades a la vez.

No te olvides de leer alguna teoría sobre estructuras de datos y algoritmos, ya que, aunque no es crítico para obtener habilidades de programación, agrega diversidad a tu pensamiento.

La sintaxis es lo que transmite la semántica. Y el programador se ocupa de la semántica de la solución, siendo la sintaxis un medio para decir la semántica al compilador / intérprete de la computadora.

Es posible que deba contar el número de bucles si está utilizando demasiados bucles anidados. Pero analizar la complejidad de un algoritmo es una teoría propia.

También, en mi humilde opinión, la programación es una habilidad como andar en bicicleta: una vez aprendida (¡notarás el salto al nuevo nivel!), está ahí contigo. Hay diferentes paradigmas y enfoques (imperativo, funcional, lógico, lo que sea), pero la habilidad central los abarca bien, y no es diferente al núcleo del pensamiento matemático, es decir, la capacidad para formalizar y operar con simbolos.

    
respondido por el Roman Susi 16.10.2013 - 15:43

Lea otras preguntas en las etiquetas