Элементы античности

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

Расширение файла в три символа. В 1974 году в свет вышла операционная система CP/M, в которой имя файла могло состоять из восьми символов, точки и трёх символов. Потом пришёл MS-DOS, взявший то же ограничение (как и дисководы A: и B:, кстати). Так и повелось.
80-символьные строки. Самое бесячье, когда начинают впаривать как аксиому. У нас тут давно широкие мониторы и шрифт меняется кеглем, но раз в 1928 году IBM выпустили перфокарты с 80 колонками, давайте продолжать.
QWERTY и ЙЦУКЕН. В 1870-х базовая раскладка латиницы завоевала мир с помощью печатных машинок Ремингтона. Ну а наш ЙЦУКЕН, видимо, «появился» в начале XX века. Если у вас были какие-нибудь фантазии на тему исследований частотности символов, органичности и т.п., то нет, ничего такого. Просто так получилось. А даже если и было, то за почти 150 лет человечество немножко изменилось. Но не раскладки клавиатур.
Байты и биты. Ребёнком меня это здорово удивило и удивление не прошло. До 1964 года в мире был бардак. Количество битов в байте колбасило в зависимости от фантазии производителя конкретного железа. Но тут IBM выкатили IBM System/360 с его 8-битным байтом. Казалось бы, ещё одна машина, и шо? Да, ещё одна. Только ставшая мегапопулярной, завалившая собою рынок, вышедшая на государственные уровни. Потому у нас 8 бит в байте, привет. Будь компьютер менее удачным, могло быть 4 или 16 (думаю, от степени двойки не удрали бы).
Итая, житая, катая. Вы же привыкли для целочисленных переменных использовать имена i, j и k? Так вот, история мутная. В 1954 году появился первый мануал по FORTRAN’у и сказано там буквально следующее:

fortran

Думаю, это и есть то, что повлияло на разработку. А вот на сам FORTRAN, похоже, повлияли обычаи математиков, которые в какой-то мере сформировал Рене Декарт работой La géometrie 1637 года (тут детальнее).

Алголоподобность. Если вам нужен строго один язык, повлиявший на весь мир и приучивший к определённым конструкциям, вам нужен ALGOL. Пусть к концу 50-х далеко не все его элементы были чем-то новым, но вот их совокупность выстрелила далеко и надолго.

algol

Почти все языки, что приходят вам на ум в первую минуту, отнаследованы в итоге от ALGOL. Также лет на 20..30 этот язык стал стандартом de facto для описания алгоритмов в научной литературе (вон на скрине почти всё должно быть вам понятно, а ведь почти 60 лет). Как мне нравится думать, почти всё в программировании придумали в 50..60-х, а мы наблюдаем за волнами разных реализаций одного и того же.

Против goto. Кто не сталкивался, тому повезло, но с 1968 года поднялась волна против goto (заодно и switch достаётся), да такая, что название эссе стало нарицательным в программировании: Considered harmful. Возможно, не будь этого эссе, современные языки (и современные программисты) выглядели бы иначе. А так… круги по воде до сих пор идут. Напоследок напомню, Дейкстра допускал использование goto в машинных кодах [читай “на низком уровне”]:

Later I discovered why the use of the go to statement has such disastrous effects and did I become convinced that the go to statement should be abolished from all «higher level» programming languages (i.e. everything except —perhaps— plain machine code).

Это несколько отличается от привычного у фанатиков полного неприятия, согласитесь.


Во всём этом занятно, как один человек или одна частная контора могут на столетия вбить свой частный выбор. У Петрова зелёный гвоздик, у Иванова красный гвоздик. Петров успел выйти на рынок раньше. Теперь все гвоздики зелёные. И вовсе не обязательно потому, что это особенно удобно и цвет победил в эволюционной борьбе.

Miscellanea VIII

