Адиль Хаштамов

Привет! Меня зовут Адиль. Всю свою сознательную жизнь я занимаюсь разработкой программного обеспечения. Этот блог моя записная книжка, где я стараюсь почаще делать заметки на тему программирования, разработки и проектирования ПО. Сейчас особенно заинтересован в современных веб приложениях, машинном обучении и анализе данных.

Блог на английском языке

Английская версия блога

Начал потихоньку исполнять свой план на 2017 год с перевода статьи про работу с Celery на английский язык - Celery Best Practices: practical approach. В планах у меня начать английскую версию блога с перевода топа самых популярных статей, будут появляться по мере сил.

В последнее время стал замечать, что мой блог регулярно стали посещать пользователи из США и других англоговорящих стран, мне пока непонятно откуда они на него переходят (если кто знает как посмотреть отчёт в разрезе страна-источник в Я.Метрике, напишите, пожалуйста), но тенденция радует. Сейчас, конечно,  процент отказов среди таких пользователей высокий, но постараюсь его снизить путем интересного контента.

Сегодня английский язык это не только lingua franca для коммуникации между людьми с разных стран, но и язык науки. Язык на котором в первую очередь появляется самая актуальная информация практически во всех сферах нашей жизни, проще говоря, больше всего уникального контента создаётся именно на английском. Попробую внести вклад и в эту часть Интернета, думаю это того стоит. Помимо очевидных плюсов в дополнительной аудитории и новых знакомствах, это ещё и неплохая возможность развивать дальше навык письма на неродном тебе языке.

На английскую версию блога можно перейти из верхнего меню либо по ссылке - English version.

читать ещё

Блогу исполнился 1 год!

Ровно 1 год назад появился самый первый пост в этом блоге. Удивительно, но я всё таки не забросил его. Прошлый опыт говорил об обратном. Что произошло за это время?

За этот год:

  • Я написал 30 постов, включая этот. Изначально я планировал чаще писать, но ввиду некоторых обстоятельств и лени этого добиться не удалось.
  • На момент написания этого поста блог посетило 41 123 уникальных посетителя. Хороший показатель для узкоспециализированного блога с небольшим количеством контента.
  • Ежедневная аудитория увеличилась с 0 до 350 уникальных посетителей.

  • Более 60% аудитории проживает в России

Топ-5 самых популярных постов

Суммарно эти 5 статей принесли блогу 57% всех уникальных посетителей. Помните правило 80/20 ? :)

Более 85% пользователей читают статьи, используя ПК, 11% заходят через смартфон и только 3% через планшет. Это логично, так как программисты в своей работе привыкли пользоваться компьютером :)

А вот статистика по операционным системам используемых устройств:

Windows рулит :)

А вот стата по браузерам среди разработчиков:

Безоговорочный лидер Google Chrome.

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

Планы на следующий год

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

  • Создать английскую версию блога. В англоязычном сегменте Интернета куда больше трафика и людей, ищущих статьи на те или иные темы. Также это неплохая возможность и дальше практиковать письменный английский, знакомиться с новыми и интересными людьми.
  • Чаще писать статьи на актуальные темы для разработчиков. Тут у меня уклон больше в сторону Python. Сейчас в работе я применяю инструменты анализа данных и машинного обучения, поэтому хотелось бы раскрыть эти темы более подробно. В планах также углубление в сторону сложных интерфейсов в веб-приложениях, об этом я уже писал в заметке про progressive web apps. Серия статей на эту тему не заставит себя долго ждать :)
  • Больше контента, а значит и больше трафика. Цель на 2017 год - 2 000 уникальных посетителей в сутки.
читать ещё

Теория разбитых окон в программировании

Теория разбитых окон в программировании

