La respuesta a esta pregunta depende de cómo trate la computación (o, más ampliamente, de la informática) . Hay dos formas de ver la computación.
Vista 1: Computación (o CS) como una rama de las matemáticas:
Esta opinión es sostenida por el famoso Edsger W. Dijkstra y el legendario Donald Knuth y muchos más. Si mantiene esta vista, entonces hay mucho que aprender y muchos recursos están disponibles. La mayoría de las personas le dirán que aprenda sobre bases de datos, sistemas operativos, algunos lenguajes de programación, etc. También le diré lo mismo, sin embargo, de una manera mucho más refinada. Lo que sigue es puramente experiencial. Usted puede o no estar de acuerdo conmigo. Siempre doy la bienvenida a los comentarios constructivos. Así que, aquí va!
Lenguajes de programación:
Los lenguajes de programación son una consecuencia directa de las matemáticas aplicadas. Si no estás de acuerdo conmigo, siempre puedes comprobar cómo John McCarthy “diseñó” el mejor lenguaje del universo, Lisp. Compruebe la venganza de los nerds de Paul Graham. Le respondí qué lenguajes de programación puede aprender aquí: la respuesta de Younis Shah a Soy un principiante en ciencias de la computación, ¿qué lenguaje debería aprender primero?
Teoría de la computación y autómatas:
Si quieres saber respuestas a las preguntas:
- ¿Qué puedes calcular en una máquina?
- ¿Qué tan eficientemente puedes calcular en una máquina?
- ¿Existe una solución eficiente a un problema dado?
- ¿Por qué algunos problemas son fáciles de calcular y otros extremadamente difíciles?
- ¿Cómo puedes escribir programas que escriban programas?
y mucho más, entonces se supone que debes aprender Teoría de la computación (ToC). Aprender modelos de computación como las máquinas de Turing será fructífero. Si estás interesado en esto, también te recomendaría aprender Cálculo Lambda. Si está abrumado con las matemáticas que se usan en el ToC, debe comenzar con Comprendiendo la computación: de máquinas simples a programas imposibles de Tom Stuart. Una vez que haya terminado, puede pasar a la clásica Introducción a la teoría de la computación de Michael Sipser. También sugeriría tener cierta familiaridad con la ciencia de la complejidad y los autómatas celulares. Puede leer Think Complexity: Complexity Science y Computational Modeling de Allen Downey y A New Kind of Science de Stephen Wolfram.
Bases de datos y “cosas relacionadas con los datos”:
Debo confesar que realmente no me gustan las bases de datos. Sin embargo, dado que estos son los contenedores que contienen datos, y los datos son importantes, debo escribir algo sobre ellos. Puedes empezar con SQL. Pero no creo que eso te sirva de nada. Esto se debe a que SQL trabaja con “datos estructurados”. Los expertos estiman que alrededor del 80 al 90 por ciento de los datos en cualquier organización no está estructurado y crece significativamente más rápido que los datos estructurados. Ingrese NoSQL. Son la nueva generación de bases de datos para datos no estructurados. Existen muchas soluciones NoSQL. Para más información sobre ellos, consulte el NoSQL Distilled de Martin Fowler. Si no lograba convencerte, estoy seguro de que lo hará. Un campo mucho más atractivo es la ciencia de datos y el aprendizaje automático. Para el primero necesitarás estadísticas, un poco de álgebra lineal y algo de probabilidad. Deberías conocer las estadísticas de todos modos, de lo contrario Zed Shaw te matará. Leer Los programadores necesitan aprender estadísticas o los mataré a todos. Usted leyó la increíble Inteligencia Colectiva de Programación: Construyendo Aplicaciones Smart Web 2.0 por Toby Segaran y mi Aprendizaje Automático favorito de los Hackers por Drew Conway y la Ciencia de Datos de Doing: La conversación directa de Cathy O’Neil y Rachel Schutt. También deberías estar bien versado con Apache Hadoop o Apache Spark para las cosas de “Big Data”.
Sistemas operativos:
Además de aprender las “cosas de los sistemas operativos habituales”, también debe saber algo de programación del sistema. Al menos deberías saber:
- Cómo compilar el kernel de linux.
- Cómo escribir un módulo de kernel simple.
- Cómo escribir un controlador de dispositivo.
- Cómo usar / dev / poll, select, kqueue, epoll IO .
- Cómo crear un servidor IO HTTP (S) no bloqueante.
- Cómo implementar un servidor HTTP (S) multiproceso con compatibilidad con el protocolo SPDY.
Puede leer el clásico La Interfaz de programación de Linux: Un manual de programación de sistemas Linux y UNIX por Michael Kerrisk y Amazon.com: Desarrollo del núcleo de Linux (3ª edición) por Robert Love.
Lo normal:
A los algoritmos, estructuras de datos y matemáticas discretas los llamo “lo usual”. Son tan importantes que un chico de CS que no sabe The Usual está destinado a convertirse en el combustible del Inferno de Dante. No tengo las palabras para enfatizar su importancia. USTED DEBE SABER LO USUAL . Se han escrito algunos libros fantásticos sobre The Usual. Puedes leer lo siguiente:
Introducción a los algoritmos por CLRS
Algoritmos de Richard Johnsonbaugh y Marcus Schaefer
El arte de la programación informática, Vols. 1-3 por Don Knuth
Algoritmos desbloqueados por Thomas Cormen
Algoritmos de R. Sedgewick y K. Wayne
El manual de diseño de algoritmos por Steve Skiena
Algoritmos de Sanjoy Dasgupta, C. Papadimitriou, Umesh Vazirani
Introducción al diseño y análisis de algoritmos por Anany Levitin
Estructuras de datos y algoritmos en Java por Adam Drozdek
Matemáticas discretas y combinatorias: una introducción aplicada por R. Grimaldi
Matemáticas discretas con aplicaciones por Thomas Koshy
Red de computadoras:
No soy un tipo de red. Sin embargo, si hay algo que debe saber es el protocolo HTTP (y el SPDY de Google (pronunciado como “speedy”)). Además, debería tener algo sobre los Modelos de propagación de virus en las redes de computadoras . Puede leer el impresionante HTTP: The Definitive Guide por David Gourley et al.
Los otros tipos:
Deberías saber sobre (mi top 3):
- Motores de búsqueda (PageRank de Google y más allá: la ciencia de las clasificaciones de los motores de búsqueda)
- Concurrencia (Amazon.com: El arte de la concurrencia: Guía de Thread Monkey para escribir aplicaciones paralelas)
- Máquinas Virtuales (Máquinas Virtuales)
Vista 2: La computación como un proceso físico:
Esta opinión fue sostenida por el gran Richard Feynman, Yuri Manin, David Deutsch, R. Jozsa, Peter Shor y los otros gigantes. Estoy hablando de Quantum Computing (QC) . No puedo decirles aquí qué es el control de calidad, pero sí puedo decirles que hay mucho terreno que cubrir en este campo, lo que significa una investigación más aguda, lo que significa fama instantánea. Échale un vistazo. Estoy seguro de que te enamorarás de él ( tal vez incluso te separes si estás en una relación ). Necesitas saber algo de Álgebra Lineal (Espacios de Hilbert, Descomposición de Gram-Schmidt, Teorema espectral y similares), principios de la Mecánica Cuántica para comenzar. Mi colección personal incluye:
Álgebra lineal hecho a la derecha por S. Axler.
Métodos matemáticos en las ciencias físicas por Mary Boas.
La mecánica cuántica: el mínimo teórico por L. Susskind
Cálculo cuántico e información cuántica por Nielsen y Chuang
La computación cuántica: una suave introducción por Rieffel & Polak
Computación cuántica para científicos de la computación por Yanofsky y Mannucci
Quantum Computing Without Magic: Devices por Zdzislaw Meglicki.
Yo personalmente sostengo la vista 2.
¡Espero que esto ayude!