Какой самый сложный предмет / теория КС вы изучали, но которые важны для этой области? А причина пожалуйста?
computer-science
Abimaran Kugathasan
источник
источник
Ответы:
«В компьютерной науке есть две серьезные проблемы: кеширование, присвоение имен и ошибки off-by-1»
источник
Честно говоря, конструкция компилятора!
источник
Разработка и анализ алгоритмов
Я думаю, что этот вопрос зависит от вашего учителя и от того, как этот предмет был организован в вашей карьере.
Анализировать алгоритмы может быть так сложно, как кто-то хочет. Примите во внимание, что есть нерешенные проблемы, и не только: проблемы, которые не могут быть решены.
Дело в том, что у вас может быть проблема, и если вы знаете, что она не может быть решена, это прекрасно. Но что, если вы этого не сделаете? Вы можете потратить много времени, пытаясь продемонстрировать его NP-Complete или пытаясь найти решение за полиномиальное время для его решения.
Демонстрация NP-полноты не легка. Да, много проблем известно, но дело в том, чтобы найти сокращения, чтобы продемонстрировать, что это NP-Complete. А что если вы потратите много часов / дней / месяцев, пытаясь продемонстрировать это, и это можно решить за полиномиальное время? :)
Есть и другие предметы, такие как компиляторы , теория групп и примитивно-рекурсивные функции, которые могут быть настолько сложными, насколько этого требует предметный план или учитель;)
источник
Распознавание образов, т.е. искусственный интеллект. Это относится к интеллектуальным вычислениям наряду с другими инструментами распознавания образов, такими как оптическое распознавание символов, передача голоса в текст, идентификация лица и т. Д.
Многие из «крутых» вещей, которые вы можете или хотели бы делать с компьютерами, основаны на этих алгоритмах, и мы пытались усовершенствовать их в течение десятилетий без большого успеха.
источник
Мой выбор - теория вычислимости
(Хм ... может быть, это не так важно, но это было сложно)
источник
источник
теория категорий (дискретная математика), но оно того стоит
источник
криптография
Если вы сделаете это чуть-чуть неправильно, это может стоить компании миллионы.
источник
Операционные системы, особенно та часть, которая связана с многопоточностью.
И причина не в том, что было так сложно заставить 5 философов есть пиццу вилкой. Причина в том, что написание многопоточного кода само по себе сложно и не обязательно легко для человеческого (по крайней мере, мужского - по мнению моей жены) ума.
источник
Я тоже голосую за дизайн компилятора. Особенно, когда речь идет о DFA и NFA. Мне также не очень ясно о проблемах с NP и прочем.
источник
Теория массового обслуживания
Технически это отрасль математики, но она очень актуальна в CS.
Почти все в CS основано на очередях (видимых (очевидных) и невидимых (не столь очевидных или подразумеваемых)).
В первые дни CS очереди были очевидны.
Очередь программ (каждая программа колода карт).
В настоящее время очереди не так очевидны. Интернет, например: сеть с коммутацией пакетов, но пакеты формируют очереди, и маршрутизация пакетов является формой минимизации очереди.
источник
Числовой анализ
Это не слишком сложно для проблем с игрушками, которые вы задали в курсе, но как только вы начинаете рассматривать реальные проблемы, это превращается в серьезную рутинную работу.
источник
Интерпретация требований клиента, когда клиент не знает, чего он хочет. Этому не учат в колледже, и это один из самых важных навыков.
источник
Лично у меня была Формальная логика. Начать было тяжело, но как только вы разобрались с правилами и сумели поиграть с ним достаточно, ваш мозг заработал
Logic++;
, что в разработке очень хорошо.Как примечание, я отвечаю на вопрос напрямую - это был определенно не самый сложный предмет, когда я получил степень, но это был, вероятно, самый сложный предмет, применимый в реальной жизни.
источник
Конструкции компилятора. Сложно, но нужно понимать концепции, лежащие в основе
источник
Kernel Design кто-нибудь? Ну, я действительно не знаю, как это делается и каковы целевые функции для ОС, но для меня размышления о разработке ядра должны быть непростой задачей.
Я также думаю о компьютерной безопасности ; Я действительно не знаю, что делает систему небезопасной, кроме, конечно, явных переполнений буфера, инъекций XSS и SQL.
Я не уверен, но кажется, что некоторые алгоритмы также небезопасны; Посмотрите на проект MetaSploit, в нем перечислены все типы и виды нарушений безопасности: вы можете увидеть, что существует множество способов, с помощью которых программа может иметь недостатки.
источник
В этой области есть много неловких тем, но я выбираю из-за непрекращающихся трудностей те, которые связаны с глобальными свойствами системы . Примеры этой общей темы включают в себя:
Это трудно, потому что вы ищете что-то, что существует только тогда, когда все правильно; вам нужно глобальное системное свойство и все же практически все доступные инструменты (и все те, которые в моем опыте соответствуют масштабам реальных проблем) действительно используют только локальные рассуждения. Это трудный процесс перехода от рассуждений о кусочках программы ко всему шебангу, особенно потому, что вполне возможно иметь кусочки, которые все верны сами по себе, но там, где все еще есть тонкие ошибки, потому что компоненты расположены неправильно; У жуков могут быть нежелательные эмерджентные характеристики…
источник
Услуги по управлению информацией Во время учебы в колледже у меня был один предмет управления каждый семестр, и это меня бесило.
Tough! а такие предметы , как Compiler Design , OS Design и т.д. жестки , но они действительно интересные и сложные. Я действительно запутался в таких предметах, как Информационная система управления / Услуги и т. Д., Так как они полны скуки, и вам придется пройти через много теории.
источник
Если вы работаете в C / C ++, указатели являются наиболее важной концепцией, которую нужно знать. Но так или иначе я никогда не понимал это полностью в колледже.
источник
Разработка и анализ алгоритмов. Дело не в том, что трудно понять и проанализировать известные алгоритмы, а в том, что разработка и анализ новых алгоритмов для сложных задач трудны и требуют широкого понимания многих областей и практики применения различных методов.
источник
Ограниченное программирование. который имеет дело с комбинаторными проблемами, NP-полными проблемами.
источник
Оптимизация алгоритма - сложная тема.
источник
Дискретная математика
Это было трудно, потому что теории очень слабо связаны друг с другом, но они используются в CS. Слишком много запоминания, я думаю ...
Доказательство Индукция, Большой О, рекурсия, разделяй и властвуй, Теория графов, бла-бла ... аааа!
Компилятор для меня был прост, потому что мы должны были принять Теорию автоматов. ^^
источник
Z-нотация / формальные методы, которые повредили мой мозг в колледже. Главным образом потому, что я ненавидел это. Трудно намного легче, когда тебе нравится то, что ты делаешь, и намного сложнее, когда ты этого не делаешь.
источник
Мне нравятся ваши ответы (и я не забывал их голосовать), такие как компилятор, ядро и т. Д., Но большинство программистов никогда не сталкивались с этими проблемами. Есть немного более простая, но более распространенная проблема: параллелизм - потоки, блокировка. Очень легко написать программу, которая выдает волшебные ошибки, если мы сделаем даже небольшую ошибку в архитектуре параллелизма.
Итак, я говорю, что это не самая сложная проблема в вычислительной технике, но поскольку она широко используется, она опасна.
источник
Объектно-ориентированного программирования
Вероятно, потому, что я порезался на Фортране и APL, но переход от строго процедурных языков к объектам был тем, с чем я боролся годами. Это не помогает так называемым «экспертам» писать противоречивые статьи и учебные пособия о том, что значит быть объектно-ориентированным, и о лучших / правильных способах построения объектно-ориентированных программ.
источник