Я хотел бы вернуться к основам CS. Любые предложения для учебных пособий или справочных материалов, ориентированных на приложения?

Я много лет программировал в качестве консультанта, и я обожаю свою работу, которая включает в себя много объектно-ориентированного анализа и проектирования программных систем с использованием управляемых языков (т.е. разработка программного обеспечения)., Но я хотел бы получить докторскую степень в конце концов, и это беспокоит меня, что я никогда не "получил" теорию компьютерных наук. В университете я только немного делал это на этих курсах, потому что то, как они учились, не работало для меня. Я узнаю, наблюдая за применением понятий, а не за запоминанием.

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

Как я буду изучать такие предметы, как компиляторы, теорию языка программирования и анализ алгоритмов? Что было бы хорошим способом начать работу над этим? Например, я хотел бы написать компилятор в конце концов (для удовольствия), но я не знаю, с чего начать. Кто-нибудь был в такой ситуации? Любые предложения для учебных пособий, бесплатные онлайн-лекции или ссылки (что-то вроде w3schools было бы замечательно)?

(Я бы хотел добавить, что просмотр Stackoverflow уже научил меня нагрузкам, но я бы хотел, чтобы это было немного более формально:)

EDIT: Спасибо всем за предложения. Я отметил ответ, который работает для меня лично, но продолжайте отвечать:)

Ответы

Ответ 1

Если вы планируете получить Ph.D. когда-нибудь, почему бы просто не вернуться в школу прямо сейчас? Есть тонны курсов, которые вам нужно принять в качестве доктора философии. кандидат, и поиск исследований в более поле CSish (алгоритмы и т.д.) поможет вам с этим предприятием еще больше.

Ответ 2

Мне нравится Sedgewick "Алгоритмы" (isbn 0201066734 1988 604p) потому что он говорит один через алгоритмы в разговорном стиле, и имеет хорошие примеры. См. Обзоры под Amazon. (Существует много вариантов выпусков, многотомная С++ Java и т.д.)

(Добавлен 2feb:) Алгоритмы являются фундаментальными и забавными, они довольно отдаленные — походы в высокой стране, а не ежедневное пробки.
Bentley "Программирование жемчуга" (isbn 0-201-65788-0 2000 239p pearls)
"полна небольших тематических исследований, реальных примеров и интересных упражнений для изучения того, как программировать".

Для проектов крупных командных программ Брукс "Мифический человек-месяц" (isbn 0201835959 2ed 1995 322p Amazon) является обязательным:
"концептуальная целостность продукта имеет решающее значение". И цитируя Парнаса на с. 221:

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

Наконец, визуализация /GUI/UI часто имеют много возможностей для улучшения. Я не знаю хорошей вводной книги в этой области, наравне с вышеизложенным; кто-нибудь еще?

Ответ 3

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

Мне больно, что я все еще не умею читать, но я уверен, что как только смогу.

Он должен быть отличной книгой, и лекции, предоставленные авторами, доступны в Интернете.

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

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

Ответ 5

Обычно я обнаружил, что книги по теории вычислительной техники не предназначены для массового потребления, в отличие от w3schools.com.

"Нет королевской дороги", как сообщается, сказал Евклид.

Я нашел книгу Хопкрофта и Ульмана о читаемых автоматах; он сильно теоретический, но я взял на него концепции высокого уровня как студент в колледже. Я нашел книгу Сары Баасе по алгоритмам хорошим (хотя и сухим) представлением. У Кормена есть книга об Алгоритмах, которая, вероятно, самый полный учебник, написанный в настоящее время.

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

Ответ 7

:) Я студент, который в настоящее время только что закончил курс дизайна компилятора. Существует эта книга Ахо, Ульмана и Сети, которая называется "Дизайн компилятора - принципы, методы и инструменты". Существует книга по теории языка программирования под названием "Практика программирования" - простота, ясность и общность Кернигана и Пайка, которые я только недавно начал... это доказывает, что это очень удобно. Приступая к видеокурсам, я знаю некоторые видеоресурсы, которые были бы очень полезными, но они полагают, что они могут стоить хотя бы одного взгляда, просто ресурсы Google NPTEL, наконец, я нахожу, что индийские авторские книги очень легко понять, поскольку я индийский, так как это похоже на то, что вы хотите начать все заново... вы можете проверить этот сайт на полезные вещи.. www.kicit.com... Счастливое обучение...:) Я с вами на идее изучения предметов более практично (например, и может быть, что лучше, чем личный опыт), чем теоретически... cya..:)

Ответ 8

Это может быть немного случайным, но Project Euler может быть довольно хорошим ресурсом для экспериментов с теоретическими и математическими аспектами информатики одновременно программируя.

Ответ 9

Я нашел iTunes U очень хорошим. Они имеют широкий спектр бесплатных материалов из удивительных колледжей, таких как MIT, Stanford и Caltech. Я не наблюдал за ними некоторое время, поэтому я не знаю, как они подходят вашему типу обучения, но это хорошая идея ИМО, чтобы посмотреть на что-то подобное, прежде чем снова начать школу, чтобы вы знали, что это будет возможно..