Respuesta
«Hay 2 problemas difíciles en la informática: almacenamiento en caché, nomenclatura y errores fuera de 1»
Comentarios
d agregar hilos …
Responder
Honestamente, construcción del compilador!
Comentarios
Respuesta
Diseño & Análisis de algoritmos
Creo que esa pregunta depende del profesor que tuviste y cómo se organizó esa asignatura en tu carrera.
Analizar algoritmos puede ser todo lo difícil que alguien quiera. Tenga en cuenta que hay problemas sin resolver, y no solo eso: problemas que no se pueden resolver.
Lo que ocurre es que puede tener un problema, y si sabe que no se puede resolver, eso es perfecto. Pero, ¿y si no lo haces? Puede pasar mucho tiempo tratando de demostrar que es NP-Completo, o tratando de encontrar una solución de tiempo polinomial para resolverlo.
Demostrar NP-Completness no es fácil. Sí, muchos problemas lo son conocido, pero la cosa es encontrar las reducciones para demostrar que es NP-Complete. ¿Y qué pasa si pasas muchas horas / días / meses tratando de demostrarlo y se puede resolver en tiempo polinomial? 🙂
También hay otros temas, como Compiladores , Teoría de grupos y Funciones recursivas primitivas que pueden ser como difícil como el plan de la asignatura o el profesor quiera;)
Comentarios
Respuesta
Reconocimiento de patrones ie Inteligencia artificial. Esto se refiere a la computación inteligente junto con otras herramientas de reconocimiento de patrones como, reconocimiento óptico de caracteres, voz a texto, identificación facial, etc.
Muchas de las cosas «interesantes» que puede hacer o desearía poder hacer con las computadoras Confiar en estos algoritmos, y hemos estado intentando perfeccionarlos durante décadas sin mucho éxito.
Comentarios
Respuesta
Respuesta
Solo hay dos Problemas en Ciencias de la Computación: invalidación de caché y nombres de cosas. – Phil Karlton
Respuesta
teoría de categorías (matemáticas discretas), pero vale la pena
Comentarios
Respuesta
Criptografía
Si lo hace un poco mal, podría costarle millones a la empresa.
Comentarios
Respuesta
Sistemas operativos, especialmente la parte que tiene algo que ver con el enhebrado.
Y la razón no es porque fue tan difícil hacer que 5 filósofos comieran pizza con un tenedor. La razón es porque escribir código multiproceso está en y de en sí mismo es difícil y no necesariamente fácil de calcular para la mente humana (al menos masculina, según mi esposa).
Comentarios
Responder
Yo también voto por Diseño del compilador. Especialmente en lo que respecta a DFA y NFA. Tampoco tengo muy claro los problemas de NP y esas cosas.
Comentarios
Respuesta
Teoría de cola
Bueno, técnicamente, esta es una rama de las matemáticas, pero es muy relevante en CS.
Casi todo en CS se basa en colas (visibles (obvias) e invisibles (no tan obvias o implícitas)).
En los primeros días de CS las colas eran obvias.
Una cola de programas (cada programa una baraja de cartas).
Hoy en día las colas no son tan obvias. Internet, por ejemplo: una red de conmutación de paquetes, pero los paquetes forman colas y el enrutamiento de los paquetes es una forma de minimización de colas.
Comentarios
Respuesta
Análisis numérico
No es demasiado difícil para los problemas de juguetes que se te dan en el curso, pero una vez que comienzas a considerar problemas reales, se convierte en una gran labor.
Responder
Interpretar los requisitos del cliente cuando el cliente realmente no sabe lo que quiere. Esto no se enseña en la universidad y es una de las habilidades más esenciales que debe tener.
Comentarios
Respuesta
Personalmente, el mío era Formal Logic. Al principio fue difícil, pero una vez que aprendes las reglas y logras jugar con ellas lo suficiente, tu cerebro se vuelve Logic++;
, lo que en desarrollo es algo muy bueno.
Como nota al margen, estoy respondiendo la pregunta directamente: definitivamente esta no fue la materia más difícil cuando obtuve mi título, pero probablemente fue la materia más difícil «aplicable a la vida real».
Comentarios
Respuesta
Construcciones del compilador. Difícil, pero debe comprender los conceptos detrás de
Comentarios
Responder
Kernel Diseño ¿alguien? Bueno, realmente no sé cómo se hace y cuáles son las características específicas de un sistema operativo, pero para mí pensar en diseñar un kernel debe ser una tarea abrumadora.
También pienso en seguridad informática ; Realmente no sé qué hace que un sistema sea inseguro excepto, por supuesto, obvios desbordamientos de búfer, inyecciones de XSS e SQL.
No estoy seguro, pero parece que algunos algoritmos también son inseguros; mire el proyecto MetaSploit, enumera todo tipo y tipo de brechas de seguridad: puede ver que hay muchas formas en que un programa puede fallar.
Respuesta
Hay muchos temas incómodos en el campo, pero mis elecciones para la dificultad persistente son las que involucran Propiedades del sistema global . Algunos ejemplos de este tema general son:
- Multi-threading seguro y sin interbloqueo
- Seguridad
Estos son difíciles porque » Estás detrás de algo que solo existe cuando todo es correcto; necesitas una propiedad del sistema global y, sin embargo, prácticamente todas las herramientas disponibles (y todas las que escalan a problemas reales en mi experiencia) solo hacen razonamiento local . Es el proceso de pasar de razonar sobre las partes del programa a todo el asunto lo que es difícil, particularmente porque es completamente posible tener partes que sean correctas en sí mismas, pero donde todavía hay errores sutiles porque el los componentes están dispuestos incorrectamente; los errores pueden ser características emergentes indeseables …
Respuesta
Servicios de información de gestión Durante mi período universitario, solía tener una asignatura de administración cada semestre, lo que me enfurecía por completo.
¡Duro! Bueno, temas como Diseño del compilador , Diseño del sistema operativo etc son difíciles pero son realmente interesantes y desafiantes.Realmente me metí en temas como Sistema de información de gestión / Servicios, etc., ya que están llenos de aburrimiento y hay que pasar por mucha teoría.
Comentarios
Responder
Si está trabajando en C / C ++, los punteros son los más concepto importante a conocer. Pero de alguna manera nunca lo entendí completamente en la universidad.
Comentarios
Respuesta
Diseño y Análisis de Algoritmos. No es tanto que sea difícil entender y analizar algoritmos conocidos , es que diseñar y analizar nuevos algoritmos para problemas difíciles es difícil y requiere una amplia comprensión de muchas áreas y práctica. en la aplicación de muchas técnicas diferentes.
Respuesta
Programación de restricciones. que trata con problemas combinatorios, problemas NP-completos.
Respuesta
Optimización de El algoritmo es un tema desafiante.
Respuesta
¿Cuál es la teoría / asignatura de informática más difícil que estudió pero que es importante para el campo?
Matemáticas discretas.
Fue difícil porque las teorías están muy poco relacionadas entre sí, pero «se usan en CS. Demasiada memorización, supongo …
Prueba por inducción, Big O, recursividad, divide y vencerás, teoría de grafos, bla, bla … ¡argh!
Compilar para mí fue fácil, porque teníamos que tomar Teoría de Autómatas. ^^
Respuesta
Notación Z / métodos formales utilizados para dañar mi cerebro en la universidad. Principalmente porque lo odiaba. Difícil es mucho más fácil cuando disfrutas lo que estás haciendo y mucho más difícil cuando no lo haces.
Responder
Me gustan tus respuestas (y no olvidé votarlas), como compilador, kernel, etc. pero la mayoría de los programadores nunca encontraron estos problemas. Hay un problema un poco más fácil, pero más común: concurrency – hilos, bloqueo. Es muy fácil escribir un programa que produce errores mágicos, si cometemos incluso un pequeño error en la arquitectura de concurrencia.
Entonces, digo, no es el problema más difícil en informática, sino porque es de uso común, es peligroso.
Respuesta
Programación Orientada a Objetos
Es probablemente porque me corté los dientes con FORTRAN y APL, pero el cambio de lenguajes estrictamente procedimentales a objetos ha sido algo que «con lo que hemos luchado durante años. No ayuda que los supuestos «expertos» escriban artículos y tutoriales contradictorios sobre lo que significa estar orientado a objetos y las mejores / adecuadas formas de construir programas orientados a objetos.