Тег ‘книги’

Про новую книгу Харари

А я правильно понимаю, что если механически заменить в ней все упоминания Трампа на упоминания Путина, ее смысл вовсе не изменится?

Game Engine Black Books

С удовольствием прочитал две книжки с подробными описаниями процесса разработки и технических решений Wolfenstein 3D и Doom:

http://fabiensanglard.net/gebb/index.html

Сочетание PC-шного и не очень (в частности, довольно подробно описывается NeXT, на котором разрабатывался Doom) “железа”, разнообразных хитрых приемов для рендеринга графики, оригинальных алгоритмических решений и просто программистских трюков – это очень круто, рекомендую. Для полного удовольствия от книжек крайне желательно знать Си и иметь представление о том, что рассказывается в стандартном курсе по “алгоритмам” – иначе такие штуки, как BSP, просто пройдут мимо.

Русский перевод The Art of Electronics

Зашел тут на днях в книжный магазин и увидел красивое свежее издание Хоровица и Хилла. Взял полистать – на первый взгляд ничего, но наткнулся глазом на фразочку – “подробнее мы рассмотрим это в 12-й главе” – а было написано это уже в конце книги. Посмотрел оглавление – опа, а 12 главы нет, есть только 9 или 10! Решил уточнить вопрос – и оказалось, что “Бином” уже давно печатает “так называемое 7 русское издание” – урезанный вариант того, что переводилось еще издательством “Мир”. Хорошо, что не купил!

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

А вот посоветуйте книжек

Насоветовал тут в фейсбуке кучку книжек по программированию микроконтроллеров:

https://www.facebook.com/tikhonovruslan/posts/2193043937400492

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

  • Что такое микроконтроллер? (опционально – что такое ARM, Cortex, STM32 и так далее)
  • Устанавливаем среду разработки (без нее вот просто никуда, даже светодиодом не поморгать без Keil)
  • Пишем простейшую программу (тут половина читателей отваливается, потому что даже “простейшая” программа требует шаманства в виде настройки тактирования, и идет делать сайты на PHP)
  • Работаем с GPIO
  • Работаем с таймерами
  • Работаем со всякой остальной периферией
  • Тема для продвинутых – что такое DMA и как с ним жить
  • Тема для очень продвинутых – как в CubeMX накликать в проект FreeRTOS

На этом “стандартный” курс заканчивается – но дальше-то что? Рано или поздно в любом проекте на микроконтроллере “вырастает” несложная RTOS (или присутствует там с самого начала). При этом в литературе “для начинающих” это почему-то считается сложной темой, а книг “для продолжающих” почему-то нет. Вот где почитать, например, о том, как написать драйвер периферии или внешнего устройства? Как и когда использовать DMA? Да вот даже какие-то вопросы с потреблением памяти – покажите мне книжку, где было бы достаточно подробно расписано, что происходит со стеком в многозадачной системе во время обработки прерывания?

В общем, что есть хорошего на эту тему “для продолжающих”, с описанием принятых “лучших практик”?

Development and Deployment of Multiplayer Online Games

Посмотрел “бета-версию” будущей книжки Development and Deployment of Multiplayer Online Games: from social games to MMOFPS, with stock exchanges in between.

dnd-of-mog

Разумеется, она не столько про мультиплеерные игры, сколько про распределенные системы “вообще” – к таковым можно отнести, например, всякие там биржевые системы (автор, Сергей Игнатченко, упоминается тут, как один из разработчиков торговой системы РТС). Рассматривается буквально все – от нюансов программирования на C++ (вплоть до всевозможных заблуждений) до архитектуры “в целом“. Очень понравились главы про сетевое взаимодействие, выбор между TCP и UDP, некоторые неочевидные нюансы этих протоколов.

Сейчас вышел на бумаге первый том (из планируемых 9), почти готов второй, третий – в состоянии бета-версии (все три есть на Leanpub).

Адитья Бхаргава, Грокаем алгоритмы

