Habilidades de pensamiento para ser un buen programador [cerrado]

10

He estado programando durante los últimos 15 años con un título que no es CS. La razón principal por la que me metí en la programación fue que me gustaba aprender cosas nuevas y aplicarlas a mi trabajo. Y pude encontrar y corregir errores de programación y sus causas más rápido que otros. Pero nunca me encuentro como un gurú o un experto, tal vez debido a mi especialización no CS. Y cuando vi grandes programadores, observé que son muy buenos, mucho mejores que yo, por supuesto, para resolver problemas.

Una habilidad que encontré buena a mediados de mi carrera es pensar en los requisitos y las tareas en orden inverso y en abstracto. De esa manera, puedo ver lo que realmente se requiere que haga sin detalles y puedo encontrar rápidamente partes de la solución que ya existen.

Entonces me pregunto si hay otras habilidades de pensamiento para ser un buen programador. He seguido las preguntas y respuestas a continuación y he leído algunos de los libros recomendados allí. Pero realmente no pude elegir buenos métodos directamente aplicables para mi trabajo de programación.

¿Qué libros que no son de programación debe leer un programador para ayudar a desarrollar habilidades de programación / pensamiento?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
fuente

Respuestas:

10

Gracias por los consejos a las preguntas existentes. Sin embargo, las respuestas a esas son bastante diferentes a lo que entiendo que quieres. Te daré algunas sugerencias de mi propia experiencia. Mi propio título es en física, ¿vine al campo con lagunas en cuanto a formalidad, corrección / verificación, análisis de algoritmos, programación dinámica, sistemas de bases de datos y, en gran medida, al principio, selección de estructuras de datos y algoritmos. Las brechas más obvias (p. Ej., Estructuras de datos y algoritmos) cerré temprano, pero todavía leo libros en esa área, para profundizar mi comprensión, ver presentaciones alternativas y refrescar mi memoria. (Tengo alrededor de 40, así que los libros me funcionan :)

Aquí hay una lista de lectura (sin otro orden en particular que no sea el que se les ocurrió).

  1. Perlas de programación (Jon Bentley)
  2. Más perlas de programación (Jon Bentley)
  3. El arte de la programación de computadoras (Donald Knuth)
  4. Algoritmos en C ++ (Robert Sedgewick)
  5. El manual de diseño de algoritmos (Steven Skiena)
  6. La práctica de la programación (Kernighan y Pike)
  7. Elementos de programación (Stepanov)
  8. Cómo resolverlo (Polya)
  9. Estructura e interpretación de programas de computadora (Abelson y Sussman)

También aprendí mucho al escribir código sólido cuando lo leí a mediados de los 90. Pero no está en la lista, ya que en realidad no se relaciona mucho con las habilidades de pensamiento como tal (se trata más de diseñar API para minimizar la posibilidad de un uso incorrecto accidental, o al menos esa fue mi principal conclusión).

También aprendí mucho de Gödel, Escher, Bach (Hofstadter) cuando era adolescente, pero ya se menciona en las respuestas a las preguntas que ya señaló. Es un libro para leer por placer, en lugar de desarrollar directamente las habilidades informáticas.

Trabajo con una gran cantidad de programadores talentosos, y casi universalmente son fanáticos de Programming Pearls . Ciertamente, deseo que más de los candidatos que entreviste hayan leído el capítulo 4 de ese libro.

James Youngman
fuente
4

Primero; para cualquier disciplina, siempre habrá alguien mucho mejor en eso de alguna manera. No te preocupes por esa parte.

Entonces; un título de CS es bueno y todo eso, y el conocimiento teórico que te brinda es ciertamente útil, pero de ninguna manera es una indicación de que alguien es un buen programador. Algunos de los mejores programadores son autodidactas, y créanme, el mundo está lleno de graduados de CS que no pudieron programar para salir de una bolsa de papel mojada. Así que tampoco te preocupes por esa parte.

