El autor de Stifflog tuvo una buena idea: armó una serie de 10 preguntas, y se las envió por email a varios de los más grandes programadores del mundo.
La sorpresa fue grata cuando empezaron a responder y al final quedo una lista de 10 preguntas a 9 grandes programadores. El resultado es una excelente entrevista a nueve de los mejores programadores de la actualidad. A continuación Linus Torvalds, Bjarne Stroustrup, James Gosling y otros grandes nos cuentan sobre sus inicios, el rol de la universidad en el desarrollo profesional, su visión de un «buen desarrollador», libros y hasta música favorita.
Lista de los 9 programadores que respondieron:
- Linus Torvalds – Creador de Linux y GIT, no necesita presentación.
- Dave Thomas – Autor de “El programador pragmático”, “Programación en Ruby” y otros grandes libros de programación.
- David Heinemeier Hansson – Creador de Rails Framework(framework web), escritor y conductor de autos de carreras. Autor del weblog Loud Thinking.
- Steve Yegge – Uno de los menos conocidos del grupo, pero que tiene respuestas muy interesantes. Programador y blogger. Tiene unas 2 decadas de experiencia en esta industria.
- Peter Norvig – Director de Investigación en Google, autor de varios libros importantes de inteligencia artificial. Pueden visitar su página principal.
- Guido Van Rossum – Creador del lenguaje Python.
- Bjarne Stroustrup – Creador de C++. Pueden visitar su página principal.
- James Gosling – Creador del lenguaje Java.
- Tim Bray – Uno de los autores de la especificación de XML y Atom. Publica en su blog ongoing.
1 – ¿Cómo aprendió a programar? ¿Las escuelas le resultaron de alguna utilidad? ¿O acaso ni siquiera se molestó en terminarla?
Steve Yegge: Aprendí por mi cuenta a programar en una calculadora HP usando el lenguaje de pila de notación polaca inversa (RPN) cuando tenía 17 años. Había intentado aprender a programar antes, pero nunca terminaba de “captar” el concepto. Las calculadoras científicas HP 28c y 48g eran bastante poderosas y tenían excelente documentación. Escribí un visualizador de mallas 3D para la 48g – tenía un libro de gráficos 3D y muy laboriosamente logré traducir un ejemplo desde Pascal al lenguaje de pila RPN. Fue muy inspirador verlo funcionar. Luego compré una PC y Turbo Pascal, y comencé a estudiar programación con ganas. Ya programaba bastante bien cuando ingresé a la universidad para el curso de Ciencias de la Computación.Fui a la Universidad de Washington y conseguí un título terciario en Ciencias de la Computación. Definitivamente valió la apena, y le recomiendo a todos los programadores que consigan un título en sistemas si pueden.
Linus Torvalds: No aprendí a programar en la escuela, sino por mi cuenta leyendo libros y practicando (inicialmente en una Commodore VIC-20, más tarde en una Sinclair QL).Dicho esto, creo que en especial la Universidad me resultó muy útil. En vez de ir a una universidad de ingeniería, fui a la Universidad de Helsinki, que es bastante teórica, así que la enseñanza no se centra mucho en la programación (que era una pequeña parte, y de todas formas terminé haciendolo “por otro lado”), sino que la mayoría de los cursos se enfocaban en los conceptos fundamentales y en cosas como análisis de complejidad.Si bien puede parecer aburrido e incluso una pérdida de tiempo, creo que fue útil y lo disfruté la mayor parte del tiempo. Y probablemente soy un mejor programador gracias a eso.
David Heinemeier Hansson: Aprendí a programar al crear mi primer página web en HTML. Después quise crear algunas partes dinámicas y elegí primero ASP, luego PHP. Luego de que aprendí a programar, comencé a estudiar a la vez una carrera de Ciencias de la Computación y Administración de Empresas.
Peter Norvig: Hice cursos en la secundaria y en la universidad, pero siempre sentí que aprendí más por mi cuenta.
Dave Thomas: Durante la secundaria tomé clases sobre computación. Me enganchó totalmente: me enamoré de la programación, y busqué universidades que dieran cursos de software. Eventualmente fui al Imperial College, parte de la Universidad de Londres. Era el segundo año que ofrecían un curso en software, y fue absolutamente maravilloso: el plantel y los estudiantes trabajaban juntos para hacer que los materiales resulten mejor, y todos aprendiamos un montón. Este curso me dio una excelente base para el desarrollo de software. Me quedé para comenzar un PhD, pero luego lo dejé por un proyecto. Pero la pregunta general es “¿cómo aprendí a programar?”. La respuesta real es que “todavía estoy aprendiendo a programar”. Creo que cualquier buen desarrollador sigue aprendiendo toda su carrera. No es sólo agarrar un lenguaje nuevo y sus librerías: los buenos programadores también refinan sus técnicas y prácticas durante los años.
Guido Van Rossum: Fui a la universidad donde tenían un enorme mainframe y había varios cursos de computación. Fue muy importante para mí.
James Gosling: Al principio aprendí por mi cuenta. Conseguí mi primer trabajo como programador antes de ir a la universidad. Pero estoy contento de haberlo hecho, me divertí un montón. Después seguí adelante hasta obtener un PhD.
Bjarne Stroustrup: En la universidad (Aarhus y luego Cambridge). Las universidades me enseñaron muchas cosas útiles, incluso la mayoría de las bases que sería mi trabajo futuro. Además, aprendí bastante programando por dinero – donde comprender el problema real, mantenibilidad, entrega a tiempo, etc. son temas más importantes que en un entorno educacional.
Tim Bray: Pensaba que iba a ser maestro de matemáticas. El programa de matemáticas en la Universidad requería algunos cursos de computación.
2 – ¿Cuál cree que es la habilidad más importante que debería tener un programador?
Steve Yegge: Habilidades para comunicarse en forma escrita y verbal. Nunca vas a llegar muy lejos como programador si no podés transmitir tus ideas a otras personas de manera efectiva. Los programadores deben leer asiduamente, practicar escritura, tomar cursos de escritura, e incluso practicar el hablar en público.
Linus Torvalds: Es una cosa llamada “gusto”. Suelo juzgar a las personas que trabajan conmigo no por su aptitud: algunas personas pueden escribir mucho código, sino más bien por cómo reaccionan al código de otras personas, y luego obviamente viendo cómo se ve el código que ellos mismos escriben, y que enfoquen toman. Esto me dice si tienen “buen gusto” o no, y la cosa es, una persona sin “buen gusto” en general no es buena para juzgar el código de otras personas, y su propio código termina siendo no del todo bueno.Pero bueno, no es lo único. Una cosa que es muy útil, especialmente en proyectos de código abierto, es la habilidad de comunicar bien lo que se quiere hacer, y cómo se va a hacer. La habilidad de explicar a otros porqué hacés algo de determinada manera es muy importante, y no todos tienen esta habilidad.Dicho esto, también hay personas que simplemente generan buen código. No son buenas explicándolo, e incluso puede que no tengan buen gusto, pero el código funciona. A veces necesitás a otra persona (una que si tenga ese “buen gusto” tan dificil de definir) para masajear el código y que resulte útil en forma más amplia, pero tan solo la habilidad de escribir código claro para problemas dificiles es obviamente una parte bastante fundamental de cualquier programador.
David Heinemeier Hansson: Un sentido fuerte del valor. La habilidad para preguntarse a uno mismo: ¿vale la pena hacer esto ahora mismo? Muchos programadores parecen derrochar océanos de tiempo en cosas que simplemente no importan. Y no dedican el tiempo suficiente a cosas que si importan.
Peter Norvig: No creo que sea una sola, pero digamos concentración.
Dave Thomas: Pasión.
Guido Van Rossum: Las pregunta son bastante generales y difíciles de responder Creo que tener la habilidad de cocinarse un huevo para el desayuno es invaluable.
James Gosling: Auto motivarse. Para ser realmente bueno, tienes que estar enamorado de lo que haces.
Bjarne Stroustrup: La habilidad de pensar con claridad: un programador tiene que comprender los problemas y expresar soluciones.
Tim Bray: La habilidad de preferir la evidencia a la intuición.
3 – ¿Cree que las matemáticas o la física son un conocimiento importante para un programador? ¿Por qué?
Steve Yegge: Hay una gran rama de la matemática que es muy importante para los programadores, llamada “matemática discreta” o “matemática concreta”. Incluye disciplinas como la probabilidad, combinatorias, teoría de grafos, pruebas por inducción, y otras herramientas útiles. Aliento a todos los programadores a que estudien matemática discreta todo lo que puedan. Incluso un poquito es mejor que nada.En cuanto a la matemática tradicional, bueno, no la uso tan a menudo, pero siempre resulta útil cuando la necesito. Por ejemplo, sólo usé cálculo matemático una vez durante el año pasado como parte de mi trabajo. Tenía que estimar la carga en la hora pico del día para un servicio cuya carga “seguía al sol” aproximadamente por una curva senoidal. La forma más simple para estimar era integrar sobre 1/24 de la curva en una hora específica. Si no hubiera sabido cálculo matemático, no hubiera podido hacer estimaciones razonablemente exactas.Cuando escribía mi juego, Wyvern, me fue sumamente útil tener conocimientos sólidos en geometría de planos básica. Y es bastante común usar álgrebra y álgrebra lineal a diario. Pero casi nunca uso trigonometría o ecuaciones diferenciales en el trabajo, ni tampoco mucho cálculo numérico.Diría que mis conocimientos básicos de matemática me hicieron entre un 5% y un 10% mejor programador. Si supiera mucha más matemática, sin dudas sería un mucho mejor programador de lo que soy hoy en día, por lo que estudio y practico matemática varias horas por semana.Amo a la física y llevo una odisea permanente y de por vida para lograr entender los fundamentos de la mecánica cuántica. Pero, personalmente, nunca encontré que la física resulte muy útil para mi trabajo como programador. Por supuesto, esto sería diferente si estuviera haciendo algo en el campo de la física, como programar un juego en 3D, o en ciertas áreas de la simulación.
Linus Torvalds: Personalmente creo que es bueno tener conocimientos sólidos en matemática. No estoy tan seguro en cuanto a la física, pero estoy convencido que comprender matemática y tener una buena base te ayuda a ser un programador mejor. Así sea tan sólo porque usan modelos mentales similares – podés construir un conjunto de reglas de cualquier tipo que quieras, pero siempre debe ser consistente consigo mismo.
Dave Heinemeier Hansson: Para nada. Al menos no resulta útil para el tipo de programación de negocio necesaria para crear aplicaciones web. Considero que es mucho más importante ser un buen escritor.
Peter Norvig: Si. Muchas ideas son inherentemente matemáticas: inducción, recursión, lógica, etc.
Dave Thomas: Quizás. Pero, para ser honesto, no vi mucha correlación entre estos tipos de disciplina y los buenos desarrolladores de software.Sin embargo, si he visto una fuerte correlación entre la gente que tiene algo de sentido musicales y la habilidad para programar. No tengo idea porqué, pero sospecho que algunas áreas del cerebro que hacen que alguien tenga sentido musical también las hace buenos desarrolladores de software.
Guido Van Rossum: Matemática, sí (algunas partes; no me importan las ecuaciones diferenciales, pero el álgebra y la lógica son importantes). En cuanto a la física, no creo que sea tan útil, excepto que siempre sirve estar interesado en varias cosas.
James Gosling: ¡Si! Te enseñan lógica y deducción… a tener un ojo analítico. Y no hay como las matematicas al momento de analizar algoritmos.
Bjarne Stroustrup: Depende del programador y de las tareas de programación. Algunas formas de matemática se usan con frecuencia; la física menos seguido, pero por otro lado aprender física es una de las mejores formas de aprender matemática práctica.
Tim Bray: En mi caso, casi nunca usé matemática de nivel universitario para apoyar mi programación.
4 – ¿Cuál cree que será la próxima “gran cosa” en la programación? ¿Programación orientada a X, el lenguaje Y, computación cuántica, o qué cosa?
Steve Yegge: Creo que la programación de aplicaciones web irá gradualmente convirtiéndose en la programación más importante para el lado del cliente. Creo que va a volver obsoletas a las herramientas del lado del cliente: GTK, Java Swing/SWT, Qt y por supuesto todas las propias de cada plataforma como Cocoa y Win32/MFC/etc.No es algo que vaya a ocurrir de repente. Ya ha venido pasando durante los últimos diez años, y bien podría llevar otros diez años más para que las aplicaciones web “ganen”. Las herramientas, lenguajes, APIs, protocolos y navegadores van a tener que mejorar mucho más todavía. Pero año tras año se acercan un poquito más, y finalmente decidi cambiar todo el desarrollo de mi aplicación a una programación basada en navegadores.Por supuesto que Microsoft y Apple no quieren que esto ocurra, por lo que el primer paso necesario va a ser lograr que un navegador de código abierto como Firefox gane una posición dominante en el mercado, lo cual va a requerir una aplicación ganadora para Firefox (una aplicación ganadora sería algo como iTunes, algo que todo el mundo quiera usar, tanto como para descargarse Firefox).
Linus Torvalds: No creo que veamos un “gran salto”. Vimos muchas herramientas que nos ayudan a simplificar las tareas de todos los días – lenguajes de alto nivel y quizás la integración de bases de datos simples dentro de lenguajes. Pero la mayoría de estas modas tuvieron un uso limitado.Por ejemplo, personalmente creo que “Visual Basic” hizo más por la programación que los “Lenguajes Orientados a Objetos”. Y sin embargo, la gente se rie de VB y dice que es un lenguaje malo, mientras hablan de los lenguajes OO por décadas.Y no, Visual Basic no es un gran lenguaje, pero en mi opinión las interfaces simples para bases de datos en VB fueron fundamentalmente más importantes que la orientación a objetos, por ejemplo.Así que creo que van a ocurrir muchas mejoras incrementales, y las mejoras en hardware van a hacer más facil la programación, pero no espero ningúna gran mejora en la productividad o una revolución en la forma que la gente hace las cosas.Al menos no hasta que comenzamos con la inteligencia artificial real, y no creo que la IA real sea algo que “programemos”.
David Heinemeier Hansson: No trato de predecir el futuro. No creo en la adivinación. La mejor manera de predecir el futuro es implementarlo.
Peter Norvig: Procesamiento distribuido a gran escala.
Dave Thomas: La próxima gran cosa en la programación va a ser eclipsada por la próxima-próxima gran cosa en la programación, y así, y así. Estoy cansado de esta búsqueda sin fin de grandes cosas, porque mientras tanto la gente se olvida de los temas reales: tener los fundamentos correctos. Necesitamos mejorar un montón al hablar con nuestros clientes, enfocarnos en entregar valor, y tener orgullo por lo que hacemos. Un desarrollador que puede hacer estas cosas puede entregar software con cualquier herramienta, y no necesita preocuparse por andar siguiendo tendencias y modas.
Guido Van Rossum: Lo siento, no soy de los que tienen una bola de cristal. Predije el CGI cinco años después de que fuera inventado.
James Gosling: Los dos temas en los que estoy más interesado ahora son manejar el paralelismo y la complejidad.
Bjarne Stroustrup: No sé, y no me gusta adivinar.
Tim Bray: Ni idea.
5 – Si tuviera tres meses para aprender una tecnología relativamente nueva, ¿cuál eligiría?
Steve Yegge: De hecho tengo 3 meses (part-time), y los estoy usando en aprender Dojo y AJAX y DHTML avanzado. Estoy aprendiendo mientras escribo una aplicación web bastante ambiciosa. Dojo es muy interesante, y estoy seguro que irá mejorando con el tiempo.
Linus Torvalds: Hmm. Me encataría hacer FPGAs, pero siempre estuve demasiado ocupado para sentarme y aprender. Me encanta la noción de jugar con el hardware: obviamente es una de las razones por las que terminé haciendo sistemas operativos, ya que (junto a los compiladores) es lo más cerca que puedes llegar a jugar con el hardware, sin tener que diseñarlo o construirlo vos mismo.
David Heinemeier Hansson: Programación en Cocoa para Mac.
Peter Norvig: Me gustaría saber Javascript mejor. También Flash.
Dave Thomas: Si por “nuevo” quieres decir “nuevo para Dave Thomas”, creo que tomaría lecciones de piano intensivas. Si “nuevo” se refiere a cosas de tecnología, creo que elegiría tecnologías relacionadas con la accesibilidad para personas con discapacidades.
Guido Van Rossum: Snowboarding.
James Gosling: Para divertirme, me pondría al día con lo último en render 3D. Probablemente escribiría un render de mapeo de fotones.
Bjarne Stroustrup: Hay muy pocas cosas de importancia que se puedan aprender en tres meses. Me imagino que estás pensando en capacitación en algún campo determinado.
Tim Bray: Seguridad, encriptación, firmas digitales, identidad, etc. Es un gran problema para mi ya que nunca aprendí estas cosas.