GithubHelp home page GithubHelp logo

developers-roadmap's People

Contributors

akhmadbabaev avatar alagunoff avatar antonkalinin-ml avatar chmnkh avatar clicktronix avatar dashkevi4mike avatar evgeny-osipenko avatar fanmanutd avatar frolikow avatar geksanit avatar gmihtt avatar gooddaytodayokey avatar iatsdotfatr avatar kelizarov avatar kinda-neat avatar krashaen avatar nelliza avatar olegromashin avatar olgaklimenko avatar pavelzarubin avatar performanceartist avatar sergio-ka avatar sk1e avatar stanislav-az avatar viktoriya-ch avatar vkpgwt avatar vladimirbokor avatar webbomj avatar zarwlar avatar znack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

developers-roadmap's Issues

Подробней расписать вопросы про системы сборки

На джуне подробней раскрыть, как работать с лоадерами, как с плагинами (их конфигурация и их композинг).

на какого-нибудь мидла добавить написание своих лоадеров и своих плагинов, концептуальные вопросы про то, как они работают.

Проработать блок про реактивное программирование

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

Ресурсы:

Добавить системный обзор механизмов валидации

Рассмотреть различные подходы к реализации систем валидации для разных вариаций форм: клиентская валидация, серверная валидация, валидация с погрешностями и тд. Вопросы, которые надо раскрыть в этой теме:

  • Какие бывают подходы в UX к валидирированию пользовательских данных?
  • Как получать пользовательские данные, как их обрабатывать и хранить, как отображать ошибки?
  • Какие подходы к обмену ошибок валидации с сервером существуют? Какие форматы данных используют эти подходы?
  • Какие подходы позволяют максимально обобщить протокол обмена данными и механизмы отображения ошибок?

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

Перенести старшего джуниора

Как я указал в #3 наш текущий уровень старшего джуна будет распилен на два. Здесь останется только продвинутый материал, плюс будем думать над его расширением.

Из текущей версии сюда перенести:

  • Изучить книгу Макконнелла "Совершенный код"
  • Изучить книгу (можно только саммари с smartreading.ru) "Принцип пирамиды Минто"
  • JS
    • Регулярки
    • Promises
  • Системы сборок
  • Безопасность
  • Advanced Git
  • API

Добавить тему про рефакторинг

  • Базовые принципы рефакторинга
  • Ценность инкрементальной разработки
  • Базовые паттерны рефакторинга
  • Рефакторинг в рамках XP
  • Опасности преждевременного рефакторинга
  • Основные запахи кода (?)

Добавить вопросы про rewriting history

а вообще раньше мне нравился раздел про "Отмену изменений" и связь с The Three Trees, такой же я б добавил с Rewriting history и какие команды в каком масштабе могут реализовывать этот rewriting

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

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

В уровень обычного (среднего) джуниора перенести:

  • HTML
  • CSS
  • JS
    • Объекты
    • Массивы
    • Функции
  • Тестирование
  • Основы Git (продвинутый материал по нему надо сейчас вычленить и отдельно в нового старшего джуна положить)
  • Чтение книги "Чистый код" Роберта Мартина

Добавить пояснение в вопрос о создании массива (джун 1)

Ссылка на вопрос

Сейчас вопрос звучит:

Способы создания массивов (литерал, конструктор, фабричные методы)

Не первый раз вижу как ребята не понимали про то, в фабричных методах нужно рассказать про Array.from() и Array.of().
Раз уж мы добавляем конкретики предлагаю явно это указать:

Способы создания массивов (литерал, конструктор, фабричные методы Array.from() и Array.of())

@Znack @chmnkh @GoodDayTodayOkey что думаете?

Добавить вопросы на первого мидла

Можно начать с блока ООП, там не все надо на middle-1 переносить сюда, так как некоторые темы уйдут на middle 2.

