diff --git a/Grades/Middle.md b/Grades/Middle.md index d2ab3dc..cb6d44e 100644 --- a/Grades/Middle.md +++ b/Grades/Middle.md @@ -8,27 +8,27 @@ ## Что ожидается по умению написания кода? -- Компилятор и язык его больше не пугают и практически не приносят сюрпризов, а если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь; -- Ориентируется в базовых концепциях языка и понимает, какие ещё языки существуют и чем они отличаются; -- Пишет понятный и поддерживаемый код; -- Знает базовые принципы дизайна и на их основе способен принять техническое решение; +- Компилятор и язык его больше не пугают и практически не приносят сюрпризов, а если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь +- Ориентируется в базовых концепциях языка и понимает, какие ещё языки существуют и чем они отличаются +- Пишет понятный и поддерживаемый код +- Знает базовые принципы дизайна и на их основе способен принять техническое решение - Понимает не только язык программирования, но и его технический контекст, то есть понимает весь технический цикл, через который проходит код и ориентируется в инструментах, которые помогают этот цикл поддерживать: - - Написание кода (IDE, текстовые редакторы, практики программирования, качество кода); - - Хранение исходного кода и продуктов (системы контроля версий, пакетные менеджеры, серверы); - - Компиляция (компиляторы, системы сборки, библиотеки); - - Тестирование (фреймворки, стратегии тестирования); - - Доставка; - - Выполнение (операционные системы); -- Глубже понимает и знает базовую информатику (структуры данных, конечные автоматы, алгоритмы). + - Написание кода (IDE, текстовые редакторы, практики программирования, качество кода) + - Хранение исходного кода и продуктов (системы контроля версий, пакетные менеджеры, серверы) + - Компиляция (компиляторы, системы сборки, библиотеки) + - Тестирование (фреймворки, стратегии тестирования) + - Доставка + - Выполнение на целевой системе +- Глубже понимает и знает базовую информатику (структуры данных, конечные автоматы, алгоритмы) ## Что ожидается по общим навыкам? -- Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него; -- Понимает, когда нужно остановиться, чтобы не переусложнить решение; -- Имеет практический опыт работы в команде; -- Способен формулировать и доносить идеи и мысли до других членов команды; +- Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него +- Понимает, когда нужно остановиться, чтобы не переусложнить решение +- Имеет практический опыт работы в команде +- Способен формулировать и доносить идеи и мысли до других членов команды - Имеет практический опыт работы по различным методологиям: Kanban, Agile/Scrum, Waterfall и т.д. -- Помогает другим членам команды. +- Помогает другим членам команды ## Рекомендации и советы diff --git a/Grades/Overview.md b/Grades/Overview.md index 033e96d..23de7dd 100644 --- a/Grades/Overview.md +++ b/Grades/Overview.md @@ -7,19 +7,21 @@ - Middle; - Senior. -Большинство компаний имеет свое видение по набору обязанностей и компетенций, предъявлемые к разработчку. Очень легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до уровня Middle. Тем не менее, можно описать и охарактеризовать общие ожидания для любого уровня в подавляющем большинстве компаний. В дальнейшем, будет использоваться упрощенная классификация, описанная выше. +Многие компании имеют свое видение по набору обязанностей и компетенций, предъявлемые к разработчкам разного уровня. Очень легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотянете до уровня Middle. Тем не менее можно описать и охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем, будет использоваться упрощенная классификация, описанная выше. -**Пример:** Ознакомиться с принятыми классификациями уровней в различных компаниях, можно здесь: https://www.levels.fyi/ +**Пример:** Ознакомиться с принятыми классификациями в различных компаниях, можно здесь: https://www.levels.fyi/ ![](https://github.com/Salmer/CppDeveloperRoadmap/blob/main/Grades/Source/GradeTable.PNG?raw=true "GradeTable") -# Описание +## Описание -[Pre-Junior C++](PreJunior.md) +В нижеперечисленных статьях мы попытались дать осредненное описание для кажого уровня разработчика: -[Junior C++](Junior.md) +- [Pre-Junior C++](PreJunior.md) -[Middle C++](Middle.md) +- [Junior C++](Junior.md) -[Senior C++](Senior.md) +- [Middle C++](Middle.md) + +- [Senior C++](Senior.md) diff --git a/Grades/PreJunior.md b/Grades/PreJunior.md index b810115..384d4f8 100644 --- a/Grades/PreJunior.md +++ b/Grades/PreJunior.md @@ -3,63 +3,48 @@ ## Кто это? Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например: -- выполняет арифметические вычисления; -- взаимодействует с файлами: чтение и запись; -- ожидает ввод данных с клавиатуры; -- выводит результаты работы и иные данные данные в консольное окно; +- выполняет арифметические вычисления +- взаимодействует с файлами: чтение и запись +- ожидает ввод данных с клавиатуры +- выводит результаты работы и иные данные данные в консольное окно - и т.д. ## Что ожидается по умению написания кода? -- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.; -- Умение пользоваться отладчиком при помощи IDE; -- Понимание процесса компиляции и сборки программы на C++; -- Способность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы; +- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д. +- Умение пользоваться отладчиком при помощи IDE +- Понимание процесса компиляции и сборки программы на C++ +- Способность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы - Умение написать приложение по работе со стандартным потоком ввода/вывода; -- Умение работать с указателями и ссылками; -- Знание из какого вида памяти состоит приложение; -- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция. +- Умение работать с указателями и ссылками +- Знание из какого вида памяти состоит приложение +- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция ## Что ожидается по общим навыкам? -- Желание учиться и впитывать новые знания; -- Желание разбираться в возникающих проблемах; -- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или в соответствующей литературе; - - -## С чего же начать? - -- Прежде чем начать изучения языка, рекомендуется начать свое погружение со следующей книги: **Чарльз Петцольд - Код. Тайный язык информатики:** [Ozon Books](https://www.ozon.ru/context/detail/id/125884/) - - Данная книга расскажет вам об устройстве компьютера простым языком. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга содержит в себе основы основ, которые вряд ли потеряют свою актуальность. Она познакомит вас с миром компьютеров, а также объяснит их устройство, что поможет вам лучше понять фундаментальные идеи языка C++. - -- Если вы начинаете изучать язык самостоятельно, то порекомендую вам выполнять разработку первых программ или упражнений в IDE: Microsoft Visual Studio (Community Edition). На сегодняшний день, это наиболее дружелюбная IDE к новичкам, как в установке, так и в использовании (и бесплатна!). Это позволит сконцентрироваться непосредственно на изучении языка, а не на борьбе с рабочим окружением. На сайте компании вы найдете небольшой учебник, который расскажет, как установить Visual Studio, создать консольный проект и написать первое приложение: [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160) - -- Есть много книг, по которым можно начать изучение языка. К сожалению, многие из них безвозвратно устарели, либо написаны слишком сложно. Но все-таки есть наиболее актуальная и дружелюбная книга, с которой стоит начать свой путь изучения C++: **Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание):** [Ozon Books](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584/?utm_source=google&utm_medium=cpc&utm_campaign=RF_Product_Shopping_Books_super&gclid=CjwKCAjw7diEBhB-EiwAskVi11zEQ2QeqLjT8AEBCYC5IWzgpdgLIErY3c7eLfgnPSFic9M8Eh2pPRoCSHIQAvD_BwE) - - Книга максимально дружелюбна к новичкам, не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка. - -- В дополнение к учебнику, стоит порекомендовать следующие видео лекции: - - Илья Мещерин - - Тимофей Хирьянов +- Желание учиться и впитывать новые знания +- Желание разбираться в возникающих проблемах +- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе ## Рекомендации и советы ### Про обучение -- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к самостоятельной работе и изучению материала из различных источников в течение продолжительного времени, прежде чем вы сможете пройти собеседование, и получить свой первый оффер. +- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала из различных источников, прежде чем вы сможете пройти собеседование, и получить свой первый оффер. - Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники. - Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется. -- Не пытайтесь писать идеальный код. Ваша основная задача - написание РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем, ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д. -- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки использования классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах, это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях. +- Не пытайтесь писать идеальный код. Ваша основная задача - написание много РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д. +- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки применения классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально огородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях. ### Про мотивацию -- Учитесь в своем ритме, а также в любом возрасте! Не ведитесь на истории: "я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблера". Большинство подобных историй - это [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++! -- Большинство проблем, с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте переписать свой код более простым путем/пересоздать проект и т.д. Помните, вы должны изучать язык, а не бороться с рабочим окружением на первых порах. Борьба с окружением может вас привести к полному разочарованию и потере мотивации. -- Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-то другим, а через какое-то время возвращайтесь к проблеме. -- Найдите единомышленников, которые также начинают свой путь. Так вам будет интереснее погружаться в изучение языка, а также делиться знаниями и опытом друг с другом. Это также поможет выработать в себе навык командной работы. Времена "вольных художников" подошли к концу. Практически везде, вам придется работать в команде. +- Учитесь в своем ритме, а также в любом возрасте! Не ведитесь на истории: "я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблера". Большинство подобных историй - это [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего) или попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++! +- Большинство проблем, с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем. +- Помните, вы должны изучать язык, а не бороться с рабочим окружением на первых порах. Борьба с окружением может вас привести к полному разочарованию и потере мотивации. +- Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-то другим, а через какое-то время возвращайтесь к задаче. +- Найдите единомышленников, которые также начинают свой путь. Так вам будет интереснее погружаться в изучение языка, а также делиться знаниями и опытом друг с другом. Это также поможет выработать в себе навык командной работы. Времена "вольных художников" подошли к концу. Практически везде вам придется работать в команде. +- Попробуйте также найти себе опытного ментора. Под его руководством вы сможете избежать различные ловушки и потерю времени на них. ### Про английский язык -- Большинство проблем проще искать на английском языке, но если ваш текущий уровень владения им не очень высокий - не мучайте себя. Так вы можете слишком быстро потерять мотивацию и разочароваться. Большинство проблем на первых порах, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке. +- Большинство проблем проще искать на английском языке, но если ваш текущий уровень владения не очень высокий - не мучайте себя. Так вы можете быстро потерять мотивацию и разочароваться. Большинство проблем на первых порах, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке. - Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие вас темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке. diff --git a/Grades/Senior.md b/Grades/Senior.md index aecd1b7..ef2950f 100644 --- a/Grades/Senior.md +++ b/Grades/Senior.md @@ -6,17 +6,17 @@ ## Что ожидается по умению написания кода? -- Способен переводить задачи с языка бизнеса на язык разработки и декомпозировать задачи; -- Способен вести диалог с бизнесом и объяснять технические детали и сложности людям вне команды; -- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения; -- Понимание и использование архитектурных принципов. +- Способен переводить задачи с языка бизнеса на язык разработки и декомпозировать задачи +- Способен вести диалог с бизнесом и объяснять технические детали и сложности людям вне команды +- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения +- Понимание и использование архитектурных принципов ## Что ожидается по общим навыкам? -- Высокий навык коммуникации; -- Способен при необходимости самостоятельно собрать требования; -- Помогает развивать членов команды; +- Высокий навык коммуникации +- Способен при необходимости самостоятельно собрать требования +- Помогает развивать членов команды ## Рекомендации и советы -В зависимости от специфики компании и от ваших желаний путь дальнейшего развития лежит либо в освоении новых технологий и технических навыков, требующихся в выбранной вами области знаний (например, специальные разделы математики, физика и т.д. - путь технического эксперта), либо в область управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely 🙂 +В зависимости от специфики компании и от ваших желаний путь дальнейшего развития лежит либо в освоении новых технологий и технических навыков, требующихся в выбранной вами области знаний (например, специальные разделы математики, физика и т.д. - путь технического эксперта), либо в область управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