Es mejor ir a la universidad a estudiar informática para convertirse en programador, o deberías ir a por lo que te gusta (y es fácil) y aprender a programar por tu cuenta? ¿Qué piensan las startups que contratan de la gente que hace esto? Artboard

No creo que el consejo de Dave sea muy bueno. El tl;dr es que, si tu objetivo es convertirte en el mejor ingeniero de software que puedas ser, creo que deberías ir al mejor programa de CS al que puedas acceder y permitirte. En segundo lugar, simplemente sáltate la universidad.

Detalles
Empecemos por lo que estoy de acuerdo con Dave.

  1. Tiene razón en que los títulos importan mucho menos para los ingenieros de software que para casi cualquier otro campo de conocimiento. Si puedes demostrar que eres legítimo (as las preguntas de algoritmos y tienes proyectos grandes/interesantes para mostrar), puedes conseguir un trabajo con bastante facilidad sin un título.
  2. También tiene razón en que sólo obtener un título de CS no te hará un programador de primera clase. Muchas personas que no son grandes ingenieros de software tienen títulos de CS y muchos grandes ingenieros de software no los tienen.

¿Por qué, a pesar de estos hechos, creo que vale la pena ir a la universidad? Hay cuatro razones.

  1. No sólo se aprende de las clases y los libros de texto. Tener compañeros muy, muy inteligentes e interesados en las mismas áreas que tú es un orden de magnitud más importante que las clases. Esto se puede encontrar en la empresa adecuada, pero es bastante difícil. Es una apuesta mucho más sólida que usted encontrará una docena de personas que se golpearán la cabeza contra los problemas con usted, hackear con usted, empujar a explorar nuevos espacios, y con suerte iniciar empresas con usted un día en la universidad.
  2. Se convertirá en un mejor programador en la escuela adecuada. Dije antes que sólo obtener un título de CS no te hará un gran ingeniero de software... pero eso no significa que no pueda ayudar. Por supuesto, hay muchos departamentos en los que el departamento de ciencias de la computación es básicamente una rama del departamento de matemáticas y apenas escribirás código interesante. Pero también hay muchos departamentos en los que escribirás grandes y peliagudas piezas de software que pondrán a prueba tu capacidad para diseñar y pensar en sistemas informáticos. Eso puede incluir sistemas operativos, compiladores, etc., pero también puede incluir grandes aplicaciones web o aplicaciones móviles, que pueden interesarte más.
  3. Las cosas "teóricas" importan, en un sentido muy práctico. Es posible que aprendas Rails o SQL mientras juegas por tu cuenta, pero es raro el autodenominado hacker que realmente profundiza en los algoritmos y el álgebra lineal. La cuestión es que pensar en cómo el rendimiento de tu sistema escala con el tamaño de la entrada (notación Big-O) y cómo replantear tu problema como una composición de problemas bien conocidos en la ciencia de la computación con soluciones bien conocidas y eficientes es el tipo de cosas que haces todos los días mientras gestionas incluso la base de código real más simple. ¿Y ese truco genial que quieres probar con el aprendizaje automático? Sí, sé que alguien ya ha implementado todos los algoritmos en tu lenguaje de elección, pero es casi imposible averiguar por qué no obtienes los resultados que quieres sin una sólida formación en estadística y álgebra lineal [o, a veces, incluso cuando los tienes... :)]. Una buena escuela te obligará a cubrir este material.
  4. No subestimes los factores psicológicos. Hay algunas personas que están realmente motivadas para autoaprender cualquier cosa y hacerlo bien. Son los grandes valores atípicos. La gran mayoría de la gente estudiará mucho más eficazmente con el marco de las clases con tareas y calificaciones. Ver vídeos del OCW del MIT o el equivalente de Stanford, o lo que sea, leer libros de texto, salir con gente inteligente de tu zona y participar en proyectos de código abierto puede ayudarte a conseguirlo. Pero tienes que saber realmente que eres el tipo de persona que puede levantarse todos los días, tal vez ir a trabajar, y sentarse después a un estudio autodirigido, autodisciplinado y profundo de un campo.

Si te fijas en los puntos anteriores, y especialmente en los tres primeros, está claro que la escuela a la que vas realmente importa. Es importante tener en cuenta que esto no tiene nada que ver con el nombre de tu título y que muchas de las mejores escuelas ni siquiera le parecerán impresionantes a alguien ajeno a la industria de la informática. ¿UIUC? ¿Wisconsin? ¿Washington? ¿UT? Todas ellas son escuelas estatales con programas de ciencias de la computación entre los 10 mejores. Y si lo que te gusta es escribir código, algunas de estas escuelas están más centradas en eso que otras. El MIT parece estar más centrado en la teoría de las ciencias de la computación (y Caltech mucho más) que Stanford, Berkeley, UIUC o CMU, que tienen una gran reputación por su formación práctica. Las escuelas estatales son relativamente asequibles, las no estatales pueden ofrecerte en su mayoría una ayuda financiera significativa, y puedes pagar la deuda de cualquier manera si eres frugal. No tiene sentido quejarse de que estas universidades son opciones para las élites, porque si realmente eres lo suficientemente bueno como para aprender por ti mismo y competir con los mejores en el mercado de trabajo, deberías tener una oportunidad real de entrar en algún subconjunto de estas escuelas.

Sin embargo, si ninguna de las razones anteriores te obligan a entrar en un programa de CS fuerte, entonces no pierdas tu tiempo en la escuela por el bien de un título (especialmente un título no-CS). A nadie le importa una mierda. Simplemente sal ahí fuera, estudia mucho por tu cuenta y escribe mucho código en muchos proyectos. Y ten en cuenta que ninguno de mis consejos excluye el abandono de la escuela una vez que hayas pasado algún tiempo en ella. Puedes obtener muchos de los beneficios descritos anteriormente sin graduarte.