Найскладніший предмет / теорія з інформатики? [зачинено]


17

Який найважчий предмет / теорія CS, який ви вивчали, але важливий для цієї галузі? А причина будь ласка?


3
Я думаю, що це багато в чому залежить від того, хто вивчає предмет, і того, хто його викладає
Махмуд Хоссам

Відповіді:



35

Чесно кажучи, побудова компілятора!


13
+1 Компілятори були найскладнішими та найкориснішими.
дієтабудди

3
Це було там з найбільшою роботою над всіма роботами та гарною підготовкою до грубого кодування, але я не думаю, що це було все так складно. Можливо, складніше без використання YACC або будь-яких інших інструментів, якими ми користувалися, я не знаю.
Пітер Тернер

4
Компілятори насправді лише важкі, оскільки більшість теорії датуються часом шалено жорстких апаратних обмежень, і багато формальної інструкції не надто далеко вийшли за рамки цього. Погляньте на " Давайте побудуємо компілятор", щоб побачити, наскільки просто може бути написання компілятора, якщо ви підходите до нього з іншого кута.
Мейсон Уілер

1
@Martin York, як автор-компілятор, я думаю, що складність реалізації компіляторів сильно завищена. Взагалі компілятор набагато простіше, ніж інтерпретатор. Я підозрюю, що в цьому винні Книги Драконів, вони пропонують найскладніші способи робити прості речі і приділяють занадто багато уваги найменш важливому кроку, а саме розбору.
SK-логіка

1
@Martin York, існують методи збереження AST якомога простішими та ретельними, незалежно від того, наскільки складна мова мови. Також існує ряд дуже простих, але потужних прийомів утримання кожного етапу складання тривіального та ізольованого.
SK-логіка

22

Дизайн та аналіз алгоритмів

Я думаю, що питання залежить від того, у кого ви були вчителі, і як цей предмет був організований у вашій кар’єрі.

Аналіз алгоритмів може бути таким же важким, як хтось хоче. Порахуйте, що є невирішені проблеми, і не тільки це: проблеми, які неможливо вирішити.

Вся справа в тому, що у вас може виникнути проблема, і якщо ви знаєте, що її неможливо вирішити, це ідеально. Але що робити, якщо цього не зробити? Ви можете витратити багато часу, намагаючись продемонструвати, що це NP-Complete, або намагаючись знайти поліноміальне рішення часу для його вирішення.

Продемонструвати NP-комплектність непросто. Так, відомо багато проблем, але справа в тому, щоб знайти скорочення, щоб продемонструвати, що це NP-Complete. А що, якщо ви витрачаєте багато годин / днів / місяців, намагаючись продемонструвати це, і це можна вирішити за багаточлен? :)

Існують також інші предмети, такі як « Компілятори» , «Теорія груп» та « Примітивні рекурсивні функції», які можуть бути такими ж важкими, як тематичний план або бажає вчитель;


1
s / Аналіз / Аналіз ... інакше саме те, що я думаю ... примітивні рекурсивні функції, ура!
Фелікс Домбек

Погодився, я заплутався через ступінь бакалавра, ніколи не будучи впевненим, що я колись успішно "довів" що-небудь (хоча моє заняття з алгоритмів було занадто простим, завдяки професору)
Пітер Тернер

Я покажу вам в наші дні, наскільки важкими можуть бути алгоритми :)
Оскар Медерос

18

Розпізнавання шаблонів, тобто Штучний інтелект. Це стосується розумних обчислень разом з іншими інструментами розпізнавання шаблонів, такими як Оптичне розпізнавання символів, Голос до тексту, Ідентифікація обличчя тощо.

Багато «крутих» речей, які ви можете зробити або бажаєте зробити з комп’ютерами, покладаються на ці алгоритми, і ми десятиліттями намагалися вдосконалити їх без великого успіху.


Це важко, бо це не те, що детерміновано. Розробка хорошого розпізнавання шаблонів AI вимагає експериментування для кожної програми, для якої ви хочете його використовувати, щоб переконатися, що ви вибираєте правильний алгоритм, потрібні функції тощо ...
Кен Блум,

1
Я тільки починаю підніматися на цю конкретну гору (розпізнавання візерунків). Це важко. МНОГО математики. Великі, величезні, залякують купи математики, дивлячись на мене назад, зважуючи мене вступити.
Девід Пул

ну ... розпізнавання шаблонів також можна розглядати як прикладну статистику, це не просто проблема в межах CS
aggietech

12

Мій вибір - теорія обчислюваності

(Хм ... може, це не так важливо, але це точно було складно)


2
Я погоджуюся, і я б особисто узагальнив це як en.wikipedia.org/wiki/Theory_of_computation .
Метт H

