Skip to content

Intro update #80

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: formatting-fix
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 32 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,71 +9,63 @@ The main goal of the course is to introduce the C++ language, its philosophy of
its distinctive features compared to other languages, and, in particular, manual memory management,
and its areas of use, such as high-performance applications, graphics, and system programming.
After successfully completing this course, you will be able to read and write C++ code
and develop your own programs of medium complexity.
and develop your own programs of medium complexity.

During this course, you will be developing a simple 2D arcade game.
In this game, the player controls a planet that moves through space, consuming smaller asteroids and dodging black holes.
With each new topic covered, you will improve the game by implementing new functionality based on the concepts you have learned.
In the end, you will get a working game, which you can further modify as you like.

Some of the topics covered in the course are listed below.
* Basic programming primitives in C++.
* Manual memory management.
* Object-oriented programming in C++.
* Template meta-programming and functional programming features of C++.
* Overview of the standard library.
* Multi-file projects and program compilation process overview.

The released part of the course covers C++ basic programming primitives.
* Basic programming primitives in C++.
* Manual memory management.
* Object-oriented programming in C++.
* Overview of the standard library.

Stay tuned for more parts of our course coming soon!

## Technical requirements

Before starting this course, check the following requirements.
1. Your computer needs to have a stable internet connection.
2. [Git](https://git-scm.com/) version control system needs to be installed on your computer.
3. Make sure that the path to the root folder of the course does not contain spaces, special characters, or non-latin characters.
1. Your computer needs to have a stable internet connection.
2. [Git](https://git-scm.com/) version control system needs to be installed on your computer.
3. Make sure that the path to the root folder of the course does not contain spaces, special characters, or non-latin characters.

The course is integrated into the [CLion IDE](https://www.jetbrains.com/clion/),
which has only a commercial license.
You may request a trial license in order to complete the course.
If you have already used your trial license before, please contact us at
[[email protected]](mailto:[email protected]).
The course is integrated into the [CLion IDE](https://www.jetbrains.com/clion/), which is now free for education and non-commercial use!

## Getting started

This course is available on JetBrains Marketplace and can be installed from the
[CLion](https://www.jetbrains.com/clion/) directly, but you can also
install the the [EduPlugin](https://plugins.jetbrains.com/plugin/10081-edutools), and open this course
in [course creator mode](https://plugins.jetbrains.com/plugin/10081-edutools/docs/educator-start-guide.html),
create a [course preview](https://plugins.jetbrains.com/plugin/10081-edutools/docs/educator-start-guide.html?section=C%2B%2B#preview_course) or
a [course archive](https://plugins.jetbrains.com/plugin/10081-edutools/docs/educator-start-guide.html?section=C%2B%2B#course_distribution).
install the [JetBrains Academy Plugin](https://plugins.jetbrains.com/plugin/10081-edutools), and open this course
in [course creator mode](https://plugins.jetbrains.com/plugin/10081-edutools/docs/educator-start-guide.html),
and create a [course archive](https://plugins.jetbrains.com/plugin/10081-edutools/docs/educator-start-guide.html?section=C%2B%2B#course_distribution).

## Course Content

The course is split into following modules,
with each module covering specific topics and aspects of the C++ language.
The course is split into the following modules,
with each module covering specific topics and aspects of the C++ language.


* __Warm Up__
* variables declaration and initialization
* primitive types: `int`, `double`, `char`, etc
* `std::string` type to work with text data
* basic input and output: `std::cin`, `std::cout`
* basic control-flow: `if`, `switch`, `for`, `while`, `do-while`
* basic control-flow: `if`, `switch`, `for`, `while`, `do-while`
* functions declaration and usage
* custom data types: `struct` and `enum`
* _(static)_ arrays
* random numbers
* program debugging in IDE

* __Memory Management__
* size of a type, `sizeof` operator
* address of variable, address of operator `&`
* pointers, `nullptr`, dereference operator `*`, pointer arithmetic
* primitive types, array and custom data type (`struct`, `enum`) memory layout
* function pointers
* memory regions: static, stack, and heap memory
* memory regions: static, stack, and heap memory
* dynamic memory allocation and freeing: `malloc` and `free`
* memory errors: address escape, out-of-bounds accesses, memory leaks, use after free, double free
* detecting memory errors in IDE with dynamic code analysis: valgrind and memory sanitizer
Expand All @@ -87,7 +79,7 @@ with each module covering specific topics and aspects of the C++ language.
* operators overloading
* classes and objects
* class fields and methods, `virtual` methods
* abstract classes and interfaces
* abstract classes and interfaces
* inheritance, polymorphism, and encapsulation
* visibility modifiers: `public`, `protected`, and `private`
* class invariants
Expand All @@ -105,5 +97,16 @@ with each module covering specific topics and aspects of the C++ language.
* resource acquisition is initialization idiom (RAII)
* smart pointers: `std::unique_ptr`, `std::shared_ptr`, and `std::weak_ptr`

* __TBA__ ...

* __Standard Library Essentials__
* basic `template` introduction: syntax, template argument deduction, template specialization
* type inference via `auto` and `decltype`
* type aliases: `using` and `typedef`
* `std::vector` container and its operations
* `std::string` and its optimizations
* sequential containers, such as `std::forward_list`, `std::deque`, `std::list`, and `std::array`
* sequential container adapters, such as `std::stack`, `std::queue`, and `std::priority_queue`
* associative containers, such as `std::set`, `std::map`
* unordered associative containers, such as `std::unordered_set`, `std::unordered_map`
* iterators and their types
* STL algorithms
* input-output streams
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Besides the basic language functionality, every C++ compiler provides access to
data structures, and other generic classes and functions.
We will cover the following topics:
- `std::vector` functionality
- `std::string` and it's optimizations
- `std::string` and its optimizations
- Sequential containers, such as `std::forward_list`, `std::deque`, `std::list`, and `std::array`
- Sequential container adapters, such as `std::stack`, `std::queue`, and `std::priority_queue`
- Associative containers, such as `std::set`, `std::map`
Expand Down
11 changes: 3 additions & 8 deletions course-info.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,15 @@ summary: "The course is designed for beginners who want to learn the basics of t
\ end, you will get a working game, which you can further modify as you like. </p>\n\
<p> Some of the topics covered in the course are listed below. <ul> <li> Basic programming\
\ primitives in C++. </li> <li> Manual memory management. </li> <li> Object-oriented\
\ programming in C++. </li> <li> Template meta-programming and functional programming\
\ features of C++. </li> <li> Overview of the standard library. </li> <li> Multi-file\
\ projects and program compilation process overview. </li> </ul> </p>\n<p> The released\
\ part of the course covers C++ basic programming primitives. Stay tuned for more\
\ programming in C++. </li> <li> Overview of the standard library. </li> </ul> </p>\n<p> Stay tuned for more\
\ parts of our course coming soon! </p>\n<p> Before starting this course, check\
\ the following requirements. <ol> <li> Your computer needs to have a stable internet\
\ connection. </li> <li> <a href=\"https://git-scm.com/\"> Git </a> version control\
\ system needs to be installed on your computer. </li> <li> Make sure that the path\
\ to the root folder of the course does not contain spaces, special characters,\
\ or non-latin characters. </li> </ol> </p>\n<p> The course is integrated into the\
\ <a href=\"https://www.jetbrains.com/clion/\"> CLion IDE </a>, which has only a\
\ commercial license. You may request a trial license in order to complete the course.\
\ If you have already used your trial license before, please contact us at <a href=\"\
mailto:[email protected]\">[email protected]</a>. </p> "
\ <a href=\"https://www.jetbrains.com/clion/\"> CLion IDE </a>, which is now free for\
\ education and non-commercial use! </p> "
programming_language: C/C++
environment: GoogleTest
content:
Expand Down