Мельком просмотрел тут одну детскую книжку по “алгоритмам”.

bhargava-algorithms

Удивлен большим количеством положительных отзывов на нее – причем ее рекомендовали, как вполне себе “взрослый” учебник, позволяющий быстренько подготовиться к собеседованию (собственно, вопросы “про алгоритмы” на программистском собеседовании – это некая форма карго-культа). На самом деле объем изложенного там материала катастрофически мал, местами вообще создается впечатление, что книга написана по принципу – взять “полноценный” учебник по “алгоритмам” (что-то типа Кормена или Дасгупты), выкинуть все сложное, а оставшееся максимально упростить. Все это разбавляется некоторым количеством смешных картинок – и готово.

Возможно, это и неплохо для детской книги – даже очень талантливый и старательный семи-восьмиклассник вряд ли будет настолько усидчив, чтобы самостоятельно разрисовать что-то вроде диаграммы стековых вызовов для несложной рекурсивной функции, а здесь она приведена в готовом виде – но есть несколько “сюжетов”, которые при таком подходе очень сильно “повисают в воздухе”. Особенно почему-то досталось O-нотации, которая здесь изложена в виде “как ее понимает средний программист” (а уж подсчет сложности тривиальной сортировки – O(n2) – во второй главе – это просто песня!).

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

https://algs4.cs.princeton.edu/cheatsheet/

Introduction to Applied Linear Algebra

Нашел замечательную просто книжку по линейной алгебре – точнее, той ее части, которая нужна в “машинном обучении”. Так и называется – Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares, издана Cambridge University Press, но на официальном сайте доступна и электронная версия.

vmls_cover

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

А. А. Бек, “Талант” (”Жизнь Бережкова”)

<sarcasm>

Кстати, если вас бесят биографии всяких там стивов джобсов и элонов масков в жанре “сопли с сахаром” – крайне рекомендую прочитать роман “Талант” (он же “Жизнь Бережкова”) А. А. Бека. Написан он в те времена, когда ложная политкорректность была не в моде – и поэтому барыг, спекулянтов и растратчиков называли просто, по рабоче-крестьянски – барыгами, спекулянтами и растратчиками, а не “успешными предпринимателями”, “инвесторами” или “бизнес-ангелами”, а малолетних долбоебов – малолетними долбоебами, а не “стартаперами”. Пользуясь этим нехитрым словарем, любой, кто интересуется инженерным бизнесом и менеджментом, может извлечь из книги немало полезного.

</sarcasm>

А если серьезно – очень рекомендую.

О профессиональной этике

Полистал тут книжечку Modern Assembly Language Programming with the ARM Processor by Larry D. Pyeatt, в частности, главу про арифметику с фиксированной запятой. В этой главе упоминается про известный случай с заглючившей системой Patriot, а в одном из упражнений предлагается обсудить это, исходя из положений Software Engineering Code of Ethics And Professional Practice.

Интересно, а многие ли отечественные программисты слышали про такой документ?

Understanding the Digital World: What You Need to Know about Computers, the Internet, Privacy, and Security

Оказывается, Брайан Керниган (один из авторов языка программирования C и операционной системы Unix) еще не впал в маразм и недавно (в 2017 году) написал книжку с подзаголовком “что нужно знать о компьютерах, Интернете, приватности и безопасности”.

understanding-the-digital-world

Основное содержание книги – что-то вроде конспекта курса лекций по “Введению в Computer Science”, или CS 109 в университете Принстона (кстати, очень полезно посмотреть задания и лабораторные по этой ссылке). Примерно 3/4 книги повторяют более раннюю “D is for Digital: What a well-informed person should know about computers and communications”, но здесь добавлен новый материал по криптографии, безопасности и тому подобным вопросам.

Если вам интересно, что действительно должно быть в нормальном современном учебнике по “Основам информатики и вычислительной техники” – посмотрите эту книгу и упражнения к ней.