В криминалистике существует интересная теория под названием "Теория разбитых окон" (ТРО). Суть её в том, что разбитое окно, при несвоевременной замене, влечёт за собой целую серию разбитых окон. Более того, серия разбитых окон может быть индикатором повышающегося уровня преступности в заданном регионе. На ум сразу приходит известная всем фраза "Чисто не там, где убирают, а там где не сорят". Согласно этой теории, чисто именно там, где убирают, стимулируя тем самым людей не сорить в будущем. Стоит заметить, что это применимо не только к окнам :) Автолюбителям наверняка знакома эта теория на дорогах, хотя они могут и не догадываться о её существовании. Я не раз замечал большое скопление автомобилей, припаркованных под знаком "Остановка запрещена". Стоит лишь одному остановиться под ним, остальные водители не заставят себя долго ждать. Удивительно как мало внимания дорожная полиция уделяет этому факту. Правонарушения должны своевременно пресекаться.

Но вернёмся всё же в мир разработки программного обеспечения. Удивительно, но и здесь ТРО находит свой отклик. Современный процесс создания ПО находится под жестким прессингом сроков. Бизнесу очень важно как можно раньше поставить продукт на рынок по ряду причин. Отсюда рождаются различные методологии управления вроде Agile, Lean, формируются концепции MVP (Minimum Viable Product). Как следствие, страдает качество кода, он начинает "протухать". С "вонючим кодом" можно жить, более того, практически всегда он есть в той или иной степени, это нормально. Но его нарастающая доля служит одним из первых индикаторов того, что пора "бить во все колокола". Почему? Основываясь на собственном опыте скажу, что программист охотнее "говнокодит" там, где этого "говнокода" предостаточно. И наоборот, человек несколько раз подумает, прежде чем отправлять свой шедевр на код ревью, если в проекте стараются соблюдать чистоту кода. Помимо прочего, "разбитое окно" в коде создаёт ощущение наплевательского отношения к проекту, тем самым порождая чувство безразличности к нему. Зачем пытаться что-то изменить, если всем наплевать?

Чините "разбитые окна" в коде как можно чаще.

Вам может быть интересно почитать также:

читать ещё

Progressive Web Apps: начало новой эры веб-приложений

Начало перемен в Web

В последнее время я всё чаще начинаю задумываться о судьбе современного Web. Привычный для нас веб потихоньку трансформируется во что-то грандиозное. Сейчас мы живём в эпоху стремительных перемен, за этим очень интересно наблюдать. Шумиха вокруг мобильных приложений, которая началась с появление iPhone и Android, потихоньку спадает. Количество приложений на смартфонах пользователей не растёт. У рядового юзера образовался определённый костяк приложений, которые он чаще всего использует: YouTube, Instagram, WhatsApp/Viber/Telegram, Facebook, VK, браузер (Chrome, Safari, Opera, Mozilla Firefox). В остальном нет необходимости. Если хочется почитать новости или развлекательный контент, всегда можно зайти на мобильную версию сайта, используя любимый браузер.

Мобильный вебсайт

Web 1.0

Когда я был маленьким, веб был примитивным. Большая часть сайтов в Интернете была статичной. Это был стандартный и привычный по сей день механизм рендеринга страницы на стороне сервера без какой-либо динамической составляющей на стороне юзера. Пользователь, используя браузер, посылал запрос на сервер, сервер его обрабатывал и возвращал назад готовую HTML страничку. О какой-либо интерактивной составляющей, а тем более шикарном user experience и речи не было. На компьютерах рядовых пользователей доминирующую роль играли desktop приложения, распространяемые на CD/DVD дисках (помните ведь эти сборники софта?). Но время не стоит на месте. Технологии стремительно развиваются, проникновение Интернета в дома простых людей неуклонно растёт, а с этим и скорость передачи данных. С приходом новых технологий, требование к качеству продуктов растёт. В 1995 году появился язык JavaScript, который до сих пор играет ключевую роль в нашей с вами повседневной жизни (хоть многие об этом и не догадываются). Благодаря его появлению Web "ожил". На, казалось бы, "бездушных" просторах Интернета появилась душа, странички стали оживать, благодаря модели DOM и тому как JavaScript "умело" справлялся с манипулированием элементов в браузере. Но тамошние веб-приложения были далеки от desktop приложений того мира...

читать ещё

Telegram канал для разработчиков

Telegram канал для разработчиков
Telegram канал для разработчиков @DevBrain

