Самый сложный предмет / теория в области компьютерных наук? [закрыто]

17

Какой самый сложный предмет / теория КС вы изучали, но которые важны для этой области? А причина пожалуйста?

Abimaran Kugathasan
источник
3
Я думаю, что это в значительной степени зависит от человека, изучающего предмет, и от человека, который его преподает
Махмуд Хоссам

Ответы:

37

«В компьютерной науке есть две серьезные проблемы: кеширование, присвоение имен и ошибки off-by-1»

Брайан Карлтон
источник
4
Я бы добавил потоки ...
Карра
35

Честно говоря, конструкция компилятора!

Pemdas
источник
13
+1 Компиляторы были самыми сложными и самыми полезными.
dietbuddha
3
Это была большая часть всей работы и хорошая подготовка к грубому кодированию, но я не думаю, что это было так сложно. Может быть, сложнее без использования YACC или каких-либо инструментов, которые мы использовали, я не знаю.
Питер Тернер
4
Компиляторы на самом деле только трудны, потому что большая часть теории относится ко времени безумно жестких аппаратных ограничений, и многие формальные инструкции не продвинулись слишком далеко за пределы этого. Взгляните на Let's Build A Compiler, чтобы увидеть, насколько простым может быть написание компилятора, если подойти к нему под другим углом.
Мейсон Уилер
1
@Martin York, как автор компиляторов, я думаю, что сложность реализации компиляторов сильно переоценена. В общем, компилятор намного проще, чем интерпретатор. Я подозреваю, что это «Книга Дракона», и виноваты ее разновидности, они предлагают самые сложные способы выполнения простых вещей и уделяют слишком много внимания наименее важному шагу, а именно парсингу.
SK-logic
1
@Martin York, есть методы, позволяющие сделать AST максимально простым и легко обслуживаемым, независимо от сложности исходного языка. Также есть ряд очень простых, но мощных техник для поддержания каждого этапа компиляции тривиальным и изолированным.
SK-logic
22

Разработка и анализ алгоритмов

Я думаю, что этот вопрос зависит от вашего учителя и от того, как этот предмет был организован в вашей карьере.

Анализировать алгоритмы может быть так сложно, как кто-то хочет. Примите во внимание, что есть нерешенные проблемы, и не только: проблемы, которые не могут быть решены.

Дело в том, что у вас может быть проблема, и если вы знаете, что она не может быть решена, это прекрасно. Но что, если вы этого не сделаете? Вы можете потратить много времени, пытаясь продемонстрировать его NP-Complete или пытаясь найти решение за полиномиальное время для его решения.

Демонстрация NP-полноты не легка. Да, много проблем известно, но дело в том, чтобы найти сокращения, чтобы продемонстрировать, что это NP-Complete. А что если вы потратите много часов / дней / месяцев, пытаясь продемонстрировать это, и это можно решить за полиномиальное время? :)

Есть и другие предметы, такие как компиляторы , теория групп и примитивно-рекурсивные функции, которые могут быть настолько сложными, насколько этого требует предметный план или учитель;)

Оскар Медерос
источник
1
s / Анализ / Анализ ... в противном случае именно то, что я думаю ... примитивные рекурсивные функции, ура!
Феликс Домбек
Согласен, я запутался в своей степени бакалавра, никогда не будучи уверенным, что когда-либо успешно «доказал» что-либо (хотя мой класс по Алгоритмам был слишком прост, из-за профессора)
Питер Тернер
В эти дни я покажу вам, насколько сложными могут быть алгоритмы :)
Оскар Медерос,
18

Распознавание образов, т.е. искусственный интеллект. Это относится к интеллектуальным вычислениям наряду с другими инструментами распознавания образов, такими как оптическое распознавание символов, передача голоса в текст, идентификация лица и т. Д.

Многие из «крутых» вещей, которые вы можете или хотели бы делать с компьютерами, основаны на этих алгоритмах, и мы пытались усовершенствовать их в течение десятилетий без большого успеха.

