В феврале много времени провёл в дороге и много читал. Я очень люблю книги. Книги это особый мир. В 90-е, когда интернета дома ещё не было и в помине, книги по программированию были ключом к творчеству в этой сфере. Да и не только по программированию. Они были ключом к некому сакральному знанию, к которому очень хотелось прикоснуться. Порой книги были просто незаменимы. Когда у нас дома появился первый PC-совместимый комп (Поиск!) и стопка дискет, мы с отцом не знали, как запустить программу на исполнение. Что исполняемые файлы в среде MS-DOS имеют расширение .com, .exe, .bat - откуда можно было узнать? В итоге выручила книга Фигурнова - “IBM PC для пользователя”. Трудно представить, сколько людей в те времена, столкнувшись с персоналкой, получали первые знания и навыки работы в DOS, Norton Commander и текстовых редакторах именно из этой книги.

Но ладно основы. Интереснее были книги по программированию. Стоили они дорого, и родители не спешили их мне покупать. Поэтому если у кого-то появлялась книжка, она начинала ходить по рукам. До сих пор где-то на даче у меня валяется “Visual Basic за 21 день”. Появилась эта книга у друга Вадика и Visual Basic это был в некотором роде шок. После Турбо Паскаля, с его библиотекой CRT, возможность создавать легко и быстро приложения под Windows - было чем-то невообразимым. Ты нажимаешь кнопку “Привет, Мир!” и заголовок окна меняется на “Привет, Мир!”. Так легко и просто. Правда потом оказалось, что эта простота только кажущаяся и чтобы сделать что-то посложнее, нужно понимать концепции, о которых в книге толком ничего не говорилось.

После экспериментов с VB, настала пора Delphi (под девизом - пишем весь код в обработчике событий). Но настоящим предметом вожделения в те времена был ассемблер. Потому что именно на ассемблере делали по-настоящему крутые вещи. Демосцена, Е-зайны, вирусы - для всего этого нужен был ассемблер. Первая книга которая у нас появилась, был самоучитель Питера Нортона (Нортон П., Соухе Д. Язык ассемблера для IBM PC), того самого, в честь которого назван Norton Commander (и изначальным автором которого, он, кстати, не является).

Способ подачи информации в книжке был своеобразный. Помню, что в первых главах автор учил переводить числа из одной системы исчисления в другую и работать с DOS-утилитой debug.exe. Было не очень понятно - зачем этот debug.exe нужен и какое отношение он имеет к программированию на Ассемблере? Дальше начиналось что-то сложное, типа написание собственной дисковой утилиты или что-то в этом роде. Кода было много, он был сложный. А главное, материал давался как будто с потолка. Не помню, что кто-то из друзей продвинулся дальше debug.exe. Потом были ещё какие-то книжки, последняя их которых “Юров, Хорошенко. Assembler. Учебный курс”. Но приблизиться даже близко к тому, чтобы написать какую-нибудь демку, не удалось. Вообще не знаю, как можно было бы эффективно учить ассемблер без понимания архитектуры, принципов, которые заложены при её построении. Как люди в то время сами разбирались во всём этом по книжкам - загадка. Ладно, если это были студенты технических ВУЗов. Но простые-то люди?

Впрочем, какой-то прогресс был. На каком-то из дисков Hacker CD были файлы crack.me - “взломай меня”. При запуске программа требовала ввести пароль и нужно было с помощью дизассемблера его узнать. Несколько таких файлов удалось “взломать”. В качестве дизассемблера выступал Hiew. Ещё одна своеобразная “икона” 90-х, которая вроде как даже дожила до наших времён и вполне себе продаётся. Упёрся я, кажется, в файл, который был зашифрован сам по себе (это вообще была распространённая техника). Не хватило упорства. Но какие-то общие принципы удалось понять.

Сейчас книжки - это уже артефакт. Они по-прежнему стоят дорого, но практически всегда есть возможность найти бесплатно электронную версию. Что не мешает “хотеть” бумажный вариант. Хотя, зачастую, читать его менее удобно (в силу громоздкости, мелкого шрифта, порой некачественной бумаги). Но вот что в книгах действительно интересно - это непосредственно фигура автора, которая накладывает отпечаток на всё повествование. Если читая мануалы возможно просто извлечь требуемую информацию, что в случае книги удаётся получить ещё и как бы отпечаток творческой энергетики конкретного человека. Порой эта энергетика интересна сама по себе, но может и заставить отложить книгу куда подальше.

Так вот, что читал в феврале:

Harold Abelson and Gerald Jay Sussman with Julie Sussman “Structure and Interpretation of Computer Programs”

Это прям классика-классика. Каким образом человеку можно дать азы программирования? Безумно сложный и комплексный вопрос, не имеющий однозначного решения. К примеру, Андрей Столяров в своей книге “Программирование. Введение в профессию. Азы программирования”, пришёл к выводу, что правильным началом будет Паскаль, не смотря на то, что язык если и не мёртвый, то не в меинстриме точно. Своё решение он обосновал тем, что Паскаль даёт правильное введение к более сложным вопросам - таким, как указатели в Си. Паскаль типизированный язык, требующий строго определённой структуры программы, различающий на уровне реализации процедуры и функции. Это, конечно, здорово. Но на мой взгляд, Си и Паскаль стоят практически на одной ступени. И мы либо даём программирование совсем в упрощённом виде, без синтаксических нюансов, на примере любого языка, сосредотачиваясь на базовых концепциях “переменная, ветвление, цикл”, либо углубляемся в нюансы (). Столяров глубоко убеждён, что начинающий в программировании никогда не поймёт тему указателей, не имея определённого багажа знаний. Но буквально через несколько глав он описывает создание связного списка на Паскале и… мне кажется, на Си это можно сделать практически также.

Впрочем, только ленивый не клюнул Столярова за выбор Паскаль, как языка, необходимого для “введения в профессию”.

А вот авторы книги “Структура и интерпретация компьютерной программы” вообще объясняют концепции программирования на примере языка Lisp. Первое издание книги было опубликовано аж в 1983 году. Та электронная версия, которая есть у меня - 1999 года и её полный текст доступен в сети легально бесплатно. Приводя цитату из “Нового словаря хакеров, 1993 г.”, книга обозначается как Wizard Book - “an excellent computer science text used in introductory courses at MIT. So called because of the wizard on the jacket. One of the bibles of the LISP/Scheme world. Also, less commonly, known as the Purple Book”.

Hello Friend

В посвящении на первых страницах указано: “This book is dedicated, in respect and admiration, the spirit lives in the computer”. Думаю, что “энергетика” авторов, о которой я говорил ранее, вполне определена этим.

Как я понял, Lisp вообще играл (а, возможно, и играет до сих пор) значительную роль в обучение CS в западных университетах. А получив знания по Lisp, сложно не проникнуться Emacs-ом. Да и не поэтому ли Р. Столлман (как сотрудник MIT) написал Emacs именно как интерпретатор Lisp-a? А кто у нас вообще знает про Lisp?

Книга является учебником по курсу 6.001, читаемому в MIT и интересно его описание чтобы получить представление о тех базовых знаниях, которые дают студентам в этом ВУЗе.

Седер Наоми. Python. Экспресс-курс.

Регулярно читаю что-то по Python. Если бы Питона не было, его стоило бы придумать. Язык, подкупающий своей кажущейся на первый взгляд простотой, на деле оказывается не таким уж (а точнее, совсем не) простым. Его базовый синтаксис можно объяснить начинающему за пару часов. Но если начать углубляться в дебри, то столкнёшься с концепциями, для осмысления нужно приложить усилия. Автор книги женщина, которая занимала какой-то высокий пост в некоммерческой организации Python Software Foundation. Вообще, книга мне была интересна не столько содержанием, сколько возможностью увидеть “женский взгляд” на программирование (точнее даже не на сам “процесс”, а на явление). То, что женщины и мужчины воспринимают мир по-разному, однозначный и непреложный факт. Почитав блог автора, понял, что её точкой беспокойства является гендерный вопрос в контексте IT. Наверное поэтому на обложке изображена девушка?

Hello Friend

На занятии по высшей математике в университете женщина-преподаватель, в виде лирического отступления, спросила - “А могла бы она стать программистом? Что ей нужно для этого? Какой язык учить?”. Могла бы эта женщина-преподаватель работать по данной специальности - конечно да. Было бы ей комфортно заниматься этим - убеждён, что нет. Если до настоящего времени у неё не возникло самостоятельной и неудержимой тяги заниматься “программированием”, то действие из интенции “а могу ли?” или “надо, потому что выгодно” вряд ли доставит радость. Возвращаясь к тому же “Введению в профессию” Столярова, в первом томе он выражает такую мысль: “если вы решили стать программистом, поставьте Linux и поковыряйтесь в нём. Показалось сложным-скучным-неинтересным - подумайте о другой профессии. В мире много всего интересного”.

