Category: it

Если вы технический директор

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

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

А вам-то небось программисты рассказывают, как у них там все классно?

Существенное отличие профессионала

Одно из существенных отличий профессионала от непрофессионала — профессионал так же хорошо работает без доступа к интернету, как и с интернетом. Профессионалу не нужен гугл, туториал или справочник. Первый же признак непрофессионала — это фраза: "В интернете все есть". Профессионал знает, что в интернете ничего нет и можно полагаться только на свои знания и свой опыт. 

Очень простой эксперимент: выключите маршрутизатор в офисе. Первые крики вы услышите уже через 5 секунд — это будут кричать джуниоры — они заблокированы без интернета и не могут ничего делать. Профессионал об отсутствии интернета узнает только через час, когда прийдет на кухню за чашечкой кофе.

Образовательный кризис

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

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

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

Драма разыгралась уже на следующий день. Один из участников чата обратился за помощью с такой вот проблемой:

— Спасите! Помогите! Складываю 0,1 и 0,2 и в результате получаю не 0,3, а 0,30000000000000004!

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

Collapse )

Новое слово: софтогенный

Я придумал новое слово:

софтогенный (software + -genic) — являющийся следствием, результатом применения какого-либо программного обеспечения.

Также в этом значении может применяться слово программогенный.

На английском языке: softogenic (software + -genic).

Например: софтогенная катастрофа — катастрофа, вызванная ошибками в программном обеспечении. 

Запишите, оно вам скоро пригодится. :)

Ищу Андроид-программиста для видеостриминга

Что-то мы опять растем. Мы ищем опытного Андроид-программиста в Харькове для поддержки и разработки уже существующего проекта. Проект — мобильное приложение для видеостриминга (аналог Нетфликса). В команде уже есть: менеджер продукта, менеджер проекта, iOS-разработчик, 2 бекенд-разработчика, тестер, дизайнер. Срок проекта: минимум 1 год.

Требования:

— Android Studio;
— Java;
— Android SDK;
— Владение модульными тестами;
— Разговорный и письменный английский;
— Минимум 2 года опыта работы. Просьба подтвердить опыт ссылками на репозитории Github или Bitbucket.

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

Обязанности:

— тестирование, диагностика и исправление ошибок в готовых андроид-программах
— разработка программ с нуля


Мы предлагаем:

— интересный проект, результатами которого будут пользоваться сотни тысяч пользователей;
— работу в коллективе единомышленников, общение с интересными людьми из США;
— стремление к техническому совершенству разрабатываемых проектов;
— оплату труда с привязкой к курсу доллара;
— 5-дневная рабочая неделя, 8 часов в день, гибкий график, возможность иногда работать из дома ;)
— все национальные праздники — выходные;
— оплачиваемый отпуск: 2 рабочих дня за каждый полный месяц работы;
— небольшой дружелюбный коллектив (15 человек);
— отличный кофе из “Кофеина”.


О компании

Design and Test Lab — небольшая компания, которая оказывает услуги по разработке мобильных приложений и веб-сервисов для предпринимателей, стартапов и малых бизнесов из США и Европы.

Резюме и мотивационное письмо присылать на obrizan@dnt-lab.com

Дизрапт недели: Swagger

Прошу любить и жаловать новую рубрику: "Дизрапт недели". В рубрике я рассказываю о самых прорывных технологиях, которые существенно меняют правила игры в тех или иных сферах.

Дизрапт этой недели — Swagger (читается "свогер") — это спецификация описания АПИ веб-сервисов.

Зачем это нужно? Т. к. спецификация машинно-читаемая, то на ее основе можно делать разные полезные вещи:

а) автоматически генерировать документацию к веб-сервису;

б) автоматически генерировать АПИ-клиенты к этому сервису;

в) автоматически генерировать шаблоны веб-сервисов;

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

Спецификация описывается на YAML или JSON. Я предпочитаю первый вариант, потому что он самый понятный для человека. Вот так выглядит спецификация:



Вот так выглядит фрагмент документации, построенной по этой спецификации:



А теперь самое интересное: есть генератор АПИ-клиентов для множества языков:

android, async-scala, csharp, dart, flash, python-flask, java, javascript, jaxrs, inflector, jmeter, nodejs, objc, perl, php, python, qt5cpp, ruby, scala, scalatra, silex-PHP, sinatra, slim, spring-mvc, dynamic-html, html, swagger, swagger-yaml, swift, tizen, typescript-angular, typescript-node, akka-scala, CsharpDotNet2, clojure

Вот небольшой фрагмент АПИ-клиента для языка Objective-C:



Детали реализации обмена данными по HTTP протоколу скрыты от разработчика. Не нужно сосредотачиваться на таких деталях. Уже есть готовые высокоуровневые методы работы с веб-сервисом. Можно описать АПИ один раз и генерировать сразу два клиента, например, для мобильного приложения и для веб-сайта.

Такой способ описания АПИ сервера и генерация клиентов повышает производительность разработчика минимум в 10 раз.

Книга "Building Microservices" Сэма Ньюмена

Недавно прочитал книгу "Building Microservices: Designing Fine-Grained Systems" Сэма Ньюмена.



После прочтения этой книги в голове крутились фразы: "парадайм шифт", "дизрапт", "зе некст биг синг". Большинство из вас находится по ту сторону браузера и мало интересуется развитием интернет-технологий. А они меняются очень сильно. Настолько сильно, что за 10 лет единственная вещь, которая осталась такой же — это протокол HTTP, а все остальное поменялось: веб-сервера, базы данных, архитектуры веб-приложений, методы тестирования, интеграции и развертывания.

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

