En primer lugar, esta no es la pregunta genérica 'hazme un mejor programador', aunque el resultado de hacer esta pregunta pueda parecer similar. En los programadores, SE, he leído y he visto que se cierran aquí , aquí , aquí , aquí y aquí .
Todos sabemos que hay una multitud de sugerencias genéricas para perfeccionar sus habilidades de programación (por ejemplo, leer SO, leer libros recomendados, seguir blogs, involucrarse en proyectos de código abierto, etc.). Esto no es lo que busco.
También reconozco el número de lectores activos en este sitio web y espero que funcione a mi favor dando algunas respuestas excelentes. Al leer la correspondencia aquí, parece haber una gran cantidad de personas con experiencia que trabajan o han trabajado en campos relacionados con la programación. Y la mayoría de ustedes pueden transmitir pensamientos de una manera elocuente y concisa.
Recientemente he notado la distinción entre alguien que es capaz de programar y un programador que realmente puede pensar . Me niego a creer que para ser buenos programadores, simplemente nos sometemos a una vida de comportamiento esponjoso (es decir, absorber todo lo relacionado con nuestro campo leyendo, escuchando, mirando, etc.). Incluso afirmaría que simplemente conociendo cada concepto de programación que le permite resolver el problema X más rápido que todos los que lo rodean, si no puede pensar , se está limitando enormemente: es solo un robot rápido.
Me gusta creer que hay una cara completamente diferente de ser un gran programador que no tiene relación con cuánto sabes sobre programación, pero es qué tan bien puedes entrelazar nuevos conceptos y aplicarlos a tu profesión de programación o pasatiempo. No he visto a nadie profundizar o abordar esta faceta de la mente humana y la programación. (Sí, también es posible que no haya buscado lo suficiente, lo siento si ese es el caso).
Entonces, para cualquiera que haya pasado algún tiempo pensando en lo que he mencionado anteriormente, o tal vez todos estén aquí porque estoy un poco retrasado en mi desarrollo personal / profesional, ¿cuáles son sus sugerencias para aprender a pensar? Además de la lectura habitual, ¿qué más has hecho para ser mejor que las otras personas en tu / nuestro campo?
Respuestas:
Mis sugerencias para aprender a pensar:
Y lo más importante, el lenguaje determina lo que no podemos pensar.
fuente
Desde mi experiencia, todo se reduce a dos cosas:
Más allá de esto, todos son bastante diferentes en cuanto a cómo piensan acerca de la programación o aprenden nuevas habilidades de programación. Te sugiero que sigas probando cosas nuevas y que mantengas lo que funciona bien para ti.
fuente
Práctica. Práctica. Práctica.
En serio, la actividad mental (es decir, pensar) es como la actividad física. Cuanto más lo hagas, mejor podrás hacerlo. (De hecho, la actividad física también implica un tipo de actividad mental. Los mejores deportistas no solo tienen los músculos en el lugar correcto ...)
Entonces, ¿cómo practicarías (efectivamente) el pensamiento?
(Aquí estoy generalizando de otra cosa ...)
Creo que identificaría los problemas de pensamiento que le resulten difíciles (pero no imposibles) y tratará de resolverlos (piénselos bien) y más como ellos.
fuente
Te pueden interesar las siguientes dos cosas:
El flujo
Mihály Csíkszentmihályi , profesora de psicología húngara, introdujo el concepto del flujo .
Tengo la suerte de poder entrar en el flujo todos los días utilizando una técnica antigua que aprendo de mi aplicación de GTD, que es la próxima acción .
Puedo decirte que realmente hace la diferencia. Cuando estoy en el flujo, produzco mayor calidad y más rápido que cuando no estoy en ese estado. Estoy totalmente centrado en lo que hago y, por lo tanto, pienso de manera más efectiva.
Atención plena
Hace un tiempo hice una pregunta sobre la meditación porque me preocupaba el hecho de que la meditación podría disminuir mis habilidades de programación (y creativas).
Acabo de comenzar el entrenamiento del método Jon Kabat-Zinn , por lo que es demasiado pronto para compartir con ustedes experiencias extensas, pero de los pocos que aprendo hasta ahora puedo decirles que esto es probablemente algo que querrán hacer.
fuente
Siempre he creído que los buenos ingenieros nacen, no se hacen.
Necesita la mente preparada para ello, la mente lógica, analítica y deductiva, combinada con la tenacidad y la curiosidad necesarias para obtener una visión general y una visión estructural de un problema de manera eficiente y caminar rápidamente de A a B, enrutando su mente a través de la solución.
Hay mucha investigación que sugiere que esta habilidad se ve enormemente impulsada por la buena exposición temprana a tales cosas, la música también ayuda. Después de cierto punto en el tiempo, tus mapas mentales están bastante conectados. No en términos de lo que piensas, sino de cómo piensas.
¿Puedes aprender a pensar como adulto? Bueno, ciertamente se te pueden enseñar técnicas para resolver problemas, pero luego tienes algoritmos que seguir, puedes convertirte en un "robot muy rápido", como expresaste elocuentemente. La comprensión intuitiva es probablemente innata.
Esto de ninguna manera se limita a nuestra profesión, muchos conjuntos de habilidades están dominados por la habilidad innata, en lugar de la respuesta adquirida. Puede que la gente no quiera que eso sea cierto, pero lo más probable es que lo sea.
fuente
Encuentre un foro en línea sobre algo que le apasione. Algo que tiene algún tipo de comunidad. Preferiblemente no programación: los foros de programación suelen estar más orientados a la solución que a la discusión. Toma una posición. Defiéndelo. Usa argumentos. También puedes bloguear, pero tener un oponente es mejor. El punto es tener una comunicación significativa y escrita sobre algo con alguien. Donde intercambias piezas de texto algo más grandes.
Aprenderá a comunicar sus ideas y argumentarlas. Dado que tendrá que defender sus puntos de vista, tendrá que apoyarlos con hechos. Tendrá que pensar en algo, articular su posición y apoyarla; tal vez incluso cambiarlo.
Luego, aproveche esa capacidad para analizar el problema y sintetizar la opinión y aplicarla a cualquier cosa. Incluso la programación.
fuente
Una cosa en la que pienso es que hay que ver las cosas como sistemas, y todos los sistemas están relacionados. Todos y cada uno en el universo. La humanidad, los planetas, la galaxia, las plantas, la luz solar, la fotosíntesis, los insectos, las rocas, los océanos, todos los sistemas que interactúan. Asimismo, en el tiempo, ciclos: nacimiento, crecimiento, decadencia, muerte, de insectos, personas, civilizaciones, cadenas montañosas, sistemas estelares. La lucha sin fin por la energía. Todos los sistemas
Este es el Estudio de la Vida y la Naturaleza en el gran sentido del Estudio. Ver todas las cosas relacionadas, ver todas las cosas interactuando. Concéntrese en esto cuando vea la puesta de sol y sienta la profundidad de las fuerzas de gravedad que nos hacen girar alrededor del Sol, nos empujan hacia la superficie del planeta y la luz solar que se enrojece antes de entrar en su retina a 300,000,000 metros por segundo y hacer imágenes en tu cerebro de primates.
Cuando comienzas a pensar en eso, en cómo todo está relacionado, en cómo el precio del oro y el trabajo esclavo y las tormentas en todo el Pacífico y los complejos industriales en Japón están relacionados, y te tomas el tiempo, realmente toma el tiempo para sentarte y piense en todo esto, entonces su "músculo" pensante realmente se flexionará y crecerá.
Ahora, mucho de eso estará por debajo del umbral de expresividad, pero no dejes que eso te detenga. Tu cerebro es más poderoso que la computadora más poderosa. Empujalo. No creo que sea posible overclockearlo.
Recuerdo una imagen en blanco y negro que mostraba a Albert Einstein descansando en una silla de jardín en la playa mirando el océano. El subtítulo decía: "Aquí se sienta Albert Einstein. Con su cerebro".
El próximo desafío es poder comunicar la complejidad y la interdependencia de todas las cosas de una manera simple. Esto te dará algo que hacer hasta que seas muy viejo.
fuente
Un enfoque es la práctica deliberada .
La repetición simple no conduce a ninguna adquisición de habilidades: debe ser introspectivo, evaluar su desempeño e identificar formas de hacer las cosas mejor.
Una ilustración: un pariente cercano mío compite en el deporte del tiro con pistola. Durante el entrenamiento, se concentra mucho en revisar cada disparo, enfocándose en los pasos que van correctamente. Contrarrestando intuitivamente, no se enfoca mucho en las tomas deficientes, porque repetir (ensayar) el error lo refuerza.
Simplemente disparar 100 disparos por el rango no logra nada. La práctica deliberada de disparar 20 tiros reforzará los buenos hábitos y conducirá a un mejor rendimiento.
Lo mismo se aplica a la programación: piense en lo que hace. No lo haga mensualmente, semanalmente o diariamente, hágalo momento a momento, acción por acción.
Y así ...
fuente
Ve a hurgar en algo que amas hasta que encuentres una ventaja.
Respiracion profunda,
Da un paso ...
...
... Dile a otros lo que has encontrado.
fuente
Entonces quieres pensar
Muchas sugerencias en su mayoría excelentes de otros carteles sobre cómo pensar o cómo aprender a pensar: el flujo, la atención plena, las matemáticas, la pasión, la práctica ... por lo que no iré allí, cubierto.
Pero ninguno sobre por qué. ¿Cuál es el propósito?
Personalmente, he llegado a comprender que antes de que puedas pensar necesitas saber por qué.
Lo mejor que puedes hacer es escuchar y mirar. (Tomo ambos como una unidad, no puedes separarlos)
La única forma de mejorar en la programación, ya sea reuniendo requisitos, transformando esos requisitos en especificaciones detalladas del sistema, haciendo coincidir esto con los documentos de diseño, implementando el código, depurando su querida vida, ya sea que omita alguna o todas esas etapas, Ya sea que tenga cinco minutos para encontrar una solución o 20 años, debe escuchar y buscar.
Escuche lo que el usuario quiere, escuche lo que el usuario le dice que sucedió, escuche a la persona de soporte que le dice que vio. Escucha. Escucha incluso si no tiene sentido. Escucha incluso si estás convencido de que están tan equivocados. Escucha y no juzgues.
Busque pistas, no buscando sino abriendo los ojos. Mira la realidad. No puede comenzar a buscar respuestas antes de mirar la escena del crimen. No puede encontrar una solución hasta que haya probado la falla.
Un solo ejemplo de mi experiencia(en resolución de errores, pero podría adaptarse a cualquier cosa realmente). Por razones obvias (legales y de otro tipo) mantendré los detalles jugosos fuera de esto. En un sistema crítico de seguridad, un operador reportó una falla grave. Algunos dispositivos de rastreo geográfico realmente perdieron el rastreo cuando 'no' debió hacerlo, con un impacto potencial en las vidas (este 'debería' fue el verdadero error y detuvo nuestras investigaciones durante demasiado tiempo). Afortunadamente, aunque esto se encontró semanas después casi por casualidad, ya que había otro sistema en funcionamiento en una ubicación remota para el cual otro operador vino a probar que el seguimiento no se había perdido en ese sistema. Esto nos hizo pensar de nuevo. Nuestro principal proveedor de software no nos creyó ni un segundo, así que tuvimos que salir y probar el asunto. La única forma era a través del injerto: construyendo una simulación para replicar la situación operativa exacta. Tuvimos que filmar la prueba para que el proveedor nos creyera. Finalmente, la simulación arrojó información más allá de nuestras esperanzas y nos llevó a comprender todo el problema. No tardó mucho en arreglarlo después de eso.
La única forma de llegar hasta el final fue conectando lógicamente un sistema remoto con otro haciendo un trabajo similar pero no el mismo trabajo. Esa es la búsqueda de pistas (Mira). Esto solo fue posible al confiar en el informe único y no descartarlo como una falla aleatoria en el sistema (Listen), y luego escuchar nuevamente el segundo informe que contradecía el primero (Listen).
Entonces, cuando tiene las pistas correctas (después de haber escuchado y mirado), definido el área del problema, entendido la causa raíz o los principios clave, puede pensar primero en soluciones para una mayor comprensión (prueba y error, simulaciones, demostración, prueba de concepto, maquetas, versiones alfa, beta) y, finalmente, ofrecen una solución sólida (que a veces se puede mejorar aún más después de una operación real).
Para poder escuchar y mirar de este modo se necesita una mente abierta, confianza y dedicación absoluta a sus objetivos. Este es el combustible que necesita pensar, o más al punto para que su pensamiento se centre en el objetivo correcto (a menudo, el problema no es la incapacidad para pensar, sino la falta de un objetivo bien definido para ejercitar su mente).
fuente
Creo que necesitas hacer la distinción entre diferentes tipos de pensamiento.
Pensamiento creativo: cómo generar nuevas ideas, soluciones innovadoras y resultados inesperados. Hay toda una ciencia detrás de esto, busca a Edward de Bono, técnicas de creatividad, etc. No muchos programadores miran en esta área.
Pensamiento analítico: con esto quiero decir proceso científico. Mire las entradas, salidas, mida lo que es importante, llegue a conclusiones lógicas. La mayoría de los desarrolladores están familiarizados con la técnica científica pero nunca la usan realmente. Hazlo!
Pensamiento crítico: creo que esto es más filosofía. Retroceda y mire el panorama general, revise sus suposiciones, ¿realmente hace lo que dice que son sus valores? Estudie filosofía hay un montón de grandes autores e ideas por ahí.
fuente
Las matemáticas le enseñan a uno a pensar. La aplicación requiere creatividad y experiencia.
Buena idea En términos generales, los requisitos de "grandeza" dependen de su definición personal de "grandeza" ... y han cambiado con el tiempo. Hoy en día, el éxito del proyecto consiste en poder unir conceptos rápidamente y sin profundizar en todos los detalles esenciales. El éxito personal podría definirse como el dominio de C # como Jon Skeet.
Leer codificador en el trabajo . Codificadores mucho más experimentados que los que discuto en detalle.
fuente
Trabaja en la aplicación de ideas y conceptos de áreas aparentemente no relacionadas. Para mí, la brillantez del iPod no fue la ingeniería detrás de hacer un gran reproductor de MP3, sino ayudar a resolver un gran problema que la industria del entretenimiento musical tenía con la música pirateada y el modelo de CD / Álbum de vender música. Jobs probablemente aplicó más de lo que aprendió en Pixar al tratar con la industria del cine. Sabía cuál era el verdadero problema.
fuente