¿Cuál sería la diferencia si estudiara informática versus si me enseño a programar?

Deberías hacer ambas cosas, por supuesto. Los dos te dan habilidades muy diferentes.

1. Los departamentos de informática no están configurados para enseñar programación, y los mejores suponen que ya sabes cómo programar antes de llegar. Si te enseñas a ti mismo, tendrás la costumbre de encontrar respuestas sin tener que esperar a que la gente te diga qué hacer. Podrás hacer algunas inmersiones profundas en áreas que no estarán cubiertas por ninguna de tus clases. ¡Y es divertido!

2. Lo que los departamentos de ciencias de la computación hacen muy bien es darle una imagen más amplia. Antes de tomar una clase de redes, considerarás que la programación de socket es magia oscura o (si estás en un lenguaje de nivel superior) ni siquiera te darás cuenta de que la magia es particularmente oscura. Cuando ve el modelo OSI para redes, comienza a comprender que los protocolos de red fueron diseñados para resolver problemas específicos (en particular, problemas que existían hace 30 años, algunos de los cuales aún no se han resuelto). En lugar de aprender otro lenguaje de programación, aprenderá a pensar en términos de clases de lenguajes de programación. Se le enseñará la estructura de los sistemas operativos, no solo sus API. Tener una visión general te hace mucho más efectivo como programador.

Si eres autodidacta y no tienes un título, estarás rodeado de cajas mágicas que funcionan como se espera casi todo el tiempo. Si tiene un título y no es autodidacta, tendrá una excelente comprensión del panorama general, pero probablemente no pueda hacer nada al respecto. Así que ambos.

En su mayor parte, será la diferencia entre ir a la escuela de música y simplemente aprender a tocar la guitarra.

Los programas de informática son * no * programas de programación. Realmente son títulos de matemática / teoría diseñados para preparar a un pequeño grupo de personas para la academia enseñándoles un conjunto amplio y moderadamente profundo de teoría: análisis de algoritmos, sistemas operativos y de bases de datos, teoría de sistemas distribuidos, fundamentos de gráficos por computadora.

De hecho, es muy posible graduarse de la mayoría de los buenos comp. sci. programas sin ninguna experiencia práctica de codificación en el mundo real.

Ahora. Si pasa su tiempo simplemente codificando, puede aprender a ser un programador práctico. Eso significa resolver problemas del mundo real en el dominio de su elección. Es probable que no trabajes en sistemas operativos o motores de juegos, a menos que seas brillante, pero la mayoría de nosotros tampoco trabajamos en esas cosas.

Desde el punto de vista de la empleabilidad, por supuesto, es un poco complicado. Tendrá que construir una cartera suficiente de trabajo real que la gente estará dispuesta a entrevistarlo, y la habilidad suficiente para poder pasar entrevistas de codificación. Las preguntas para tales entrevistas se pueden encontrar en toda la web y la mayoría no requieren 4 años de teoría para responder. Solo un poco de dedicación y concentración.

Las universidades no se preocupan mucho por la altura de tu stack.

Cualquier adolescente con conexión a Internet puede aprender a programar en Java, Python, Scala, SQL, Haskel, Rust, Node.js, … y usar sus miles de bibliotecas o marcos. Solo lleva tiempo y dedicación hacerlo, como aprender a dibujar o tocar la guitarra. Cuando estudies ciencias de la computación, solo aprenderás su superficie. Ese curso puede llamarse «Programación 101» o «Paradigmas de programación». Y para ser eficaz en esas tecnologías, la escolarización no supera el estar inmerso en proyectos valiosos junto con otros entusiastas conocedores.

A pesar de que algunos estudios solo le enseñarán la superficie de una tecnología determinada, la informática va un poco más allá que enseñarle cómo dominar el código y obtener rápidamente resultados valiosos. En lugar de cultivar esta virtud de la pereza que tanto aprecian los programadores y quienes los contratan, desafía a sus estudiantes a comprender cómo se construyen las computadoras, por qué funcionan de la manera que lo hacen o qué hace que esas opacas llamadas a la biblioteca funcionen eficientemente cuando se invocan. Equipados con un conocimiento de la ciencia detrás del software, estas personas a menudo son más capaces de resolver problemas difíciles que el próximo programador sin educación. Por supuesto, ese programador puede pensar que es más inteligente y eficiente que el informático común porque utilizó una biblioteca de código abierto permisiva en lugar de perder un día, una semana o un mes o más tratando de resolver un problema no trivial con un estándar cerebro.

Algunas personas valoran la educación por lo que ofrece. Otros lo valoran por lo que sugiere. Algunos incluso lo desprecian porque no aborda sus preocupaciones inmediatas. En ese sentido, es posible que solo pueda responder a su pregunta averiguando qué quiere hacer exactamente y para qué tipo de personas.

El software es un campo tan amplio que es fácil perderse en él. A veces, el trabajo duro y la dedicación solo pueden alejarte más de tus propias aspiraciones. Comienza en algún lugar, huye para hacer algo más cercano a tus obsesiones, corre cuando estés listo. Una carrera en software no es una línea estable.