Я погоджусь, що теорія обчислень була важкою, але це також було одним з моїх улюблених предметів. Зрозуміло, я двічі займався математикою ...
Poindexter

+1 Я теж подвійний. Я міг би впоратися із вступом до цього матеріалу, але випускний варіант ... радий, що я його кинув!
Робота

було важко, ми не знаємо про нього так багато, що це не має великого значення.
Відображення імені


7

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


Які конкретні переваги ви отримали від вивчення теорії категорій?
zvrba

@zvrba: глибше розуміння технік абстрагування та картографування проблем
Стівен А. Лоу

Звідки ти це навчився?
zvrba

@zvrba: Я не бачу книги на своїй книжковій полиці, вона, мабуть, зберігається (реконструюється), але я думаю, що це була книга amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Стівен А. Лоу

6

Криптографія

Якщо ви зробите це злегка неправильно, це може коштувати компанії мільйонів.


Незважаючи на все більшу популярність, Crypto не унікальний для програмного забезпечення.
JBRWilkinson

Крипто не так складно. Проблема полягає в тому, що безпеку неможливо перевірити легко, тому ви помічаєте свої помилки лише тоді, коли хтось вас зламає. Але відсутність перевірки стосується більшості форм ІТ-безпеки, а не лише криптовалюти.
CodesInChaos

4

Операційні системи, особливо та частина, яка має щось спільне з нанизуванням різьби.

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


9
Дозвольте дружині написати багатопоточний код тоді :)

3
Пам'ятайте, що коли мова заходить про багатопоточність спільної пам’яті, комп’ютер - це підлий свиня, який має намір вас отримати. Удвічі так при роботі з багатоядерним процесором; одне ядро ​​може відволікати вас перед очима, де ви дивитесь, а інше потім може піти за вами і колоти вас у спину.
Дональні стипендіати

3

Я теж голосую за дизайн компілятора. Особливо там, де йдеться про частину ДФА та НФА. Я також не так чітко розумію проблеми та інше.


Так, мені було б складніше з «Компіляторами», якби я не взяв спочатку Теорію обчислень.
Пітер Тернер

DFA та NFA - корм для курчат. Зачекайте, поки вам доведеться зробити розбір LALR (1).
Девід Торнлі

3

Теорія черги

Добре технічно це галузь математики, але дуже актуальна в КС.

Майже все в CS засноване на чергах (видимих ​​(очевидних) та невидимих ​​(не настільки очевидних чи мається на увазі)).

У перші дні ЦС черги були очевидні.
Черга програм (кожна програма колода карт).

Нині черги не такі очевидні. Наприклад, Інтернет: мережа з комутацією пакетів, але пакети утворюють черги, а маршрутизація пакетів - це форма мінімізації черги.


