Один из наиболее рекомендуемых методов для улучшения ваших навыков разработки программного обеспечения - это рекомендация «заняться побочным проектом», но не все скажут вам точно, чему и почему вы действительно можете научиться у него. Сказав это, я решил поделиться своим последним опытом работы с домашним любимцем.
Я написал эту статью для разработчиков младшего и среднего уровня, чтобы продемонстрировать преимущества побочного проекта (домашнего проекта).
Уловка состоит в том, чтобы найти правильный баланс между известными и неизвестными вещами, которые вы хотите построить. Я имею в виду, что вы можете создать побочный проект со 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)
Тем не менее, он останется моим любимым многоязычным текстовым редактором.
Модульное тестирование 💉
К сожалению, мне не хватает навыков модульного тестирования, а побочные проекты - отличный способ улучшить любой навык. Мы написали несколько тестов для библиотеки и демонстрационного веб-сервера. Хорошая практика делает это лучше!
Спасибо за прочтение! 🙈 🙉 🙊
Пожалуйста (хлопайте в ладоши) 👏 и подпишитесь, если вы узнали что-то новое. Отправьте мне свой отзыв, и я смогу улучшить следующие сообщения.
Далее () 🚀
6 советов по продуктивному рабочему процессу для программиста
Несколько мыслей о« зоне , тормозах, задачах и уведомлениях. coder.today»
Ресурсы, которые я использовал 📚
Лекция LZ77: https://www.cs.helsinki.fi/u/tpkarkka/opetus/12k/dct/lecture07.pdf