Блог Teacher Army

Написать статью

Как работает React Suspense

React Suspense - это компонент React, который приостанавливает отрисовку компонентов до выполнения определенного условия и отображает запасной вариант - fallback. Этот запасной вариант является обязательным, и это может быть строка или другой компонент, например, спиннер. Так же React Suspense работает только с динамическим импортом, он же ленивая загрузка.

// Dynamic import
const CatAvatar = React.lazy(() => import('./path/to/cat/avatar'));

// Displays "loading..." to the user until CatAvatar has finished loading.
const AppContainer = () => (
  <React.Suspense fallback="loading...">
    <CatAvatar />
  </React.Suspense>
);

Почему React Suspense полезен?

Самая большая проблема с JavaScript-приложениями в наши дни - это большая нагрузка, которую приходится платить пользователям за загрузку и выполнение кода. Это очень дорого для пользователей со слабыми устройствами и сетевыми соединениями. Вот почему разделение кода JavaScript-приложения является чрезвычайно полезным. React.lazy позволяет очень просто сообщить Webpack и нашему приложению, что определенные файлы и код могут быть загружены позже в приложении. Это поможет уменьшить первоначальный размер кода, передаваемого пользователю.

Но вместе с этим возникает другая проблема. Пока пользователь перемещается по приложению JavaScript, а код загружается во время выполнения, пользователю приходится ждать, пока сеть не закончит загрузку и выполнение следующего фрагмента кода. Именно здесь на помощь приходит React.Suspense, который отображает пользователю состояние загрузки и делает это весьма изящно. React.Suspense дает пользователям знать, что идет загрузка следующего фрагмента, и скоро он будет у вас!

React может работать с несколькими React-компонентами

Если вы хотите получить полное руководство по реализации нескольких компонентов в React.Suspense, ознакомьтесь с этой статьей. Но вот небольшой фрагмент кода, который покажет вам, как это сделать

const CatAvatar = React.lazy(() => import('./path/to/cat/avatar'));
const ThorAvatar = React.lazy(() => import('./path/to/cat/thor-avatar'));

const AppContainer = () => (
  <React.Suspense fallback="loading...">
    <CatAvatar />
    <ThorAvatar />
  </React.Suspense>
);

Так же вы можете иметь несколько вложенных компонентов React.lazy внутри React.Suspense.

Обработка ошибок в React.Suspense и React.lazy

С React.lazy и React.Suspense может возникнуть несколько проблем. Интернет-соединение оборвалось в процессе загрузки. Недостаточная мощность устройства. Неправильное имя пути к файлу компонента React. Как же мы справляемся со сбоями загрузки?

У React есть стандартный шаблон для изящной обработки ошибок. Они раскрыли 2 жизненных цикла React, статический getDerivedStateFromError() и componentDidCatch(). Эти два жизненных цикла похожи тем, что оба срабатывают при возникновении ошибки в дочернем компоненте. Разница заключается в следующем - static getDerivedStateFromError() требует, чтобы вы вернули объект для обновления состояния. Что касается componentDidCatch(), то это метод, который ничего не возвращает и вам придется вызвать useState() или setState() для обновления состояния компонента.

Я собираюсь добавить к приведенному выше примеру React.Suspense.

const CatAvatar = React.lazy(() => import('./path/to/cat/avatar'));

class ErrorHandler extends React.Component {
  state = {
    hasError: false,
  };

  static getDerivedStateFromError(err) {
    return { hasError: true };
  }

  render() {
    if (this.state.hasError) {
      return (
        <p>
          Loading has failed. Try refreshing the browser!
        </p>
      );
    }

    return this.props.children;
  }
}

const AppContainer = () => (
  <ErrorHandler>
    <React.Suspense fallback="loading...">
      <CatAvatar />
    </React.Suspense>
  </ErrorHandler>
);

Если при загрузке CatAvatar произошла ошибка, будет выведено сообщение об ошибке.

React Suspense для получения данных

Как было показано выше, React.Suspense работает только с динамическим импортом. Он предназначен только для поддержки ленивой загрузки. Но в настоящее время команда React упорно работает над тем, чтобы React.Suspense работал и с выборкой данных. React.Suspense связан с новым режимом, над которым работает React, под названием Concurrent Mode.

Режим Concurrent предоставляет новый набор функций, который решает первоначальную проблему, описанную ранее в этой статье. Эта проблема заключается в слабых устройствах и плохих сетевых соединениях. Как инженеры мы хотим быть уверены, что предоставляем одинаково быстрые и надежные приложения всем пользователям. Включенный Concurrent Mode открывает новый набор возможностей для React.Suspense.

Во-первых, чтобы включить Concurrent Mode, необходимо установить экспериментальную версию React.