ООП

  • Книга Мэтт Вайсфельд «Объектно-ориентированное мышление» (это вводная по ооп как раз)
  • Что такое ООП (что такое иерархия классов, чем композиция отличается от наследования)
  • Что такое класс?
  • Что такое объект?
  • Что такое абстрактный класс и абстрактный метод?
  • Какие особенности у каждого из основных типов отношений между классами: композиции, агрегирования, наследования, ассоциации?
  • Что такое принципы SOLID? Что означает каждая буква из акронима?
  • Надо ли бороться с сайд-эффектами при проектировании в парадигме ООП?
  • Являются ли мутации сайд-эффектом?
  • Что такое статический метод? Является ли класс только из статических методов классом по ООП?

ФП

  • Что такое чистая функция?
  • Что такое ссылочная прозрачность? Является ли это свойство достаточным признаком чистоты функции?
  • Что такое идемпотентность?
  • Почему функциональное програмирование считается "декларативным"?
  • Может ли из чистой функции произойти вызов грязной? Если да, то что это значит?
  • Какие преимущества иммутабельных структур данных?
  • Как сделать работу иммутабельных структур данных быстрой?
  • Как реализовать функцию compose?
  • Что такое рекурсия?
  • Что такое оптимизация хвостового вызова и поддерживается ли она в JS?

Структуры данных

Перенести и расписать в форме вопросов по каждой структуре из нашего текущего списка, а не просто перечислить, как у нас там

Добавить упражнения по ООП

Думаю на второго мидла дать упражнения на закрепление понимания ООП. Пока идея такая: реализовать Service Worker, для него сделать приём разного рода пушей (как минимум нескольких разных команд разного типа), проксирование работы с сервером для поддержки работы оффлайн и предоставить оттуда удобный механизм синхронизации вкладок. Всё это потребует хорошо спроектировать решение для выражения решения в объектах, показать изученные принципы ООП, и здесь React и Redux уже не помогут, так что думаю, что это хорошая иллюстрация, зачем фронтендеру ООП :)

Проработать middle-2

ООП

  • Что такое identity? В чём отличие от экземпляра?
  • Как реализованы identity через ссылки на значения в памяти?
  • Что такое динамический и статический полиморфизмы в контексте ООП?
  • Как полиморфизм и интерфейсы позволяют реализовать инверсию зависимостей?
  • Какие есть способы расширения функциональности класса?
  • Какие проблемы несёт использование наследования?
  • Что такое "делегирование"?
  • Почему поведение, а не свойства определяет класс? Причём тут инкапсуляция?
  • Почему использование plain old javascript objects не соответствует принципы "всё есть объект"?

ФП

  • Изучить книгу Functional-Light JavaScript от Kyle Simpson.
  • Что такое бесточечная (point-free) нотация?
  • Что такое structural" и "generative" виды рекурсий?
  • Какие способы ограничения использования состояния существуют? Как их градировать по степени опасности?
  • Что такое structural sharing?

Паттерны проектирования

Перенести из топика и подробно расписать их

Базовые принципы проектирования

  • Что такое Separation of concerns?
  • Что такое Low coupling?
  • Что такое High cohesion? Противоречит ли этот критерий критерию Low coupling?
  • Что такое принцип DRY? Как принцип связан с High cohesion?
  • Что такое принцип KISS?
  • Что такое принцип YAGNI? Как он соотносится с принципом KISS?

Добавить вопросы про TypeScript для 2 и 3 джунов

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

Перенести вопросы по network в раздел linux

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

Например вопросы по модели ОСИ мне совсем не понятны зачем их спрашивать. Эту тему всегда можно самому изучить если есть интерес.

Или вопрос про рест там вообще не к месту, ведь это больше вопрос про подходу к клиеент/серверному общению, и скорее всего его либо на другой раздел надо добавить, либо на другой уровень.

Предлагаю обсудить что там можно убрать и смержить с линуксом.

Добавить вопросы по TypeScript для мидлов

Ишью продолжает темы TS из #8, только тут уже вынесены вопросы, которые требуют концептуального понимания того, как работать с тайпскриптом, плюс возможно, некоторые детали того, как он устроен. По сути как раз то, что уже пора мидлу изучать.

