Теоретичні ресурси самостійного вивчення інформатики для програмістів


14

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

Які ресурси ви б рекомендували тому, хто хоче дізнатися більше теорії шляхом самостійного вивчення? Чи є якісь теоретичні посібники з самостійного вивчення інформатики для інженерів програмного забезпечення?


3
Це залежить від того, про що ви хочете дізнатися. Арора-Барак дає ґрунтовне введення в теорію складності обчислювальної техніки (і є у вільному доступі в Інтернеті). Тож це гарне місце для початку.
Томас підтримує Моніку

4
Ви брали теоретичні курси в коледжі / університеті, як структура даних, алгоритми тощо? Якщо ви не брали звичайно необхідні курси з бакалавратської теорії, то підручники для цих курсів були б гарною відправною точкою. Після цього ви можете ознайомитись із статтями з вікіпедії, нашим списком книг та списком відео , онлайн-курсами в Coursera / Udacity / EdX / ... Coursera має досить хороші теоретичні курси.
Каве

Що ви навчалися в коледжі?
Омар Шехаб

На яких мовах ви програмуєте? Багато теоретичного КС можна вивчити в тандемі з чимось конкретним. Наприклад, якщо ви хочете дізнатися більше про формальні мови, регулярні мови / вирази (тобто regexp) - хороше місце для початку, як і вивчення для компіляторів. Для теорії типів ви можете грати зі статично набраною мовою, як haskell, F # або ML.
Baby Dragon

спробуйте New Turing Omnibus від Dewdney як широкий / доступний вступний перегляд / опитування / перетин. дивіться також поп-наукові книги, які надихають TCS
vzn

Відповіді:


7

Це широке поле з кількома зовсім різними областями.

Я б почав з деяких найбільш фундаментальних уявлень про те, що таке комп'ютери: Хопкрофт та Уллман, "Вступ до теорії автоматів, мов та обчислень".

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


1
Спасибі! Я не знаю, чи це щось змінює, але насправді я маю певну основу в доказовій математиці (я, мабуть, мав би згадати це у питанні). Я зробив реальний аналіз, заснований на доказі, топологію набору точок та абстрактну алгебру.
Генрі Х.

Тоді ви зможете дуже швидко пропрацювати це :)
Kate F

його різниця , але не різниця. CS тягне за собою багато інших принципів тощо
vzn

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

2
@JanJohannsen Я повністю не погоджуюся - наприклад, див. Невизначена поведінка для C.
Кейт F

9

Існує кілька способів дізнатися про теорію типів. Для працюючого програміста " Типи та мови програмування " Б. Пірса - хороший початок. Практичні основи мов програмування Р. Харпера також можуть бути хорошими. Якщо ви хочете трохи прочитати передумови з оперативної семантики, я рекомендую Г. Вінськеля, формальна семантика мов програмування: вступ . С Т. Ніпков, Г. Кляйн, Конкретна семантика, варіант книги Вінскеля був оформлений для інтерактивного помічника Ізабел / HOL. Я підозрюю, що дійсно важко впоратися з доказчиком саме з цієї (чи будь-якої) книги, ви хочете, щоб експерт поруч задав питання. Якщо ви хочете отримати більш математичний підхід до теорії типів, ви можете подивитися на Дж. Р. Хіндлі, Дж. П. Селдіна, . Хоча я б не рекомендував починати з Barendregt.Ламбда-обчислення та комбінатори: Вступ , або Хам Бардрегтт, обчислення лямбда з типами

Якщо ви хочете отримати єдину рекомендацію, я б сказав, прочитайте всі Pierce, за винятком частини VI (Системи вищого порядку) та застосуйте іграшкові мови, про які розповідає книга. Ви закінчите з сильним обґрунтуванням теорії типів, і, мабуть, і кращим програмістом.


2

Я рекомендую обчислюваність, складність та мови : Мартін Девіс, Рон Сігал та Елейн Вейкер.


Ось гарна книга для старожилів TCS. За винятком частини теоретичної семантики домену, яку можна пропустити.
Мартін Бергер

1

Я великий фанат теорії та алгоритмів. Я колись мав можливість відвідати теоретичні інформатики в Індійському технологічному інституті, Мадрас (IIT-M), Індія. Я дізнався про багато теоретиків там у IIT-M. Коли я поїхав туди, я не мав уявлення про те, що таке Теорія, але сьогодні я цілком люблю її.

Завдяки @Kate F за вказівник, так, Хопкрофт та Уллман - прекрасне місце для початку.

Однак ось як я почав,

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

  2. Слідкуйте за найкращими конференціями з теорії, як
    FOCS
    SODA
    STOC
    EC (Електронна комерція) - Алгоритмічна теорія ігор
    COLT (Конференція з теорії навчання) - Теорія навчання
    CRYPTO - Криптографія
    SOCG (Симпозіум з обчислювальної геометрії) - Обчислювальна геометрія
    CCC (Конференція на Комп'ютерна складність) - теорія складності

Навіть якщо ви не дуже добре розумієте, намагайтеся читати та ДУМАЙТЕ якомога більше. Ви повинні зробити якомога більше доказів ..

  1. Це дивовижне місце, на яке слід звернути увагу, якщо ви особливо думаєте про складність обчислювальної техніки ( Це зі Стенфорда ).
  2. Слідкуйте за професором Саньєєвим Аророю, Боазом Бараком, Джелані Нельсоном, Мадху Суданом
  3. Ось набір синтезованої інформації в області обчислювальної складності
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.