npm install --save react@0.0.0-experimental-5faf377df react-dom@0.0.0-experimental-5faf377df

Второй шаг заключается в замене того, как мы прикрепляем приложение React к оболочке HTML.

// Current
ReactDOM.render(<App />, document.getElementById('root'));

// Concurrent Mode
ReactDOM
  .createRoot(document.getElementById('root'))
  .render(<App />);

Вот и все! Все, что вам нужно сделать, это установить экспериментальный режим React и изменить 1 строчку кода. После этого React.Suspense будет по умолчанию не только ждать динамического импорта, но и получать данные.

React.SuspenseList - API

Еще одна новая функция, которая была добавлена в Concurrent Mode - React SuspenseList. Это компонент React, который принимает несколько компонентов React.Suspense и позволяет вам организовать их раскрытие.

// Cat 1 fetch time: 45ms
// Cat 2 fetch time: 100ms
// Cat 3 fetch time: 10ms

// Отображает всех дочерних элементов, когда выборка всех данных завершена.
<React.SuspenseList revealOrder="together">
  <React.Suspense fallback={'Loading first cat...'}>
    <Cat id={1} />
  </React.Suspense>
  <React.Suspense fallback={'Loading second cat...'}>
    <Cat id={2} />
  </React.Suspense>
  <React.Suspense fallback={'Loading third cat...'}>
    <Cat id={3} />
  </React.Suspense>
</React.SuspenseList>

// Всегда начинается сверху вниз: Cat 1, Cat 2, Cat 3
<React.SuspenseList revealOrder="forward">
  <React.Suspense fallback={'Loading first cat...'}>
    <Cat id={1} />
  </React.Suspense>
  <React.Suspense fallback={'Loading second cat...'}>
    <Cat id={2} />
  </React.Suspense>
  <React.Suspense fallback={'Loading third cat...'}>
    <Cat id={3} />
  </React.Suspense>
</React.SuspenseList>

// Всегда начинается снизу вверх: Cat 3, Cat 2, Cat 1
<React.SuspenseList revealOrder="backwards">
  <React.Suspense fallback={'Loading first cat...'}>
    <Cat id={1} />
  </React.Suspense>
  <React.Suspense fallback={'Loading second cat...'}>
    <Cat id={2} />
  </React.Suspense>
  <React.Suspense fallback={'Loading third cat...'}>
    <Cat id={3} />
  </React.Suspense>
</React.SuspenseList>

React.SuspenseList работает только с ближайшими компонентами React.Suspense. Не более чем на один уровень вглубь.

Заключение

На данный момент React.Suspense работает только с динамическим импортом, он же ленивая загрузка. Если вы не уверены, когда его использовать, следуйте этому руководству:

  1. Начните с уровня маршрутизатора. Посмотрите это руководство, в котором показано, как реализовать React.Suspense и React.lazy() для добавления ленивой загрузки в React router.
  2. Разделяйте только те фрагменты приложений React, которые не являются сверхкритичными для пользователя.

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


Оригинальная статья

Перевела Дарья Крещенова

20.03.2023

Читать полностью

Как эффективно учиться программированию по YouTube роликам

Многие начинают обучение программированию на YouTube. Смотрят ролики, подписываются на канал. Это невероятно мотивирует, многие вещи кажутся простыми и понятными. До того момента, пока не начнёшь повторять за автором. Да, чтобы начать повторять, нужно сделать усилие над собой. Мозг очень сопротивляется. Он говорит тебе: "Да мне и так всё понятно, зачем тут что-то повторять".

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

Давайте я покажу алгоритм, по которому можно начать качественно изучать программирование на YouTube.

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

Шаг первый. Завести аккаунт на GitHub, если его у вас ещё нет. Там бы будем публиковать код. Сможем им делиться с другими, а так же публиковать приложение в интернете. Публикацию мы оставим за пределами этой статьи, но знайте, что такая возможность есть.

Шаг второй. Выбрать канал или каналы, на котором будете обучаться. Мы за основу возьмём канал Мэлсика. Даня отличный парень и доходчиво объясняет сложные вещи. В своих видео он показывает решение интересных прикладных задач и не топит вас в скучной теории. Рекомендую его канал, если вы хотите изучать python или c++. Проходите по ссылке и подписывайтесь.

Шаг третий. Выбрать для себя маршрут. Оглянуться на видео с канала и выбрать несколько из них, 3-5, которые связаны общей идеей, языком и инструментами. Общность важна, чтобы мозгу было проще делать переход от одного видео к другому. От одного материала к другому. Расставляем их от простого к сложному по субъективной оценке. Большая точность нам не нужна. Мы выбрали следующие видео:

Шаг четвертый. Практика!

Как воспроизводить музыку при помощи Python | PYGLET