В последнее время Telegram начал стремительно развиваться и вводить новые плюшки для пользователей и разработчиков (например, я недавно писал о том как создать игру в Telegram). Из обычного мессенджера, коих пруд пруди, он превратился в полноценное средство продвижения информации, в простонародье, СМИ. Ведущие газеты, журналы и просто новостные сайты начали заводить в Telegram свои группы и каналы. Формат каналов в Telegram очень удобен для потребления информации, всё чинно, благородно. Более того, благодаря ботам Telegram, появилась возможность на этих самых каналах проводить опрос, а также использовать другие инструменты маркетингового анализа. Что позволяет эффективно продвигать нужный материал целевой аудитории группы или канала.

Кто бы что ни говорил, но для меня Telegram из обычного мессенджера также превратился в помойку ссылок. Что я имею в виду? А то, что благодаря кросс-платформенной архитектуре, а в Telegram всё таки есть отличный desktop-клиент, мне стало проще копить ссылки на интересные статьи, видео и новости про разработку, экономику, предпринимательство и так далее. Всё это я попросту сбрасываю самому себе в Telegram и имею возможность просматривать со всех своих устройств (ноутбук, настольный компьютер, смартфон, планшет, микроволновка :)

Чтобы это добро не пропадало даром, я решил завести отдельный Telegram канал для разработчиков, где буду собирать интересный материал на тему разработки ПО, включая статьи, новости, видео и даже книги. Публикую я всё это добро регулярно, так как частенько натыкаюсь на интересный материал в сети.

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

За сим, приглашаю вас подписаться на мой Telegram канал @DevBrain для разработчиков.

читать ещё

Как создавать игры в Telegram

Игры в Telegram

Игры в телеграм

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

Ребята не стали изобретать велосипед в виде отдельного игрового движка или чего то в этом роде. Игры в Telegram можно создавать, используя знакомую всем связку HTML5 + JavaScript. На платформе уже доступно небольшое количество игр, включая полюбившуюся мне игрушку под названием Lumberjack, где задачей является срубить как можно больше веток у дерева.

читать ещё

Что нового появилось в Django Channels?

С момента последнего поста про Django Channels прошло много времени, проект развивается и потихоньку идёт к стабильному релизу. В новых версиях пакета появляются интересные фишки о которых я сегодня расскажу вкратце:

Generic Consumers

Generic Consumers чем то напоминают Class Based Views в Django. Их задача сократить количество кода при написании обработчиков каналов, а также улучшить их структуру и внешний вид.

Базовым классом является BaseConsumer.

читать ещё

Какие книги читать начинающему программисту?

У меня есть книга, которую я уже пытаюсь раза с третьего осилить, но всё никак не дойду до последней страницы. Называется она "Человеческий фактор. Успешные проекты и компании", в простонародье "Peopleware" и является хрестоматией по разработке программного обеспечения наряду с классическим трудом под названием "Мифический человеко-месяц" от Фредерика Брукса. Так вот, там есть интересное выражение, которое гласит следующее:

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

Мой опыт работы с программистами лишь доказывает слова ДеМарко и Листера. Современная разработка ПО сводится к постоянному "гуглению" и чтению ответов на StackOverflow. В этом нет ничего плохого, все мы ежедневно сталкиваемся с проблемами решения которых не знаем, и порой "прогуглить" ответ получается куда быстрее  нежели самостоятельно разбираться почему наш код не работает. Но серьёзная проблема кроется в ситуациях, когда у человека отсутствуют фундаментальные знания о предмете своей работы.

читать ещё

Шпаргалка по PostgreSQL

PostgreSQL это кроссплатформенная полнофункциональная объектно-реляционная база данных. Эта небольшая заметка написана с целью собрать в одном месте небольшой туториал по установке и настройке этой СУБД. Действие происходит в ОС Ubuntu 16.04.

Установка PostgreSQL

По умолчанию PostgreSQL входит в пакет Ubuntu. Систему можно установить следующей командой:

sudo apt-get install postgresql-9.4

Для установки самой последней версии СУБД, необходимо выполнить следующие шаги:

  1. Создаём файл /etc/apt/sources.list.d/pgdg.list
  2. Добавляем  в него следующее содержимое:
    deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
    
  3. Импортируем новый ключ для подписи, выполнив
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
      sudo apt-key add -
    sudo apt-get update
    
  4. Устанавливаем последнюю версию:
    apt-get install postgresql-9.5

