¿Qué cosas teóricas debo aprender sobre informática?

Depende de lo que desarrolles. Recuerde que CS no se trata de desarrollar un software, se trata de hacer cosas (o intentar hacer cosas) con las que no es posible hasta ahora. Por ejemplo, como desarrollador, su preocupación es encontrar los detalles de implementación del escáner de huellas digitales o cómo usar una biblioteca determinada para este propósito. Pero un experto en CS está inclinado a crear algoritmos para escanear una huella digital (o tal vez diseñar una mejor versión si ya está allí).

Sin embargo, también hay algunas asignaturas orientadas al desarrollo.
Si está familiarizado con los conceptos de OOP (herencia, polimorfismo, composición, etc.), puede comenzar a estudiar varios patrones de diseño utilizados para codificar grandes aplicaciones. También puede echar un vistazo a las matemáticas detrás de algunas cosas importantes, aparte de eso, puede echar un vistazo a algunas estructuras de datos y algoritmos (clasificación, búsqueda, etc.).

El descanso depende del área de interés, si está decidido a hacer aplicaciones relacionadas con el procesamiento de imágenes que las matemáticas y los libros de visión por computadora pueden ayudarlo. Si planea desarrollar una aplicación inteligente, puede aprender un poco sobre IA. Para comprender oraciones humanas, busque Procesamiento de lenguaje natural, para crear un compilador / intérprete de lenguaje, vaya a los cursos de Construcción de compiladores. Y hay tantos otros.

Creo que proporcionaste tu propia respuesta. Para el programador que trabaja, las estructuras de datos son probablemente los conceptos CS más importantes que se aplican todos los días. Por supuesto, esto puede ser muy específico del idioma / plataforma, por lo que lo que aprenderá sobre ellos variará ampliamente. En el nivel de tratar de entender CS a través de estructuras de datos, creo que el lenguaje C le brinda la mejor comprensión “cercana al metal” porque se puede (puede) usar justo por encima del nivel de ensamblaje e incluso a veces se incluye ensamblaje cuando la optimización es extrema necesario. Mejore las estructuras de datos en C y entienda algo de informática real. El siguiente nivel sería estudiar algoritmos, y nuevamente C puede ser una gran plataforma para eso, pero en mi humilde opinión, eso puede ser mucho más difícil que incluso las estructuras de datos. Todos los lenguajes tienen algún concepto de estructuras de datos, y por supuesto tiene sentido dominarlos. en el lenguaje / entorno en el que trabaja regularmente, pero la mayoría de los lenguajes más modernos tienen estructuras bastante alejadas de la arquitectura del sistema. Eso es lo que los hace tan portátiles y útiles, pero no son grandes maestros de informática.

Una de las cosas más beneficiosas que puede hacer es preparar su mente para trabajar con estructuras de datos complejas. La mayoría de los datos que terminan en la base de datos no permanecen así en la pila. Se saca, y casi inmediatamente comienza a unirse y convertirse en otra cosa. Para cuando es a través de la capa de acceso a datos de la aplicación, es otra cosa. Este algo más tendrá su propio contexto de comportamiento con lo que otros objetos pueden actuar sobre él, cómo se permite que ocurra esa acción y cuándo. Todas esas cosas son elementos que el profesional de CS también eligió crear para adherirse a un esquema operativo, una historia de usuario o un flujo de trabajo que desean cumplir como requisitos comerciales funcionales / no funcionales del software. Muchas veces es el informático el que puede visualizarlos incluso antes de escribir código. Un informático debería poder llegar a un punto en el que realmente no esté leyendo el código, sino navegando a través de una estructura virtual dentro de su mente que representa los objetos de datos y los actores.

Lo más beneficioso probablemente sea comenzar a crear estructuras de datos anidados con algún tipo de cosa compleja que tenga que cambiar con el tiempo. Por ejemplo, un sistema de control del aeropuerto que gestiona el aterrizaje, el vuelo, el rodaje y el aterrizaje de los aviones. Puede volverse aún más complicado al hacer que ciertas pistas solo puedan tomar ciertos aviones, y tal vez incluso helipuertos. Es inteligente forzarse a intentar y conceptualizar sistemas que tienen un esquema cambiante a lo largo del tiempo, que depende de eventos de tiempo específicos. Al practicar tales cosas, las soluciones comenzarán a tomar forma de la mejor manera de representarlas dentro del software.