Сначала сделаем веселую и простую задачу - воспроизведем музыку. Могли бы вы подумать, что mp3-плеер будет так просто запрограммировать? Несколько строк кода и у нас рабочая программа, которая радует нас любимой музыкой.

Как создать будильник на Python | DATETIME

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

Будильники это уже не несколько строк кода. Чувствуете мощь? Чувствуете, что можете свернуть горы? Я да. Нужно перепечатать код, разобраться, что значит каждая строчка и принять, что вы написали этот код. Еще не придумали, но написали. Для придумывания время еще придет. Все впереди.

Создаем парсер на Python | парсинг данных | BeautifulSoup4

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

Создание Telegram бота на Python | AIOGRAM

С парсером разобрались. Теперь запрограммируем бота в Telegram. Бот - это программа, с которой можно общаться в чате, перекладывать какую-то рутину и так далее. Изучите код, разберитесь, как его нужно запускать, получив токен, и вот у вас свой карманный бот. Поздравляю!

Telegram бот и парсер Wikipedia | AIOGRAM | PYTHON

Мы изучили и отработали программирование отдельных задач. А теперь давайте объединим полученные знания и создадим бота, который будет парсить сайт! А именно Wikipedia. Бот будет обрабатывать наш запрос, загружать страницу википедии и показывать нам ее. Практически своя карманная энциклопедия без захода в браузер. И тут все делаем так же, как на предыдущих шагах: смотрим код на видео, перепечатываем, разбираем каждую строчку.

Итог

Подведем итог. На youtube-роликах можно учиться программировать, но самое главное не заниматься самообманом, а ответственно подходить к работе с кодом. Нужно разбирать код на видео, перепечатывать его и где-то даже писать самостоятельно.

Программирование познается только через практику, через печать. Просто посмотреть видео не достаточно, хоть мозг и уверяет вас, что он все понял. Нужно тратить время на реальную работу с кодом, иначе время будет потрачено впустую.

Желаю вам удачи в освоении программирования и достижении новых высот. Пишите код, становитесь круче!


Олег Акинин

05.12.2022

Читать полностью

Пропасть между джунами и сеньорами

Вы замечали целую пропасть, разрыв между джунами и синьорами? Разрыв во времени. Разрыв в знаниях. Разрыв в профессиональном опыте. Разрыв в житейском опыте. Да что там, они даже разговаривают на разных языках.

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

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

Но что будет, если попросить помощи? Ты становишься умнее и узнаешь больше. В один момент разрыв между джуном и синьором сокращается. При этом посчитает ли кто-нибудь джуна тупым если он уточнит какие-то детали, которые не понимает? Вряд ли.

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

На консультациях с наставником ты можешь получить ответы на свои вопросы. Не нужно ломать голову как написать понятно. Созвонись с наставником и просто спроси. Говорить легче, чем писать. Говорить быстрее, чем писать. И ответ получаешь в тот же момент. Для сохранения информации у нас есть возможность записи встречи.

Наши наставники открыты к общению. Они хотят делиться своим опытом и помогать тебе. Приходи к нам в Teacher Army. Стань ближе к профессионалам


Олег Акинин

10.10.2022

Читать полностью

Подборка литературы для backend разработчика

Всем добрый день! Когда я писал эту статью, я писал ее для php, хотя уже тогда понимал, что, то что я подбираю, полезно не только пыхарям.

Архитектура

  1. Рефакторинг гуру(сайт с енотиком). Там и про паттерны и про рефакторинг. Все хорошее статьи книги и возможно видеокурс(я его не смотрел). Как раз для тех кто начинает улучшать качество своего кода Остальные книги для тех кто уж "понюхал пороха":
  2. Роберт Мартин: Чистая архитектура. Искусство разработки программного обеспечения.
  3. М. Фаулер "Рефакторинг. Улучшение существующего кода"
  4. Роберт Мартин Чистый код: создание, анализ и рефакторинг - мне предудщая книга ближе, но как там довольно много интересный вещей, использую как справочник "хороших практик", но при этом эта книга хороша и для полного прочтения
  5. Не рекомендую для начала(только после такого прокачайтесь) читать банду 4-х. Книга крутая, но для новичков может быть сложной.
  6. Майкл Нейгард Release it! Проектирование и дизайн ПО для тех, кому не всё равно. - просто интересная книжка. Не рекомендую читать для обучения.
  7. Руководство по паттернам микросервисам, очень крутое https://docs.microsoft.com/ru-ru/azure/architecture/reference-architectures/saga/saga