Настройка

После успешной установки самоё время заняться базовой настройкой СУБД PostgreSQL.

По умолчанию доступ к СУБД имеет пользователь postgres. Заходим под ним:

sudo -u postgres psql

Для того, чтобы создать новую базу данных выполняем следующую команду внутри psql:

CREATE DATABASE mydatabase;

Создаём отдельного пользователя с логином myuser и паролем password:

CREATE USER myuser WITH password 'password';

Чтобы дать полные привилегии над нашей новой базой данных mydatabase пользователю myuser выполняем:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;

Чтобы сделать нового пользователя администратором нашей СУБД, выполняем:

ALTER USER myuser WITH SUPERUSER;

Чтобы лишить его ранее предоставленных полномочий, выполним:

ALTER USER myuser WITH NOSUPERUSER;

Если пользователю нужно дать лишь права на создание новой БД (например, при запуске тестов в Django, фреймворк создаёт отдельную БД с префиксом test_):

ALTER USER myuser CREATEDB;

Для того, чтобы авторизоваться в PostgreSQL под новым пользователем, запускаем:

psql -h localhost mydatabase myuser

Для выхода из сеанса, необходимо выполнить команду \q

Фишки при работе с PostgreSQL

Чтобы не запоминать массу команд, существуют GUI утилиты для работы с PostgreSQL. Наиболее популярной считается pgadmin3.

sudo apt-get install pgadmin3

Для тех, кто всё же предпочитает оставаться в терминале, есть интересный скрипт, написанный на Python: pgcli. Его особенностью является автодополнение и подсветка синтаксиса SQL команд.

pip install pgcli
pgcli mydatabase

или

pgcli postgres://myuser:password@localhost:5432/mydatabase

Просто и удобно.

Снятие дампа БД PostgreSQL можно сделать вот так:

pg_dump -c -h localhost -U myuser mydatabase > ./mydump.sql

Импорт в PostgreSQL делается следующим образом:

psql -h localhost -U username dbname < dump.sql

PostgreSQL масштабная и сложная СУБД, и для её настройки потребуется немало времени, если вы столкнулись с ней в работе впервые. Эта заметка лишь начало интересного пути. Постараюсь делиться опытом и знаниями по мере возможности и сил :-)

читать ещё

Как обучать детей программированию

Программирование для детей

Те из вас, кто следит за моей страницей Чем я занят сейчас, наверняка заметили, что в последнее время я занимался обучением детей программированию. Удивительно как мысли материализуются. После посещения PyCon US 2016 в Портленде, у меня в голове крутилась мысль попробовать себя в роли наставника в мир компьютерного программирования для детей. И к счастью, такая возможность появилась очень быстро. Меня пригласили в качестве преподавателя в детский лагерь, в программе которого был урок программирования два раза в неделю для двух разных групп. Первая группа состояла из деток постарше (от 8 до 12 лет), во второй преимущественно были дети в возрасте от 6 до 8 лет.

Как научить ребенка программированию

Дело в том, что будучи в США, мне посчастливилось приобрести книгу под названием Teach Your Kids To Code с хорошей скидкой. В ней все примеры приводятся в игровой форме с использованием языка программирования Python. Возможно в будущем я посвящу ей отдельный пост, а сейчас вернёмся к теме моего опыта преподавания. Так вот, изначально мне казалось разумным строить образовательный процесс, черпая информацию из этой книги, но позже я понял как глубоко ошибался :-) Почему? К слову, книга предназначена для детей в возрасте от 9+.

Во-первых, в каждой отдельной группе было много детей, более 15 на каждом уроке. Это мешало эффективной подаче материала, а также ограничивало меня в индивидуальной помощи каждому (без этого, как выяснилось, совсем не обойтись).

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

В-третьих, навык сносно печатать на клавиатуре отсутствовал у всех. О каком наборе программного кода могла идти речь?

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

Визуальное программирование