Что у станка, что за компьютером в работе «мусор» является ясным термином. Мусор — всё, что не требуется для работы сервиса, сервера, продукта. Наличие мусора говорит об отсутствии внутренней дисциплины. В коде это приводит к неиспользуемым импортам, к недостижимым ветвлениям, к лишним переменным. На файловой системе складируются бестолковые файлы. Внутри системников заводятся мыши и тараканы. Не надо так. В фильмах фигня про немытых и обкаканных профессионалов. Нормальный профессионал содержит свою работу в чистоте и порядке.

Думаю, любой разработчик сталкивался с проблемой синхронизации данных из разных часовых поясов, да и просто с разным временем. Тем занятнее было в статье «Первая машинная обработка траекторных измерений спутника Земли» встретить следующий эпизод:

Когда, наконец, мы получили желанную орбиту спутника (точнее, хорошо наблюдаемой визуально ракеты-носителя второго ИСЗ), она привела нас в шоковое состояние. Оказалось, что в южном полушарии орбита проходила… под поверхностью Земли. Это, конечно, не могло быть правдой, так как данные наблюдений были недельной давности, а появления спутника регистрировались и позднее. Пришлось разбираться. Мы обнаружили, что в измерениях присутствовали ошибки времени их выполнения, доходившие до 5 секунд (около 40 км вдоль орбиты)! При таких ошибках и с учетом малой доступной базы измерений (лишь в пределах территории Советского Союза) точное вычисление эксцентриситета орбиты практически невозможно (полуось орбиты мы определяли хорошо, зная период обращения). Стала очевидной необходимость создания системы единого времени на пунктах наблюдения, что очень непросто, если пункты находятся достаточно далеко, например, на разных континентах

60+ лет прошло, а отсутствие точного единого времени всё так же наносит удары.


Кстати, про историю. Восьмибитный байт в СССР появился не сразу. Дело в том, что отечественные машины использовали в основном либо семибитный байт (Минск-32), либо шестибитный (БЭСМ-6, Весна, М-220 и др.), либо вообще переменной длины (привет Уралам). Потому решение взять IBM System/360 и всюду насадить в середине 60-х было очень интересным с точки зрения миграции софта. Ну и вообще история процесса любопытна в контексте дискуссий о том, почему в какой-то момент отечественный компьютерпром «по решению правительства и партии» свернул в другую сторону. Если кратко, то заигрались в зоопарк. А любой нормальный производственник терпеть не может зоопарк. С остальным всё было неплохо, но вот.

Любопытная (и уже слегка устаревшая) деталь китайского импортозамещения. В Китае суперкомпьютеры Тяньхэ-1А и Тяньхэ-2 построены на базе Intel. В 2015 году США решили, что нефиг китайцам ядерное оружие помогать считать, потому поставки процессоров Intel в вычцентры были запрещены. И тут в 2016 году ход конём: на архитектуре ShenWei китайцы внезапно делают процессоры ShenWei SW26010, на которых делают самый суперкомпьютер в мире — Sunway TaihuLight. Понятия не имею, в какую сторону всё-таки отразятся санкции на России (и спорить об этом не хочу), но вот Китай, на котором гроздь санкций не первый год, вполне толково выкручивается во всех областях, ещё и умудряется экономически рычагами поигрывать в нужных местах. При этом их IT/CS сообщество живёт в резервации, в собственном мире. Оттуда нет новостей, нет учебников, нет широко известного сугубо китайского софта (кроме Alibaba’шного). Есть забор. За которым миллионы программистов успешно что-то делают.

Не перестаю думать о том, как для англоязычных выглядит исходный код программ. На Хабре докликался до старой статьи, а там скрин языка Рапира:

8e49a97e331143d7a092574c5a2cc333
СССР, конец 70-х, язык для школоты

Ну… Да. Как-то так. Пожалуй, хорошо, что английский не родной.

Про выбор андроидофона

Эссе для тех, кто твёрдо решил купить именно андроидофон в начале 2018 года. Я долго изучал и выбирал, пришёл к годному варианту. Может, кому из прочитавших путь пригодится.