Базовые примеры вопросов:

  • Что такое structural typing, какие есть аналоги, какие преимущества и недостатки у этого подхода? (one, two)
  • В каких случаях TS отходит от принципов structural typing и переходит к номинативной типизации для определения compatibility типов?
  • Что такое declarations merging, как это работает в TS, какие плюсы и минусы, как мержаться типы для методов?
  • Почему TS считает compatable тип функции с меньшим количество аргументов ((a: number) => 0; assignable to (b: number, s: string) => 0;)? И как это распространяется на возвращаемый результат у функций? Можно ли считать из-за этого систему типов TS как unsound?
  • Что такое Type Variance?
    • Где в TS проявляется Covariance, а где Contravariance?
    • Если в функцию передать коллбек, который принимает другой коллбек, то это будет Covariance илиContravariance (вывести на примере самостоятельно)?
    • Приводит ли это к меньшей type safety или к меньшему удобству разработки в TS?
    • Res: (chapter 6)
  • Что такое Type Widening и как его избегать при разработке на TS?
  • Что такое fresh object literal type и почему для него по-особому включается excess property checking? Почему передача литерала объекта не напрямую в функцию, а через промежуточное присваивание переменной, делает программу более склонной к багам?
  • Что такое Refinement и как он работает в контексте Discriminated Unions?
  • Почему использование generic переменных в тегах для Discriminated Unions может сделать программу более склонной к багам? Какие есть примеры таких случаев и какие примеры, когда это не так страшно?
  • Что такое Companion Object Pattern и как для его реализации используется Declaration Merging?
  • Что такое вывод типов, какие типичные проблемы вывода типов есть, какие типы может выводить TS?
  • Какие виды полиморфизма поддерживает TS и как с этим работать? (one (только главы до Row polymorphism включительно), two)

Добавить вопросы на тему дебаггинга

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

Поменять задание с дженериками на 2 джуна

Мне изначально не нравился приведенный пример с filterByPropertyAndValue, самое главное там это and в названии, что есть плохой запах для функции, типа filterByPropertyAndValueAndVsemyChemyZakhocheshAndDverZapili.

Сейчас вспомнил гораздо лучше пример, в котором можно тоже самое сделать и это будет real-life case - функция prop: function prop(obj, key) { /.../ } и там можно кучу сразу всего совместить (дженерики, extends, lookup types)

Добавить вопросы по гридам для старшего джуна

план по гридам:

  • Что такое grid?
  • Как работает grid шаблон?
  • Что такое грид-контейнер и грид-элемент?
  • Что такое fractional unit(fr)?
  • Что означает display: grid и display: subgrid?
  • Подробно рассказать как задаются строки и колонки в гридах (свойства, какие значения принимает функция repeat() и т.д.).
  • Что такое grid-gap?
  • Подробно рассказать, что такое grid-template-areas (как постоить сетку, как связать элементы)?
  • Как сделать grid адаптивным (свойства auto-fill и auto-fit)?
  • Что такое explicit Grid и implicid Grid?
  • Что делает свойство grid-auto-flow?
  • Как работать с вложенными гридами?
  • Какие есть свойства гридов для выравнивания?
  • Как работает наложение элементов в гридах?

Ресурсы:

  1. Официальная документация;
  2. Основные понятия Grid Layout (MDN);
  3. Вёрстка на Grid в CSS. Полное руководство и справочник (Medium);
  4. Что такое единица гибкости fr в CSS, доступным и простым языком (Medium).

Включить историю в некоторые разделы

По-хорошему, в некоторых разделах (как ООП, Паттерны, ФП и тд) стоит включать разного рода вопросы на историческую составляющую, так как это значительно углубляет понимание темы. Мотивация хорошо описана тут: http://tomasp.net/blog/2019/software-engineering/. Возможно, что-то подобное этой статье еще в начале первого мидла положить, чтобы показать почему именно так, а не иначе, сформулированы уровни и зачем их изучать.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.