Comencé a programar cuando tenía 4 años en un Sinclair ZX81. Continué para obtener un BA, MA, MSci y PhD de la Universidad de Cambridge en física y química con un 25% de ciencias de la computación en mi primer año de licenciatura. Cuando me gradué, creé mi propia empresa de consultoría y software, y desde entonces he trabajado para ello en el desarrollo profesional de software.
De niño tuve mucha suerte de tener un hermano mayor, paciente y bien educado, que pasó muchas horas enseñándome. Cuando tenía 11 años, conocía a Sinclair BASIC, BBC BASIC, Pascal, ensamblador 6502 y ensamblador ARM. Mi primo me metió en la programación de C cuando tenía 15 años. Después de la escuela, trabajé como desarrollador de software para British Petroleum en mi año sabático (1995). Comencé en la universidad al año siguiente (1996). Estudiamos ML Estándar en el primer año (1996-97). Utilicé C ++ para mis estudios de pregrado (1998). Mi doctorado fue escrito en Mathematica y C ++ en 2000-04. Esperando mi PhD viva en 2004, me enseñé OCaml.
Creo que esto me coloca en una buena posición para responder tu pregunta. Cuando llegué a la universidad yo era, francamente, arrogante. Pensé que lo sabía todo. Escribí programas sustanciales que iban desde manejadores de solicitudes de interrupción en ensamblador hasta aplicaciones de gráficos 3D en C y BASIC, y mi trabajo se había publicado y citado internacionalmente. En la universidad, mis profesores me resultaban difíciles de enseñar porque era muy terco. Retrospectivamente, esto fue un gran error de mi parte. Esos maestros sabían muchas cosas útiles que yo no sabía. En particular, sabían de muchas ramas útiles de la informática que ni siquiera sabía que existían.
Por ejemplo, mostré a algunas de las personas de la universidad una demostración 3D que había escrito en el ensamblador ARM usando mi propio rasterizador de esferas. Utilicé el algoritmo del pintor, acercándome lo más cerca posible, lo que requería una clasificación z. Lo ordené usando el algoritmo de clasificación de burbujas. Me dijeron que este era un mal algoritmo, pero expliqué cómo lo había optimizado en el ensamblador. Con el beneficio de la retrospectiva, estaba hablando sin sentido. No había entendido el concepto de complejidad y no sabía que los diferentes algoritmos de clasificación tienen diferentes complejidades y, objetivamente, el tipo de burbuja es malo en O (n²). Así que ciertamente aprendí algunas cosas útiles en mis años de pregrado.
El estudio de posgrado (investigación de doctorado) me enseñó más habilidades que también han sido muy útiles en la industria. Quizás la habilidad más importante que adquirí fue la capacidad de encontrar y comprender documentos de investigación. Por ejemplo, hace un par de años estaba trabajando en el sector financiero en Londres cuando tuve el reto de rediseñar un servidor para reducir la latencia. El servidor había sido optimizado por un gran equipo (40 desarrolladores de C ++) durante un largo período de tiempo (13 años). Saqué documentos de investigación, inventé una nueva arquitectura que redujo la latencia de 50 ms a 0,1 ms, la implementé a la calidad de producción y la probé a fondo en 6 meses. No podría haberlo hecho sin las habilidades que obtuve de mi doctorado.
A la inversa, he trabajado con muchos programadores en la industria que no tuvieron el beneficio de una educación formal. Aunque a menudo son programadores muy capaces, mi impresión es que a menudo no pueden ver el bosque por los árboles (p. Ej., Utilizan la herramienta adecuada para el trabajo) y, a veces, rehuyen las herramientas bien conocidas para resolver problemas técnicos (p. Ej., El uso del estado). máquinas).
Así que claramente hay algunas ventajas al estudiar informática en la universidad. Sin embargo, también hay desventajas. Pasé 7 años en la universidad que es mucho tiempo. Aprendí cosas útiles, pero no lo suficiente, en mi opinión, para justificar 7 años.
En resumen, antes de la universidad me había metido en una zona de confort donde evité estudiar muchos conceptos útiles porque no podía ver su valor práctico inmediato y no era capaz de localizar y comprender investigaciones relevantes. Gracias a la universidad, ahora tengo una comprensión mucho más amplia de temas relacionados y sus inquietudes transversales y disfruto excavando y leyendo artículos de investigación sobre todo tipo de temas extraños y maravillosos (me gusta especialmente leer sobre recolectores de basura y mi conocimiento ha sido útil en más de un proyecto industrial).
Mi consejo sería obtener un lugar en la mejor universidad a la que puedas ingresar, estudiar una licenciatura en ciencias de la computación, respetar a tus maestros y compañeros y sacar lo máximo de cada minuto que puedas dedicar a ellos. Serás un programador mucho mejor para ello.