Был бы человек, а статья найдется

Сегодня (да, бля, сегодня! часа так в три ночи) узнал, что одна из популярных фразочек на тему “не зарекайся” – “Любого человека, ничего ему не объясняя, можно посадить в тюрьму лет на десять, и где-то в глубине души он будет знать, за что,” – это не просто какая-то придумка отечественных юмористов, а приписываемая швейцарскому писателю Фридриху Дюрренматту цитата. Поиски первоисточника, правда, результатов не дали – в “Визите старой дамы” этих слов нет; что-то подобное встречается в “Аварии” – но только подобное.

Впрочем, почитав Дюрренматта, начал лучше понимать записи vit_r под тегом “switzerland“.

Задача по математике

Думаю, экс-матшкольникам будет интересно. Все те же “Пятьдесят лет в строю” Игнатьева, описание вступительных экзаменов в Академию Генерального штаба (1899 год):

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

— Переходите к геометрии. Что у вас там? Круг? Вот и отлично.— И вместо столь знакомых мне теорем по учебнику Семашко, на которых зиждилось все преподавание геометрии в корпусе, маленький генерал велел начертить просто круг, потом другой, побольше, и предложил определить центры всех третьих кругов, касающихся первых двух.

Подобных задач на построение в корпусе мы никогда не решали, и в программах о них не упоминалось. Шарнгорсту дела до этого не было, и он заставил меня мучиться у доски добрых два часа. То и дело мне приходилось стирать многочисленные хорды и перпендикуляры.

Доска стала уже сероватой, мундир мой покрылся мелом, горькая обида туманила сознание, а мой мучитель изредка только подходил и приговаривал: «А есть еще случай, вами неразобранный…»

http://militera.lib.ru/memo/russian/ignatyev_aa/07.html

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

Программа вступительных экзаменов по математике не предусматривала даже аналитической геометрии…

Конечно, аналитическую геометрию многие из поступающих в той или иной степени могли знать – скажем, закончивший кадетский корпус Игнатьев должен был быть знаком с ней – но все же интересно, можно ли сравнительно легко и быстро решить эту задачу “элементарными” методами, не выходя за рамки обычного гимназического учебника Киселева (его можно найти и в электронном, и даже в бумажном виде, в отличие от упомянутого выше Семашко)?

UPD Учебник Франца Ивановича Симашко “Начальная геометрия и конические сечения” (использовавшийся в кадетских корпусах) удалось найти в электронном виде:

http://resolver.gpntb.ru/purl?docushare/dsweb/Get/Resource-4472/Simashko_F_Nachalnaya_geometriya_i_konicheskie_secheniya.pdf

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

Стартаперу на заметку

Граф Алексей Алексеевич Игнатьев – о тонкостях elevator pitch:

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

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

Если же, наконец, вы решались обратиться к настоящему серьезному банкиру, которым являлся в ту пору Париж, то вам следовало для верности заехать сперва в Брюссель и заручиться там хотя бы только принципиальным одобрением какого-нибудь бельгийца. Появившись с ним во французском банке, вам не следовало открывать всех ваших карт, запугивать «нулями», сулить крупные барыши через десять лет, а просто запросить только первую необходимую для начала сумму и доказать возможность заработать хоть какие-нибудь гроши, но в кратчайший срок. Раз французский капиталист дал первые франки, он будет не в силах считать их потерянными — il courra après son argent (он побежит за своими деньгами) и никогда не даст вам погибнуть. Мнение бельгийца как тяжеловатого на подъем, но серьезного дельца послужит вам лучшей рекомендацией.

http://militera.lib.ru/memo/russian/ignatyev_aa/35.html

А. В. Столяров, “Программирование: введение в профессию”

Посмотрел на свежие “краудфандинговые” книги А. В. Столярова:

http://stolyarov.info/books/programming_intro