Сначала сформулировал требования. Мне нужен боевой смартфон. То, что постоянно таскается в куртке, в рюкзаке, в руках, болтается на столах. Отсюда и набор.
Во-первых, не сверхдорогой и не уникальный. Если разобьётся, я не должен мужественно глотать слёзы и постить фоточки погибшего артефакта в соцсеточки. Комфортный потолок цены — 35К рублей. Плюс-минус пара тысяч. Ну ок, максимум 40К, но это вот прям если на душу железка ляжет. Так отвалились топовые Samsung, всякие Gresso и Huawei в Porsche Design, а также неадекватный по цене Google Pixel 2.
Во-вторых, должна быть влагозащита. Не хочу в морось на каждый слой капелек думать, не помрёт ли телефон. Так отвалились OnePlus 5/5T. Жаль, но номинально у них защиты почему-то нет вообще.
В-третьих, без этого новомодного закругления экрана. Отношусь к тем, кого бесит. Так снова отвалился Samsung S8 и пара интересных моделей других производителей.
В-четвёртых, камера. Очень важный для меня пункт. Много фотографирую и хочу, чтобы в смартфоне совокупность {сенсор, оптика, алгоритмы} выдавала нужный мне результат (потому и надо смотреть много фото, а не только считать числа). Перечитал множество статей, пересмотрел множество фотографий, намедитировался на отчёты DxOMark. При кажущемся разнообразии на рынке мало игроков, у которых всё в сумме хорошо. Samsung S8 (отвалился ранее), Huawei Mate 10, HTC U11, Sony Xperia (перебор цены), Google Pixel 2 (перебор цены), Xiaomi Mi6 (внезапно), OnePlus 5/5T (с некоторыми косяками, но всё равно отвалились по защите).
В-пятых, если наличие или отсутствие 3.5 не особо волнует, то возможность воткнуть карту памяти считаю одной из ключевых (предположим, мне есть чем заполнить). Так отвалился Xiaomi Mi6. Что любопытно, на форумах Xiaomi попадаются чуваки, сначала покупающие телефон и карточку, а потом спрашивающие, мол, а куда?
В-шестых, вычислительный запас начинки. Чтобы в потенциале хоть пару лет мне хватало на всё. Так отвалилось всё, у чего не 6GB оперативки и не Snapdragon 835 процессором (ну или эквивалент). Игры почти никак не волнуют, но обычно в паре с этой конфигурацией идёт и графика нормальная, потому как-то не парился совсем. Так вылетел LG V30+, который не попал в цену, не выстрелил ранее камерой, да ещё и в топовом флагмане ставит 4GB RAM, что теперь штатно даже в китайских нефлагманах (при этом уже и 8GB попадается). Странный ход, учитывая, что Android 7.x с обычной загрузкой обычными приложениями отгрызает 2GB+ со старта.
В-седьмых, экран. Строго говоря, на практике вполне хватает 1920×1080 (FullHD), но после того, как ознакомился с экранами большей плотности, субъективно захотелось всё-таки не FullHD. Для глаз отличие есть. Фиг уловишь, не сформулируешь, а есть. Это срезало чуть ли не половину актуального рынка.
В-восьмых, отзывы пользователей. Начитался Я.Маркета и офигиллиард страниц форума на 4pda. Таким образом накопил понимание pros и cons всякого в чужих руках — от глюков софта до лёгкости перепрошивки. Тут снова пожалел, что отвалился OnePlus 5/5T. Будь защита, были бы близки к идеалу. Обращал внимание на отзывы о царапучести стекла, качестве сборки, количестве брака, сервисных центрах и т.п. В общем, если предыдущие пункты достаточно объективны, то в этом набивал субъективность.
В-девятых, прогноз развития. Одни компании считают смартфоны основным бизнесом, другие равным, третьи побочным. Одни задирают цену маркетингом, другие близки к себестоимости. Одни выпускают полноценные версии прошивок с удобным окружением, другие ляпают абы было. Из всей совокупности происходит субъективное впечатление будущего. Скажем, у Sony всё хорошо, N лет делают одни и те же плоские кирпичики, поклонники довольны. А вот Lenovo колбасит в экспериментах. Если мне понравится текущая модель, хочу, чтобы через год-другой мог купить похожую следующую, а не странный разворот ряда на 180 градусов.
В-десятых, ваще полная субъективность. Могут спросить, а где Meizu? Не зашло. Взять тот же флагманский Meizu Pro 7 Plus. Есть бесполезный второй дисплей, но нет NFC. На ряде тестов показывает странную скорость внутренней памяти. Не хочу. Или вот Nokia. В конце 2018 года обещают выпустить чудо из чудес, а пока ничего интересного. Или ASUS — как-то… ничем не цепляющие смартфоны.