БД

  1. mysql документация
  2. Вадим Ткаченко, Бэрон Шварц, Петр Зайцев - MySQL по максимуму
  3. Ян Робинсон, Джим Вебер, Эмиль Эифрем "Графовые базы данных. Новые возможности для работы со связанными данными" - если интересуют графовые базы данных.
  4. Postgresql - хорошая документация переведенная на русский язык.
  5. Все книги postgrespro - https://postgrespro.ru/education/books

Языки

Общее для некоторых языков(php, python, nodejs) Для людей, которым сложно дается документация на первое время рекомендую книжки Вадима Панова. Он довольно неплохо все разжевывает, чтобы начать программировать, но там только базовые вещи, которые нужно позднее добавлять выдержками из документации и других источников

PHP

Литературу под php надо подбирать очень строго, потому что некоторые учебники учат программировать в стиле "старого php", что нам не подходит. Может подойти для начальных этапов, чтобы в принципе позапускать программы, но к реальным приложениям это имеет малое отношение, хоть такие приложения и встречаются (даже в простых фриланс проектах, популярным становится laravel).

  1. PHP и MySQL. Разработка веб-приложений, Денис Колисниченко. - ЭТУ КНИГУ РЕКОМЕНДУЮ ТОЛЬКО В ТОМ СЛУЧАЕ ЕСЛИ ЧУВСТВУЙТЕ ЧТО НЕ ИДЕТ НИЧЕГО ДРУГОЕ. В этой книге не будет ничего про то, что нужно бекенд разработчику. Но сама книжка относительно простая. Ее прочтение может, помочь вам начать и уже читать что-то более интересное.
  2. https://github.com/getjump/ru-php-the-right-way, https://phptherightway.com/, http://phptherightway.ru/ - еще раз порекомендую это
  3. Мэтт Зандстра: PHP 8. Объекты, шаблоны и методики программирования - по отзыву моего друга в качестве совсем первой книги это тяжело. Рекомендую ее после того как вы уже поняли что такое классы.
  4. Domain-Driven Design in PHP by Carlos Buenosvinos (Author), Christian Soronellas (Author), Keyvan Akbary (Author) - для профи
  5. Михаил Фленов "PHP глазами хакера" - любопытная книга, но не для обучения разработке.
  6. https://thephpleague.com/ - полезный ресурс. В основном там библиотеки, но все равно круто.
  7. https://t.me/beerphp - крутой чувак, очень доступно все рассказывает.
Фреймворки

Немного пройдемся по фреймворкам. Как правило, документация лучшая книга. Ее довольно понятно пишут к популярным фреймворкам. Но где-то возможно объяснено получше/понагляднее/проще. Я рассмотрю только symfony/laravel.

Symfony
  1. На официальном сайте очень много книг, в том числе перевод документации https://symfony.com/doc/current/the-fast-track/ru/index.html.
  2. Matthians Noback - один год симфони, немного старовата, но возможно там объяснят некоторые тонкости, которые непонятны. Потому как справочник может сгодиться.
Laravel
  1. Документация laravel неплохо написана и есть переводы на русский. Аналогично книга по symfony
  2. Владимир Дронов laravel 8 быстрая разработка веб-сайтов на php - Это рекомендация от Максима, который был в моем посте про ментороства. Он сказал, что когда начинал, ему было понятно. То есть для начинающих.
  3. Стаффер М: Laravel. Полное руководство. 2-е издание - если вы понимайте документацию laravel и понимайте что там написана, то не думаю что эта книга стоит того, чтобы ее специально покупать. Но если возникают трудности, возможно эта книга вам поможет их преодолеть.
  4. https://laravel-beyond-crud.com/ - к сожалению человек не продает книгу отдельно. Если вам удастся ее раздобыть, или найти посты на основе нее, то книга стоящая дла начинающих.
  5. https://github.com/alexeymezenin/laravel-best-practices

Python

То что я сейчас скажу про python это не про ml, а про web/desktop/простые скрипты. Я очень долго искал хорошие книги по python. Меня очень сильно раздражает, когда в python рекламируют, как "простой язык для обучения". Напоминает старую историю про то, что залесть на слона бесплатно, а вот слезть... Python действительно в некоторых аспектах на начале проще чем, например, с++/java, а некоторым даже кажется проще чем php. Но руководств к тому как писать чистый код на python я не нашел. При этом язык живет своей жизнью и реализует популярные концепции(например ООП) очень по-своему. Насколько я вижу в интернете, многих питонситов это устраивает. Я ничего не имею против, но я начал писать эту статью, потому что занимаюсь менторством и ко мне часто приходят начинающие и говорят фразу, что "я начал изучать python, потому что это самый популярный и простой язык", хотя на деле они просто не смогли определиться и понять что им надо. Для меня это звучит как "я хотел научиться плавать, и услышал, что лодка мне в этом поможет".

