# Pre-Junior C++

## Кто это?

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


## Что ожидается по умению написания кода?

- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.
- Умение пользоваться отладчиком при помощи IDE
- Понимание процесса компиляции и сборки программы на C++
- Способность написать приложение, содержащее арифметические или логические операции и алгоритмы, условия и циклы
- Умение написать приложение по работе со стандартным потоком ввода/вывода;
- Умение работать с указателями и ссылками
- Знание из какого вида памяти состоит приложение
- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция


## Что ожидается по общим навыкам?

- Желание учиться и впитывать новые знания
- Желание разбираться в возникающих проблемах
- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе

## Рекомендации и советы

### Про обучение
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала из различных источников, прежде чем вы сможете пройти собеседование, и получить свой первый оффер.
- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники. 
- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется.
- Не пытайтесь писать идеальный код. Ваша основная задача - написание много РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Это сродни изучению иностранных языков. Сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д.
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию в себе и своих спосбностях. В итоге вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачки.
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих порталов - отработать навыки применения классических алгоритмов и структур данных. Эти площадки спроектированы таким образом, чтобы максимально огородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.

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