Гей! (? Ви (програміст Lisp)
Марк C

Не (скільки (можна було б (див.), Але (це було (було відомо)).
Мартін Йорк

3

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

Проблеми з іграшками, які вам даються в курсі, не надто важкі, але, коли ви починаєте розглядати реальні проблеми, це перетворюється на серйозну жорстокість.


2

Інтерпретація вимог клієнта, коли клієнт насправді не знає, чого хоче. Це не викладається в коледжі, і це одна з найважливіших навичок.


1
Я не впевнений, що згоден з цим, як з концепцією інформатики. Я також не бачу, як це можна вирішити за допомогою наукового методу.
jmort253

@ jmort253 - Це правда, але інформатика намагається (безумовно, на мою думку) досліджувати цю сферу формальними методами проектування та валідації.
mouviciel

Я згоден - це не концепція "інформатики" - але коли я розпочав свою кар'єру, я не знав / не звертав уваги на те, що клієнти не знають, чого хочуть. Я думав, ВСІ програмні проекти поставлені з якоюсь формальною вимогою док. Можливо, тема лекції для курсу інженерії програмного забезпечення (можливо, мій коледж не висвітлював це)?
Стівен Стрига

1

Особисто моя була формальною логікою. Почати з цього було важко, але як тільки ти зведеш правила і встигнеш з ним достатньо пограти, твій мозок іде Logic++;, що в розвитку дуже хороша річ.

Як зауваження, я відповідаю на запитання безпосередньо - це, безумовно, не було найскладнішим предметом, коли я робив ступінь, але це, мабуть, найскладніший предмет у реальному житті.


Формальна логіка - це те, з чим я мав стосунки кохання / ненависті. Мені подобалось продумувати поняття, але я ніколи не міг зрозуміти, як це допомагало мені, поки пізніше я не зіткнувся з проблемами реального світу, які вимагали логічного мислення.
jmort253

@ jmort253 - Це було для мене саме так. Я навіть боровся до думки, що не зможу цього, так довго і наполегливо вчився, поки нарешті не клацнув мені в голові. Після цього користь була дивовижною.
Кайл Розендо

1

Конструкції компілятора. Важко, але треба зрозуміти поняття, що стоять за цим


5
Ви повинні дати повторне голосування за ту саму відповідь, яку було надано перед вами, а не знову давати ту саму відповідь.
Абімаран Кугатасан

1

Кернел Дизайн кого? Ну, я не знаю, як це робиться і які цільові функції для ОС, але для мене думка про створення ядра повинна бути непростим завданням.

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

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


1

У цій галузі є багато незручних тем, але мої вибори для постійних труднощів - це ті, що стосуються властивостей глобальної системи . Приклади цієї загальної теми включають:

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

Це важко, тому що ти шукаєш те, що існує лише тоді, коли все правильно; вам потрібна властивість глобальної системи, але практично всі наявні інструменти (і всі ті, що відносяться до справжніх проблем, на мій досвід) лише справді мають місцеві міркування. Це процес переходу від міркувань про фрагменти програми до цілого шебангу, який важкий, особливо тому, що цілком можливо мати фрагменти, які самі по собі правильні, але там, де все ще є непомітні помилки, оскільки компоненти неправильно розташовані; помилки можуть бути небажаними особливостями ...


0

Інформаційні послуги з менеджменту У період навчання в коледжі у мене був один предмет управління кожний семестр, що цілком зводило мене з розуму.
Жорстко! а такі предмети , як Compiler Design , OS Design і т.д. жорсткі , але вони дійсно цікаві і складні. Я дуже заплутався в таких предметах, як інформаційна система управління / послуги тощо, оскільки вони сповнені нудьги, і вам доведеться пройти багато теорії.


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

0

Якщо ви працюєте в C / C ++, покажчики - це найважливіша концепція, яку потрібно знати. Але я якось не зрозумів це повністю в коледжі.


12
справді? Я маю на увазі, кожна людина різна, але я думаю, що тут є багато (я маю на увазі, багато ) тем, які складніші, ніж просто покажчики . Наприклад, Архітектура комп’ютера , Ассамблер, який певним чином пов’язаний з покажчиками ;)
Оскар Медерос

Правда, але зрозуміти посилання на пам'ять через асемблери простіше, тому що ти фактично працюєш із сирими вказівниками, тоді як на C / C ++ робота з посиланнями на покажчики, що просто заплутує пекло людей, оскільки абстракція ніколи не відверто розмовляєш о.
Філіп Дупанович

2
Ах ассамблер, найкращий чай програміста
Метт Еллен

Хлопець задав важкі, але важливі теми, отже, покажчики.
Маной Р

@Matt: Ти щойно зробив мій день: D @Manoj R: Покажчики тривіальні, якщо ти просто вважаєш їх доступом до масиву. Або важкий доступ до масиву?
back2dos

0

Проектування та аналіз алгоритмів. Не так вже й важко зрозуміти та проаналізувати відомі алгоритми, це спроектувати та проаналізувати нові алгоритми для важких проблем, і це вимагає широкого розуміння багатьох областей та практики застосування багатьох різних методик.


0

Програмування обмежень. який стосується комбінаторних проблем, проблем, повних NP.



0

Який найважчий предмет / теорія CS, який ви вивчали, але важливий для цієї галузі?

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

Це було важко, оскільки теорії дуже слабко пов'язані між собою, але вони використовуються в CS. Я думаю, що занадто багато запам'ятовування ...

Доведення індукцією, великим O, рекурсією, діленням і підкоренням, теорією графіків, бла-бла ... argh!

Компілятор для мене був легким, адже нам довелося взяти Теорію автоматів. ^^


0

Z позначення / формальні методи, що використовуються для пошкодження мого мозку в коледжі. Головним чином тому, що я ненавидів її. Важко набагато простіше, коли тобі подобається, що ти робиш, і набагато важче, коли ти цього не робиш.


0

Мені подобаються ваші відповіді (і я не забув їх відкликати), як компілятор, ядро ​​тощо, але більшість програмістів ніколи не стикалися з цими проблемами. Існує трохи простіше, але більш поширене питання: паралельність - нитки, блокування. Написати програму, яка створює магічні помилки, дуже просто, якщо ми зробимо навіть невелику помилку в архітектурі одночасності.

Тож, я кажу, це не найскладніша проблема в обчислювальній техніці, але оскільки вона зазвичай використовується, вона небезпечна.


0

Об'єктно-орієнтоване програмування

Можливо, тому, що я різав зуби на FORTRAN та APL, але перехід від суто процедурних мов до предметів - це те, з чим я боровся протягом багатьох років. Це не допомагає так званим "експертам" писати суперечливі статті та навчальні посібники про те, що означає бути об'єктно орієнтованими та найкращими / правильними способами побудови об'єктно-орієнтованих програм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.