Мое мнение, что питон далеко не для всех, если вы собрались учить его для участия в больших проектах(для мелких проектов/мат вычислений, то что я написал практически не имеет значения).

Если вы все же решились изучать python для веб вакансии. То вот небольшой план(все конечно должно очень сильно миксоваться с практикой)

Начало
  1. Любая книга вроде этой - https://www.litres.ru/allen-b-dauni/osnovy-python-nauchites-dumat-kak-programmist-64838906/ Главное, чтобы +/- доступно(для вас) излагались основные понятия(циклы, основные типы данных, итераторы, генераторы, ООП, многопоточка). Можете загуглить содержания этой книги, чтобы лучше понять о чем я говорю. Но если вы осилите оф. документацию, до это будет даже лучше.
  2. https://digitology.tech/docs/python_3/tutorial/index.html - вот собственно переделенная документация(https://www.python.org/ - если на английском вам достаточно).
Продолжение
  1. Автостопом по python - на мой взгляд очень крутая книга, которая после знания основ даст понимание что делать дальше(главу для профи порекомендую ниже)
  2. Чистый python - https://www.litres.ru/beyder-d/chistyy-python-tonkosti-programmirovaniya-dlya-profi-39123332/ Неплохая книга, но возможно будет скучной.
Профи

То из-за чего я начал этот пост, долгое время не мог понять куда копать. Привыкший к IOC-контенерам, я не понимал как питонисты организуют свой код в больших проектах. Читал вот это https://habr.com/ru/post/461511/ и не понимал что происходит. Натыкался на разные подходы в том числе наткнулся на вот это видео - https://www.youtube.com/watch?v=imW-trt0i9I , которое прояснило для меня некоторые моменты. По итогу наткунлся на вот эту книгу

  1. https://www.litres.ru/deyn-hillard/sekrety-python-pro-pdf-epub-64083647/ - на мой взгляд хорошая книга.
Остальное

Если питонисты откомментируют этот раздел я буду признателен. И также скину несколько ресурсов по python:

  1. https://www.youtube.com/watch?v=8hscvGY7EhI - прикольный чувак, который хорошо шарит в python и все разжевывает
  2. https://digitology.tech/ - хороший русскоязычный ресурс по джанго

Golang

По аналогии с python очень долго не мог найти хорошие ресурсы

  1. Программирование на Go. Разработка приложений XXI века | Саммерфильд Марк
  2. https://www.litres.ru/mihalis-cukalos-27713196/golang-dlya-profi-64073297/ - Golang для профи
  3. https://dev.to/ankit01oss/7-github-projects-to-make-you-a-better-go-developer-2nmh - просмотрите все репозитории, там и фремворки и структура проектов и кучу всего еще
  4. Михалис Цукало Golang для профи. - Для тех кто столкнется/захочет перейти в go. Эта книга мне очень понравилась, при переходе на язык go. Есть неплохая Марк Саммерфильд Программирование на Go. Разработка приложений XXI века - Если в дальнешем заинтересует/столкнетесь в работе с golang. Но это больше.

Остальное

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

  1. Если будете ударяться в javascript. Серия книг "Вы не знайте JS", очень хорошая.
  2. Шукла Пранав, Кумар Шарат Elasticsearch, Kibana, Logstash и поисковые системы нового поколения - хороший пересказ документации к elastic :)
  3. Адитья Бхаргава. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих - в своем плане, я ни слова не сказал об алгоритмах. При этом на деле некоторые базы computer science и алгоритмы желательны. Это не всегда понадобится вам в работе в явном виде и php-шников редко спрашивают алгоритмы, тем не менее это полезно.
  4. И в заключение. Не стоит пугаться такого огромного списка литератры. Далеко не все вам понадобится для первого рабочего места(причем даже и для второго и для третьего). Некоторые вещи я еще не дочитал, некоторые вам могут не понадобится. Некоторые из этих книг, я прочел недавно.

Прочитать в блоге Андрея


Андрей Никулин

27.09.2022

Читать полностью

Квартирник Teacher Army по индексу 2

Привет, ребята и девчата! Мы по вам соскучились!

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

Тема нового выпуска "Инженерная культура — зачем? Как? Почему?". Будем говорить про то, что такое инженерная культура, зачем она нужна и кому. Почему преждевременные оптимизации не помогают, а часто лишь ухудшают ситуацию с производительностью? Почему люди плохо разбираются в библиотеках и фреймворках в которых они работают? Что с этим можно делать и как жить?

Нам очень важно ваше мнение и ваши истории. Приходите на Квартирник Teacher Army, примите участие в дискуссии или просто послушайте других. Мы ждём вас, друзья!

Мы будем вас ждать 29.09.2022 в четверг в 19:00 по Москве в нашем уютном Google Meet! Подключайтесь хоть с компьютера, хоть с телефона в парке😉