Malfist
источник
Это сложно, потому что это не то, что детерминировано. Разработка хорошего распознавания паттернов ИИ требует экспериментов для каждого приложения, для которого вы хотите его использовать, чтобы убедиться, что вы выбрали правильный алгоритм, правильные функции и т. Д.
Кен Блум
1
Я только начинаю подниматься по этой конкретной горе (распознавание образов). Это тяжело. Много математики. Великие, огромные, пугающие груды математики, глядя на меня, осмеливаясь войти.
Дэвид Пул
ну ... распознавание паттернов также можно рассматривать как прикладную статистику, это не просто проблема в пределах диапазона CS
aggietech
12

Мой выбор - теория вычислимости

(Хм ... может быть, это не так важно, но это было сложно)

оборота Маглоб
источник
2
Я согласен, и я бы лично обобщил это как en.wikipedia.org/wiki/Theory_of_computation .
Мэтт Х
Я согласен, что теория вычислений была сложной, но она также была одной из моих любимых тем. Конечно, я был двойником по математике ...
Poindexter
+1 Я тоже дважды специализировался. Я мог бы обработать вступление к этому материалу, но выпускная версия ... рад, что я бросил это!
Работа
это было трудно, разве мы не знаем об этом так много, что это не имеет большого значения.
Отображаемое имя
10

В Computer Science есть только две серьезные проблемы: аннулирование кэша и присвоение имен. - Фил Карлтон

Gareth
источник
7

теория категорий (дискретная математика), но оно того стоит

Стивен А. Лоу
источник
Какие конкретные преимущества вы получили от изучения теории категорий?
zvrba
@zvrba: более глубокое понимание методов абстракции и составления карт проблем
Стивен А. Лоу
Откуда ты это узнал?
zvrba
@zvrba: я не вижу книгу на своей книжной полке, она, вероятно, все еще находится в хранилище (ремоделирование), но я думаю, что это была эта книга amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Стивен А. Лоу,
6

криптография

Если вы сделаете это чуть-чуть неправильно, это может стоить компании миллионы.

davidhaskins
источник
Несмотря на растущую популярность, Crypto не уникален для программного обеспечения.
Дж.Б. Уилкинсон
Крипто не так сложно. Проблема в том, что безопасность не может быть легко проверена, поэтому вы замечаете свои ошибки только тогда, когда вас взломают. Но отсутствие тестируемости относится к большинству форм информационной безопасности, а не только к криптографии.
CodesInChaos
4

Операционные системы, особенно та часть, которая связана с многопоточностью.

И причина не в том, что было так сложно заставить 5 философов есть пиццу вилкой. Причина в том, что написание многопоточного кода само по себе сложно и не обязательно легко для человеческого (по крайней мере, мужского - по мнению моей жены) ума.

Питер Тернер
источник
9
Пусть ваша жена напишет многопоточный код тогда :)
3
Помните, что когда дело доходит до многопоточности с разделяемой памятью, компьютер - это хитрая свинья, которая хочет вас заполучить. Вдвойне так при работе с многоядерным процессором; одно ядро ​​может отвлекать вас перед вашими глазами, где вы смотрите, а другое может затем пойти позади вас и нанести удар вам в спину.
Донал Феллоуз
3

Я тоже голосую за дизайн компилятора. Особенно, когда речь идет о DFA и NFA. Мне также не очень ясно о проблемах с NP и прочем.

Юва
источник
Да, мне было бы сложнее с компиляторами, если бы я сначала не взялся за теорию вычислений.
Питер Тернер
DFA и NFA - это куриный корм. Подождите, пока вам не придется выполнять LALR (1) анализ.
Дэвид Торнли
3

Теория массового обслуживания

Технически это отрасль математики, но она очень актуальна в CS.

Почти все в CS основано на очередях (видимых (очевидных) и невидимых (не столь очевидных или подразумеваемых)).

В первые дни CS очереди были очевидны.
Очередь программ (каждая программа колода карт).

В настоящее время очереди не так очевидны. Интернет, например: сеть с коммутацией пакетов, но пакеты формируют очереди, и маршрутизация пакетов является формой минимизации очереди.