Неважным для себя посчитал следующее:

  • Как сказал уже, чип графики — мне не особо надо, а в выбранном диапазоне почти у всех норм by default.
  • Толстый аккумулятор — бОльшую часть времени провожу либо дома, либо на работе. Там есть розетки. Современный смартфон при штатном использовании (не танчики 8 часов подряд) спокойно живёт пару суток на одной зарядке, проверял. Этого хватит.
  • Дизайн задника — чехол всё скроет. Мало того, что он защищает железку и повышает ухватистость, так ещё и позволяет не любоваться отпечатками пальцев на всяком прекрасном с переливами.
  • Внешний звук — есть люди, всерьёз обсуждающие качество звучания музыки из динамиков смартфона и наличие или отсутствие ЦАП. Удачи им. Когда мне понадобится хороший мобильный звук, куплю специализированный плеер, полно их.
  • Двойная камера — как по мне, штука интересная, но учиться её правильно делать и использовать будут ещё с год. Пока это баловство.
  • Свистелки-сопелки — второй дисплей на заднике, реакция на сжатие, распознавание лица, датчик загазованности воздуха и т.п. Всем этим интересно поиграть пару дней, потом забрасываешь. Действительно полезные штуки через год появляются уже у всех.

Достаточно проанализировать свой последний год использования смартфона, чтобы вычленить реально нужное и отшелушить бесполезное.


Что осталось? Две модели. Huawei Mate 10 и HTC U11 128GB. Хоть монетку бросай. Монетка попала на HTC. Довольно любопытная компания, многим засветившаяся в истории Android, но в последние годы ушедшая с громкой сцены. Они всё ещё делают смартфоны. Они всё ещё дружат с Google. Google за $1.1 миллиард купил 2К+ сотрудников HTC R&D для разработки. Они делают Google Pixel 2. Они несколько последних лет выпускали трешак под своей маркой и демонстрировали все варианты провального маркетинга. Но внезапно выпустили крайне удачный U11 (не путать с другими U!).
Отличный фотонабор. Отличный дисплей 2560×1440. Топовый на данный момент процессор. 6GB RAM, 128GB internal у флагмана линейки. Вполне удобоваримая оболочка с оперативным выходом обновлений. Аккумулятора хватает для жизни. И при этом в декабре почему-то вместо обычных 45К рублей продаётся за 36К, что в сумме с другими финтифлюшками победило.
Фактически сейчас за адекватную цену можно купить гармоничный набор железа, который потом прошить удобной оболочкой. Правда, надеюсь, у HTC дела наладятся и вот этот годный флагман среднего звена не оказался случайной удачей.
Уф. Как-то так.

Итоги блогогода 2017

Полистал записи за год. Хочется зафиксировать сухую выжимку — что-то вроде среза текущего понимания происходящего как внутри, так и вокруг. Пусть это и будет итогами года у этого блога.

У вас нет времени на фигню, если хотите стать профессионалом. Время человеческой жизни конечно и не так уж велико. Из него время осознанной разумности работы мозга ещё меньше. Из него время, доступное для развития, ещё меньше. Из него время, которое вы тратите на подходящее (голове, характеру, историческому моменту, etc), ещё меньше. Как распорядиться этим огрызком — ответственность сугубо ваша. Важно в дальнейшем понять и принять следующее: причины, по которым вы решили потусить в баре с друзьями вместо более профитного занятия, интересуют только вас. Фразы типа «не, ну не могу ж я всё время работать[ и потому не знаю и не умею X, Y, Z]» заставляют собеседующих и работодателей только плечами пожимать. Вон в соседнем кабинете собеседуют Петю, Петя не тусил с друзьями, Петя знает и умеет X, Y, Z, Петя будет нанят. Вы же отправитесь в бар жаловаться на злобных дядек. Злобным дядькам от этого ни холодно, ни жарко.

