Подтвердить что ты не робот

Какие книги следует читать, чтобы получить высшее образование в области компьютерных наук?

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

С этой целью я купил и начал читать несколько академических учебников:

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

Мои вопросы:

  • Какие темы не охватываются этой коллекцией?
  • Существуют ли более строгие или тщательные (или даже более простые) книги, чем книги, перечисленные здесь?
  • Есть ли какие-нибудь книги, которые являются пустой тратой моего времени?
  • В каком порядке я должен читать книги?
  • Что делает MIT или Stanford (или UCB или CMU...) учиться, что я могу пропустить?

Книги по разработке программного обеспечения приветствуются, но только в контексте академического обучения. Я знаю Code Complete и Pragmatic Programmer, но я ищу более теоретический подход. Благодарю!

4b9b3361

Ответ 1

Самые большие два пропущения я вижу:

Для операционных систем я предпочитаю Tanenbaum вместо Silberschatz, но оба хороши:

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

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

Вам не хватает логика и дискретная математика книги.

И не забывайте о том, что книги теории баз данных

Ответ 2

Лучший подход, который я нашел, - это выбрать свой любимый университет, зайти на их сайт и проверить курсы для получения степени. Многие из крупных имеют свои обязательные чтения, опубликованные для каждого курса. MIT Open Course Ware - хороший пример.

Это, кстати, работает и для программ, не связанных с CS.

Ответ 4

MIT представила свою программу OpenCourseWare несколько лет назад. Они ставят книги/домашние задания/лекции в режиме онлайн, поэтому вы можете следовать учебной программе MIT:

http://web.mit.edu/catalogue/degre.engin.ch6.shtml

Ответ 5

Многие курсы в лучших университетах не используют учебник, потому что ни одна из доступных книг не является достаточно хорошей. (Я получил образование в Принстоне и преподавал в Гарварде 8 лет). Когда кто-то рекомендует книгу, спросите, действительно ли книга действительно хороша, или если она просто , лучше всего доступно в поле.

Например, в компиляторах я не большой поклонник "Книги Дракона"; Мне никогда не нравился этот подход, и нынешнее издание очень устарело. Я думаю, вам будет лучше с такой книгой, как Майкл Скотт Язык программирования Pragmatics, который, хотя бит scattershot - прекрасная книга для чтения. (Я никогда не учил этому, поэтому я не могу сказать, что думают об этом студенты). Я не знаю действительно хорошей книги о создании компилятора для автодидакта, хотя вы можете посмотреть на Купера и Торчона Разработка компилятора, поскольку он обновлен и написан двумя лучшими инженерами-компиляторами в бизнесе.

Ответ 6

Извините, вы не можете заменить четырехлетний университет, читая книгу или несколько книг, независимо от того, насколько хороши книги. Если бы вы могли, зачем кому-то идти в университет?

Ответ 7

Во-первых, я бы не стал беспокоиться об этом. Но если вы хотите, чтобы книга выучила некоторые абстрактные идеи CS, я бы рекомендовал The Turing Omnibus или Теоретическое введение в программирование.

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

Ответ 8

Я, вероятно, не могу предложить лучшие книги, но есть несколько важных тем, которые вам не хватает:

  • Статистика
  • Линейная алгебра
  • Теория графов и дискретная математика
  • Компьютерная графика
  • Научные вычисления
  • Компьютерные сети
  • Разработка программного обеспечения
  • Структуры данных

Некоторые темы, которые могут считаться более "необязательными", могут быть:

  • Криптография
  • Обработка изображений/шаблонов и признание
  • Биоинформатика
  • Интернет-вычисления
  • Классическая физика

Ответ 9

Элементы вычислительных систем

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

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

Вы можете просмотреть некоторые главы примеров, а также играть с симуляторами здесь.

Настоятельно рекомендуется! (Даже для выпускников CS)

Ответ 10

  • Дискретная математика я и II (мой частный школа)
  • Физика я (штат Миссури) школы)
  • Статистика I
  • Криптография (необязательно, но мне понравилось это)
  • OpenGL в С++ (необязательный, но аккуратный)
  • Системный анализ и проектирование (программное обеспечение инженерное дело от бизнеса перспектива. Класс был таким.)

  • Этика.

  • Сеть (учит сети   алгоритмы, битовые шаблоны   с сетевыми данными).

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

Чтение книг по этим предметам не означает, что вы их знаете. Выполнение математики по математике, кодирование кода и т.д. Помогает понять и показывает, что вы знаете предмет в конце.

Ответ 12

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

Кроме того, я не вижу никакой книги, охватывающей компьютерные сети... почему бы вам не попробовать Andrew Tanenbaum Компьютерные сети?

Ответ 13

Прежде всего, прочитайте Информатика: современное введение. Это даст вам хорошее обоснование и обзор тем, которые предстоит преследовать.

Введение в алгоритмы очень хорошо. Для введения в функциональное программирование я рекомендую работать с ML для рабочего программиста.

Области, которые отличает компьютерного ученого от программиста: обоснование дискретной математики, базовое понимание архитектуры СБИС и систем, понимание основ криптографии и безопасности, понимание теории вычислимости, понимание теории информации.

Ответ 14

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

И само собой разумеется, что вы не можете действительно заниматься информатикой, просто читая книги. Чтобы действительно понять каждую тему, вам нужно делать в ней проекты. Я бы также предложил посмотреть MIT Open Courseware, где преподаватели выкладывают учебный план, лекции и задания.

Ответ 15

Конкретная математика

Ответ 18

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

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

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

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

Ответ 19

Структуры файлов: объектно-ориентированный подход с С++

Много хорошей информации о блочных устройствах и структурировании файлов, которые вы не найдете ни в одной из перечисленных вами книг. Он получил несколько критических обзоров на Amazon, потому что людям не нравились его примеры кода, но суть книги - научить концепциям, а не давать примеры вырезания и вставки кода.

Также не забудьте получить книгу о компиляторах

Ответ 21

"Банда четырех" Книга "Дизайн шаблонов" . Курс "Образцы дизайна", который я получил в колледже, был, вероятно, самым полезным классом, который я когда-либо занимал.

Ответ 22

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

Убейте этот список дальше, как только я закончу их...: -)