Мартин Йорк
источник
Привет! (Вы являетесь (программистом на Лиспе)
Марк C
Не (Столько, сколько (Можно (см.), Но (Это было (известно)). Быть)).
Мартин Йорк
3

Числовой анализ

Это не слишком сложно для проблем с игрушками, которые вы задали в курсе, но как только вы начинаете рассматривать реальные проблемы, это превращается в серьезную рутинную работу.

Питер Тейлор
источник
2

Интерпретация требований клиента, когда клиент не знает, чего он хочет. Этому не учат в колледже, и это один из самых важных навыков.

Стивен Стрига
источник
1
Я не уверен, что согласен с этим как с концепцией информатики. Я также не понимаю, как это можно решить с помощью научного метода.
jmort253
@ jmort253 - Это правда, но компьютерная наука пытается (на мой взгляд, безуспешно) исследовать эту область с помощью формальных методов проектирования и валидации.
Mouviciel
Я согласен, что это не концепция «информатики», но когда я начинал свою карьеру, я не знал / не замечал того факта, что клиенты не знают, чего хотят. Я думал, что ВСЕ программные проекты шли с каким-то формальным документом по требованиям. Может быть, тема лекции для курса разработки программного обеспечения (может быть, мой колледж не освещал это)?
Стивен Стрига
1

Лично у меня была Формальная логика. Начать было тяжело, но как только вы разобрались с правилами и сумели поиграть с ним достаточно, ваш мозг заработал Logic++;, что в разработке очень хорошо.

Как примечание, я отвечаю на вопрос напрямую - это был определенно не самый сложный предмет, когда я получил степень, но это был, вероятно, самый сложный предмет, применимый в реальной жизни.

Кайл Розендо
источник
Формальная логика - это то, с чем у меня были отношения любовь / ненависть. Мне нравилось продумывать концепции, но я никогда не мог понять, как это помогло мне, до тех пор, пока я не столкнулся с реальными проблемами, которые требовали логического мышления.
jmort253
@ jmort253 - Это было то же самое для меня. Я даже боролся до такой степени, что думал, что потерплю неудачу, учился так долго и усердно, что это, наконец, щелкнуло в моей голове. После этого преимущества были удивительными.
Кайл Розендо
1

Конструкции компилятора. Сложно, но нужно понимать концепции, лежащие в основе

Nipuna
источник
5
Вы должны проголосовать за тот же ответ, который был предоставлен перед вами, а не за тот же ответ снова.
Абимаран Кугатасан
1

Kernel Design кто-нибудь? Ну, я действительно не знаю, как это делается и каковы целевые функции для ОС, но для меня размышления о разработке ядра должны быть непростой задачей.

Я также думаю о компьютерной безопасности ; Я действительно не знаю, что делает систему небезопасной, кроме, конечно, явных переполнений буфера, инъекций XSS и SQL.

Я не уверен, но кажется, что некоторые алгоритмы также небезопасны; Посмотрите на проект MetaSploit, в нем перечислены все типы и виды нарушений безопасности: вы можете увидеть, что существует множество способов, с помощью которых программа может иметь недостатки.

jokoon
источник
1

В этой области есть много неловких тем, но я выбираю из-за непрекращающихся трудностей те, которые связаны с глобальными свойствами системы . Примеры этой общей темы включают в себя:

  • Безопасное и безблокировочное многопоточность
  • Безопасность

Это трудно, потому что вы ищете что-то, что существует только тогда, когда все правильно; вам нужно глобальное системное свойство и все же практически все доступные инструменты (и все те, которые в моем опыте соответствуют масштабам реальных проблем) действительно используют только локальные рассуждения. Это трудный процесс перехода от рассуждений о кусочках программы ко всему шебангу, особенно потому, что вполне возможно иметь кусочки, которые все верны сами по себе, но там, где все еще есть тонкие ошибки, потому что компоненты расположены неправильно; У жуков могут быть нежелательные эмерджентные характеристики…

Donal Fellows
источник
0

Услуги по управлению информацией Во время учебы в колледже у меня был один предмет управления каждый семестр, и это меня бесило.
Tough! а такие предметы , как Compiler Design , OS Design и т.д. жестки , но они действительно интересные и сложные. Я действительно запутался в таких предметах, как Информационная система управления / Услуги и т. Д., Так как они полны скуки, и вам придется пройти через много теории.

рейнджер
источник
2
Полный скуки, потому что они говорят о концептуальных тонкостях каждой системы, в то время как половина людей никогда не писала какую-либо систему самостоятельно (но они наверняка использовали множество). Кроме того, семинары используют так много загруженных слов, но не могут привести реальный пример на простом английском языке. Как и системы поддержки принятия решений ... не могли бы вы просто скинуть несколько скриншотов отчетов Google Analytics, FML, просто чтобы вывести учеников на одну и ту же страницу, прежде чем у вас начнется интеллектуальный оргазм перед аудиторией.
Филипп Дупанович
0

Если вы работаете в C / C ++, указатели являются наиболее важной концепцией, которую нужно знать. Но так или иначе я никогда не понимал это полностью в колледже.

Маной Р
источник
12
действительно? Я имею в виду, что каждый человек индивидуален, но я думаю, что есть много (я имею в виду, много ) тем сложнее, чем просто указатели . Например, Computer's Architecture , Assambler, которые каким-то образом связаны с указателями ;)
Оскар Медерос
Да, но вам будет намного проще понимать ссылки на память через ассемблеры, потому что вы на самом деле работаете с необработанными указателями, в то время как в C / C ++ вы работаете со ссылками на указатели, что просто вводит людей в заблуждение, потому что абстракция никогда не обсуждается открыто. около.
Филипп Дупанович
2
Ах, ассамблер, лучший программистский чай
Мэтт Эллен
Парень задал темы, которые сложны, но важны, отсюда и указатели.
Маноджи Р
@Matt: Вы только что сделали мой день: D @Manoj R: Указатели тривиальны, если вы просто думаете о них как о доступе к массиву. Или доступ к массиву затруднен?
back2dos
0

Разработка и анализ алгоритмов. Дело не в том, что трудно понять и проанализировать известные алгоритмы, а в том, что разработка и анализ новых алгоритмов для сложных задач трудны и требуют широкого понимания многих областей и практики применения различных методов.

philosodad
источник
0

Ограниченное программирование. который имеет дело с комбинаторными проблемами, NP-полными проблемами.

Sorantis
источник
0

Оптимизация алгоритма - сложная тема.

Рейчел
источник
0

Какой самый сложный предмет / теория КС вы изучали, но которые важны для этой области?

Дискретная математика

Это было трудно, потому что теории очень слабо связаны друг с другом, но они используются в CS. Слишком много запоминания, я думаю ...

Доказательство Индукция, Большой О, рекурсия, разделяй и властвуй, Теория графов, бла-бла ... аааа!

Компилятор для меня был прост, потому что мы должны были принять Теорию автоматов. ^^

mythicalprogrammer
источник
0

Z-нотация / формальные методы, которые повредили мой мозг в колледже. Главным образом потому, что я ненавидел это. Трудно намного легче, когда тебе нравится то, что ты делаешь, и намного сложнее, когда ты этого не делаешь.

Ян
источник
0

Мне нравятся ваши ответы (и я не забывал их голосовать), такие как компилятор, ядро ​​и т. Д., Но большинство программистов никогда не сталкивались с этими проблемами. Есть немного более простая, но более распространенная проблема: параллелизм - потоки, блокировка. Очень легко написать программу, которая выдает волшебные ошибки, если мы сделаем даже небольшую ошибку в архитектуре параллелизма.

Итак, я говорю, что это не самая сложная проблема в вычислительной технике, но поскольку она широко используется, она опасна.

ern0
источник
0

Объектно-ориентированного программирования

Вероятно, потому, что я порезался на Фортране и APL, но переход от строго процедурных языков к объектам был тем, с чем я боролся годами. Это не помогает так называемым «экспертам» писать противоречивые статьи и учебные пособия о том, что значит быть объектно-ориентированным, и о лучших / правильных способах построения объектно-ориентированных программ.

oosterwal
источник