У всего, относящегося к профессии, должен быть профит. Новые знания, новые умения, новые деньги. Если вам по занятной советской инерции успели вложить в голову некоторое отвращение (или стеснение) к словам «профит», «выгода» и т.п., назовите другим словом — «польза». До того, как чем-либо заниматься, сформулируйте цель и пользу от достижения цели. Максимально честно. Если хочется тупо с братанами побегать в стрелялке, не надо формулировать «изучение групповой геймификации в целях прогнозирования рыночного спроса на элементы игровой механики». Цель не формулируется? Скорее всего, вы собираетесь заняться фигнёй.

Профессионал — человек, обладающий глубокими знаниями и умениями в избранной области, AND актуализирующий и пополняющий знания и умения, AND зарабатывающий своими знаниями и умениями на жизнь. Я таких знаю. На их фоне несколько смешно и жалко выглядят «специалисты», находящие миллиард причин НЕ знать и НЕ уметь и НЕ хотеть. Да, смешно и жалко. Даже извиняться не буду. Пусть вас и много таких, знайте, хватает и другой породы. А вас однажды заменят автоматы, которые будут работать точнее и быстрее. Как вариант, появятся инструменты, которыми делать вашу работу сможет и дворник. К тому идёт.

Работу сейчас вы всё равно найдёте. Или не потеряете. И даже можете на текущем месте выстроить карьеру. Время такое. Вроде и плодят разработчиков миллионами, а всё равно задач выше маковки. Потому в диалогах и жарких дискуссиях занятная ловушка. Человек удачно сел в кресло. Вот нужен был его работодателю «нажиматель квадратных кнопочек». Потом middle нажиматель. Затем senior нажиматель. Ну а что? Стабильный бизнес. Роботы пока не умеют, дешевле выращивать специализированные растения в собственных горшках. Потом пытаешься обосновать такому нажимателю узость, шаткость и общую ущербность его позиции, но… он же SENIOR KNOPOCHKA DEVELOPER. У него оклад верхней четверти рынка. Весь его удачный опыт говорит об обратном. А ему впаривают про какие-то алгоритмы, структуры данных, сборщики мусора, Linux, мониторинг и прочее. Ха. Ха. Ха. Нажимать квадратные кнопочки — вот настоящее дело. Не получается дискуссия. Так вот, рекомендую хоть раз в квартал задумываться, не превратились ли вы в такое же существо в кадке.

Программист должен быть рациональным. Как и разработчик. Мы инженеры. Всё, с чем мы работаем, так или иначе, но в итоге измеряется линейкой. Субъективность и «я не знаю, но мне кажется…» возникают от незнания и лени. Никого не интересует, в какую мякотку вас в детстве покусали PHP, C++, Java, ZooKeeper, MongoDB, линейная алгебра и т.п. Это инструменты. Вы либо уместно их применяете, либо многозначительно шепчете «мне кажется», что по факту обычно означает «понятия не имею, а даже погуглить палец не поднимается». Суворов расстреливал каждого второго за «не могу знать», а стоило бы и за другое.

Солженицын ни разу не относится к любимым моим авторам, но слова его от этого менее верными не становятся:

Инженер?! Мне пришлось воспитываться как раз в инженерной среде, и я хорошо помню инженеров двадцатых годов: этот открыто светящийся интеллект, этот свободный и необидный юмор, эта лёгкость и широта мысли, непринуждённость переключения из одной инженерной области в другую и вообще от техники к обществу, к искусству. Затем эту воспитанность, тонкость вкусов; хорошую речь, плавно согласованную и без сорных словечек; у одного немножко музицирование; у другого немножко живопись; и всегда у всех — духовная печать на лице.

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