En cuanto a lo que se necesita para convertirse en un buen programador: creo que dos cosas son esenciales. Una es que debe ser capaz de abordar los problemas de una manera estrictamente formal y pensar en un cierto nivel de abstracción. Si comprende los punteros y la recursividad, lo más probable es que sea bueno en este aspecto. El otro es dedicación y persistencia. Al igual que cualquier otro oficio, la programación requiere decenas de miles de horas de práctica dedicada y enfocada para dominar, no sucede durante la noche. Se necesitan al menos diez años para lograr el dominio, de una forma u otra. Si eres apasionado, pasar las horas, concentrarte y encontrar nuevos desafíos será fácil; si no lo eres, supongo que todavía es posible, pero no será un viaje agradable.

tdammers
fuente
2

Recuerde que cada vez que comience a aprender el lenguaje de programación Primero aprenda el concepto y, a la vez, pruebe lo que significa hacerlo prácticamente una vez que haga este ejercicio, no olvidará los conceptos y su uso.

A continuación, la conocida "práctica perfecciona" y también se aplica aquí en programación. Cuanto más juegues con el código, ejecutes el código, leas el código existente para corregirlo, no serás bueno sino un programador gr8.

Chitrank Dixit
fuente
0

Hay dos libros que no son de programación que creo que son cruciales.

La primera es "Lady or the Tiger", de Raymond Smullyan. Este es un gran conjunto de acertijos lógicos que incluye a escondidas una especie de recorrido por la teoría de autómatas. Cosas ingeniosas.

El segundo es "Godel, Escher, Bach: An Eternal Golden Braid" de Douglas Hofstadter, que te hace pensar en la recursión y la teoría del lenguaje.

Si desea buenos hábitos para un novato, lea "Patrones de aprendizaje" de Hoover y "El nuevo manual de supervivencia para programadores" de Carter. Ambos libros hablan sobre cómo expandir sus habilidades y cómo expandir su carrera. Adoptan diferentes enfoques, pero funcionan bien juntos.

filosodad
fuente
0

Me interesa cómo evalúas la habilidad de otros programadores.

Creo que el conocimiento específico y aplicable crea resultados mucho más impresionantes que las habilidades generales. Si ya tiene mucho contexto, y tal vez haya visto problemas similares antes, puede encontrar la causa de un problema muy rápidamente. Si ya sabe cómo usar un conjunto de herramientas aplicables, puede crear soluciones muy rápidamente. Si aún no tiene ese conocimiento, pero tiene las habilidades necesarias, le llevará más tiempo adquirir el conocimiento que necesita. Si ese es el caso, está tardando más en cubrir más distancia, lo que no necesariamente significa que sea más lento.

Por supuesto, si puede acumular conocimiento y aprender a usar herramientas que lo ayudarán más adelante, esto le dará una ventaja. Encuentro que aprender un poco sobre una amplia variedad de temas ayuda aquí, ya que terminan superponiéndose más de lo que esperaría, y solo saber dónde buscar la información que necesita puede ahorrar mucho tiempo. Pero tal vez solo soy yo.

Vincent Povirk
fuente
0

Le gusta aprender cosas nuevas y puede corregir los errores rápidamente. Significa que tienes los dos elementos clave para convertirte en gurú: entusiasmo y habilidad. Pero cree que nunca se encuentra un experto, tal vez necesita dos cosas más: concentración y tiempo. Por ejemplo, cuando Linus Torvalds lanzó Linux por primera vez en 1991, nadie lo consideraba un gurú. Todavía está trabajando en Linux todos los días y hoy en día puede ver su registro de fusión desde el repositorio Git del kernel de Linux. Su enfoque lo convierte en el gurú más famoso en el campo de Linux. El tiempo es un concepto abstracto, significa mantenerse actualizado, ganar experiencia a través de la práctica constante, compartir su conocimiento con otras personas y mejorar con una mirada retrospectiva.

Tengo la misma situación contigo. He estado programando durante 15 años con un título que no es CS (grado EE), y siempre estoy confundido por mi gran brecha con el gurú en mi campo. Pero tengo el sueño de convertirme en gurú y comencé a asistir a un proyecto de código abierto. Las habilidades de pensamiento provienen de la práctica y la experiencia. Algunos libros pueden ser útiles, pero su significado es principalmente instructivo. Las habilidades de pensamiento que te pertenecen son de tu propia experiencia. ¡Comencemos de ahora en adelante!

Aprende todos los dias
fuente