diff --git a/Grades/PreJunior.md b/Grades/PreJunior.md index 96550ce..1e8362c 100644 --- a/Grades/PreJunior.md +++ b/Grades/PreJunior.md @@ -2,53 +2,44 @@ ## Кто это? -Это человек, который освоил базовый синтаксис языка и способен написать несложную программу, только при помощи базового синтаксиса языка C++ и стандартной библиотеки STL. Программа способна выполнять различные несложные действия, например: +Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например: - выполняет арифметические вычисления; -- работа с файлом: чтение и запись; -- ввод данных с клавиатуры; -- вывод данных в консольное окно; +- взаимодейтсвет с файлами: чтение и запись; +- ожидает ввод данных с клавиатуры; +- выводит результаты работы и иные данные данные в консольное окно; - и т.д. -## Какие навыки ожидаются? - -- Может создать рабочий проект на C++; -- Способен Арифметические операции; -- Логические операторы и операторы цикла; -- Стандартные потоки вводы/вывода; -- Работа с файлами; -- Работа с указателями и ссылками; -- ООП в рамках C++: Наследование, полиформизм, инкапсуляция; -- Понимает процесса компиляции и сборки программы на C++. ## Что ожидается по умению написания кода? -- Способность создать и собрать небольшой проект при помощи одной из популярных IDE, например Visual Studio или Qt Creator; -- Умение пользоваться отладчиком в рамках IDE. +- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.; +- Умение пользоваться отладчиком при помощи IDE; +- Понимание процесса компиляции и сборки программы на C++; +- Спопобность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы; +- Умение написать приложение по работе со стандартным потоком ввода/вывода; +- Умение работать с указателями и ссылками; +- Знание из какого вида памяти состоит приложение; +- Базовое понимание ООП в рамках C++: Наследование, полиформизм, инкапсуляция. -## Что ожидается по общим знаниям? -- Работа с Git; -- Умение составлять несложные алгоритмы: логические или арифметические; -- Умение работать с одной из популярных IDE (Integrated Development Environement) или текстовым редактором: MS Visual Studio, Qt Creator, Visual Studio Code. +## Что ожидается по общим навыкам? -## Что ожидается по коммуникативным навыкам? +- Желание учиться и впитывать новые знания; +- Желание разбираться в возникающих проблемах; +- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или в сооттветствующей литературе; -- Желание учиться -- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике -- Умение составлять и задавать вопросы коллегам, если не получается найти решение самостоятельно -- Желание работать в команде -## С чего же мне начать? +## С чего же начать? -- Прежде чем изучать язык C++, рекомендуется начать свое погружение со следующей книги: **Чарльз Петцольд - Код. Тайный язык информатики** ([https://www.ozon.ru/context/detail/id/125884/](https://www.ozon.ru/context/detail/id/125884/)) +- Прежде чем начать изучения языка, рекомендуется начать свое погружение со следующей книги: **Чарльз Петцольд - Код. Тайный язык информатики:** [Ozon Books](https://www.ozon.ru/context/detail/id/125884/) - Данная книга расскажет вам об устройстве компьютера на простом языке. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга актуальна и по сей день, т.к. содержит в себе основы основ, которые вряд ли потеряют свою актуальность в ближайшие десятилетия. Она познакомит вас с миром компьютеров, а также объяснит их устройство, что поможет вам лучше понять фундаментальные идеи языка C++. + Данная книга расскажет вам об устройстве компьютера простым языком. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга содержит в себе основы основ, которые вряд ли потеряют свою актуальность. Она познакомит вас с миром компьютеров, а также объяснит их устройство, что поможет вам лучше понять фундаментальные идеи языка C++. -- Если вы начинаете изучать язык самостоятельно, то порекомендую вам выполнять разработку своих первых программ или упражнений в ОС Windows в IDE Microsoft Visual Studio (Community Edition). На сегодняшний день, это наиболее дружелюбная IDE для новичков, как в установке, так и при ее использовании. Это позволит вам сконцентрироваться непосредственно на изучении языка, а не на борьбе с рабочим окружением. На сайте компании Майкрософт вы найдете небольшой учебник, который вам расскажет, как установить Visual Studio, создать свой первый консольный проект и написать первое полноценное приложение (консольный калькулятор: [https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160) +- Если вы начинаете изучать язык самостоятельно, то порекомендую вам выполнять разработку первых программ или упражнений в 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++: **Стивен Прата - Язык программирования C++**. Лекции и упражнения (шестое издание) ([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](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++. Лекции и упражнения (шестое издание):** [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) - Книга максимально дружелюбна к новичкам, не требует наличия каких-то специфичных знаний перед началом изучения языка, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять базовые и фундаментальные возможности языка. + Книга максимально дружелюбна к новичкам, не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка. - В дополнение к учебнику, стоит порекомендовать следущие видеолекции: - Илья Мещерин @@ -56,14 +47,19 @@ ## Рекомендации и советы -- На сегдняшний день не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц при помощи курсов, роликов на YouTube т.д. Будьте готовы к самостоятельной работе и изучению материала из всевозможных источников на протяжении нескольких месяцев, прежде чем вы сможете пройти собеседование и получить свой первый оффер на работу. -- Изучайте язык в своем ритме и темпе, а также в любом возрасте 🙂. Не ведитесь на подобные истории: "я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблерного кода", "не служил - не мужик" и т.д. Большинство подобных историй - это [систематическая ошибка выжившего]([https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего](https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%D0%B2%D1%8B%D0%B6%D0%B8%D0%B2%D1%88%D0%B5%D0%B3%D0%BE)), или попытка "потешить свое самолюбие" за ваш счет. У всех вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и изучить C++. Также полно молодых ребят, которые сами хотели бы видеть меньше духоты в C++ сообществе. Они повсюду и готовы прийти вам на помощь! 🙂 -- Практика, и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется. -- Не пытайтесь писать идеальный код. Ваша основная задача - написание РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером, пусть и неэлегантно. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем, ваш навык оттачивается, т.к. вы лучше чувствуете грамматику, увеличиваете свой словарный запас и т.д. -- Помните, что многие из опытных разработчиков, тоже испытывали проблемы и застревали в "очевидных" местах. Просто возььмите паузу, позанимайтесь чем-то другим, а через какое-то время возврщайтесь к проблеме. +### Про обучение +- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к самостоятельной работе и изучению материала из различных источников в течение продолжительного времени, прежде чем вы сможете пройти собеседование, и получить свой первый оффер. +- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники. +- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется. +- Не пытайтесь писать идеальный код. Ваша основная задача - написание РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем, ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д. - На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки использования классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах, это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях. -- Большинство проблем, с которыми вы столкнетесь, скорее всего уже были решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте переписать свой код более простым путем/пересоздать проект и т.д. Помните, вы должны изучать язык, а не бороться с рабочим окружением на первых пораъ. Борьба с коружением может вас привести к полному разочарованию. -- Если чувствуете, что не понимаете какую-то из тем, поищите альтернативные источники, которые объясняют эту же тему. Сегодня можно найти полно материала, и в виде статей, и виде роликов на youtube. Выберете и используйте наиболее комфортный формат для вас. -- Найдите единомышленников, которые также начинают свой путь и объедините усилия в изучении. Так вам будет интереснее погружаться в изучение языка, а также делиться знаниями и опытом друг с другом. Это вам также поможет выработать в себе навык командной работы. Времена "вольных художников" подошли к концу. Практически везде, вам придется работать в режиме командной игры. -- Большинство проблем проще искать на английском языке, но если ваш текущий уровень владения им не очень высокий - не мучайте себя. Так вы можете слишком быстро потерять веру в себя и разочароваться. Большинство проблем, с которыми вы столкнетесь, спокойно можно отыскать на русском языке. + +### Про мотивацию +- Учитесь в своем ритме, а также в любом возрасте! Не ведитесь на истории: "я программирую с пеленок", "паяльником владею с яслей", "вывожу из запоя/снимаю порчу при помощи ассемблера". Большинство подобных историй - это [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++! +- Большинство проблем, с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте переписать свой код более простым путем/пересоздать проект и т.д. Помните, вы должны изучать язык, а не бороться с рабочим окружением на первых порах. Борьба с окружением может вас привести к полному разочарованию и потере мотивации. +- Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-то другим, а через какое-то время возвращайтесь к проблеме. +- Найдите единомышленников, которые также начинают свой путь. Так вам будет интереснее погружаться в изучение языка, а также делиться знаниями и опытом друг с другом. Это также поможет выработать в себе навык командной работы. Времена "вольных художников" подошли к концу. Практически везде, вам придется работать в команде. + +### Про английский язык +- Большинство проблем проще искать на английском языке, но если ваш текущий уровень владения им не очень высокий - не мучайте себя. Так вы можете слишком быстро потерять мотивацию и разочароваться. Большинство проблем на первых порах, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке. - Если чувствуете, что ваш английский слабоват - то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие вас темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке. \ No newline at end of file diff --git a/SelfIdentification.md b/SelfIdentification.md index 78936f8..4972324 100644 --- a/SelfIdentification.md +++ b/SelfIdentification.md @@ -1,43 +1,43 @@ # А точно C++? -Первое, о чем действительно стоит подумать, прежде чем погружаться в изучение данного языка: а для чего, собственно, он вам нужен? +Первое, о чем действительно стоит подумать, прежде чем погружаться в изучение языка: а для чего он вам нужен? -Не смотрите на C++ в следующей парадигме: "Если вам дали в руки молоток, то всё вокруг становится гвоздями". Данный язык имеет свои ниши применения. Потому, прежде чем инвестировать свое время и силы в его изучение - попробуйте поизучать сферы применения и найти ту, которая заинтересует именно вас. Вот некоторый ряд причин, почему это стоит сделать "на берегу": +Не смотрите на C++ в следующей парадигме: "Если вам дали в руки молоток, то всё вокруг становится гвоздями". Данный язык имеет конкретные ниши применения. Потому, прежде чем инвестировать свое время и силы в изучение - попробуйте поискать и погрузиться в сферы применения языка и найти ту, которая заинтересует именно вас. Вот некоторый ряд причин, почему это стоит сделать "на берегу": -- Многие сферы разработки выглядят несколько иначе, в отличие от их романтизированного образа. Например, наиболее популярное направление среди новичков - разработка игр, имеет следующие темные стороны: кранчи (переработки в режиме - живем в офисе следующие полгода), отсутствие внятного менеджмента, работа в "стол"/на выброс и т.д. +- Многие сферы разработки выглядят несколько иначе, в отличие от их романтизированного образа. Например, популярное направление среди новичков - разработка игр, имеет следующие темные стороны: кранчи (переработки в режиме - живем в офисе следующие полгода), отсутствие внятного менеджмента, работа в "стол"/на выброс и т.д. -- Во многих сферах может быть также популярен и иной инструментарий, языки программирования. Возможно то, что вы хотите решать в интересующей вас сфере, успешно решается на том же Python, Java, etc. +- Во многих сферах может быть также популярен иной инструментарий, языки программирования. Например, в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему. -Потому, стоит внимательно присмотреться к той сфере, о которой вы имеете только общее представление. Возможно она окажется не столь заманчивой/интересной после детального погружения. +Потому, стоит внимательно присмотреться к той сфере, о которой вы имеете только общее представление. Возможно она окажется не столь заманчивой/интересной после детального погружения. Потратьте немного времени в исследовании и поиске той сферы, которая вам действительно понравится. -Второе, на что хочется обратить внимание: язык C++ требует больших временных инвестиций, а также сильную мотивацию. Его не получится выучить по универсальной формуле: "за 24 часа", "7 дней", "1 месяц". Если вы видите книгу с подобным обещанием - выбросите её и забудьте о ней. Таки придется взять какой-либо общепризныннй "кирпич" и прочитать его целиком, выполняя упражнения. А потом ещё несколько "кирпичей" поменьше, чтобы освоить признанные практики и подходы. По-другому освоить C++ вряд ли получится. На YouTube есть неплохие записи лекций по C++, но информации из них вряд ли хватит, чтобы освоить язык до промышленного уровня владения. +Второе, на что хочется обратить внимание: язык C++ требует больших временных инвестиций, а также сильную мотивацию. Его не получится выучить по универсальной формуле: "24 часа", "7 дней", "1 месяц". Если вы видите книгу с подобным обещанием - выбросите её и забудьте о ней. Вам придется взять какой-либо общепризнанный "кирпич" и прочитать его целиком, выполняя упражнения. А потом ещё несколько "кирпичей" поменьше, чтобы освоить распростарненные практики и подходы. По-другому освоить C++ вряд ли получится. На YouTube есть неплохие записи лекций по C++, но информации из них вряд ли хватит, т.к. чтобы освоить язык до промышленного уровня владения. -Вывод: Если вы не уверены в своих силах, или же не готовы к олдскульному методу обучения через книги, то возможно вам стоит сделать выбор в пользу более популярных языков программирования. В них вы также сможете найти массу интересных задач, и благополучно вкатиться в IT. К сожалению, C++ - это не тот язык, который позволяет подобные вольности. +**Вывод №1:** Если вы не уверены в своих силах, или не готовы к олдскульному методу обучения при помощи книг, то вам стоит сделать выбор в пользу более популярных языков программирования. В них вы также сможете найти массу интересных задач для себя в различных сферах. К сожалению, C++ - это не тот язык, который позволяет вольности. -# Я уже знаю Java/Python/etc., могу ли я сразу начать писать на C++? +# Я уже знаю C/Java/Python/etc., могу ли я сразу начать писать на C++? -У многих новичков складывается ощущение, что С++ изучается быстро и непринужденно, по ряду следующих причин: -- изучал в ВУЗе и выполнял на нем лабораторные работы; -- изучал C++ сразу после чистого Си или же в парадигме "Си с классами"; -- знаком с одним из ООП языков: Java, C#, etc. -- изучал Python или JavaScript и их исполнение ООП парадигмы. +У многих новичков складывается ощущение, что С++ изучается быстро и непринужденно по ряду следующих причин: +- наличие 1-2 семестра лекций в ВУЗе с выполнением лабораторных работ; +- знание языка Си или парадигмы "Си с классами"; +- знание одного из ООП языков: Java, C#, etc. +- знание Python, JavaScript и других распространенных языков. -Так вот, полученный опыт выше, крайне тяжело масштабируется на фундаментальное понимание языка C++. Недостаточно просто послушать семестр лекций, изучить чистый Си или почитать книгу по Python и сразу же перейти на C++. Почему же? +К сожалению, полученный выше опыт крайне тяжело масштабируется на промышленное примениние C++. Недостаточно просто послушать семестр лекций изучить Си/Python/etc. и сразу же отмасштабировать знания на C++. Почему же? -- Если говорить про классическое образование, чаще всего дается только базовый синтаксис, который позволит вам писать простенькие программки для выполнения несложных вычислений. Данных знаний и навыков недостаточно, чтобы выжить в промышленном программировании. +- Если говорить про образование в ВУЗах, чаще всего вам дается только базовый синтаксис языка, который позволит писать простенькие программки для выполнения несложных вычислений. Проще говоря - вас учат собрать калькулятор на коленке и не более. Данных знаний и навыков недостаточно, чтобы выжить в промышленном программировании. -- Если говорить о Си, он всего лишь является подмножеством в рамках C++ и не раскрывает всей функциональности и реальной мощи языка. Скорее, даже навредит новичкам на первых порах в понимании концепций, которые заложены в плюсах. Потому, если есть возможность проигнорировать Си, то сделайте это. Все необходимое для работы с этим подмножеством вы узнаете из базовых книг по C++. +- Если говорить о Си, он является подмножеством C++, но не раскрывает истинной идеи и сути C++. Есть популярное мнение, что сначала изучите Си, а потом переходите к плюсам. Так вот, скорее всего, это вам даже больше навредит на первых порах, а также породит путаницу между концепциями двух РАЗНЫХ языков. Ваша первостепенная задача - получить удовольствие от написания первых программ, а не следовать олдскульным канонам. Потому, если есть возможность проигнорировать Си, то просто сделайте это. Все необходимое для работы с подмножеством Си вы узнаете из книг по C++. -- Если же говорить об опыте в других языках: C++ - мультипарадигменный язык. Он содержит в себе сочетание разнообразных парадигм, таких как: процедурное, обобщенное, ООП и т.д. Конечно, это не значит, что полученный опыт в других языках можно смело выкидывать на помойку. Этот опыт облегчит понимание существующих концепций в плюсах, но не поможет уловить тонны нюансов в деталях языка. +- Если же говорить об опыте в других языках: C++ - мультипарадигменный язык. Он содержит в себе сочетание разнообразных парадигм, таких как: процедурное, обобщенное, ООП и т.д. Это не значит, что полученный опыт в других языках можно смело выкидывать на помойку. Он облегчит понимание существующих концепций в плюсах, но не поможет уловить тонны нюансов и деталей. -Подводя итог, лучший совет, который здесь можно дать - забыть всё, что вы знаете о других языках и C++ и начать его изучать с чистого листа. +**Вывод №2:** лучший совет, который здесь можно дать - забудьте всё, что вы знаете о других языках, и начните изучение C++ с чистого головой. :) # Как учиться? -Первое, что нужно усвоить для себя - вы и только вы отвечате за себя. Только вы заинтересованы стать профессионалом своего дела. Безусловно, вокруг вас полно разработчиков, которые с радостью вам помогут советом или подсказкой, но никто не придумает за вас задачи или конретную программу обучения. Ваш лучший друг в этом деле - Google и комьюннити. Ищите ответы на возникающие вопросы и учитесь учиться. К счастью, ваше будущее в IT, исключительно в ваших руках и упорстве. На сегодняшний день - эта сфера всё ещё награждает тех, кто упорно идет к своей цели. \ No newline at end of file +Главное, что нужно усвоить для себя - ВЫ и только ВЫ отвечате за себя, свое будущее и успех. Только вы заинтересованы стать профессионалом в выбранной вами сфере. Безусловно, вокруг вас полно людей, которые с радостью вам помогут советом, подсказкой или ответом на вопрос, но никто не придумает за вас конкретные задачи или программу обучения. Ваш лучший друг в этом деле - вы и Google. Учитесь учиться и искать ответы на возникающие вопросы. К счастью, ваше будущее в IT, исключительно в ваших руках и упорстве. Эта сфера награждает тех, кто упорно идет к своей цели. Удачи! \ No newline at end of file