Заполните google форму и мы пришлем вам приглашение.


Евгений Щепотьев

16.09.2022

Читать полностью

Итоги Квартирника Teacher Army по индексу 1

На прошлой неделе прошёл Квартирник по индексу 1, и он нас несказанно порадовал и впечатлил. Если в прошлый раз на нём было пять участников и все так или иначе были знакомы, то вчера было уже пятнадцать человек. Многие видели друг друга впервые, но это не помешало поделиться своим мнением с остальными.

Суховато, да? Ну в общем, ребята, мы затерли про технологии, навтыкали реакту и попытались понять, зачем мы тащим оверхедные технологии в проект.

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

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

С наставниками Teacher Army поговорили про то, как важно расширять свои границы и не застревать в чём-то одном. Развиваться как человек и специалист в широком поле, чтобы иметь возможность для манёвра. Быть не только React-кодером, а стать разработчиком и инженером.

Ребята, вы крутые, спасибо, что пришли! И Квартирник крутой! Ждем вас снова! Участвуйте в дискуссиях и задавайте вопросы.

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


Олег Акинин

08.09.2022

Читать полностью

Квартирник Teacher Army по индексу 1

Привет, ребята и девчата! Мы по вам соскучились!

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

Тема нового выпуска "Зачем швейцарский нож на кухне?". Будем говорить про то, когда нужен React, а когда нет. Когда нужно гнаться за чем-то модным, а когда подойдут консервативные решения? Как научиться делать объективный выбор для пользы бизнесу и не поддаваться своим желаниям и привычкам? Как затаскивать новые для себя технологии без ущерба для проекта?

Нам очень важно ваше мнение и ваши истории. Приходите на Квартирник Teacher Army, примите участие в дискуссии или просто послушайте других. Мы ждём вас, друзья!

Мы будем вас ждать 01.09.2022 в четверг в 19:00 по Москве в нашем уютном Google Meet! Подключайтесь хоть с компьютера, хоть с телефона в парке😉

Заполните google форму и мы пришлем вам приглашение.


Олег Акинин

24.08.2022

Читать полностью

Квартирник Teacher Army

Привет, ребята и девчата! На связи Teacher Army!

Мы так соскучились по живому общению и решили устроить Квартирник Teacher Army. Это онлайн-митап в Google Meet, где можно послушать и обсудить заданную тему. Включайте камеру, берите микрофон, расскажите, что думаете. Нам интересно ваше мнение!

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

Тема нулевого выпуска: "Влияние характера программиста на стиль и процесс разработки". Встречу проведут Олег Акинин и Женя Щепотьев.

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

Наливайте кофе, заваривайте чай, открывайте вино, берите пивко и го к нам на квартирник. Поговорим по душам о разработке и разработчиках.

Подключайтесь, мы будем вас ждать 22.07.2022 в 19:00 по Москве!

Заполните google форму и мы пришлем вам приглашение.


Олег Акинин

18.07.2022

Читать полностью

Новая услуга - code-review

Привет, ребята и девчата! Teacher Army заряжает энергией, позитивом и движением вперед! Мы запустили новую возможность получить фидбек от профессиональных разработчиков - code-review.

Ты можешь отдать на ревью любой проект и получить:

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

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

Teacher Army хочет это изменить. Наша цель - повысить культуру шаринга знаний и опыта в среде разработчиков. Получи фидбек, повысь качество своих решений уже сейчас!


Олег Акинин

03.06.2022

Читать полностью

Быть или не быть программистом

Любой может стать программистом? Да. Любой может стать программистом? Нет. Именно такие противоречивые ответы можно найти в интернете на такой простой вопрос. Но почему? Почему всё так противоречиво?

Кто-то скажет, нужно знать математику. Но нельзя сказать, что математика жизненно необходима программисту. Требуется она редко. А когда требуется, то формулы достаточно быстро гуглятся.

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

Кто-то скажет, нужно знать логику. Это конечно правда. Все операции в программировании основаны на логике и программируем мы бизнес-логику. Но разве есть человек, который не понимает логику? Я сомневаюсь. Как же тогда он общается с другими людьми? Если можешь отличить право от лева, то if от else так же отличишь.

Что есть ещё в топе необходимых вещей? Английский. Есть мнение, что если не можешь бегло читать по-английски, то начинать программировать рано. Ну совсем нет. Да, английский правда нужен. Подавляющее большинство информации, документации, статей на английском языке. Но на русском она тоже есть. А если чего-то нет, то онлайн-переводчики нас спасут. Начинать можно и с этого. Но мы используем английские слова для названий переменных и функций. Весь код пишется на английском. Но в момент обучения весь код ты пишешь сам и постепенно пополняешь словарный запас.