Hola Yasser, me gusta tu pregunta. Me encanta el software, pero el hardware me interesa mejor (puertas lógicas ECT). ¡El único problema es que no sé si comenzar! Estoy aprendiendo sobre un sumador de medio bit, pero lo que realmente quiero hacer es hacer una computadora de 8 bits. Si pudieras ayudarme con esto, por favor comentame.

Pero sobre su pregunta: bueno, esta es una teoría más matemática, ¿cómo empiezo? Bueno, cuando las empresas y los bancos quieren encriptar cosas, obtienen la mayor suma de 2 primos y encriptan con eso. Ahora, como sabemos hoy. No hay un patrón para encontrar primos, tenemos que resolverlos uno por uno. Los hackers necesitan trabajar horas extras y adivinar. Lo que algunas personas piensan es que hay una solución matemática: la hipótesis de Ryeman. Lo siento pero todavía estoy aprendiendo, espero haber ayudado de alguna manera. Ah, y gracias por seguirme!

Debería aprender que la informática es más ficción que ciencia, incluidas las maravillosas historias inventadas de paradigmas de programación, polimorfismos, encapsulaciones y abstracciones de datos, cuando en realidad, la programación informática no es más que descifrar un buen algoritmo y luego escribir el instrucciones para que la computadora las siga.

La otra cosa teórica que debe aprender es cómo dividir su algoritmo en un conjunto de tareas coordinadas (como en la multitarea) para hacer un uso eficiente de la computadora.

Lo # 1 que hacen los programas sofisticados es esperar algo. Durante la espera, su otro trabajo debe procesarse para que la computadora nunca esté inactiva.

También necesita una formación en matemáticas e ingeniería de sistemas: cómo modelar matemáticamente cosas y ejecutarlas en una computadora.

Algoritmos, tareas y matemáticas: eso es todo lo que necesita para aprender a programar una computadora.

El resto de lo que enseñan en Ciencias de la Computación está diseñado para programadores de sistemas, que es una clase diferente de programadores de los programadores de aplicaciones.

Recuerde: no necesita saber cómo diseñar un automóvil para conducirlo con éxito.

Me gustaría ver varias estructuras de datos y qué tan eficientes se comparan entre sí. Se enseña discreto porque enseña lógica y teoría de números que pueden ayudar a resolver algunos problemas de codificación más extraños. Realmente depende de lo que hagas y descubras si valdría la pena o no. Siento que es una de esas cosas donde lo aprendes y es realmente útil o fue una pérdida de tiempo, pero no lo sabes hasta que lo aprendes.

Comience con Matemáticas discretas.

More Interesting

¿Cómo ha influido la teoría de conjuntos en el desarrollo de las estructuras de datos?

¿Está 1SAT NP completo?

¿Cuál es el límite y cómo puedo probar: [math] \ lim_ {n \ rightarrow \ infty} {n ^ dn ^ c} [/ math] cuando [math] 0 \ leq c <d [/ math]?

Dados n objetos y p posiciones divididas equitativamente alrededor de una tabla, n <= p, ¿cuántas combinaciones de ubicación existen?

Big data, seguridad informática y matemática financiera; ¿Cuál de estos campos es el mejor para emprender como carrera si eres de antecedentes matemáticos?

¿Todos los espacios nulos son subespacios? y todos los subespacios tienen un espacio nulo?

¿Cuáles son algunos enfoques de aprendizaje no supervisados ​​para la agrupación dada una matriz de distancias por pares?

¿Quiénes son los mejores profesores que trabajan en algoritmos de aproximación?

¿Realmente necesito una sólida formación en matemáticas para comenzar a aprender programación?

¿Cuál es el problema P vs NP?

Cómo desplazar cíclicamente a la derecha un número entero en C ++

¿Por qué la mayoría de los lenguajes de programación prohíben las "desigualdades sandwich"? En matemáticas, es común ver 'desigualdades en emparedado' que muestran que una cantidad es mayor que otra pero menor que otra, por ejemplo, a <b <c significa lo mismo que a <b && b <c.

¿Tiene algún consejo para escribir propuestas de negocios que involucren informática teórica?

Cómo ser un programador perfecto paso a paso

¿Cuántas soluciones totales hay en este problema combinatorio?