Вообще есть некоторое трудноуловимое качество - “очарованность технологией”. Разговаривая с однокурсниками, будущими “дипломированными инженерами ИВТ.ВМКСС” я задаю им вопрос - “а нравятся ли вам компьютеры вообще? Интересны ли?” И вот нет. Не интересны. Какие-то вещи, которые с помощью них становятся возможны (игры, к примеру) - интересны, а вот сами компы - нет.

И вот если подходить к гендерной стороне вопроса, то у меня есть убеждённость, что мужчина всё же проникнется такой “очарованностью” с большей степенью вероятности, что “the spirit, lives in the computer” как-то изначально чужд женской энергии, структуре женского сознания. Это касается не только компьютеров - мужчина также скорее проникнется страстью к ремонту автомобилей или пайке пластиковых труб.

Кстати, лучшее описание состояния “очарованностью технологией” я встретил в романе Андрея Платонова “Чевенгур”. Только там речь шла не о компьютерах, а о паровозах)).

Но стоит конснуться вопроса “женщина-программирование” вслух, и кто-нибудь обязательно обидится и скажет - посмотрите, я, моя подруга или некоторая третья персона добились успеха, а значит…

Этот нескончаемый, не всегда выражаемый вербально (но вокруг которого строится много интересных ситуаций) спор в эфире “Радио-Т”, относительно ситуации “женщина - компьютер”, правильно свести к выводу: “И женщины, и мужчины должны иметь равный доступ. Но если при наличии равных возможностей женщины не идут в IT, в этом нет какой-либо проблемы”. Зато если идут и им это нравится - то очень даже замечательно.

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

О книге. Она предполагает изучение Python тем, кто уже умеет программировать на каком-нибудь другом языке. То есть самые базовые концепции подразумеваются понятными. И для тех, кто что-то понимает, книга мелковата - в ней недостаточно глубины, недостаточно параллелей и отсылок к общему. Книга как будто вымучена. Складывается впечатление, что автор как будто не была до конца уверена, как правильно подавать материал. Когда нужно углубляться, а когда можно пройтись по вершкам. Автор не делилась восторгами взахлёб, а как будто осторожно прощупывала ногой почву, боясь провалиться в трясину. Книгу можно почитать, но вряд ли она вызовет восторг и желание оставить книгу в качестве настольной. Скорее всего, бегло прочитанная, она просто займёт место на полке. Я осилил половину и обязательно “добью” до конца. Но в процессе чтения, попалась другая книга и она показалась гораздо более интересной (правда и стоит ровно в два раза дороже). И, что интересна, она оказалась как бы противопоставлением книги Наоми Седер в подходе к языку.

Михаил Яворски, Тарек Зиаде. Python. Лучшие практики и инструменты

На мой взгляд, практика, когда язык программирования изучается в отрыве от внутренних процессов. Понятно, что ни кто не требует спускаться на уровень двоичной логики, но хотя бы до понимания принципов устройства памяти - совершенно необходимо. Приступая к языкам программирования, представляющих собой высокую степень абстракции, правильно понимать, что в их основе лежит Cи (в большинстве случаев), а в Си - переменная, это именованная ячейка памяти фиксированного размера, а массив - это последовательность таких ячеек определённой длинны. И что если мы вводим другие типы данных, такие как “словари”, “кортежи” и т.п., в конце концов мы имеем дело с их реализацией на базе “примитивных” типов. И их реализация представляет собой алгоритм, характеризуемый вычислительной сложностью. И если мы не говорим о языке на совсем уж примитивном уровне, то данные вопросы должны обсуждаться.

Книга Яворски, Зиаде - это не учебник и не самоучитель. Это скорее общий взгляд на Python как на инструмент разработки, обладающий определёнными характеристиками. В силу этого книгу интересно читать. Описывая структуры данных, авторы характеризуют их алгоритмическую сложность, дают советы по целесообразности их использования.

На мой взгляд, существует определённый разрыв между базовыми концепциями (включающими, в том числе, описание синтаксиса) и языком, как инструментом для решения прикладных задач. И если в случае с Си работа с базовыми концепциями полезна в силу близости к железу (поскольку даёт концептуальные понимание общих парадигм), то говорить о том же Python не затрагивая прикладных аспектов - не верно. Однако современный “прикладной” план существует в определённом контексте и вот чтобы понять основные идеи, этот контекст составляющих, книга Яворски-Зиде подходит вполне.

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

В общем книгу настоятельно рекомендую почитать, даже если нет необходимости писать что-то на Python. Просто для общего развития. Она интересная.