Получается, что без всего этого можно стать программистом. А без чего по-настоящему нельзя? Почему у кого-то не получается? Фрустрация. Без её преодоления действительно нельзя стать программистом.

Весь процесс написания кода, продумывания решения задачи протекает через преодоление преград. Нас как будто выкинули в океан и сказали: "Плыви в нужном направлении. Иначе крышка". Что? В нужном? А точнее можно? Нет, нельзя. Ок. И мы плывем. Кто-то брасом фигачит. Кто-то строит плот из плавающего мусора. Кто-то обращается за помощью к ребятам с проплывающего корабля. А кто-то не может совладать с паникой и моральной тяжестью всего этого и сдается.

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


Олег Акинин

27.03.2022

Читать полностью

Новая услуга - Собеседование

Мы в Teacher Army ищем способы помогать начинающим разработчикам достигать высот. И в этот раз открыли возможность пройти тестовое собеседование. Что это такое? Это собеседование по стандартам индустрии, во время которого мы проверим ваши знания, а после него дадим подробную обратную связь.

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

Подробно все расписано на странице Интервью. Переходите по ссылке, записывайтесь на собес. Будет круто!


Николай Роботов

06.03.2022

Читать полностью

Что учить фронтенд-разработчику в 2022 году

Новый год - новые переживания. Что же учить начинающему фронтенд разработчику в 2022 году? Из каждого утюга летит, что надо знать последний React, новый Vue, какой-нибудь стейт менеджер, а лучше два и отличия между ними. Препроцессоры, полифилы, сборщики, библиотеки, шаблонизаторы. Что там ещё.. UI-киты, паттерны проектирования, алгоритмы сортировки, алгоритмы обхода бинарного дерева. Обсервер, pub-sub, proxy. Итераторы, генераторы. Ах, да, евент луп, SOLID. А так же что будет, если в адресной строке написать адрес ресурса и нажать ентер.

Очень много. Просто невыносимо много. И наверняка, кто-то добавит сюда что-то ещё. Правда ведь добавит. Можно расширять этот список до бесконечности. Как и учиться можно тоже до бесконечности. И считать, что ещё не готов идти на собес, потому что так мало знаешь. Так что же на самом деле нужно учить в 2022 году, чтобы голова осталась на месте?

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

Теперь добавь столбец, почему ты начал это учить. Причиной мог послужить учебный курс, наставник, статья, подкаст, какой-нибудь роадмап или просто неведомое желание. Если не помнишь, то напиши undefined.

Далее нужно добавить столбец, как часто это приходится применять. На собесах, в личных проектах, на работе, где угодно. Так же используй значение от 0 до 3.

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

А теперь будем отвечать на вопрос, что же учить в 2022 году. Учить нужно то, что нужно. А что не нужно, учить не обязательно. Посмотри на свою табличку. Отсортируй её по важности, то есть по частоте использования. Затем по знаниям. Вот оно. Нам нужны важные вещи, в которых ты ещё плаваешь. Это настоящая цель. Не нужно распыляться на то, что пишут в Твиттере или чему пророчат светлое будущее или называют очередной убийцей очередного реакта. Вот когда эти пророчества произойдут, тогда и обратим на это внимание. А пока разберемся с важными и реальными вещами. Укрепим свои знания. Сложно пройти собес, если плаваешь в теме, даже если таких тем много. Куда проще, если есть уверенные знания. Пусть не во всём, но они надежные. Потому что когда собеседующий получает уверенные ответы на часть вопросов, а на какие-то вопросы то, что ты об этом не знаешь, то он может предположить, что ты в них сможешь достаточно быстро разобраться. Ведь в этих ты разобрался.

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

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


Олег Акинин

17.02.2022

Читать полностью

Три истории

История первая

Когда я только пришёл в индустрию, мне очень сильно помогал мой друг. Я устроился тестировщиком, со слабым представлением о разработке. Знал немного про переменные, циклы и функции, а на объектах уже плыл. И вот Слава не пожалел своего времени и рассказывал мне самую необходимую информацию про js. Про работу с DOM, события, классы, наследование. Через некоторое время я начал писать простой код. Потом более сложный. А спустя год пополнил штат программистов в компании. Спустя несколько лет стал тимлидом. А потом, переехав в Питер, уже сам преподавал js в htmlacademy.

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

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

История вторая

Мы сидели с Игорем у меня на кухне и разговаривали за жизнь. И решили, что Игорю надо начать программировать. Я уже три года занимался разработкой и кайфовал. Самое сложное у меня было позади и теперь я получал истинное наслаждение от своей работы. Почему бы Игорю не кайфовать так же, подумали мы? И начали заниматься. Каждую субботу мы встречались и я ему что-то рассказывал, показывал. Скидывал статьи, предлагал задачи. А на неделе проводил код ревью. Хм.. не сильно отличается от того, как проходит у меня сейчас, если подумать. Но не буду отвлекаться. Вернёмся к Игорю.

