Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Самые большие два пропуска я вижу:
Для операционных систем я предпочитаю Tanenbaum вместо Silberschatz, но оба хороши:
И о порядке, который зависел бы от Ваших интересов. Нет многих предпосылок, автоматы для компиляторов самый очевидный. Сначала прочитайте книгу автоматов и затем дракона один.
я не знаю все книги, которые Вы имеете, но те я знаю, достаточно хороши так, чтобы мог означать, что другие достойны также.
Вы пропускаете [приблизительно 113] логику и дискретная математика книги также.
И позволяют нам не забыть [приблизительно 115] книги теории баз данных !
Файловые структуры: объектно-ориентированный подход с C++
Много хорошей информации о блочных устройствах и структурировании файла, которое Вы не найдете ни в одной из книг, что перечислили. Это получило несколько критических обзоров на Amazon, потому что людям не нравились его примеры кода, но точка книги должна преподавать понятия, не дать вырезанные и вставленные примеры кода.
Также удостоверяются, что получили книгу по компиляторам
У Вас должна также быть книга по общим базам данных, не идя глубоко в специфические особенности Oracle, MySQL, SQL Server, и т.д.
я рекомендовал бы: Системы баз данных: Полная Книга
Книги по Профессиональному покрытию Разработки программного обеспечения, как проекты программного обеспечения работают, различные методологии, и разрабатывают скороговорки, являются замечательными. Знание веб-дизайна также очень полезно когда дело доходит до занятости.
я не понимаю, почему Вы пытаетесь сделать это сами все же. Даже 'посредственный в лучшем случае' университет будет в состоянии преподавать Вам навыки намного лучше, чем можно самостоятельно учиться. Именно все о встречающихся людях имеет опыт, на самом деле работающий в вычислительной промышленности.
Это не об университете, который это об усилии, которое Вы вставляете, который определяет, как хорошо Вы делаете.
Мой ответ, возможно, бесполезен Вам хотя, потому что я не знаю, откуда Вы. В Шотландии, где я живу, я добрался для учений в университете бесплатно, это не может иметь место для Вас.
Это - довольно хороший список. Этими двумя темами, которые я определенно добавил бы к соединению, является дискретная математика и сети. Другими темами, которые могут быть интересны Вам, являются компиляторы, компьютерная графика, распределенные операционные системы. Существуют также прохладные подполя AI, как машинное зрение и машинное обучение. И для обработки всего этого, Вам определенно нужны линейная алгебра и вероятность.
И само собой разумеется, что Вы не можете действительно сделать информатики, просто читая книги. Для реального понимания каждой темы необходимо сделать проекты в нем. Я также предложил бы смотреть на MIT, Открывают Courseware, где преподаватели отправляют программу, примечания лекции и присвоения.
Перед чем-либо еще читайте Информатика: современное Введение . Это даст Вам, хорошее основание и обзор предметов там должны преследовать.
Введение в Алгоритмы очень хорошо. Для введения в функциональное программирование я рекомендую работать до Мл для рабочего программиста .
области, которые дифференцируют программиста от программиста: основание в дискретной математике, основном понимании VLSI и системной архитектуры, понимании основ криптографии и безопасности, понимании теории вычислимости, понимании теории информации.
Я не знаю, как это находится в США, но в моей стране мы изучаем дискретную математику и введение в теорию графов перед формальными языками и автоматами.
кроме того, я не вижу, что какая-либо книга касается компьютерных сетей..., почему Вы не судите Andrew Tanenbaum Компьютерные сети ?
Я думаю, что можно использовать большинство других книг для ссылки и просто поглотить Жемчуг Программирования в целом. Выполнение так сделало бы Вас лучше, чем 90% программистов, которых я когда-либо встречал.
Во-первых, я не волновался бы об этом. Но если бы Вы хотели бы, чтобы книга изучила некоторые абстрактные идеи CS, я рекомендовал бы Автобус Turing или Теоретическое Введение в Программирование .
, Если бы я решал между наймом двух программистов, и ни у одного не было большого опыта, но у каждого был градус CS, и другой не сделал, я нанял бы тот с градусом CS. Но когда Вы добираетесь до сравнения двух программистов с дюжиной лет опыта, градус едва имеет значение.
Извините, Вы не можете заменить четыре года университета путем чтения книги или многих книг, неважно, насколько хороший книги. Если бы Вы могли, почему кто-либо учился бы в университете?
Много курсов в лучших университетах не используют учебник, потому что ни одна из доступных книг не достаточно хороша. (Я получил образование в Принстоне и преподавал в течение 8 лет в Гарварде.), Когда кто-то рекомендует книгу, спросите, ли книга действительно хороша или если это всего наилучшее имеющееся в поле .
, Например, в компиляторы , я не большой поклонник 'Книги Дракона'; мне никогда не нравился подход, и текущий выпуск очень устарел. Я думаю, что Вы были бы более обеспечены с книгой как Michael Scott Прагматика Языка программирования , который, хотя немного незапланированный является прекрасной книгой для чтения. (Я никогда не преподавал от него, таким образом, я не могу сказать, какие студенты думают о нем.) Я не знаю о действительно хорошей книге по конструкции компилятора для самоучки, хотя Вы могли бы посмотреть на Cooper и Torczon Разработка Компилятор , потому что это актуально и записано двумя из лучших инженеров компилятора в бизнесе.
Лучший подход, который я нашел, должен выбрать Ваш любимый Университет, перейдите к их веб-сайту и проверьте курсы для градуса. Многим большим опубликовали их необходимые чтения для каждого курса. MIT Открывает, Course Ware является хорошим примером.
Это, между прочим, работает на программы на получение степени неCS также.
Системный анализ и Дизайн (Разработка программного обеспечения с бизнес-точки зрения. Класс был так себе.)
Этика.
Сети (преподает сетевые алгоритмы, комбинации двоичных разрядов, имеющие дело с сетевыми данными).
существуют [приблизительно 1 113] вещи, которые для понимания их требуют справка; не обязательно профессор (tho они делают это для жизни), но возможно друг, который посещал урок или изучил поле.
книги Чтения по этим предметам не означают знание их. Выполнение математики на математике, кодирование на коде, и так далее - то, что помогает Вам понять и показывает, что Вы знаете предмет в конце.
Элементы вычислительных систем
Эта книга проведет вас от основ проектирования аппаратного обеспечения до написания программ на объектно-ориентированных языках. Используя симулятор, вы создаете полноценный компьютер. Затем вы пишете ассемблер, операционную систему, компилятор (для объектно-ориентированного языка, скомпилированного для работы на виртуальной машине), а затем игру, написанную с использованием этого языка.
Это большая работа, но авторы тщательно сделали задача максимально простая. Вам придется много работать над этим, но он дает вам полное представление о компьютерном программировании.
Вы можете просмотреть несколько примеров глав, а также поиграть с симуляторами здесь . . 1274] Настоятельно рекомендуется! (Даже для выпускников CS)
Я, вероятно, не могу предложить лучшие книги, но есть несколько важных предметов, которые вы отсутствуют:
Некоторые темы которые могут считаться более «необязательными», могут быть:
MIT представил свою программу «OpenCourseWare» несколько лет назад. Они размещают книги / домашние задания / лекции в Интернете, так что вы можете следить за учебной программой MIT:
"Банда четырех" Книга шаблонов дизайна . Курс по шаблонам дизайна, который я прошел в колледже, был, вероятно, самым полезным курсом, который я когда-либо посещал.
Concepts, Techniques and Models of Computer Programming seems to have the broadest overview I've seen of the various higher-level language programming styles and techniques.