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

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

Уловка состоит в том, чтобы найти правильный баланс между известными и неизвестными вещами, которые вы хотите построить. Я имею в виду, что вы можете создать побочный проект со 100% новыми технологиями (для вас), но заставить его работать может быть неприятно, и вы можете выйти из (EX выбирает другую парадигму проекта, язык, IDE, платформу и т. Д.) .

Я предлагаю сделать домашний проект с соотношением 50/50 того, что вы освоите, и того, чему хотите научиться.

Контекст 🏝️

️ Однажды (на прошлой неделе) у меня возникла идея изменить алгоритм кодирования для использования эмодзи. Думаю, это произошло после того, как Я написал о кодировании и провел встречу со своими учениками по вопросам кодирования в целом и протоколов.

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

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

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



Юникод - это сложно ✍🏽

Одной из первых преград, на которую я наткнулся, была работа с Unicode. Я не работал с ним на уровне байтов с тех пор, как … навсегда или никогда? Приятным преимуществом было то, что литералы Go - это UTF-8, что позволяло писать более дружественный код. Что я узнал?

  • больше о UTF-8 и Unicode
  • что персонажей больше не существует
  • без надлежащих библиотек работа с Unicode болезненна
  • что Unicode имеет нормализованную форму
  • чтобы поблагодарить разработчиков, которые уже реализуют Unicode (например, IDE)
  • ценить новые языки программирования

Сжатие 🗜️

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

  • есть сжатие с потерями и без потерь
  • многие словарные алгоритмы используются в веб-разработке
  • некоторые методы ориентированы на скорость сжатия, распаковки или размер архива, каждый из которых используется для решения различных проблем.
  • умные разработчики из Facebook, Google и Microsoft создали собственные алгоритмы
  • Snappy используется в Google, Hadoop, MongoDB, Cassandra…
  • ценить более простые алгоритмы

AppEngine 🚂

Облако Google какое-то время было в моем списке для изучения. Мой единственный практический опыт работы с ним был ~ 7 лет назад, когда он запустил поддержку PHP, и месяц назад на конференции Google Cloud OnBoard. Я хотел AppEngine, в частности, потому что у AWS нет аналогичного сервиса (он находится где-то между контейнером EC2 и сервисами Lambda). Что я узнал:

  • GCloud ... во многом отличается от AWS
  • Стандартная среда очень ограничена
  • быстро и легко работать с (1 команда развертывания после начальной настройки)
  • вы получаете бесплатно множество функций, которые в обычном (не облачном) окружении вам придется выполнять самостоятельно (откат, разделение трафика на несколько версий, автоматическое масштабирование с ограничениями или без них, мониторинг, задачи и т. д. )
  • Мне понравился интерфейс администратора и документация больше, чем AWS, они более удобны для пользователя, это субъективное утверждение c
  • «Бессерверный» идеален для прототипов, малых / средних проектов, очень маленьких команд, проектов с ограниченным объемом.
  • это в основном бесплатно для небольших проектов (даже после годовой пробной версии)
  • это была бесплатная и хорошая возможность проверить этот хостинг, как перспективу для будущего более крупного побочного проекта

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

Статический сайт 👹

Для демонстрационного примера я сделал интерактивный сайт. Джекил был в моем списке для изучения, так как я использовал Hugo, и Github Pages был простым выбором. Что я узнал:

  • Github - это круто, бесплатный хостинг с персональным доменом - это блаженство
  • Жидкость - это не HTML
  • что мне нужно потратить больше времени, если я хочу создать статический веб-сайт как коммерческий проект , например, мне не удалось сделать функциональные переменные конфигурации в HTML или JS. Скорее всего, я бы поискал другой генератор с более продвинутыми функциями.
  • если webpack или приложение create-response-app слишком дорого обходятся проекту (например, целевая страница), скорее всего, вам понадобится генератор статических веб-сайтов, такой как Jekyll.

Ванильный JS6 💀

Я начал использовать JavaScript с 2008 года или что-то в этом роде, но большую часть времени я использовал jQuery и другие библиотеки, в основном из-за отсутствия совместимости с браузерами. Теперь, когда существуют HTML5, JS6 и, прежде всего, Babel, я могу писать простой JavaScript и использовать только разумные фреймворки, которых в данном случае не было. Что я узнал:

  • Эра jQuery давно прошла, в проекте веб-компонента я не могу найти его назначение
  • новые HTML API довольно интересны
  • хорошо, что я уже перешел на JS6 (с другим, более крупным сторонним проектом)

Код Visual Studio 🎶

Дополнительные проекты - это хорошая возможность изучить новую среду IDE или новые функции той, которую вы уже используете. Я уже некоторое время использую VSCode, но в этом проекте я столкнулся с множеством неприятных мелких проблем, только некоторые из которых я помню:

  • ничего не работает, если ваши файлы go не могут быть скомпилированы
  • Поддержка Liquid (HTML)… минимальная (без автоматического форматирования)
  • Я бы не стал использовать его для среднего / большого проекта (›50 файлов исходного кода), он просто слишком ненадежен (например: автозаполнение перестало работать много раз) по сравнению с полной IDE (у меня есть лицензия IntelliJ)

Тем не менее, он останется моим любимым многоязычным текстовым редактором.

Модульное тестирование 💉

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

Спасибо за прочтение! 🙈 🙉 🙊

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

Далее () 🚀





Ресурсы, которые я использовал 📚







Лекция LZ77: https://www.cs.helsinki.fi/u/tpkarkka/opetus/12k/dct/lecture07.pdf