Немного поразмыслив, я пришел к выводу, что Python однозначно отпадает :-) С ним обучение в таких условиях превратилось бы в кошмарный сон. Решение проблемы не заставило себя долго ждать, на помощь пришло визуальное программирование. Суть заключается в том, что программист не пишет код, он составляет программу путём манипулирования графическими элементами в подходящей для этого среде (IDE). Мне вспоминается мой первый опыт программирования в Borland Delphi и Borland C++ Builder, где можно было создать сложный графический интерфейс не написав ни единой строчки кода. Но специально для детей группой ученых в MIT был придуман инструмент под названием Scratch. Его задача - научить ребенка алгоритмическому мышлению в игровой форме. И стоит отметить, задачу он свою делает на отлично! Вокруг Скретч есть целое сообщество, состоящее из ученых, учителей, родителей и собственно учеников. Инструмент поставляется в двух видах:

  • Как отдельное приложение. Устанавливается на компьютер под управлением ОС Windows/MacOS/Linux (Scratch 2.0 Offline)
  • Веб-приложение, доступное прямо на официальном сайте

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

Scratch 2.0 Offline

Примечательно, что процесс программирования на Scratch увлекателен не только для ребенка. Я сам бывало подолгу "залипал", готовя новый материал для детей.

Scratch: уроки

Вернёмся к теме моего преподавания. Как же были построены занятия?

Уроки по Scratch

На официальном сайте Скретч есть хороший раздел о помощи. В нём можно найти пошаговое руководство пользователя на базе которого реально провести первый вводный урок. Умные ребята из Гарвардской Высшей школы образования написали книгу под названием Creative computing (Креативное программирование), она поможет выстроить полноценный учебный процесс, так как в ней собраны лучшие практики обучения детей программированию. В сети есть русский перевод.

В составлении материала для работы неплохо может помочь и любимый YouTube. Вот ссылка на один из самых качественных туториалов по Scratch, между прочим от автора книги Automate the Boring Stuff with Python.

Выводы

В процессе преподавания я вывел для себя ряд условий, способствующих благоприятному процессу обучения детей программированию.

  • Желательно сократить целевую группу учеников. Лучше всего группа из 4-6 человек. Почему? Читайте ниже.
  • Продолжительность урока не должна превышать 1 часа (в идеале как в школе, 45 минут). Дольше этого времени удержать внимание ребенка будет очень сложно.
  • Ребенку постоянно должно быть интересно. Это одно из самых сложных условий. Если дети теряют интерес, они начинают заниматься посторонними делами: открывать другие приложения, ходить по классу, отвлекать детей, жаловаться на то, что голодны :-)
  • Все дети разные. Одни проявляют смекалку и усваивают материал очень быстро, другие подолгу могут "зависать" над простейшими задачами. Всегда имейте в запасе бонусы для смышлёных детей (дополнительные задания, хитрые условия и т.д.).
  • Хвалите детей за их работу, даже если она незначительна. Для ребенка это очень важно!
  • Поощряйте детей. Я советую в качестве поощрения использовать наклейки, маленькие игрушки или что-то в этом роде. Мотивировать едой, конфетами или печеньем НЕ нужно, никогда не знаешь на что может быть аллергия у ребенка.
  • Просите детей о помощи. Если в классе есть детки, опережающие нормальный процесс обучения, попросите их стать вашими помощниками. Пусть они вместе с вами начнут помогать отстающим. Поверьте, детям это очень нравится.

Минусы Scratch

Scratch не учит реальному программированию. Задача этого инструмента заключается в том, чтобы развить навыки алгоритмического мышления в подходящей для детей форме - играючи. К слову, не только детям этот навык пригодится в жизни :-) Если ваша цель это привить ребенку реальные навыки программирования, постарайтесь как можно раньше осуществить переход от визуального программирования в непосредственный процесс кодирования с использованием одного из реальных языков программирования. Например, Python является хорошим выбором. Несомненно с этим переходом может быть связано некоторое разочарование со стороны ребенка. Причина в том, что оба процесса значительно отличаются друг от друга. Книга Teach Your Kids To Code сглаживает переход путём ввода элементов игры в процесс кодирования.

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

Полезные ссылки

читать ещё