2008-09-27 4 views
35

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

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

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

Мои вопросы:

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

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

+0

Есть что-то с тем, как читается ваше вступительное предложение, я собирался редактировать, но не хотел рисковать словами во рту. :) – Kev 2008-09-27 15:08:26

+0

Спасибо. Я должен был сказать ученику, а не учиться. И я должен был прочитать пост до того, как я разместил сообщение. – 2008-09-27 15:13:27

+0

дискретная математика и статистика – 2008-12-20 05:15:52

ответ

9
+0

Я пробовал читать TAOCP в старшей школе после того, как сделал только небольшое программирование на Java. Некоторые из концепций в книге (регистрационные машины, язык MIX) были у меня над головой. Можете ли вы порекомендовать книгу, чтобы познакомить меня с некоторой базовой аппаратной архитектурой, которая подготовит меня к TAOCP? – 2008-09-27 15:09:18

+0

Вероятно, причина того, что эти типы книг хорошо идут в рамках курса колледжа. Профессор проводит вас. Дает вам ссылки и фокусирует вас на важных битах. Прошло 25 лет с тех пор, как я учился в университете, поэтому я не уверен, что рекомендовать. – dacracot 2008-09-27 15:14:18

+2

Книги TAOCP - это здорово, но не то, что каждый студент (даже в высшем университете) будет/должен читать. – ShreevatsaR 2009-06-08 03:49:05

13

Наибольшие два упущения я вижу:

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

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

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

Вам не хватает logic и discrete math книг.

И давайте не будем забывать некоторые database theory книг!

12

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

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

1

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

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

1

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

Introduction to Algorithms очень хорошо. Для ознакомления с функциональным программированием я рекомендую работать через ML for the working programmer.

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

+0

Введение в алгоритмы - это библия CS: D – anbanm 2008-09-27 15:20:56

+0

Нет, это будет TAOCP. – user9282 2008-09-27 16:16:09

1

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

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

2
  • Дискретная математика I & II (моя частная школа)
  • Physics I (Миссури большинство государственных школ)
  • Статистика I
  • Cryptography (необязательно, но мне понравилось его)
  • OpenGL в C++ (опционально, но аккуратно)
  • Системный анализ и проектирование (Программное обеспечение engineering f бизнеса перспективы. Класс был таким.)

  • Этика.

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

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

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

0

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

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

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

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

2

Я думаю, вы можете использовать большинство других книг для справки и просто поглотить Programming Pearls целиком. Это сделает вас лучше, чем 90% программистов, которых я когда-либо встречал.

1

Вы также должны иметь книгу на общих базах данных, не углубляясь в специфику Oracle, MySQL, SQL Server и т.д.

Я бы рекомендовал: Database Systems: The Complete Book

0

File Structures: An object oriented approach with C++

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

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

4

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

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

3

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

3

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

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

6

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

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

3

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

  • Статистика
  • Линейная алгебра
  • теории графов и дискретной математики
  • Компьютерная графика
  • Scientific Computing
  • Компьютерные сети
  • Software Engineering
  • Структуры данных

Некоторые темы, которые могут быть рассмотрены более "по желанию" может быть :

  • Cryptography
  • Обработка изображений/Pattern и распознавание
  • Биоинформатика
  • Интернет Компьютер
  • Классическая физика
3

The Elements of Computing Systems

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

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

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

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

0

«Банда четырех» Design Patterns book. Курс «Образцы дизайна», который я получил в колледже, был, вероятно, самым полезным классом, который я когда-либо занимал.

0

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

  1. Applying UML and patterns - Larman
  2. Introduction to algorithms - Cormen
  3. Discrete mathematics and its applications - Rosen
  4. Software Engineering
  5. Advanced Programming in the UNIX Environment

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

Смежные вопросы