Лишний раз убедился, что фанатизм несовместим с преподавательской деятельностью – пусть заведомо ложные утверждения частично убраны, использовать эти книги в качестве учебника (и, стоит полагать, слушать лекции автора) категорически нельзя.

Можно ли с чисто педагогической точки зрения яростно обличать “стандартизаторов” языков C и C++? Возможно, не все, что они делают – правильно, но стоит ли осуждать в учебнике (!) современные стандарты? Сам автор книги давно ушел из большого секса, но те, кто по этой книге учится сейчас – будут профессионально заниматься программированием через 4-5 лет. Местами есть относительно разумные объяснения, какими возможностями из новых стандартов пользоваться не стоит – но в целом “вместе с водой выплеснули и ребенка”, и, скажем, о существовании того же stdint.h вообще не упоминается. Можно ли сейчас считать компетентным программиста на C, не знающего о существовании этого заголовочного файла – вопрос риторический.

В общем, местами книги можно считать хорошими, местами – приемлемыми, а кое-что вообще следовало бы вычеркнуть. Явно не подходит для “введения в профессию” – а вот как элементарный справочник по программированию в Unix-подобной среде использовать можно, если грамотно отделять тараканов автора от фактического материала.

Про книжки вопрос

Разбираюсь сейчас с одним проектом с использованием Keil MDK. Первым делом, конечно же, нашел старую, но местами актуальную (особенно в моем случае, где используется довольно старая версия MDK) книжку Тревора Мартина “Микроконтроллеры ARM7 семейств LPC2300/2400″. Некоторую ценность представляет 6 глава, где довольно подробно рассказывается о возможностях ОС Keil RTX.

Но вот сегодня я решил все-таки обратиться к фирменной документации (ну, помимо встроенной справки) – благо книжка Getting Started: Building Applications with RL-ARM доступна совершенно бесплатно – и просматривая раздел про RTOS, испытал ощущение, что где-то я это все уже видел. И действительно – эти две публикации практически дословно повторяют друг друга.

Конечно, русское издание книжки Мартина – очевидный бестселлер, особенно несколько лет назад. Далеко не все отечественные “эмбеддеры” владеют английским языком в достаточной степени, чтобы читать документацию на языке оригинала (некоторые и русским не владеют, но это уже совсем печально) – так что достаточно хороший перевод официального руководства не помешает.

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

Очень полезное руководство по фотографии

introduction-to-camera-game

Отзывы на амазоне – просто супер.

Про информатику

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

https://www.facebook.com/tikhonovruslan/posts/1537512619620297
https://www.facebook.com/olartam/posts/1627949730588444
https://www.facebook.com/olartam/posts/1627985307251553

Между делом осознал, насколько крут был старый, еще советский, учебник Кушниренко, Лебедева и Свореня “Основы информатики и вычислительной техники”.

Купил книжку

Михаил Горбачев, “Гонки в СССР”:

gonki-sssr

Открыл на первой попавшейся странице и обнаружил подробное описание регулировки кастера на ГАЗ-24 с помощью кувалды. Не зря купил.

Простите, но будет матом

Мне кажется, что это полный пиздец:

https://www.piter.com/collection/arduino/product/programmiruem-arduino-professionalnaya-rabota-so-sketchami

Если вы все еще сомневаетесь – полистайте главу под названием “Цифровая обработка сигналов“.

UPD Не менее шедевральна книга того же автора “для начинающих”:

https://www.piter.com/collection/arduino/product/programmiruem-arduino-osnovy-raboty-so-sketchami-2-e-izd

Как вы думаете, что написано в разделе про цифровые выходы? “Если потыкать мультиметром в вывод с единичкой, то мультиметр покажит циферку 5; если в вывод с ноликом – то мультиметр покажет циферку 0. Это все, что можно рассказать о цифровых выходах”.

Это все, что я хотел сказать о войне во Вьетнаме.

Numerical Recipes: The Art of Scientific Computing

