Будучи в командировке на Белом море, я прочитал книгу под названием "Совершенный код" Стива Макконнелла.
Я считаю, что это книга, которую начинающий программист обязан прочитать в самом начале своей карьеры.
Это реально Главная Настольная Книга программиста, в которую надо периодически заглядывать, чтобы освежить память.
Так вот - я нашёл ВТОРУЮ главную книгу - и к огромной удаче, она выложена автором бесплатно в виде online-версии. Я тут попытался выразить, что я думаю по поводу этой книги - но так и не смог подобрать слова)) Поэтому приведу на примере.
Вот вы знаете, как работает компьютер? Что происходит в его железных мозгах, когда запускаете программу? Совершенно случайно, в качестве побочного эффекта, вы разберетесь в этом после прочтения одной из глав.
В книге есть глава, которая рассматривает в качестве примера фэнтези-игру, где у пользователя есть возможность добавлять свои заклинания без доступа к исходным кодами игры и перекомпиляции. Как можно реализовать такой функционал? Вариант 1 - добавить самописный интерпретатор, который будет считывать файл с описанием заклинания и исполнять. Сложно? Я думал, что сложно - нихуя. В статье на пальцах расписывается, как написать интерпретатор - и при прочтении осознание обрушивается на тебя, как будто архангелы затрубили в свои трубы. И это ещё цветочки на окраине поля, маленькие запыленные цветочки в пыли на обочине.
Интерпретатор медленный и жрет память. Более быстрый способ - написать виртуальную машину, которая будет считывать из файлов байт-код и его исполнять. Сложно? НИХУЯ !!! Пока ты удивлялся цветочкам, архангел размахнулся и хорошенько приложил тебя Волшебной Трубой Осознания прям по голове. Виртуальная машина? Делается просто, бах бах, вот так. Интерпретатор держит в памяти древовидную структуру объектов, байт-код линеен и потому быстр (труба осознания прилетает в голову), чтобы хранить данные по мере движения по байткоду используется стек (ещё удар). Реализовать цикл в байткоде? Просто goto на нужный элемент, с сохранением счетчика цикла в стек (труба осознания ревёт над ухом). Тут автор вкрадчиво подбирается к теме исполняемых процедур. Вызов процедуры - это тот же оператор goto с сохранением текущего места в байткоде в стек возврата. На словах про "стек возврата" ты буквально слышишь, как сраный архангел набирает в лёгкие воздух, и лавина осознания накрывает тебя с головой. Работа процессора, вызов функций, точка входа, хранение данных в стеке, хранение параметров в регистрах, стек возврата — всё это складывается в цельную картину. Ты читал про разработку игры? Поздравляю - теперь ты знаешь, как работает реальный процессор.
И это была всего одна глава из книги. Вот она на русском.
Я считаю, что это книга, которую начинающий программист обязан прочитать в самом начале своей карьеры.
Это реально Главная Настольная Книга программиста, в которую надо периодически заглядывать, чтобы освежить память.
Так вот - я нашёл ВТОРУЮ главную книгу - и к огромной удаче, она выложена автором бесплатно в виде online-версии. Я тут попытался выразить, что я думаю по поводу этой книги - но так и не смог подобрать слова)) Поэтому приведу на примере.
Вот вы знаете, как работает компьютер? Что происходит в его железных мозгах, когда запускаете программу? Совершенно случайно, в качестве побочного эффекта, вы разберетесь в этом после прочтения одной из глав.
В книге есть глава, которая рассматривает в качестве примера фэнтези-игру, где у пользователя есть возможность добавлять свои заклинания без доступа к исходным кодами игры и перекомпиляции. Как можно реализовать такой функционал? Вариант 1 - добавить самописный интерпретатор, который будет считывать файл с описанием заклинания и исполнять. Сложно? Я думал, что сложно - нихуя. В статье на пальцах расписывается, как написать интерпретатор - и при прочтении осознание обрушивается на тебя, как будто архангелы затрубили в свои трубы. И это ещё цветочки на окраине поля, маленькие запыленные цветочки в пыли на обочине.
Интерпретатор медленный и жрет память. Более быстрый способ - написать виртуальную машину, которая будет считывать из файлов байт-код и его исполнять. Сложно? НИХУЯ !!! Пока ты удивлялся цветочкам, архангел размахнулся и хорошенько приложил тебя Волшебной Трубой Осознания прям по голове. Виртуальная машина? Делается просто, бах бах, вот так. Интерпретатор держит в памяти древовидную структуру объектов, байт-код линеен и потому быстр (труба осознания прилетает в голову), чтобы хранить данные по мере движения по байткоду используется стек (ещё удар). Реализовать цикл в байткоде? Просто goto на нужный элемент, с сохранением счетчика цикла в стек (труба осознания ревёт над ухом). Тут автор вкрадчиво подбирается к теме исполняемых процедур. Вызов процедуры - это тот же оператор goto с сохранением текущего места в байткоде в стек возврата. На словах про "стек возврата" ты буквально слышишь, как сраный архангел набирает в лёгкие воздух, и лавина осознания накрывает тебя с головой. Работа процессора, вызов функций, точка входа, хранение данных в стеке, хранение параметров в регистрах, стек возврата — всё это складывается в цельную картину. Ты читал про разработку игры? Поздравляю - теперь ты знаешь, как работает реальный процессор.
И это была всего одна глава из книги. Вот она на русском.