История изменений
Исправление SZT, (текущая версия) :
Человек изучающий, как работает оператор if/else явно не сможет осилить ни то, как работают иксы, ни ассемблеровские вставки.
Со временем сможет.
1) какой аудитории будет адресована книга?
Адресована тем, кто желает научиться программировать, понимать компьютер на низком уровне. А если же захочется идти к более высокоуровневым вещам, вроде PHP, Java, не ковыряясь во всяких непонятных ассемблерах — для этого другие книги есть.
2) чему книга должна научить (понять глубже стандарты, обращаться с технологиями программирования в среде unix или же получить основны алгоритмического программирования)
Все перечисленное, и еще больше. На выходе должен получиться человек, способный написать свою ОС, т.е. человек должен уметь делать все то, что нужно чтобы написать свою ОС. Про алгоритмы, структуры данных — должно быть про очереди, связные списки, двусвязные списки, деревья, графы, алгоритмы на графах, хеш-таблицы, всякие там задачи коммивояжера(NP-полные), динамическое программирование. Человек должен быть в состоянии выдумывать свои алгоритмы, про теорию сложности он тоже должен понимать, как и про всякие низкоуровневые штуки, вроде промахов кэша. Человек должен быть в состоянии написать интерпретатор, например придумать свой гипотетический процессор с неким набором инструкций, написать его интерпретатор(эмулятор) на Си и потом уметь писать под него код в машинных кодах в в 16-ричном редакторе.
Писать про теорию компиляторов, всякие там грамматики, LL-парсеры и прочие штуки из книги дракона — это уже наверное перебор, хотя с чем черт не шутит. А вот про конечные автоматы, поиск в строке по регулярке - это точно можно написать. И про JIT тоже можно мельком что-то написать.
Про архиваторы, теорию кодирования информации, написания собственного архиватора, криптографию — этого скорее всего не будет. Простенькие хеш-функции конечно же будут, это нужно для хеш-таблиц, которые точно стоит рассмотреть
Поиск в ширину, глубину, волновой алгоритм, всякие там алгоритмы на графах, сортировки разных видов — это должно быть безусловно.
Про 2D-3D графику, аффинные преобразования, квантерионы, матрицы поворота — вряд ли. 2D разве что на совсем базовом уровне.
Про всякую функциональщину — если и будет, то на самом базовом уровне. В ООП тоже никакого глубокого погружения не предполагается
3) насколько широко стоит охватывать обсуждаемую тему (где-то ограничиться одним примером, а где-то окунуться в историю технологии). «не надо так глубоко во все это нырять» - должна быть золотая середина между лаконичностью и выразительностью затронутой темы.
Вот я и хочу найти ту самую золотую середину. Хотя скорее всего тут не стоит особо заморачиваться. Кому мало — пусть дополняет, делает производную работу, и включает туда компиляторы, архиваторы и квантерионы с матрцами поворота. Это не будет нечто «окаменевшее» и не подлежащее доработке/улучшению
Исходная версия SZT, :
Человек изучающий, как работает оператор if/else явно не сможет осилить ни то, как работают иксы, ни ассемблеровские вставки.
Со временем сможет.
1) какой аудитории будет адресована книга?
Адресована тем, кто желает научиться программировать, понимать компьютер на низком уровне. А если же захочется идти к более высокоуровневым вещам, вроде PHP, Java, не ковыряясь во всяких непонятных ассемблерах — для этого другие книги есть.
2) чему книга должна научить (понять глубже стандарты, обращаться с технологиями программирования в среде unix или же получить основны алгоритмического программирования)
Все перечисленное, и еще больше. На выходе должен получиться человек, способный написать свою ОС, т.е. человек должен уметь делать все то, что нужно чтобы написать свою ОС. Про алгоритмы, структуры данных — должно быть про очереди, связные списки, двусвязные списки, деревья, графы, алгоритмы на графах, хеш-таблицы, всякие там задачи коммивояжера, динамическое программирование. Человек должен быть в состоянии выдумывать свои алгоритмы, про теорию сложности он тоже должен понимать, как и про вские низкоуровневые штуки, вроде промахов кэша. Человек должен быть в состоянии написать интерпретатор, например придумать свой гипотетический процессор с неким набором инструкций, написать его интерпретатор(эмулятор) на Си и потом уметь писать под него код в машинных кодах в в 16-ричном редакторе.
Писать про теорию компиляторов, всякие там грамматики, LL-парсеры и прочие штуки из книги дракона — это уже наверное перебор, хотя с чем черт не шутит. А вот про конечные автоматы, поиск в строке по регулярке - это точно можно написать. И про JIT тоже можно мельком что-то написать.
Про архиваторы, теорию кодирования информации, написания собственного архиватора, криптографию — этого скорее всего не будет. Простенькие хеш-функции конечно же будут, это нужно для хеш-таблиц, которые точно стоит рассмотреть
Поиск в ширину, глубину, волновой алгоритм, всякие там алгоритмы на графах, сортировки разных видов — это должно быть безусловно.
Про 2D-3D графику, афинные преобразования, квантерионы, матрицы поворота — вряд ли. 2D разве что на совсем базовом уровне.
Про всякую функциональщину — если и будет, то на самом базовом уровне. В ООП тоже никакого глубокого погружения не предполагается
3) насколько широко стоит охватывать обсуждаемую тему (где-то ограничиться одним примером, а где-то окунуться в историю технологии). «не надо так глубоко во все это нырять» - должна быть золотая середина между лаконичностью и выразительностью затронутой темы.
Вот я и хочу найти ту самую золотую середину. Хотя скорее всего тут не стоит особо заморачиваться. Кому мало — пусть дополняет, делает производную работу, и включает туда компиляторы, архиваторы и квантерионы с матрцами поворота. Это не будет нечто «окаменевшее» и не подлежащее доработке/улучшению