Снова читаю книжки по численным методам. В этот раз под раздачу попала Numerical Recipes in C: The Art of Scientific Computing. Авторов – целая куча: Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Есть даже официальный сайт, где можно бесплатно почитать кусочки из книги:

http://nrbook.com

Обратите внимание, что в интернете доступно два издания этой книги – второе, вышедшее в 1992 году, и третье – 2007 года. Я начинал читать второе, и был очень разочарован некоторыми “находками” авторов. Скажем, в давнем споре о том, как должны нумероваться элементы массива – с 0 или с 1 – они заняли “компромиссную” позицию – иногда элементы массивов нумеровались с 0, а иногда – с 1, как удобнее в каждом конкретном случае. Предлагался диковатый способ хранения матриц – в общем, уже с первой главы стало понятно, что весь найденный в книге код придется переписывать в соответствии со своими эстетическими представлениями.

В третьем издании на титульном листе упоминается уже C++, и книга основательно переписана. Скажем, нумерация массивов с 1 благополучно забыта – и это прекрасно! Вместо этого, правда, появляются сомнительные “классы” – а к ООП в численных методах меня приучили относиться с подозрением (может, и зря). Разумеется, это не “чистый” C++, а “C on steroids” – но от этого все равно не легче. Рекомендация из предыдущего абзаца остается в силе – встретив в книге “простыню” кода, попытайтесь ее понять и переписать. Особенно этот совет будет полезен, если вы имеете обыкновение читать лицензии – весь код в книге лицензирован под какой-то чудовищной, затрудняющей всякое разумное применение лицензией.

Еще одно маленькое замечание касательно кода – местами возникает впечатление, что программы аккуратно переписаны с Фортрана. В общем, код в книге довольно дикий, сочетающий использование относительно современного C++ с какими-то жуткими древностями – еще один аргумент за “понять и переписать”.

Круг рассматриваемых тем довольно широк (скажем, он “перекрывает” программу двухсеместрового курса по численным методам) – решение систем линейных уравнений (и связанные с этим сюжеты, вроде QR-разложения матриц), поиск собственных значений, различные методы вычисления функций (в том числе всевозможных “специальных функций”, типа бета- и гамма-функций), интерполяция, решение нелинейных уравнений, поиск экстремумов, вычисление интегралов, численные методы решения дифференциальных уравнений (задача Коши и краевые задачи), уравнения в частных производных, интегральные уравнения, статистические задачи, (быстрое) преобразование Фурье и все с ним связанное, вычислительная геометрия, и пара глав посвящена более “дискретным” задачам – вроде сортировки, кодирования и сжатия данных. Естественно, такое количество задач сложно более-менее подробно рассмотреть даже на 1262 страницах – так что компромиссы неизбежны.

В этой книге авторы решили пожертвовать математическим обоснованием используемых алгоритмов. Как выглядит глава по любимой мной теме – решению задачи Коши для дифференциальных уравнений? Десяток страниц посвящен организации вычислений – придумана довольно “общая” C++-ная библиотека, примерно то, что называют “фреймворком” – а реализуемые методы будут под нее подстраиваться. Дальше излагаются основы метода Рунге-Кутты, приводятся с иллюстрациями “на пальцах” коэффициенты методов 2-го и 4-го порядков. Следующий раздел посвящен автоматическому выбору длины шага – и тут уже разговор идет на языке “делай раз, делай два”, без попытки привести хоть какое-то обоснование используемых формул. Наконец, приводится исходный текст реализации метода Дормана-Принса 5-го порядка и упоминается о методе 8-го порядка – здесь, правда, решили поэкономить бумагу и просто дали ссылку на сайт с его реализацией.

В общем, книжка находится где-то посередине между учебником по численным методам и справочником “наиболее полезных алгоритмов” – для первого она получается слишком краткой, а для второго – слишком подробной. Немного спасают ситуацию списки литературы по каждой из тем – насколько я могу судить, вполне адекватные. Склоняюсь к тому, чтобы считать книгу довольно полезной – но с оговорками.