Я не помню точно, сколько времени мы так занимались, но в итоге Игорь работает программистом. Не знаю, кайфует ли он сейчас, может уже выгорел к чертям. Шесть лет прошло как никак. Но раньше точно кайфовал :) Ну а если выгорел, то что? Да ничего особенного. Подзабил(это я про работу), подышал и снова все в кайф. Ну вектор может меняешь.

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

Страна жаждет угля, мир ждёт героев, всем нужны программисты. А если ты уже он, то легко можешь сделать +1. И от этого будет всем хорошо. И тебе, и твоему трейни. У тебя есть опыт, у него желание. Поделись с ним, это круто.

История третья

Уже больше года я занимаюсь индивидуальным наставничеством. До этого делал курсы в htmlacademy. Вел поток в OneBootcamp. Потом вернулся в разработку. Делиться знаниями очень понравилось - это здорово их структурирует у тебя в голове, находит пробелы. А ещё и учишься сам у своего подопечного. Но вот проблема, те площадки для наставничества, которые я видел, вместе с возможностью давали и ограничения. В частности на программу и формат.

Мне нравится, когда нет программы, которую кто-то спустил снизу. Особенно я понял это, когда вёл курс в OneBootcamp. Есть только цель. Цель, или цели, озвучивает студент. Программу ты продумываешь сам. Определяешь оптимальный маршрут на основе целей, навыков и опыта студента и вперёд.

Когда я только решил этим заниматься, я не думал, что это так кайфово - созваниваетесь, разговариваете, что-то обсуждаете. Если нужно, то можно и лекцию прочитать. Если нужно, то можно просто послушать. Подбодрить и поддержать, научить определять синдром самозванца и как его побеждать. Можно обсудить новости индустрии, которые могут быть полезны подопечному. Разбираете сложности, с которыми он столкнулся со времени последнего созвона. Где-нибудь в середине советуешь книжку. Или конкретную главу, под задачу. Дел у людей и так много, кто-то не успевает, кто-то ленится читать. А по небольшому совету или когда это вписывается в цель, люди читают охотнее.

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

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

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

Если тебе хочется начать наставничать, то приглашаю к нам в Teacher Army. Мы предоставляем инструменты профессионалам, которые хотят делиться своими знаниями по своим правилам. Помогаем новичкам находить вас и перенимать ваш опыт. Программирование это кайф. Наставничество это кайф. Давайте кайфовать вместе! Напиши мне в личку или в телеграм https://t.me/kicumkicum и я расскажу обо всём подробнее.


Олег Акинин

31.12.2021

Читать полностью

Немного о наставниках

Кто такой наставник

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

Выбрав профессиональное развитие в программировании у вас два пути:

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

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

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

Мастер восточных единоборств Брюс Ли как то сказал: "Учитель не открывает истины, он — проводник истины, которую каждый ученик должен открыть для себя сам. Хороший учитель — лишь катализатор."

Мы изменим фразу и скажем: "Хороший наставник не открывает истины, он позволяет вам находить ответы, где раньше вы их не видели".

Как работать с наставником

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

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

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

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

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

Как найти наставника

Мы уже выяснили кто такой наставник и в каких вопросах он может помочь специалисту.

Сегодня узнаем, где искать наставника программисту!

Самый простой вариант - устроиться на работу программистом в крупную компанию и попросить опытного коллегу позаниматься с вами. Правда не всегда коллеги хотят делиться своим опытом. Ну что, им жалко что ли?! Конечно нет. Просто им тоже надо работать.

Но кроме этого есть еще варианты:

  1. Обучающие курсы и школы, где преподаватели и наставники будут помогать осваивать новые знания. Но часто это не бюджетно и занимает много времени.
  2. Профессиональные сообщества (форумы, паблики, неспециализированные сервисы). Вариант бюджетный, но поиски занимают много времени и могут так и не закончиться успехом.
  3. Специализированные сервисы, где по вашему запросу и целям, подбирают наставника, который будет подходить вам. Один из таких сервисов Teacher Army. Отправьте заявку и с вами свяжется представитель компании. Узнав у вас цели и задачи, сервис подбирает наставника. В процессе работы наставник направляет, мотивирует и помогает выстроить траекторию действий, чтобы вы добились цели, которую перед собой поставили.

Какой бы вариант поиска наставника вы не выбрали, помните, результат только в ваших руках! Наставник только поможет скорректировать путь в решении задачи.


Мария Василенко

10.11.2021

Читать полностью