¿Cómo Barry Rountree mejoró sus habilidades de programación y resolución de problemas?

Oh cielos, soy casi semi-famoso de internet. Ok, aquí va …

¿Cómo aprendiste a programar (By Books?) Si así lo hiciste, leíste cover to cover?

Así que esto es a finales de los ochenta. La Universidad de Ohio tiene un montón de terminales VAX de pantalla verde conectadas a BITNET y tres yardas de páginas de manual impresas encadenadas a la pared posterior de esa habitación. Las computadoras con Windows no están en una red, y un navegador llamado Mosaic (que se convirtió en Netscape Navigator, que se convirtió en Mozilla, que se convirtió en Firefox (creo)) está empezando a salpicar un poco. Para seguir a USENET, imprimo los mensajes de un día en papel de barra verde y llevo los resultados a la barra de enfrente (a pesar de ser menor de edad) y no leo mucho sobre nada importante. Soy estudiante de teatro, y mi asesor no sabe cómo conseguirme una cuenta, por lo que me permite usar la suya. Era un mundo diferente….

Soy bueno con las macros de hoja de cálculo, comenzando con VisiCalc y más tarde con Lotus 1–2–3 y Excel. La primera programación significativa que hice fue escribir el texto completo del Quarto de Richard III de Shakespeare de 1597 en un procesador de textos, descargarlo en una hoja de cálculo y realizar un análisis estadístico del uso de palabras por personaje y escena. Por ejemplo: Richard usa “y”, “o” y “no” en cualquier acto, excepto en el acto 5, donde deja de usar la palabra “o”. ¿Se ha quedado sin opciones?

Para lograr esto, estaba escribiendo macros de hoja de cálculo auto-modificables. Porque eso parecía lo más obvio. No sabía cuánto más difícil había hecho la depuración hasta muchos años después.

Recientemente había terminado el Caos de James Gleick, y él había puesto una fórmula para generar fractales en una nota a pie de página. Se veían bien, y quería un programa que los dibujara en mi pantalla. Entre los manuales que venían con mi copia de QuickC para Windows de Microsoft y un libro de gran tamaño sobre programación de CGA, EGA y VGA, logré hacer precisamente eso. Fue lento Así que me compré un libro sobre programación en lenguaje ensamblador y lo reescribí. Todavía puedo recordar la primera vez que se ejecutó correctamente: en lugar de pintarse lentamente en la pantalla de un píxel a la vez, la imagen completa apareció en lo que parecía ser un solo ciclo de actualización.

Y con ese éxito, solicité una maestría en administración de sistemas y redes en la Florida State University, me gradué y me uní a una empresa de biotecnología con uno de mis compañeros de estudios y, mientras estaba en el trabajo, finalmente aprendí a programar adecuadamente para hacer robótica de laboratorio. .

¿Y qué debes quitar de toda esa prosa? No aprendo idiomas, y no leo libros en toda su extensión. Comienzo con un proyecto y luego aprendo lo que necesito para poder realizar el proyecto. Dicho esto, he leído un puñado de libros de programación de principio a fin, varias veces. Son un poco anticuados, por supuesto, pero los considero clásicos.

  • Código completo: Un manual práctico de construcción de software, Segunda edición: Steve McConnell
  • Perlas de programación (2ª edición): Jon Bentley
  • Cómo no programar en C ++: 111 programas rotos y 3 que funcionan, o por qué 2 + 2 = 5986: Steve Oualline
  • Programación Experto C: Profundos Secretos C: Peter van der Linden
  • Peopleware: Proyectos productivos y equipos (3ª edición): Tom DeMarco, Tim Lister
  • La visualización de la información cuantitativa: Edward R. Tufte

¿Cómo mejoraste las habilidades de resolución de problemas?

Toma muchas clases de filosofía, teatro, escritura creativa y ciencias políticas. (También podría ser periodismo, antropología, teoría musical, danza y matemáticas).

Pensamos en términos de metáforas y analogías. Hay muchos problemas que pueden resolverse utilizando las metáforas y analogías que se encuentran en los planes de estudio estándar de ciencias de la computación, y en su mayor parte ya se han resuelto (y los que quedan pueden ser resueltos por cualquier nuevo graduado). Los problemas que quedan necesitan un nuevo conjunto de analogías, y es mucho más fácil construir esas nuevas analogías si está familiarizado con las analogías que se crearon para resolver problemas en otros campos.

Es difícil de creer en lo abstracto, pero si tomas varios semestres de literatura comparativa, verás cosas que la mayoría de los científicos informáticos no pueden ver. No es que abras tu copia de Siddhartha y encuentres un algoritmo; es más que tiene diferentes hábitos de pensamiento, está más dispuesto a identificar suposiciones no formuladas y cuestionarlas, y está dispuesto a recibir soluciones absurdas. Puede ser que solo el 1% de sus soluciones sean mejores que las de nivel de reemplazo, pero eso es más que suficiente para construir una carrera.


¿Cuáles son los consejos que darías para ser un ingeniero con [gran] habilidad para resolver problemas?

Tome clases en cualquier cosa que no sea su especialidad de ingeniería, no en línea, sino en clases reales en las que sus profesores y estudiantes se enfrentarán a sus ideas. Si es posible, tome clases de pregrado o posgrado de nivel superior donde todos los demás en la sala saben más que usted (y ellos lo saben): no está ahí para parecer inteligente, está allí para aprender y se va tener que trabajar especialmente duro para ponerse al día. Esa lucha para dar sentido a lo que estás aprendiendo es el mejor uso posible de tu tiempo. Repítelo cuando puedas.

Una vez que haya tenido algunas clases avanzadas de filosofía (digamos), sabrá lo suficiente como para sacar mucho de la lectura por su cuenta. Por ejemplo, solo un puñado de clases de ciencias políticas durante dos décadas me permitieron disfrutar escuchando los argumentos orales de la Corte Suprema de los EE. UU. (Oyez.org rocks), y escuché cientos de horas durante mi viaje. Eso no me ha ayudado a resolver problemas de codificación, pero ciertamente me ha dado una perspectiva diferente sobre los problemas de las personas (y los problemas más difíciles que enfrentará como ingeniero tienen que ver con persuadir a las personas para que vengan a su punto de vista).

Si está en un punto en el que ha terminado de tomar clases, comience a dar clases en su área de especialización. Encontrarás exactamente la misma lucha para aprender.


Una última palabra de advertencia: nunca he tratado de ser “genial” en nada. Hago cosas que me parecen interesantes, y eso me llevó a una carrera interesante (si no me gusta). Si desea ser un gran ingeniero (por lo que sea que lo defina), puede comenzar a seguir a las personas que se proponen ser grandes ingenieros (y lo lograron). Optimicé para no aburrirme; eso no necesariamente te lleva a donde quieres ir.

Barry tiene un estudio único de pregrado en teatro y artes, y luego en redes informáticas y, finalmente, en el doctorado en ciencias informáticas. Necesita haber practicado la programación. Esto incluye el diseño e implementación de programas y aplicaciones avanzadas en sistemas operativos y compiladores. Necesita haber aprendido muchos lenguajes de programación y alguna teoría básica. Todo esto da una experiencia bien redondeada en la capacidad de programación. Él, por supuesto, se graduó y ahora investiga en el Laboratorio Nacional Lawrence Livermore. Él es un científico informático de investigación.