# Pre-Junior C++

## Who is it?

It is someone who is familiar the syntax of the language and can write a simple program without third-party libraries. The program performs simple procedures such as:
- arithmetic operations
- file manipulation: either reading or writing
- wait for the keyboard input
- display the result or other data in the console
- etc.

## What coding abilities are expected?

- Create and build a small working C++ project using one of the IDEs: Visual Studio, Qt Creator, etc.
- Use a debugger via the IDE
- Understand the compilation and linking process of a C++ program
- Write an application making use of arithmetic and logical operations, conditionals, and loops
- Write an application using the standard input/output streams
- Manipulate pointers and references
- Know the types of memory used in an application
- Understand basic OOP in the frame of C++: inheritance, polymorphism, encapsulation 

## What general skills are expected?

- Desire to learn and acquire new knowledge
- Desire to solve encountered problems
- Ability to compose a query to find the solution to a problem using a search engine or the corresponding literature

## Tips and recommendations

### Studying

- There is no silver bullet to help you learn C++ in one day/week/month. Get ready for the lengthy unsupervised learning of all kinds of material before you are able to pass the interview to get your first job offer.
- If you feel that you don't understand some topic, look for alternative sources.
- Practice and only practice will let you harness C++! You'll forget most of what you read or hear without regular coding.
- Don't try to write perfect code. Your main goal is to write a pile of code that WORKS, i.e. does exactly what is required. You need to learn to communicate with the computer. It's similar to studying foreign languages. First you talk sloppily, but then you refine your skills, you get a better feel of the grammar, you expand your vocabulary, and so on.
- Don't jump at a huge problem at once - like creating your own game. In the beginning you are likely to lack the knowledge and experience to cope with the task alone. This approach frustrates quickly and leads to the disappointment in oneself and one's abilities, forcing to abandon education. Better progress from simple to complicated, gradually inventing more and more difficult tasks for yourself.
- Don't focus on Leetcode and Codewars and other similar resources at first. The purpose of these portals is to refine the skill of the application of classic algorithms and data structures. These playgrounds are designed to abstract away the details of the programming languages. This won't benefit you considerably in the beginning, it's better to focus on the language itself and its capabilities.

### English language

- It's easier to look for the solutions in English, but don't torture yourself if your current language proficiency isn't high enough. You might get demotivated too soon. Most of the problems you are likely to encounter in the beginning are searchable in your native language.
- If you feel that your English is insufficient, start studying it through the use of simpler and more pleasant means: series, video games, fiction, news outlets or articles you're interested in. Several months are enough to refine your skill of English comprehension.
