Решил немного отвлечься от технического образования и заняться научно-популярной литературой. Был приятно удивлён простотой и доступностью книги вышедшей в оригинале на русском да ещё и написанной человеком работающим в Москве. Работа всё ещё не попадает в разряд лёгкого чтива, требует определённой концентрации и запоминания терминологии, но тем не менее доступна без специальной подготовки и даже приятна для людей со склонностью к разбиранию сложных штук.
Книга посвящена современному состоянию эволюционной биологии, в особенности тому что известно о ранних этапах развития жизни. Попутно делается краткий экскурс в современное состояние генетики и молекулярной биологии, которые изрядно продвинулись со времён написания учебников по которым я учился. Много врезок кратко описывающих результаты отдельных исследований конца 2010х годов и их место среди остального материала. Как и положенно научной книге большинство упомянутых фактов сопровождаются ссылками на соответствующие работы.
Медленно и неспешно, начиная с самых простых организмов автор рассматривает как устроен и мог возникнуть соответствующий тип. Начало, конечно, получается довольно насыщенным гипотетическими формами жизни, но это, по мере приближения во времени к современности а по уровню организации к современным многоклеточным и их сообществам, проходит. Приводится множество фактов палеонтологии и недавних открытий реликтовых видов, про которые неспециалисты вряд ли слышали. Огромный массив информации представляется как логически связанная цепочка фактов.
Неожиданно подробно для книги с такой направленностью разбираются химические механизмы регуляции в живых организмах, современное состояние молекулярной биологии. Все даётся в описательном виде, без технических деталей, что может быть небольши минусом для людей не страдающих страхом перед химией. Где уместно полностью рассматриваются цепочки обратной связи от гена до влияния на внешнюю среду и обратно, приводится несколько "интуитивных" доказательств что даже самые простые обратные связи могут эволюционировать в сторону усложнения и адаптации. Вообще одна из позитивных идей вынесенных мной из книги - математические модели и формальные доказательства становятся всё более важной частью биологии.
В общем книга оставляет в голове достаточно яркую и развёрнутую картину современной биологии и её взгляда на историю жизни. Бонусом читатель знакомится с существенно более детальным описанием микроскопического устройства клетки и её механизмов регуляции чем остаётся от школьного курса биологии. В целом дочитывал книгу в состоянии легкого восторга и немедленно приобрёл ещё одни труд автора, ждите ещё обзоров.
Показаны сообщения с ярлыком books. Показать все сообщения
Показаны сообщения с ярлыком books. Показать все сообщения
среда, 4 февраля 2015 г.
понедельник, 4 августа 2014 г.
"Mathematics for Computer Graphics" и "Computational Geometry: Algorithms and Applications"
Последние полгода очень сильно ленился в плане чтения и справился всего с двумя книжками.
Первая "Mathematics for Computer Graphics" - краткое ревью математики полезной для программирования графики. Книга в принципе неплоха как напоминание и как компактная коллекция полезных математических инструментов. В качестве книги для начального изучения чего либо она к сожалению не очень хороша по нескольким причинам.
Во-первых книге катастрофически не достаёт иллюстративного материала, что фатально сказывается на скорости начального восприятия. Ко многим выкладкам и доказательствам приходится рисовать картинки самостоятельно, что исключает чтение книги в транспорте или на отдыхе.
Вторая проблема: разная глубина изложения в разных разделах. Какие-то направления представлены подборкой основных формул и их интерпретацией. Где-то есть пара примеров их применения, где-то вдруг приводятся доказательства. При сквозном чтении очень тяжело зацепиться за какой-то ритм и следовать ему.
В общем книга приемлема для полки в качестве справочника и не может использоваться для начального ознакомления с мат. аппаратом.
Вторая, "Computational Geometry: Algorithms and Applications". Книга как раз противоположна предыдущей - она очень удачна в качестве учебника. Начинает с простого, продолжает непростым, заканчивает комбинацией ранее изложенного. Очень приятной деталью является отличное покрытие иллюстрациями. Все логические построения и алгоритмы сопровождаются удачными рисунками - мне практически не приходилось брать карандаш и бумагу в руки.
Рассматривается около полутора десятков проблем вычислительной геометрии. Каждая атакуется плавно. Нет хороших решений из коробки, всегда показывается эволюция алгоритма от простых идей и игнорирования предельных случаев до доказуемо корректного решения. Авторы часто приводят не лучший алгоритм предпочитая детально описать более простой и понятный.
Чтение не требует знаний выходящих за первый семестр курса алгоритмов. Используются самые базовые вещи: деревья, кучи, списки. Анализ алгоритмов предполагает только знакомство с нотацией асимптот и умение решать "recurrences".
Все главы сопровождаются небольшим ревью вопроса. Там даётся история изучения проблемы и наиболее сильные современные результаты. Часто есть обзор смежных областей, приложений и т.п. Список ссылок огромный.
Книга даёт приятный уровень нагрузки на мозг, каждая задача требует 10-15 сконцентрированных размышлений сверх времени на прочтение. Можно рекомендовать и как учебник если вдруг пришлось столкнуться с геометрическими проблемами так и для развивающего чтения. В целом книга мне исключительно понравилась.
Первая "Mathematics for Computer Graphics" - краткое ревью математики полезной для программирования графики. Книга в принципе неплоха как напоминание и как компактная коллекция полезных математических инструментов. В качестве книги для начального изучения чего либо она к сожалению не очень хороша по нескольким причинам.
Во-первых книге катастрофически не достаёт иллюстративного материала, что фатально сказывается на скорости начального восприятия. Ко многим выкладкам и доказательствам приходится рисовать картинки самостоятельно, что исключает чтение книги в транспорте или на отдыхе.
Вторая проблема: разная глубина изложения в разных разделах. Какие-то направления представлены подборкой основных формул и их интерпретацией. Где-то есть пара примеров их применения, где-то вдруг приводятся доказательства. При сквозном чтении очень тяжело зацепиться за какой-то ритм и следовать ему.
В общем книга приемлема для полки в качестве справочника и не может использоваться для начального ознакомления с мат. аппаратом.
Вторая, "Computational Geometry: Algorithms and Applications". Книга как раз противоположна предыдущей - она очень удачна в качестве учебника. Начинает с простого, продолжает непростым, заканчивает комбинацией ранее изложенного. Очень приятной деталью является отличное покрытие иллюстрациями. Все логические построения и алгоритмы сопровождаются удачными рисунками - мне практически не приходилось брать карандаш и бумагу в руки.
Рассматривается около полутора десятков проблем вычислительной геометрии. Каждая атакуется плавно. Нет хороших решений из коробки, всегда показывается эволюция алгоритма от простых идей и игнорирования предельных случаев до доказуемо корректного решения. Авторы часто приводят не лучший алгоритм предпочитая детально описать более простой и понятный.
Чтение не требует знаний выходящих за первый семестр курса алгоритмов. Используются самые базовые вещи: деревья, кучи, списки. Анализ алгоритмов предполагает только знакомство с нотацией асимптот и умение решать "recurrences".
Все главы сопровождаются небольшим ревью вопроса. Там даётся история изучения проблемы и наиболее сильные современные результаты. Часто есть обзор смежных областей, приложений и т.п. Список ссылок огромный.
Книга даёт приятный уровень нагрузки на мозг, каждая задача требует 10-15 сконцентрированных размышлений сверх времени на прочтение. Можно рекомендовать и как учебник если вдруг пришлось столкнуться с геометрическими проблемами так и для развивающего чтения. В целом книга мне исключительно понравилась.
понедельник, 17 марта 2014 г.
Land of Lisp
Дочитал сабж. Как можно догадаться книга посвящена языку LISP и выстроена очень своеобразным образом. Основная идея: обучить языку через написание игр. Этот, на первый взгляд направленный на детей, подход в моём случае имел изрядный успех.
Писать игры по ходу книги отличная идея по нескольким причинам. Во-первых это заставляет автора начинать с практически важных, базовых элементов языка. С того с чем в будущем придётся сталкиваться чаще всего, а не с того что педагогически "правильнее". Во-вторых иллюстрации получаются заметно увлекательнее. Ну и наконец игры по своей природе открыты для хакинга, придумать дополнение к числам Фибоначчи гораздо сложнее чем к игре "угадай число".
Скажу честно не все примеры я аккуратно реализовывал и запускал, но примерно 60% задач из книги я выполнил. Что-то расширил, где-то поменял структуру кода - подход с созданием игр в книге даёт читателю очень высокий уровень вовлечённости и это прекрасно.
По содержанию... Книжка раскрывает все основные вопросы программирования: встроенные и пользовательские типы данных, основные конструкции языка, способы их расширения, ввод-вывод. Последовательность практических примеров как мне кажется совершенно логична, хотя порядок в котором вводятся языковые средства немного не отточен.
Код примеров на мой вкус немного грязноват. Много где можно радикально улучшить читабельность простыми изменениями вроде добавления структур вместо списков и магических ca*r'ов, заменой анонимных функций на именованные. Стиль который она оставляет после себя как мне кажется нельзя назвать изящным, но это мнение нуба явно тяготеющего к диалектам Scheme-семейства а не Common для которого написана книга.
И да, просто копировать примеры в таком виде было не очень интересно и решение нашлось само собой - я недавно начал ковырять Racket а книжка то написана под Common LISP! Вот и совместил приятное с полезным, транслировал примеры на современный Racket. И я теперь практически лисп-переводчик с опытом работы :) Кстати благодаря этой книжке я сделал и небольшой (и кажется первый сколько-нибудь полезный) вклад в опенсурс: изрядно подвыправил Racket плагин для Sublime.
В общем несмотря на то что книжка вроде не блестящая при должном настрое и желании что-то поделать руками она приночит массу удовольствия. Рекомендую!
Писать игры по ходу книги отличная идея по нескольким причинам. Во-первых это заставляет автора начинать с практически важных, базовых элементов языка. С того с чем в будущем придётся сталкиваться чаще всего, а не с того что педагогически "правильнее". Во-вторых иллюстрации получаются заметно увлекательнее. Ну и наконец игры по своей природе открыты для хакинга, придумать дополнение к числам Фибоначчи гораздо сложнее чем к игре "угадай число".
Скажу честно не все примеры я аккуратно реализовывал и запускал, но примерно 60% задач из книги я выполнил. Что-то расширил, где-то поменял структуру кода - подход с созданием игр в книге даёт читателю очень высокий уровень вовлечённости и это прекрасно.
По содержанию... Книжка раскрывает все основные вопросы программирования: встроенные и пользовательские типы данных, основные конструкции языка, способы их расширения, ввод-вывод. Последовательность практических примеров как мне кажется совершенно логична, хотя порядок в котором вводятся языковые средства немного не отточен.
Код примеров на мой вкус немного грязноват. Много где можно радикально улучшить читабельность простыми изменениями вроде добавления структур вместо списков и магических ca*r'ов, заменой анонимных функций на именованные. Стиль который она оставляет после себя как мне кажется нельзя назвать изящным, но это мнение нуба явно тяготеющего к диалектам Scheme-семейства а не Common для которого написана книга.
И да, просто копировать примеры в таком виде было не очень интересно и решение нашлось само собой - я недавно начал ковырять Racket а книжка то написана под Common LISP! Вот и совместил приятное с полезным, транслировал примеры на современный Racket. И я теперь практически лисп-переводчик с опытом работы :) Кстати благодаря этой книжке я сделал и небольшой (и кажется первый сколько-нибудь полезный) вклад в опенсурс: изрядно подвыправил Racket плагин для Sublime.
В общем несмотря на то что книжка вроде не блестящая при должном настрое и желании что-то поделать руками она приночит массу удовольствия. Рекомендую!
вторник, 21 января 2014 г.
"(Не)совершенная случайность"
Прочитал эту замечательную книгу буквально за 3 дня - наверно самое быстрое прочтение в моей жизни.
Книга посвящена теории вероятности и содержит её рассмотрение сразу с нескольких ракурсов и автор не старается как-то их разделять по ходу изложения. Теория рассказывается от простого к сложному с привлечением разных ракурсов по мере необходимости. В принципе в кинге уверенно распознаются три аспекта.
Во-первых рассказываются, именно рассказываются, сами тервер и матстат. Простым человеческим языком, без сигма-алгебры, условной вероятности и вообще без единой формулы. Очень понятно и просто, книга как ни одна сильна в том чтобы построить контекст вокруг объектов из мира статистики, добавить к заученным в универе терминам очень много семантики. По последовательности изложения она фактически совпадает с классическим курсом тервера и примерно первой третью курса статистики.
Второй предмет рассмотрения книги - история развития тервера. Изложения всех законов органично переплетено с рассказом истории их формирования. Много внимания уделено биографии учёных, их отношениям с другими науками. Для меня как для любителя истории науки этот аспект книги был наиболее интересен.
Третий, и кажется центральный для автора, аспект книги - психологический. При изложении очередной концепции рассказывается как люди склонны ошибаться при его применении к жизненным ситуациям. Всегда приводится несколько примеров наивного применения тервера к жизни. В каждом случае подробно рассматривается корректный способ анализа той или иной проблемы и какие ловушки психологии приводят массы (а иногда и уважаемых учёных) к заблуждениям. В частности подробно рассмотрена знаменитая задача Монти Холла, и кажется доступно даже для меня доказано решение.
Также хочется отметить перевод - действительно хороший и грамотный. Я не заметил ни одной шероховатости в терминологии и описании сложных ошибок использования тервера. Единственный момент который вызвал моё непонимание это название книги. На английском она называется "Drunkard's Walk" то есть "Походка пьяного" как я понимаю.
Книга однозначно рекомендуется и любителям истории, тем кто не теряет надежду понять тервер и даже увлекающимся психологией. Книга будет полезна абсолютно всем вовлечённым в процессы принятия решений, особенно тем кто управляет сложными тех. процессами вроде разработки ПО.
Книга однозначно рекомендуется и любителям истории, тем кто не теряет надежду понять тервер и даже увлекающимся психологией. Книга будет полезна абсолютно всем вовлечённым в процессы принятия решений, особенно тем кто управляет сложными тех. процессами вроде разработки ПО.
среда, 16 октября 2013 г.
ГЭБ
Прочитал сабж. Ещё буду выборочно перечитывать, по крайней мере доказательства...
Что можно сказать?... Автор неимоверно крут. Что бы по науке, технике или искусству вы сейчас не читали - бросайте, читайте эту книгу. Всё-рано после неё захочется перечитать и передумать заново...
От прочтения есть важный бонус. Когда встречается какой-нибудь просветитель рассказывающий что мол нельзя так запросто объяснить зачем там какой-нибудь теркат нужен и что он такое из себя представляет - можно смело говорить что он бездарен и тыкать книжкой в качестве пруфа. Хотя скорее всего будет просто грустно и хотеться уйти...
Ладно хватит абстрактной воды, пора немного рассказать о чём книга. В предисловии Хофштадтер приводит мнения разных людей о том про что эта книга. Так вот, дочитав до конца я понял что очень важного предположения там не хватает. Эта книга - о сложности!
Действительно одна из центральных концепций книги - "странные петли". Системы с обратной связью, но только между всеми уровнями, без начала. Про этакие гармошки свёрнутые в бублик. Про проблемы которые можно начать изучать откуда угодно и и никогда не закончить. Про всю эту жуть которая пугает технаря со стажем, так же как пугала всех математиков ещё 100 лет назад. А может и им до сих пор страшновато?
Сама структура книги образует петлю. Каждая глава начинается с небольшого диалога разыгрывающего очередную концепцию. Она подхватывается текстом который немного расшифровывает её и немного диалоги предыдущих глав. Каждая новая глава привносит больше понимания в предыдущие, открывает незаметные детали.
Книга рассматривает в деталях как можно всё запутать, как сама природа это делает. И вместе с тем показывает как можно что угодно распутать назад, понять, построить устойчивую модель. Например очень кратко и интересно рассказывается про синтез белков и передачу наследственной информации. Не просто о физике процесса, но о семантике разных его компонентов. Я немало времени потратил на биологию в своё время, и уверен что если в профильных книгах такое и можно найти, то в очень немногих.
Книгу стоит прочитать хотя бы ради того чтобы увидеть что даже для бесконечно сложных объектов мы всегда можем найти средства описания, способ думать о них простым и непротиворечивым способом. Найти объяснение очень глубинным свойствам используя очень примитивный базис. Автор не обещает что такие способы мышления будут очень легки, но убеждает в том что они существуют.
Что можно сказать?... Автор неимоверно крут. Что бы по науке, технике или искусству вы сейчас не читали - бросайте, читайте эту книгу. Всё-рано после неё захочется перечитать и передумать заново...
От прочтения есть важный бонус. Когда встречается какой-нибудь просветитель рассказывающий что мол нельзя так запросто объяснить зачем там какой-нибудь теркат нужен и что он такое из себя представляет - можно смело говорить что он бездарен и тыкать книжкой в качестве пруфа. Хотя скорее всего будет просто грустно и хотеться уйти...
Ладно хватит абстрактной воды, пора немного рассказать о чём книга. В предисловии Хофштадтер приводит мнения разных людей о том про что эта книга. Так вот, дочитав до конца я понял что очень важного предположения там не хватает. Эта книга - о сложности!
Действительно одна из центральных концепций книги - "странные петли". Системы с обратной связью, но только между всеми уровнями, без начала. Про этакие гармошки свёрнутые в бублик. Про проблемы которые можно начать изучать откуда угодно и и никогда не закончить. Про всю эту жуть которая пугает технаря со стажем, так же как пугала всех математиков ещё 100 лет назад. А может и им до сих пор страшновато?
Сама структура книги образует петлю. Каждая глава начинается с небольшого диалога разыгрывающего очередную концепцию. Она подхватывается текстом который немного расшифровывает её и немного диалоги предыдущих глав. Каждая новая глава привносит больше понимания в предыдущие, открывает незаметные детали.
Книга рассматривает в деталях как можно всё запутать, как сама природа это делает. И вместе с тем показывает как можно что угодно распутать назад, понять, построить устойчивую модель. Например очень кратко и интересно рассказывается про синтез белков и передачу наследственной информации. Не просто о физике процесса, но о семантике разных его компонентов. Я немало времени потратил на биологию в своё время, и уверен что если в профильных книгах такое и можно найти, то в очень немногих.
Книгу стоит прочитать хотя бы ради того чтобы увидеть что даже для бесконечно сложных объектов мы всегда можем найти средства описания, способ думать о них простым и непротиворечивым способом. Найти объяснение очень глубинным свойствам используя очень примитивный базис. Автор не обещает что такие способы мышления будут очень легки, но убеждает в том что они существуют.
понедельник, 24 сентября 2012 г.
"DSLs in action" и CPJ
Набег студентов, лето и смена работы в который раз привели этот блог к глубокому запустению. Ну да попробую исправится. Для начала расскажу о паре книжек, прочитанных мной за последние полгода (стыдно, стыдно, стыдно, 180 дней и всего сотен 5 страниц).
Итак, первая это "DSLs in action", пролежавшая, кстати, в очереди на прочтение без малого год. Начинается она довольно вяло, где-то на 100 странице было уже неслабое желание бросить. Введение полно рассуждениями на тему места DSL, их экономической целесообразности и классификаций. Не чтобы это было совсем не нужно, но ИМХО такие вещи должны быть в конце. Падать на читателя уже, так сказать, замотивированного дойти до конца. Ну да хватит о грустном.
По мере появления конкретных примеров и расширения списка языков в которых автор пробует свои силы книга быстро приковывает внимание. Очень похоже на руководство по Scala, о котором я писал ранее, вторые две трети пролетают заметно быстрее первой одной. Перед читателем предстаёт захватывающая карусель из техник ФП, дизайна собственно языков, метапрограммирования и всё это в нескольких вариантах на разных языках.
Автор без сомнения проделал огромную работу готовя примеры и выбирая подход к решению каждой задачи. Книгу стоит прочитать даже людям совершенно не интересующимся DSL просто полюбоваться многообразием современных языков и тем диапазоном техник программирования который они предлагают.
Вторая книга которую я осилил за последнее время это небезызвестная "Concurrent Programming in Java". Наверно не стоит лишний раз её описывать, тем более, что даже на русском отзывов более чем достаточно, могу точно сказать что мне она без сомнения пошла на пользу.
Ктоме того замечу, что по контенту она практически не пересекается с прочитанной ранее "Java Concurrency in Practice". Если в гниге Lea рассматриваются в первую очередь примитивы многопоточности, в том числе и пути их реализации, то Goetz концентрируется на корректном их применениии в коде приложений. И естественно последний оперирует util.concurent как данностью. В общем можно заключить, что книги стоит читать обе, наверно даже в любой последовательности.write
Итак, первая это "DSLs in action", пролежавшая, кстати, в очереди на прочтение без малого год. Начинается она довольно вяло, где-то на 100 странице было уже неслабое желание бросить. Введение полно рассуждениями на тему места DSL, их экономической целесообразности и классификаций. Не чтобы это было совсем не нужно, но ИМХО такие вещи должны быть в конце. Падать на читателя уже, так сказать, замотивированного дойти до конца. Ну да хватит о грустном.
По мере появления конкретных примеров и расширения списка языков в которых автор пробует свои силы книга быстро приковывает внимание. Очень похоже на руководство по Scala, о котором я писал ранее, вторые две трети пролетают заметно быстрее первой одной. Перед читателем предстаёт захватывающая карусель из техник ФП, дизайна собственно языков, метапрограммирования и всё это в нескольких вариантах на разных языках.
Автор без сомнения проделал огромную работу готовя примеры и выбирая подход к решению каждой задачи. Книгу стоит прочитать даже людям совершенно не интересующимся DSL просто полюбоваться многообразием современных языков и тем диапазоном техник программирования который они предлагают.
Вторая книга которую я осилил за последнее время это небезызвестная "Concurrent Programming in Java". Наверно не стоит лишний раз её описывать, тем более, что даже на русском отзывов более чем достаточно, могу точно сказать что мне она без сомнения пошла на пользу.
Ктоме того замечу, что по контенту она практически не пересекается с прочитанной ранее "Java Concurrency in Practice". Если в гниге Lea рассматриваются в первую очередь примитивы многопоточности, в том числе и пути их реализации, то Goetz концентрируется на корректном их применениии в коде приложений. И естественно последний оперирует util.concurent как данностью. В общем можно заключить, что книги стоит читать обе, наверно даже в любой последовательности.write
среда, 18 января 2012 г.
"Programming in Scala"
Незадолго до нового года я закончил читать "Programming in Scala", написанную частично самим автором языка. Первое что стоит отметить это внушительный размер труда - более 800 страниц. Что в принципе понятно, язык совсем не маленький. Во-вторых книжка даёт более чем достаточное для самостоятельной жизни представление о языке. После неё можно брать и начинать писать рабочий проект.
Основным достоинством книги является наличие нескольких полноценных законченных примеров. Начиная с классической программы симуляции дискретных событий (угадайте откуда взятой) и заканчивая примером табличной системы. При этом фокус этих примеров плавно смещается с демонстрации отдельных фич языка на исследование взаимодействия нескольких особенностей и приёмов в одном проекте. Это оставляет весьма приятное впечатление, и, я думаю, должно позитивно сказываться на уверенности в новом инструменте у начинающего скала-программиста.
Если говорить о структуре книги, то она проста и очевидна, от базовых элементам к сложным, от стандартных функций первой необходимости к обзору больших кусков библиотеки. Несмотря на обилие ссылок вперёд спланированы они более чем грамотно и при последовательном прочтении книги необходимости перейти по ним не возникает.
Авторы не пытаются залезть очень глубоко, здесь не обсуждаются эзотерические возможности системы типов и проблемы ленивого ввода-вывода. Однако ряд сложных топиков освещён более чем добротно. В частности великолепны главы про парсер комбинаторы и устройство стандартной библиотеки коллекций (она без сомнения является лучшим гайдом по сабжу, который я видел).
По началу мне было несколько скучно читать (даже несмотря на осознанные пролистывания очевидных топиков), но по мере появления больших примеров и погружения в более тонкие моменты языка я втянулся. Вторая половина книги поглотила раза в 4 меньше времени чем первая. Уже знакомому с языком человеку видимо стоит иметь эту особенность в виду. В общем книга трудно назвать блестящей, однако ни малейших технических претензий к ней нет, это твёрдое 4.
четверг, 5 мая 2011 г.
"Version control with Git"
Эх, что-то своих мыслей давно не приходило. Ладно буду компенсировать пересказом чужих.
Итак, сабж - книжка о популярной в последнее время системе контроля версий, которая как-то так получилось, что завелась у меня на работе. Сразу могу сказать, что книжка однозначно рекомендуется к прочтению начинающим. Бывалым видимо тоже будет небесполезна (точно не берусь судить), так как приведённой там информации в общем то в сети и не видно.
Автор книги, Jon Loelinger, контрибьютор проекта Git и старательно фокусируется на его внутреннем устройстве и логике, лежащей за тем или иным поведением. Книга весьма радикально отличается по глубине изложения от свободно доступной Pro Git и от полупиратски попавшей ко мне "Getting good with Git" (она правда на полноту и не претендует).
Так вот, начинается книга (не считая установки и "первых шагов" естественно) с обзора внутреннего устройства репозитария, его элементов и их структуры. Обзор, кстати, оказывается настолько хорош, что его не приходится дополнять на протяжении почти всей книги. Далее, описывая новую операцию, автор приводит краткий обзор того, как эта операция переводится в термины внутренних структур репозитария.
Этот подход используется повсеместно практически во всей книге и результат по-моему просто отличный. Те места, которые выглядели сложными и запутанными после других источников делаются абсолютно прозрачными и очевидными. Весь этот ад с удалёнными репозитариями, fetch vs pull, tracking branches и т.д. становится более менее понятен или по крайней мере поддаётся освоению с точечными вычитками документации.
Вообще после книжки осталось стойкое ощущение, что использование Git подразумевает изучение его самого, а не того как с ним работать. Причём подразумевает на уровне самых ранних дизайнерских решений. Кстати, интересно есть-ли инструменты (наборы скриптов?..) превращающие его во что-то вроде Subversion c локально доступной историей но при этом соответственно сниженным порогом вхождения?
Этот подход используется повсеместно практически во всей книге и результат по-моему просто отличный. Те места, которые выглядели сложными и запутанными после других источников делаются абсолютно прозрачными и очевидными. Весь этот ад с удалёнными репозитариями, fetch vs pull, tracking branches и т.д. становится более менее понятен или по крайней мере поддаётся освоению с точечными вычитками документации.
Вообще после книжки осталось стойкое ощущение, что использование Git подразумевает изучение его самого, а не того как с ним работать. Причём подразумевает на уровне самых ранних дизайнерских решений. Кстати, интересно есть-ли инструменты (наборы скриптов?..) превращающие его во что-то вроде Subversion c локально доступной историей но при этом соответственно сниженным порогом вхождения?
Возвращаясь к самой книге, не могу сказать, что текст сильно выделяется качеством изложения и литератуностью. Однако последовательность абсолютно точна, я не могу вспомнить ни одного забегания вперёд. Примеры в конечном итоге иллюстрируют нужную функцию. По тексту немного безсистемно разбросаны важные примеры команд, значительно упрощающих жизнь, но это легко решается парой закладок. В общем ничего, что тянет на серьёзный недостаток для технической книги я не могу вспомнить.
P.S. С удивлением заметил, что в книжке слово developer заменяется местоимением she. Это что получается: разраб в английском по умолчанию - девочка?
воскресенье, 27 марта 2011 г.
"Java concurrency in practice"
Собственно прочитал, наконец сабж. Книга без сомнения отличная и информации о ней в Сети достаточно, добавить особо нечего. Запишу просто пару субъективных впечатлений.
Книга написана просто и понятно. Материал изложен абсолютно последовательно без ссылок вперёд и с минимальным расстоянием в обратных ссылках. Автор старательно избегает обращения ко всяким примитивам синхронизации, вместо этого старается ввести набор паттернов и идиом безопасной синхронизации. Только в последней главе можно увидеть подробное изложение JMM и несколько трюков напрямую с ней связанных.
Из нового для себя я открыл работу с interrupt и InterruptedException а также паттерны корректной остановки выполнения заданий. Вообще тема останова и отмены задач в Java до сих пор была для меня не изведана. Познавательно, но местами сложновато.
Единственный замеченный недостаток - это обилие примеров, повторяющих стандартную библиотеку. Хотя автор нигде не забывает вставить примечание, что это пример, а не рекомендуемое решение.
P.S. А еще ко мне приехала новая пачка книжек, в том числе DSLs in Action и Version Control with Git, также на подлёте Programming in Scala. В первую очередь навалился на Git. Очень много новой информации относительно устройства репозитария и принципов работы разных комманд. По подробности изложения несравнимо с "Getting good with Git" и "Pro Git".
Книга написана просто и понятно. Материал изложен абсолютно последовательно без ссылок вперёд и с минимальным расстоянием в обратных ссылках. Автор старательно избегает обращения ко всяким примитивам синхронизации, вместо этого старается ввести набор паттернов и идиом безопасной синхронизации. Только в последней главе можно увидеть подробное изложение JMM и несколько трюков напрямую с ней связанных.
Из нового для себя я открыл работу с interrupt и InterruptedException а также паттерны корректной остановки выполнения заданий. Вообще тема останова и отмены задач в Java до сих пор была для меня не изведана. Познавательно, но местами сложновато.
Единственный замеченный недостаток - это обилие примеров, повторяющих стандартную библиотеку. Хотя автор нигде не забывает вставить примечание, что это пример, а не рекомендуемое решение.
P.S. А еще ко мне приехала новая пачка книжек, в том числе DSLs in Action и Version Control with Git, также на подлёте Programming in Scala. В первую очередь навалился на Git. Очень много новой информации относительно устройства репозитария и принципов работы разных комманд. По подробности изложения несравнимо с "Getting good with Git" и "Pro Git".
среда, 16 февраля 2011 г.
"Структура и интерпретация компьютерных программ"
Вот я наконец и дочитал эту замечательную книгу. Ну точнее постановил считать её дочитанной, так как предпоследняя глава растянулась чуть ли не на полгода, а последняя обещала и того дольше.
Процесс и правда изрядно затянулся. Я начал её читать ещё в сентябре позапрошлого (2009) года. И вот только пара недель как закончил. Причина очень проста: книга явно требует подходящего настроения и регулярно читать не получалось хронически. Процесс и сам по себе получился не обычным. Я начал её читать с экрана, в виде английской pdf'ки. Однако, когда я был где-то на середине вышел очередной тираж русского издания и я без раздумий добыл себе бумажный экземпляр на русском.
И наверно единственный раз не пожалел, что связался с русским переводом. Надо отдать должное переводчикам - это один из лучших технических переводов, что я видел. И без сомнения наиболее качественный из выпущенного в последние годы. Очень тщательный, последовательный подход к терминологии. Авторы всегда дают оригинальное написание вводя новый термин, но далее в книге используют один и тот же русский вариант. Нет ни диких транслитераций, ни странных оборотов в три слова. Я практически прозрачно переключился с английской версии на русскую.
Ещё важный момент, все примеры в книге выполнены на LISPе (а точнее Scheme). Годика три назад, я наверно по этой причине сделал бы из книжки костер и сплясал бы вокруг него. Однако изучение Smalltalk и Python (а точнее отзывов их авторов о влиянии LISP) в последствии немного сгладили мое отношение к скобочкам. Нельзя не признать, что для первых глав, где демонстрируется куча разных подходов к программированию, он является пожалуй оптимальным выбором. Однако длинные куски кода на LISPе всё-таки страшно выглядят, понимание многих примеров из последних глав отнимало много времени, в основном на вычленение стандартных конструкций из мета-кодировки в скобках.
Итак, о чём же собственно книга.
Первая глава, "Построение абстракций с помощью процедур", рассказывает о базовых техниках функционального программирования. В ней вводятся понятие процедуры, её вычисления, объясняется семантика лямбда-исчисления. Также тут рассматриваются "формы" вычислительных процессов, и то какие потребности в памяти и процессорном времени они порождают. В конце показываются функции высокого порядка и лямбда-выражения, с примерами применения.
Вторая глава, "Построение абстракций с помощью данных", рассказывает о том, что такое данные, как их можно унифицировать (на уровне доступа) с процедурами и почему это бывает важно. Попутно вводится понятие структуры данных и рассматриваются примеры, вроде пар, списков и т.п. Описывается свойство замкнутости для структур данных (программ?), и демонстрируется его важность в дизайне программ. Заканчивается глава по сути кратким введением в ООП, а точнее подробным рассмотрением идеи программирования в "стиле передачи сообщений". Показываются ЛИСПовые техники реализации классов, объектов, методов. Последнее без сомнения лучшее введение в ОО-программирование из всех что я видел. В основном благодаря тому, что мир объектов и сообщений строится вместе с читателем, а не приводится как данность (тут я немного забежал вперёд - достраивается он уже в следующей главе).
Третья глава, "Модульность, объекты и состояние", вводит в стройный мир асбтрактных вычислений, выстроенный в первых главах, проблемы реального мира: присваивание и время. Примерно половина главы посвящена тому как эти явления аккуратно моделировать в языке программирования, и примерно половина конкретным техникам программирования. В этой главе особо порадовал раздел про потоки, который был прочитан с учётом возвратов из следующей главы и перелистываний на досуге раза три. Совершенно замечательный пример простого решения массы сложных проблем, настоятельно рекомендую для прочтения, даже если за всю книгу лень браться.
Четвёртая глава, с жутким названием "Метаязыковая абстракция", посвящена созданию интерпретаторов языков программирования. В ней сначала подробно расписывается архитектура и реализация интерпретатора самой Scheme, а затем вносится в него ряд изменений, для поддержки экзотических методов программирования. Меня, в контексте аспирантуры, конечно больше всего заинтересовал логический интерпретатор (пролог в скобочном синтаксисе), который наверно единственный я более-менее до конца понял.
Ну и на пятую главу, "Вычисления на регистровых машинах", я забил :)
Надо отметить, что книга доставила массу удовольствия в процессе прочтения. Нельзя сказать, что всё написанное там было для меня откровением, но этот материал копился у меня в голове годами, из обрывков статей, блогпостов и собственного печального опыта... В общем стоило ей попасть мне в руки курсе на четвёртом.
Вообще книга заставила много раз подряд проклясть родной универ. Всё-таки способность отечественных преподавателей сделать из даже самых интересных и полезных знаний невнятную, серую, трудноперевариваемую массу просто поражает. Вспомнился и курс функционального программирования, двухмесячный, с быстрым рассмотрением синтаксиса и стандартных функций, какого-то древнего ДОСовского ЛИСПА, увенчанный курсовиком, в котором нужно было сделать базу данных то ли студентов на кафедре, то ли телевизоров на складе. Курс, на котором понятие неизменяемой структуры данных даже не звучало, не говоря уже про то, чтобы объяснить выученному на паскале потоку как с ними работать. И курс объектно-ориентированного программирования, без единого упоминания о передаче сообщений.
Ну да ладно, напоследок, по традиции, критическое замечание к сабжу. В последних главах очень мало диаграмм к сложным примерам кода. Хорошее именование и форматирование это конечно хорошо. Но всё-таки картинки - лучший способ доносить архитектуру до умственно не далёких читателей вроде меня.
Процесс и правда изрядно затянулся. Я начал её читать ещё в сентябре позапрошлого (2009) года. И вот только пара недель как закончил. Причина очень проста: книга явно требует подходящего настроения и регулярно читать не получалось хронически. Процесс и сам по себе получился не обычным. Я начал её читать с экрана, в виде английской pdf'ки. Однако, когда я был где-то на середине вышел очередной тираж русского издания и я без раздумий добыл себе бумажный экземпляр на русском.
И наверно единственный раз не пожалел, что связался с русским переводом. Надо отдать должное переводчикам - это один из лучших технических переводов, что я видел. И без сомнения наиболее качественный из выпущенного в последние годы. Очень тщательный, последовательный подход к терминологии. Авторы всегда дают оригинальное написание вводя новый термин, но далее в книге используют один и тот же русский вариант. Нет ни диких транслитераций, ни странных оборотов в три слова. Я практически прозрачно переключился с английской версии на русскую.
Ещё важный момент, все примеры в книге выполнены на LISPе (а точнее Scheme). Годика три назад, я наверно по этой причине сделал бы из книжки костер и сплясал бы вокруг него. Однако изучение Smalltalk и Python (а точнее отзывов их авторов о влиянии LISP) в последствии немного сгладили мое отношение к скобочкам. Нельзя не признать, что для первых глав, где демонстрируется куча разных подходов к программированию, он является пожалуй оптимальным выбором. Однако длинные куски кода на LISPе всё-таки страшно выглядят, понимание многих примеров из последних глав отнимало много времени, в основном на вычленение стандартных конструкций из мета-кодировки в скобках.
Итак, о чём же собственно книга.
Первая глава, "Построение абстракций с помощью процедур", рассказывает о базовых техниках функционального программирования. В ней вводятся понятие процедуры, её вычисления, объясняется семантика лямбда-исчисления. Также тут рассматриваются "формы" вычислительных процессов, и то какие потребности в памяти и процессорном времени они порождают. В конце показываются функции высокого порядка и лямбда-выражения, с примерами применения.
Вторая глава, "Построение абстракций с помощью данных", рассказывает о том, что такое данные, как их можно унифицировать (на уровне доступа) с процедурами и почему это бывает важно. Попутно вводится понятие структуры данных и рассматриваются примеры, вроде пар, списков и т.п. Описывается свойство замкнутости для структур данных (программ?), и демонстрируется его важность в дизайне программ. Заканчивается глава по сути кратким введением в ООП, а точнее подробным рассмотрением идеи программирования в "стиле передачи сообщений". Показываются ЛИСПовые техники реализации классов, объектов, методов. Последнее без сомнения лучшее введение в ОО-программирование из всех что я видел. В основном благодаря тому, что мир объектов и сообщений строится вместе с читателем, а не приводится как данность (тут я немного забежал вперёд - достраивается он уже в следующей главе).
Третья глава, "Модульность, объекты и состояние", вводит в стройный мир асбтрактных вычислений, выстроенный в первых главах, проблемы реального мира: присваивание и время. Примерно половина главы посвящена тому как эти явления аккуратно моделировать в языке программирования, и примерно половина конкретным техникам программирования. В этой главе особо порадовал раздел про потоки, который был прочитан с учётом возвратов из следующей главы и перелистываний на досуге раза три. Совершенно замечательный пример простого решения массы сложных проблем, настоятельно рекомендую для прочтения, даже если за всю книгу лень браться.
Четвёртая глава, с жутким названием "Метаязыковая абстракция", посвящена созданию интерпретаторов языков программирования. В ней сначала подробно расписывается архитектура и реализация интерпретатора самой Scheme, а затем вносится в него ряд изменений, для поддержки экзотических методов программирования. Меня, в контексте аспирантуры, конечно больше всего заинтересовал логический интерпретатор (пролог в скобочном синтаксисе), который наверно единственный я более-менее до конца понял.
Ну и на пятую главу, "Вычисления на регистровых машинах", я забил :)
Надо отметить, что книга доставила массу удовольствия в процессе прочтения. Нельзя сказать, что всё написанное там было для меня откровением, но этот материал копился у меня в голове годами, из обрывков статей, блогпостов и собственного печального опыта... В общем стоило ей попасть мне в руки курсе на четвёртом.
Вообще книга заставила много раз подряд проклясть родной универ. Всё-таки способность отечественных преподавателей сделать из даже самых интересных и полезных знаний невнятную, серую, трудноперевариваемую массу просто поражает. Вспомнился и курс функционального программирования, двухмесячный, с быстрым рассмотрением синтаксиса и стандартных функций, какого-то древнего ДОСовского ЛИСПА, увенчанный курсовиком, в котором нужно было сделать базу данных то ли студентов на кафедре, то ли телевизоров на складе. Курс, на котором понятие неизменяемой структуры данных даже не звучало, не говоря уже про то, чтобы объяснить выученному на паскале потоку как с ними работать. И курс объектно-ориентированного программирования, без единого упоминания о передаче сообщений.
Ну да ладно, напоследок, по традиции, критическое замечание к сабжу. В последних главах очень мало диаграмм к сложным примерам кода. Хорошее именование и форматирование это конечно хорошо. Но всё-таки картинки - лучший способ доносить архитектуру до умственно не далёких читателей вроде меня.
суббота, 25 декабря 2010 г.
"Пионеры программирования"
Дочитал наконец купленную ещё в сентябре книгу "Пионеры программирования". Это перевод вышедшей около полутора лет назад на английском "Masterminds of Programming". Формат её довольно занятен - это сборник интервью с авторами некоторых языков программирования. Да, английский вариант названия более корректен - пионерами мало кого из участников можно назвать.
Интервью сильно различаются между собой. Кто-то предаётся воспоминаниям, кто-то рассказывает практически о всей своей карьере, кто-то с увлечением рассказывает о планах (проработать 30 лет в этой богом проклятой отрасли и сохранить надежду на что-то - это по-моему подвиг). Многие философствуют на тему судьбы информатики и языков программирования... Журналисты аккуратно корректирую тему, в целом не могу оценить их работу ни как очень хорошую, ни как очень плохую. Наверно это как раз то впечатление, которое они хотели оставить. Мне как юному инженеру естественно в первую очередь были интересны рассказы о проектировании и реализации языков. Хотя что-то и на философские рассуждения я что-то становлюсь с годами падок. Тем более что технари умеют при случае сопроводить их логикой и результатами безжалостных экспериментов.
Всего в книге 26 интервью о 17 языках. Для порядка расскажу о некоторых наиболее запомнившихся.
Начинается книга с интервью Бьёрна Страуструпа. Надо сказать, я что не очень люблю C++, последнее время можно даже сказать активно не люблю. Но он всё-таки автор мастер обоснования, к концу главы я абсолютно чётко понимал что именно таким язык должен быть и иначе никак. На самом деле дядька вызывает уважение упорством и бесконечной изобретательностью в решении проблем. Из философии у него ряд интересных мыслей о проблемах образования. Большинство инженеров готовят как учёных. Оказывается дипломник, который впервые видит настоящего коллегу-программиста и живой проект обычное дело не только у нас.
Неожиданно мне очень понравилось интервью Чака Мура, автора Forth (вообще не представляю как он выглядит). Затрудняюсь выделить какие-то особые его мысли. Просто странное совпадение мироощущения, профессиональных приоритетов с моими собственными. Идея о важности глубокой модульности программ и близости их компонентов к мыслительным образам... В общем советую читать.
Великолепные интервью с Альфредом Ахо (да да да, это он!), Питером Вайнбергером и Брайаном Керниганом. Книгу стоит покупать хотя бы ради этой главы. Совершенно потрясающие мысли о проблемах дизайна и проектирования, способах их решения. Лаборатория, в которой собрались все эти люди без сомнения должна была была изменить мир. Ничего не берусь пересказывать - читайте и перечитывайте. А, ну да, поводом для их опроса был AWK (дал одному коллеге почитать отрывочек так он сразу бросился его учить).
Ещё однозначно стоит упомянуть Брэда Кокса, одного из авторов Objective-C. Судя по поднимаемым им проблемам, он, в отличии от большинства опрашиваемых, годы после создания своего языка провёл не в уютной исследовательской лаборатории, а в самой гуще кровавого безумия энтерпрайза. Кажется как архитектор и немного менеджер. Он отмечает целый ряд грустных вещей в отрасли и как может предлагает решения. Во-первых это глубокое непонимание между академическими и промышленными организациями, отсутствие фундаментального решения насущных проблем и усердные раскопки в экзотических областях. Говорит он и о том, что разработка даже очень больших систем в даже очень серьёзных компаниях продолжает оставаться делом полукустарным. Отсутствует технология, отсутствуют доверие и как следствие глубокое разделение обязанностей. Ситуация, когда одни и те-же компании при создании продуктов занимаются всем от архитектуры процессора до формочек остаётся нормой. Кокс приводит замечательную аналогию с древними строителями, которые сами добывали глину и жгли кирпичи. Ведь и правда бегают архитекторы с мастерками!
Можно немного повинить авторов за то, что в книгу не попали по крайней мере три языка и человека, о которых очень хотелось бы услышать. Это Джон Мак Карти, автор LISP, языка до сих пор вызывающего бури эмоций как у стариков, так и у третьекурсников. Это Никлаус Вирт, пожалуй единственный человек сужающий, а не расширяющий языки. Ну и Дениса Ритчи тоже можно было привлечь, всё-таки популярнейший язык.
Не берусь подводить итог прочитанному - очень много различных взглядов не только на методы работы но и саму природу проблемы разработки языка да и программирования вообще. Но могу однозначно сказать что её прочтение стоит потраченного времени. А то и многократно окупается если вы также любите сложные задачи и красивые решения.
Интервью сильно различаются между собой. Кто-то предаётся воспоминаниям, кто-то рассказывает практически о всей своей карьере, кто-то с увлечением рассказывает о планах (проработать 30 лет в этой богом проклятой отрасли и сохранить надежду на что-то - это по-моему подвиг). Многие философствуют на тему судьбы информатики и языков программирования... Журналисты аккуратно корректирую тему, в целом не могу оценить их работу ни как очень хорошую, ни как очень плохую. Наверно это как раз то впечатление, которое они хотели оставить. Мне как юному инженеру естественно в первую очередь были интересны рассказы о проектировании и реализации языков. Хотя что-то и на философские рассуждения я что-то становлюсь с годами падок. Тем более что технари умеют при случае сопроводить их логикой и результатами безжалостных экспериментов.
Всего в книге 26 интервью о 17 языках. Для порядка расскажу о некоторых наиболее запомнившихся.
Начинается книга с интервью Бьёрна Страуструпа. Надо сказать, я что не очень люблю C++, последнее время можно даже сказать активно не люблю. Но он всё-таки автор мастер обоснования, к концу главы я абсолютно чётко понимал что именно таким язык должен быть и иначе никак. На самом деле дядька вызывает уважение упорством и бесконечной изобретательностью в решении проблем. Из философии у него ряд интересных мыслей о проблемах образования. Большинство инженеров готовят как учёных. Оказывается дипломник, который впервые видит настоящего коллегу-программиста и живой проект обычное дело не только у нас.
Неожиданно мне очень понравилось интервью Чака Мура, автора Forth (вообще не представляю как он выглядит). Затрудняюсь выделить какие-то особые его мысли. Просто странное совпадение мироощущения, профессиональных приоритетов с моими собственными. Идея о важности глубокой модульности программ и близости их компонентов к мыслительным образам... В общем советую читать.
Великолепные интервью с Альфредом Ахо (да да да, это он!), Питером Вайнбергером и Брайаном Керниганом. Книгу стоит покупать хотя бы ради этой главы. Совершенно потрясающие мысли о проблемах дизайна и проектирования, способах их решения. Лаборатория, в которой собрались все эти люди без сомнения должна была была изменить мир. Ничего не берусь пересказывать - читайте и перечитывайте. А, ну да, поводом для их опроса был AWK (дал одному коллеге почитать отрывочек так он сразу бросился его учить).
Ещё однозначно стоит упомянуть Брэда Кокса, одного из авторов Objective-C. Судя по поднимаемым им проблемам, он, в отличии от большинства опрашиваемых, годы после создания своего языка провёл не в уютной исследовательской лаборатории, а в самой гуще кровавого безумия энтерпрайза. Кажется как архитектор и немного менеджер. Он отмечает целый ряд грустных вещей в отрасли и как может предлагает решения. Во-первых это глубокое непонимание между академическими и промышленными организациями, отсутствие фундаментального решения насущных проблем и усердные раскопки в экзотических областях. Говорит он и о том, что разработка даже очень больших систем в даже очень серьёзных компаниях продолжает оставаться делом полукустарным. Отсутствует технология, отсутствуют доверие и как следствие глубокое разделение обязанностей. Ситуация, когда одни и те-же компании при создании продуктов занимаются всем от архитектуры процессора до формочек остаётся нормой. Кокс приводит замечательную аналогию с древними строителями, которые сами добывали глину и жгли кирпичи. Ведь и правда бегают архитекторы с мастерками!
Можно немного повинить авторов за то, что в книгу не попали по крайней мере три языка и человека, о которых очень хотелось бы услышать. Это Джон Мак Карти, автор LISP, языка до сих пор вызывающего бури эмоций как у стариков, так и у третьекурсников. Это Никлаус Вирт, пожалуй единственный человек сужающий, а не расширяющий языки. Ну и Дениса Ритчи тоже можно было привлечь, всё-таки популярнейший язык.
Не берусь подводить итог прочитанному - очень много различных взглядов не только на методы работы но и саму природу проблемы разработки языка да и программирования вообще. Но могу однозначно сказать что её прочтение стоит потраченного времени. А то и многократно окупается если вы также любите сложные задачи и красивые решения.
Подписаться на:
Сообщения (Atom)