Да, стройно и цельно совместить всё сложно. Но если не пытаться, то ничего и не будет. А бесплодное барахтанье уныло. С наступающим вас. Барахтайтесь плодно.

Книги: The Busy Coder’s Guide to Android Development

busy
Mark L. Murphy.
The Busy Coder’s Guide to Android Development.
CommonsWare, 2017.
Во-первых, речь о версии книги 8.8 (о чём на обложке и сказано), это важно. Во-вторых, и здесь я пока успел прочитать 300+ страниц, но предварительно дальше полистал, чтобы устаканить мнение.
Пожалуй, если кому (мне) требуется чуть ли не единственный почти полный учебник / справочник разработки под Android, то вот оно. 4400+ страниц текста и скринов, на которых понятным языком рассказывается буквально всё. Постепенно, последовательно, с нужной детализацией. Т.к. книга электронная, обновляется постоянно, уже всё переписано для Android Studio 3.x, например. Актуальные ссылки и примеры, актуальный код (на который не желтеет инспектор).
Есть нюанс. Если предыдущий учебник больше для практиков (сначала пишешь код, потом думаешь и читаешь), то этот больше для теоретиков (сначала читаешь, потом думаешь и пишешь код). Мерно впитываете тонну информации.
Да, это хорошая книга. Рекомендую тем, кто не забивается от многабукав в уголок, чтобы поплакать. Чёт детальный обзор не получается, ибо ну… брать и читать, чё. Тот случай, когда не к чему докопаться.

 

Книги: Android Programming: The Big Nerd Ranch Guide

android
Bill Phillips, Chris Stewart, Kristin Marsicano.
Android Programming: The Big Nerd Ranch Guide.
Big Nerd Ranch Guides, 2017.
Сам я читал русское издание, которое почему-то называется «Android. Программирование для профессионалов» — перевод норм, хоть на словах вроде «субклассировать» глаз дёргался. Но не дочитал.
Если не углубляться в детали, есть два типа разработчиков — одни получают знания через теорию, другие через практику. Книга для практиков. Вы начинаете делать проекты, проходя все стадии, по пути получаете объяснения.
Собсно, ~350 страниц я этим и занимался. Честно и кропотливо выполнял каждое упражнение, чесал репу над разницей между Android Studio (книга вышла до 3.x, потому разница есть), перечитывал пояснения. Потом остановился. Авторы не успевают дать все нужные пояснения. Да, у вас на руках приложение, которое работает. Некоторые его части вы уже хорошо понимаете, в некоторых плаваете, но мне не понравилось то, что уже к середине далеко не самой сложной книги есть части проектов, в которых я ну совсем плаваю и бездумно вбиваю код. А откладывать и нырять в документацию, чтобы каждый такой вопрос несколько дней рыть… да как-то пока интереснее найти хороший учебник. Потому прервался.
В своём жанре и для своей аудитории книга всё-таки хорошая. Написана достаточно легко, код за парой исключений неприятия не вызывает, последовательность изложения присутствует. Но всё-таки не моё. Если до вас знание доходит через пальцы, а не через глаза, попробуйте, может подойти.

 

Книги: Java Lambdas and Parallel Streams

lambdas
Michael Müller.
Java Lambdas and Parallel Streams.
Apress, 2016.
Книга из категории «прочёл, но не хотел обзирать». Для галочки отмечу всё же.
Cобирался быстро за несколько поездок в метро поднять в памяти пару тем около Java streams попутно с лямбдами. Вместо этого уныло листал сумбурный текст обо всём на свете. Миша, ну блин, тебе выдали 60 осмысленных страниц под узкую тему. Так какого фига? Автор попытался упаковать лямбды, default, Optional, стримы и коллекторы в небольшую книжечку. И не справился. Начинающим не хватит введения. Продолжающим слишком мало примеров (и без того бестолковых, надо сказать). Углубляющимся не хватит глубины.
Тратить на неё время не стоит.