В микросервисной архитектуре каждый микросервис разрабатывается, развертывается, масштабируется изолированно от других сервисов. Это значит, что выбранный стек технологий — это больше не проклятие на всю жизнь. Например, десять лет был популярен стек LAMP — Linux, Apache, MySQL, PHP. Раньше все эти технологии устанавливались в рамках одного веб-сервиса. И если нужно было разработать новую функцию, то искали специалиста, знающего эти технологии. А в микросервисной архитектуре один микросервис может быть реализован на Руби, другой на Го, третий на Яве. У одного база данных может быть MongoDB, у другого GraphDB, а у третьего blob store, например. И это нормально. Выбирайте тот язык и базу данных, которая эффективнее всего решит конкретную задачу.



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

Читая книгу я вспоминал, где я как пользователь сталкивался с микросервисами. Помню, зашел как-то в Фейсбук, а там лента новостей есть, а личные сообщения просмотреть не могу. Это значит, что в Фейсбуке как минимум два микросервиса (на самом деле их сотни) — микросервис новостной ленты и микросервис личных сообщений. И в тот день микросервис сообщений вышел из строя. Преимущество в том, что остальные микросервисы сохранили свою работу, потому что работают автономно. В монолитной архитектуре такое невозможно: выход из строя одной подсистемы приводит к поломке всей системы.

Я строго рекомендую книгу "Building Microservices" всем техническим директорам и просто разработчикам.

Книги о компьютере и программировании для детей

Был поздний вечер в начале 90-х. Мой папа, как обычно, сидел в углу комнаты за столом, который служил ему мастерской, и при свете настольной лампы паял плату. Я заглянул ему через плечо и заинтересовался: плата была большая и запаивал он не обычные транзисторы, резисторы и конденсаторы, а небольшие прямоугольные черные многолапые "жучки".

— Пап, а что это ты паяешь?
— Это компьютер, сынок.
— У нас будет компьютер?
— Нет, я другому дяде паяю, а нам я спаяю позже.

Через неделю я узнал, что некий дядя отказался от компьютера. Таким образом, у нас дома появился легендарный аналог ZX Spectrum в реализации "Краснодар 1". Ну или "Краснодар 2". Или "Ленинград 1". Не помню уже. В общем, пост не об этом, поэтому про волшебные 90-е и про "Спектрум" я напишу когда мне стукнет 80, поэтому еще лет 50 потерпите.

Дома появился персональный компьютер. Резко стал вопрос об изучении, что это такое и как с этим работать. Интернета тогда еще не было. Но интернет вполне успешно заменяла мама, которая работала в книжном магазине, что на пр. Орджоникидзе. Жаль, что магазин уже закрыли, а проспект скоро переименуют. В общем, пост не об этом, поэтому про политику правительства Украины по уничтожению культуры я напишу когда мне стукнет 80, поэтому еще лет 50 потерпите.

Мой опыт самостоятельного изучения программирования по книгам начался с фиаско. Я ввел программу, которая спрашивала мое имя и печатала на экране "Привет, Вова!", и ничего не произошло. Мне было то ли 7, то ли 8, и я думал, что компьютер сам поймет, когда программа готова и сам ее запустит. Я сидел, смотрел на код на экране, но ничего не происходило. Пришлось еще раз перечитать главу, чтобы понять: нужно написать команду RUN. Я написал команду и программа заработала. Тогда я понял, что стану программистом. В общем, пост не об этом, поэтому про программы, которые я писал в школе (привет, Коля! Привет, Дима!), я напишу когда мне стукнет 80, поэтому еще лет 50 потерпите.

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

Очень важно ребенку начать читать правильные книги. Если вы подсунете ему Бьярна Страуструпа, то, разумеется, ничего ребенок не выучит. Его студенты выучить не могут, а куда там 8-летнему.

Я уже писал о самой важной книге про компьютеры: "Знакомьтесь: компьютер". Сейчас посмотрим на еще пару интересных старых книг.

Первая — "Осваиваем микрокомпьютер" (двухтомник). Основные персонажи — небольшие роботы, которые рассказывают про устройство компьютера и про программирование.



Глава про организацию компьтера:



Глава про основы программирования:



Много картинок, все объяснено на пальцах, ну и славные роботы. Кому ж из детей не нравятся роботы? Еще помню, что в этой книге версия Бейсика немного отличалась от той версии в аналоге ZX Spectrum, поэтому не все программы у меня заработали. Пояснить отличия, увы, было некому, поэтому я просто читал эти программы и выполнял их в уме, пытаясь понять, как они работают.

Другой двухтомник — "Мир компьютеров в вопросах и ответах". Написан японским автором и проиллюстрированна японцами, поэтому все в стиле анимэ. :)



Глава о недопонимании программистом задания. С таким я столкнусь, когда стану постарше, ну а пока просто читал.



Какая прелесть — компьютер принял данные, все понял и улыбается. Мимимишно! :)



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

Недавно, просматривая книги по программированию на "Балка бук", я увидел потрясающую книгу: "Программирование для детей. Иллюстрированное руководство по языкам Scratch и Python". Питон! Питон, Гвидо!



В книге на современном языке показаны основы программирования. И все в разноцветных картинках, с персонажами, для детей. Глава об арифметических вычислениях:



Глава о том, что такое циклы.



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



Кроме изучения программирования в книге затрагиваются и другие темы, чтобы дети понимали, куда двигаться дальше.



Недостаток книги — она стоит 490 грн. (22 $) — это больше половины моей зарплаты старшего преподавателя 0,25 ставки в университете.

Спасибо издательству "Манн, Иванов и Фербер", что перевели и издали такую полезную книгу для детей.