Added Emojis to all pages and their titles/subtitles (#74)

This commit is contained in:
Evgenii
2023-01-31 23:59:03 +01:00
committed by GitHub
parent a4c294e458
commit 9d4d591a04
40 changed files with 191 additions and 194 deletions

View File

@@ -1,4 +1,4 @@
# Application areas of C++
# :clipboard: Application areas of C++
The C ++ language has a wide range of applications. It is mainly used if high performance or low memory consumption is required. Below you can find materials that describe in more detail the application areas of C++:
- [What Is C++ Used For? Top 12 Real-World Applications And Uses Of C++](https://www.softwaretestinghelp.com/cpp-applications/)

View File

@@ -1,6 +1,6 @@
# Junior
# :yum: Junior
## Motivation and experience
## :innocent: Motivation and experience
- [Robert Martin - The clean coder](https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073)
@@ -15,14 +15,14 @@
Despite the book ages, it might be called a developer's "bible". It systemizes all knowledge of how the IT industry looks like. This book also proposes tons of useful advice: how to grow and become a 1-st class professional.
## Computer Science
## :bar_chart: Computer Science
- [Thomas H. Cormen - Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844)
This book is a perfect continuation after "Grokking algorithms". This book introduces common algorithms of sorting, working with lists, etc., but gives more details. It is written in a friendly way. It will be helpful to prepare yourself for deep diving in algorithms area.
## C++
## :pencil: C++
- [Scott Meyers - Effective C++: 55 Specific Ways to Improve Your Programs and Designs](https://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876)
@@ -37,7 +37,7 @@
This tiny book describes common best practices of code writing around commercial projects. It's an aggregation of experience collected from different companies. This book was also a foundation for the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). You can immediately visit C++ Core Guidelines, but it's still recommended starting with this book first. It will help you to get a first impression of code guidelines spread around projects. When it's done, you can visit the C++ Core Guidelines website and get the latest approved approaches.
## Hard skills
## :electric_plug: Hard skills
- [Eric Freeman, Elisabeth Robson - Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124)

View File

@@ -1,6 +1,6 @@
# Middle
# :sunglasses: Middle
## C++
## :pencil: C++
- [Scott Meyers - Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14](https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996)
@@ -22,7 +22,7 @@
The newest and relevant book about C++ metaprogramming (templates). This giant work describes relevant technics of templates foundations that were added in the newest standards, including C++17. If you need to write generic and parameterized code, this book will become a "bible" to you. You will get knowledge either about the basics of templates or tones of nuances related to different technics.
## Optimization for C++ applications
## :bicyclist: Optimization for C++ applications
- [Kurt Guntheroth - Optimized C++: Proven Techniques for Heightened Performance](https://www.amazon.com/Optimized-Proven-Techniques-Heightened-Performance/dp/1491922060)
@@ -32,7 +32,7 @@
Practical-oriented guides that provide comprehensive information about the potential optimization possibilities of applications developed in C++, or related to interaction with the CPU, memory, etc.
## Hard skills
## :electric_plug: Hard skills
- [Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides or "Gang of Four" - Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612)
@@ -51,7 +51,7 @@
The short practical guide on how to approach writing programs using finite machines theory. It will be difficult to find a simpler and more elegant description of the theory of finite machines and its practical application.
## Operating systems
## :zap: Operating systems
- [Andrew S. Tanenbaum - Modern Operating Systems](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X)
@@ -70,7 +70,7 @@
This article is a good overview: how PC memory works and why it works in the described way. It shows not only high-level representation, but low-level aspects are also described (if you have an intention to dive in this area).
## Computer networks
## :globe_with_meridians: Computer networks
- [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958)

View File

@@ -1,11 +1,11 @@
# Books and sources
# :books: Books and sources
These articles will help you find your way to study C++. All books are divided according to suitable grades. It's recommended to check suitable books corresponding to your current grade and choose those that fit you the best. The presented library does not concentrate on books related to any specific domain area or highly specialized areas. The idea of this project is to help people acquire generic knowledge about C++ and software development. If you are looking for specified materials, we recommend you contact experts in an area you are interested in.
These articles will help you find your way to study C++. All books are divided according to suitable grades. It's recommended to check suitable books corresponding to your current grade and choose those that fit you the best. The presented library does not concentrate on books related to any specific domain area or highly specialized areas. The idea of this project is to help people acquire generic knowledge about C++ and software development. If you are looking for specified materials, we recommend you contact experts in an area you are interested in.
- [PreJunior](PreJunior.md)
- [Junior](Junior.md)
- [Middle](Middle.md)
- [Senior](Senior.md)
- :blue_book: [PreJunior](PreJunior.md)
- :green_book: [Junior](Junior.md)
- :orange_book: [Middle](Middle.md)
- :closed_book: [Senior](Senior.md)
---

View File

@@ -1,13 +1,13 @@
# Pre-Junior
# :alien: Pre-Junior
## Motivation and experience
## :innocent: Motivation and experience
- [Chad Fowler - Passionate Programmer](https://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic-ebook/dp/B00AYQNR5U)
This book can be called a classic in the motivation genre for beginners. Chad Fowler tries to share his experience: how to become a professional programmer and ride the IT industry wave.
## Computer Science
## :bar_chart: Computer Science
- [Wladston Ferreira Filho - Computer Science Distilled: Learn the Art of Solving Computational Problems](https://www.amazon.com/Computer-Science-Distilled-Computational-Problems/dp/0997316020)
@@ -22,7 +22,7 @@
The book contains a brilliant introduction to the world of Computers Science algorithms and data structures for beginners. It also contains a list of tasks that will help you to implement your first algorithms.
## C++
## :pencil: C++
- [Stephen Prata - C++ Primer Plus](https://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402)
@@ -37,7 +37,7 @@
This book is an excellent one for beginners. Each chapter of the book widely describes a different foundation aspect of the language. When it's done, it offers you a set of exercises to train yourself. The book explains the most fundamental topics that can be reused in the future to study new language mechanisms. It's recommended to pick up this book after Prata's, Lippman's books or in parallel with them.
## Hard skills
## :electric_plug: Hard skills
- [MSDN](https://docs.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-160)

View File

@@ -1,11 +1,11 @@
# Senior
# :smiling_imp: Senior
## C++
## :pencil: C++
- There are no concrete advice about books for seniors. At this grade, you should already know the foundations of C++ well enough. There is only one challenge for you: to monitor the latest standards and new features for C++ or tools for C++ ecosystem.
## Team management
## :muscle: Team management
- [J. Hank Rainwater - Herding Cats: A Primer for Programmers Who Lead Programmers ](https://www.amazon.com/Herding-Cats-Primer-Programmers-Lead/dp/1590590171)
@@ -28,7 +28,7 @@
The classic book about the logical errors of human thinking. It is useful because it will help to take a more rational approach to making various decisions, taking into account cognitive distortions in human thinking. This is an extremely necessary skill for specialists who are in the area of making key decisions. The book may seem rather boring, in which case you can try to look for alternative works that tell about cognitive distortions.
## Requirements and software architecture
## :clipboard: Requirements and software architecture
- [Karl Wiegers - Software Requirements](https://www.amazon.com/Software-Requirements-Developer-Best-Practices/dp/0735679665)

View File

@@ -1,6 +1,6 @@
# Community sources
# :gem: Community sources
## C++ General
## :bookmark_tabs: C++ General
- [CppReference](https://en.cppreference.com)
- [CPlusPlus](https://www.cplusplus.com/reference)
@@ -9,28 +9,28 @@
- [News from the C++ Standardization Committee](https://isocpp.org/)
- [C++ Online Compiler Explorer](https://gcc.godbolt.org)
## Popular C++ conferences
## :satellite: Popular C++ conferences
- [C++ Russia](https://cppconf.ru/en)
- [Cpp Con](https://cppcon.org/)
- [Meeting C++](https://meetingcpp.com/)
- [C++ Now](https://cppnow.org/)
## C++ Conference YouTube Channels
## :tv: C++ Conference YouTube Channels
- [C++ Russia](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA)
- [Cpp Con](https://www.youtube.com/user/CppCon)
- [Meeting C++](https://www.youtube.com/user/MeetingCPP)
- [C++ Now](https://www.youtube.com/user/BoostCon)
## Alternative sources for learning C++
## :exclamation: Alternative sources for learning C++
- [Hackingcpp.com](https://hackingcpp.com/index.html) - The all-in-one web portal with diffenent collections of materials related to C++: books, cheat sheets, recordings from conferences, etc.
- [Awesomecpp.com](https://awesomecpp.com) - The collection of different sources about the C++.
- [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e)
- [Learncpp.com](https://www.learncpp.com/) - It is a free website devoted to teaching you how to program in C++. It's being updated regularly.
## Other interesting repositories
## :star: Other interesting repositories
- [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features)
- [Collection of libraries and frameworks for C++ ](https://github.com/fffaraz/awesome-cpp)

View File

@@ -1,4 +1,4 @@
# C++ - It's Not Rocket Science
# :space_invader: C++ - It's Not Rocket Science
Modern C++ is much simpler than it is thought to be. The language has changed a lot during all the years of transformation, and gained the capabilities that allow writing safe and effective code. No need to think about memory leaks when using the primitives of the latest standards. The compiler has also become much smarter. It can apply a tremendous amount of optimizations to your code, delivering the maximum performance. It is still possible to optimize the code by manual tweaks and tricks, though.
@@ -14,7 +14,7 @@ To get started with C++ one needs a basic set of school knowledge:
Despite all the history behind C++ we believe that its modern version is much simpler that it used to be.
Don't be afraid to learn it and good luck!
Don't be afraid to learn it and good luck! :dizzy:
---

View File

@@ -1,10 +1,10 @@
# Junior C++
# :yum: Junior C++
## Who is it?
## :question: Who is it?
It is a developer who has theoretical knowledge of software development and little practical experience in personal/educational projects. In addition, may have a theoretical understanding of how the industry works. Junior can perform simple tasks within a real project under the guidance of experienced colleagues.
## What coding abilities are expected?
## :computer: What coding abilities are expected?
- Ability to read documentation of libraries, frameworks, etc.
- Ability to collect and connect third-party libraries to the project
@@ -13,14 +13,14 @@ It is a developer who has theoretical knowledge of software development and litt
- Write tests to the code
- Basic knowledge and experience with Git
## What general skills are expected?
## :bust_in_silhouette: What general skills are expected?
- Fast learning
- Ability to independently search for information on the Internet, books, etc.
- Ability to ask colleagues questions in a timely manner
- Ability to work in a team
## Tips and recommendations
## :eyes: Tips and recommendations
- Try to find a couple of enthusiasts at your company and join them. They can be your source of knowledge and experience.
- Ask questions to senior colleagues. There are no stupid questions, there are stupid answers.

View File

@@ -1,13 +1,13 @@
# Middle C++
# :sunglasses: Middle C++
## Who is it?
## :question: Who is it?
It's a developer that understands the technical context of development and has abilities to create a design and a solution for functionality that is a part of an application or component. The design also can be created even in case of an insufficient amount of requirements. This person also has a commercial experience background and is familiar with common business processes of development.
In general, the middle developer solves technical tasks. In comparison with a Junior, this person can do work without any help or minor assistance from a Senior/Lead engineer.
## What coding abilities are expected?
## :computer: What coding abilities are expected?
- A compiler and a programming language is not a "magic box" anymore. Any obstacles or surprises can be solved by generating hypothesis, validation, and confirmation/rejection.
- Understands foundation concepts of C++, knows about other languages, and can compare them with each other
@@ -23,7 +23,7 @@ In general, the middle developer solves technical tasks. In comparison with a Ju
- Has more knowledge on Computer Science foundations (data structures, graphs, finite machines, algorithms)
## What general skills are expected?
## :bust_in_silhouette: What general skills are expected?
- Can personally make decisions based on technical knowledge/background of a project
- Understands when a solution is "good enough" to prevent overengineering
@@ -33,15 +33,15 @@ In general, the middle developer solves technical tasks. In comparison with a Ju
- Helps other teammates
## Tips and recommendations
## :eyes: Tips and recommendations
### Studying
### :arrow_forward: Studying
- It's time to improve soft skills if you want to become a Senior developer. Technical expertise goes a bit behind and an ability to build dialogs and find compromises with others go first. A good developer is not the one who writes a lot of code but the one who understands how to solve a problem efficiently with minimal loses. It is better if you can solve a problem without any new code. It is ideal if you can even remove tens/hundreds lines of code.
- The middle role is most difficult for studying. You need to think not only about hard skills but also about soft skills and business-problem solving. It means you're asked to concentrate on both aspects simultaneously either about hard skills or soft skills.
- Good attention to soft-skills increases the probability to become a high-demand professional on the marker. You can try to grow as a highly specialized developer and ignore soft skills, but first - this kind of specialists are not often needed in business problems, second - competition among such kinds of developers is extremely high. If you're ready to compete with the best specialists on the market then don't listen to us and bravely go forward, but we still recommend thinking about skills diversity.
### Experience
### :arrow_forward: Experience
- The main trap of many middle developers: they're "fanboys" of technologies, frameworks, design patterns, or methodologies. Try to be more pragmatic while solving tasks on your project. Don't try to intake all the newest ideas only to play with them or get "yet another skill" to your CV. The Middle role is a "pandora box" of overengineering or "diving" around frameworks.
- If you really think a library/framework is needed for a project - discuss it with a Senior or Lead engineer first. Propose them to create a "proof of concept" where you will be able to check all hypotheses in action before intake a new dependency. Please, don't try to do it in secret from your team! It's fun for you, but it's a "disaster" for your team in the future. It increases maintenance costs and might bring unforeseen consequences.

View File

@@ -1,4 +1,4 @@
# Developers grading
# :chart_with_upwards_trend: Developers grading
> Grading - it's an approach to classify developers by their set of skills and experience. By means of grading it's possible to understand how to differentiate tasks difficulty with an expected set of skills to deal with it.
@@ -16,10 +16,10 @@ Each company has its own vision of developers grading and a set of skills/respon
## Level Descriptions
You can read these articles to get understanding about each level, and its common expectations:
- [Pre-Junior C++](PreJunior.md)
- [Junior C++](Junior.md)
- [Middle C++](Middle.md)
- [Senior C++](Senior.md)
- :alien: [Pre-Junior C++](PreJunior.md)
- :yum: [Junior C++](Junior.md)
- :sunglasses: [Middle C++](Middle.md)
- :smiling_imp: [Senior C++](Senior.md)
---

View File

@@ -1,6 +1,6 @@
# Pre-Junior C++
# :alien: Pre-Junior C++
## Who is it?
## :question: 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
@@ -9,7 +9,7 @@ It is someone who is familiar the syntax of the language and can write a simple
- display the result or other data in the console
- etc.
## What coding abilities are expected?
## :computer: 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
@@ -20,15 +20,15 @@ It is someone who is familiar the syntax of the language and can write a simple
- 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?
## :bust_in_silhouette: 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
## :eyes: Tips and recommendations
### Studying
### :arrow_forward: 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.
@@ -37,7 +37,7 @@ It is someone who is familiar the syntax of the language and can write a simple
- 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
### :arrow_forward: 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.

View File

@@ -1,23 +1,23 @@
# Senior C++
# :smiling_imp: Senior C++
## Who is it?
## :question: Who is it?
It is a developer who understands not only the technical, but also the business context and is able to create a design and solution for a component/application/system taking them into account. In addition, Senior helps other team members to grow and follows the technical trends of the development world.
## What coding abilities are expected?
## :computer: What coding abilities are expected?
- Able to translate tasks from business language to development language and decompose tasks
- Able to conduct a dialogue with the business and explain technical details and difficulties to people outside the team
- Able to not only make a design decision, but also create a component/application architecture
- Understands and uses architectural principles
## What general skills are expected?
## :bust_in_silhouette: What general skills are expected?
- High communication skill
- Able to independently collect requirements, if necessary
- Helps develop team members
## Tips and recommendations
## :eyes: Tips and recommendations
Depending on the specifics of the company and on your desires, the path of further development lies either in the learning of recent technologies and technical skills required in your chosen field of knowledge (for example, special sections of mathematics, physics, etc. - the path of a technical expert), or in the field of management and interaction with people (tech lead, team lead, PM, etc.). Choose wisely. 🙂

View File

@@ -1,8 +1,8 @@
# How to study?
# :mortar_board: How to study?
The main thing that can be advised is that you should understand that only you are responsible for your development. Of course, you will find many enthusiasts around who will be happy to help you with advice, but no one will produce specific tasks or training programs for you. The best friend in this business is you, Google search, and the tutorials.
## How to study new C++ 11/14/17/20 standards?
## :question: How to study new C++ 11/14/17/20 standards?
Beginners can be advised not to focus too much on standards at the beginning of their journey. Pick up books from the [Beginner's List](Books/PreJunior.md) and learn the fundamentals. Modern books for beginners contain little information about the capabilities of the C++ 11 and newer standards. At first, you should not focus on the new language standards.
@@ -17,7 +17,7 @@ If with fixing problems and with syntactic sugar everything is obvious (in the f
C++ develops in the same way as all other languages: it takes some popular idea from computer science or a successful feature from other languages and introduces it into the language. It is important to study such constructs and use them, if necessary, but in the beginning it is necessary to study the foundations that were created by the older standards (C++11/C++14). They are described in most modern books for beginners.
## Where to get an overview of the latest C++ standards features?
## :question: Where to get an overview of the latest C++ standards features?
- Presentations among [C++ conferences](CommunitySources.md)
- On the main page of the [CppReference](https://en.cppreference.com/w/cpp) you will find links to pages with overview lists of the newest features
@@ -26,7 +26,7 @@ C++ develops in the same way as all other languages: it takes some popular idea
- Overview videos on YouTube by community
- [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features)
## Training recommendations
## :eyes: Training recommendations
- Learn at your own pace and at any age! Do not get fooled by stories: "I'm a programmer from the cradle". Most of these stories are [survivorship bias](https://en.wikipedia.org/wiki/Survivorship_bias) or an attempt to flatter their vanity at your expense. You have enough ability to learn programming from scratch including C++!
- Most of the problems you run into are likely already solved. If you cannot find the answer on the Internet, try reformulating your request in a different way. Eventually, you will come to the right answer. If the answer still didn't come, then try to solve the problem in a simpler way.

View File

@@ -1,46 +1,46 @@
# Myths and Legends of C++
# :ghost: Myths and Legends of C++
## C++ is dead, it's impossible to code anything with it
## :question: C++ is dead, it's impossible to code anything with it
C++'s not dead.
C++ made its way to the top of a wide range of ratings of programming languages, and it is scoring, moreover, popularity points, for example in the [Tiobe](https://www.tiobe.com/tiobe-index/) index. C++ got its notorious "dead language" badge during the noughties, while it was dormant and the language standardization committee fell off the radar. But the language is experiencing a renaissance since the C++11 standard. It is arduously getting new features and functionality, every three years. Many problems claimed by the "dead C++ witnesses" have been solved, but since such specialists have stopped developing using C++ - or got a smattering of C++ during courses (from those very "witnesses") - they continue repeating and reiterating the myths and legends of the horrors of C++.
## Real programmers learn C++ using Linux/Vim/gcc
## :question: Real programmers learn C++ using Linux/Vim/gcc
If you are unfamiliar with the aforementioned combo, we recommend you concentrate on learning the basics of C++ alone. We also suggest you start developing your first applications using Microsoft Visual Studio IDE (see [PreJunior Books](Books/PreJunior.md) for the details).
Choosing the hard way looks cool, but there is a high chance that the volume of the information needed to build the "Hello World" using Linux + Vim + gcc would be overwhelming. It is fraught with an early frustration and disaffection with programming as a whole. Try to follow the path from simple to complicated. Novices don't try to lift the heaviest weights during the first workout because they know what it might lead to. The same rule applies to education. You can try developing under Linux once you are comfortable with the language. But it's a different story altogether...
## You'd better master C/Assembler/etc. before learning C++
## :question: You'd better master C/Assembler/etc. before learning C++
No, no, and no again!
No, no, and no again!
This statement continues to live due to two widespread scenarios: it's how they used to teach in the university, and the members of the "Old Guard" went through a similar path. Modern C++ doesn't require such torture. This language is self-sufficient and can be learned with no background whatsoever. It's more likely that learning the "C -> C++" way you get a mess in your head and a firm desire to write C++ in the "C with classes" style.
## Learn C++ using the book by Stroustrup
## :question: Learn C++ using the book by Stroustrup
A highly damaging thesis taking origin from the "Old Guard" or someone born with a keyboard in hand.
Those who had extensive experience of development in other languages (C, Fortran, Delphi, etc.) and transitioned to C++ are most likely to give this piece of advice. Stroustrup wrote this book like a reference ([The C++ Programming Language](https://www.amazon.com/C-Programming-Language-4th/dp/0321563840)), therefore one needs to use it in the appropriate manner, which requires some knowledge of the language. Better look at the [Books](Books/Overview.md) section, you'll find books for any level of language proficiency.
## Learn C++ using the Standard only
## :question: Learn C++ using the Standard only
Another snobbish statement.
First, the modern C++ standard exceeds 2000 pages. Secondly, the access to the up-to-date version requires payment. Thirdly, the standard isn't composed in a friendly way. Those who learned the language using its standard can be pat on the back, but we do not recommend abusing oneself this way. Once again, better look at the [Books](Books/Overview.md) section, you'll find books for any level of language proficiency.
## Undefined Behavior haunts the developer everywhere
## :question: Undefined Behavior haunts the developer everywhere
More likely no than yes.
Modern C++ and the tooling emerged around the language allow to avoid the lion's share of the problems related to the undefined behavior. We can give a rather simple piece of advice: when hesitant what a particular construct does, read about it on [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) or other dedicated resources. If still in doubt after the reading, try rewriting the code in a simpler manner to avoid the undefined behavior. In simplicity there lies a great power.
## One needs to manage memory manually, there is no garbage collection in the language
## :question: One needs to manage memory manually, there is no garbage collection in the language
This is another urban legend from the "Old Guard" that had stopped writing C++ before C++11 or those who superficially learned it in university disregarding the latest standards. Modern C++ contains a set of primitives in its standard library which are responsible for the automatic memory allocation and deallocation. The manual memory management fell by the wayside. Many teams and companies even have the rule: "No raw pointers". Once again, do not neglect the modern tools and sanitizers: they can detect possible memory leaks at the source code level.
## C++ is legacy area only
## :question: C++ is legacy area only
Partially it's true, but it's good to note that it's applicable for other languages. Even with a modern stack, developers can produce code that will become legacy very fast. The code quality mainly depends on the technical culture of a team and its pioneers, not a language. The majority amount of legacy code is produced under the human factor: developer's grade and skill set, work ethic, wrong estimations, etc. Nowadays, you can meet a lot of projects working 24/7 for years and written in C++. Such kinds of systems are often the business foundation of revenue. In this case, it's really dangerous to perform any huge changes in short time. The developers make any changes with high attention to any regression. But don't think that legacy projects can not help you to improve yourself. In fact, these projects can give you a challenge that can bring you widespread experience in different areas: code reading, reverse-engineering, testing, designing of SW architecture, automation, requirements gathering, etc.

View File

@@ -1,11 +1,11 @@
# Pet-projects
# :telescope: Pet-projects
The pet-projects are a great chance to gain hands-on experience when learning a programming language or libraries and/or frameworks. The pet-projects can also become a starting point for interviews and an invitation to dialogue if you start your career.
There are often difficulties with finding and choosing the idea of a pet-project. We tried to put together a small collection of links and ideas that can be a start for your inspiration. After reading it, you will be able to choose the most suitable idea or it will inspire you to some idea of your own!
## External links
## :arrows_counterclockwise: External links
* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)
@@ -20,9 +20,9 @@ The repository contains a collection of pet projects collected for various progr
Roulette with ideas for pet projects. You set up the expected complexity of the project and run the roulette. Then randomness will decide for you what task you will have to solve :)
## The list of pet-project ideas
## :boom: The list of pet-project ideas
### Games
### :arrow_forward: Games
Below is a list of classic video games that do not contain complex AI or dynamic world generation. You can implement one of the following games, and then refine additional functionality. As a graphics library, you can use [SFML](https://www.sfml-dev.org/). This is an easy-to-use library that provides a sufficient set of features for creating simple graphical interfaces for 2D or 2.5D games using [sprites](https://en.wikipedia.org/wiki/Sprite_(computer_graphics)). If you want to do something more complex where physics is applied, you can start with simple engines, for example: [Box2D](https://box2d.org/) or learn more advanced ones: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) etc. Don't forget about the rule: "from simple to complex." Start with a simple one, and gradually increase the difficulty.
@@ -47,7 +47,7 @@ It's recommended reading the following sources, which contain more information a
---
### Applications
### :arrow_forward: Applications
When creating an application, start with the simplest implementation of a console application. After each completed step, set a more complex task, for example: add a graphical interface for the application, teach the application to request data from the source using an http request, and then write/read the received data to a test file/database, etc. Do not forget about the principle: "from simple to complex."
@@ -60,7 +60,7 @@ When creating an application, start with the simplest implementation of a consol
---
### Student applications
### :arrow_forward: Student applications
The following examples are more suitable for students who are passing or recently passed basic disciplines: linear algebra, analytical geometry, mathematical analysis, physics, etc. Tasks for the application of the studied theory will help to simultaneously "catch two birds with one stone": to consolidate the studied theory in practice and to practice programming. This path is not closed to others, but it is obviously easier for students, because knowledge of academic disciplines is still fresh.

View File

@@ -1,4 +1,4 @@
# Why and what for the roadmap has been created?
# :flashlight: Why and what for the roadmap has been created?
C++ is actively used in many commercial projects. Throughout its history the language has undergone big changes. It made C++ much more convenient for day-to-day use. But a lot of speculation, myths and fears still hover around the language to scare off a large number of people who want to learn it. Our goal is to help beginners dispel the myths about the complexity of C++ and to help them to find their way to learn the language.

View File

@@ -1,4 +1,4 @@
# Are you sure that you need C++?
# :mag: Are you sure that you need C++?
The first thing about which you should really think is: Why do you need to learn C++?
@@ -8,9 +8,9 @@ The language has specific areas of application. Try to search and dive into them
- It might be that in the area that you are interested in a different language might be popular. For example, in machine learning, the most common language is Python and specialized libraries for it.
# I already know C/C#/Java/Python and so on. Can I already start to work using C++?
# :question: I already know C/C#/Java/Python and so on. Can I already start to work using C++?
Yes and no. :)
Yes and no. :)
Computer science basics will help you for sure. For example, understanding procedural programming, OOP or other concepts and general knowledge. But you shouldn't rely on them completely. The most common case that newbies often find themselves in is that they try to write in C++ in the paradigms of other languages. For example, C developers tend to write C++ programs in procedural style, or they tend to think that C++ is "C with classes".

View File

@@ -1,8 +1,8 @@
# Language toolkit
# :triangular_ruler: Language toolkit
Newborn developers have a limited understanding of the tools available, which make it easier to work with code, as well as increase efficiency and protect against many mistakes. All these tools are not a silver bullet for difficulties that language has for you, but they significantly smooth out the corners. Below is a list of common and popular tools recognized by developers around the world. This list is only a small part of the available tools. Over time, you will begin to better navigate them and find something new for yourself.
## Text editors
## :page_facing_up: Text editors
* **Visual Studio Code**
@@ -22,7 +22,7 @@ Newborn developers have a limited understanding of the tools available, which ma
Lightweight editor for text files and source code. Supports syntax and highlighting of common programming languages. Compared to Visual Studio Code, it is convenient to use for quickly opening and viewing files. Due to its lightness, it is comfortable to work with a large number of text files.
## IDE (Integrated Development Environment)
## :open_file_folder: IDE (Integrated Development Environment)
* **Microsoft Visual Studio IDE**
@@ -59,7 +59,7 @@ Newborn developers have a limited understanding of the tools available, which ma
Powerful multiplatform IDE from Russian company JetBrains. Like other IDEs, it contains a complete set of tools for comfortable software development. Convenient for cross-platform development in both C and C++.
## Extensions
## :flashlight: Extensions
* **JetBrains ReSharper C++**
@@ -84,7 +84,7 @@ Newborn developers have a limited understanding of the tools available, which ma
Application/extension for distributed compilation of projects. It unites all dev workstations into a single network which provides a possibility to use dozens of machines to assemble and compile the source code. This allows you to speed up the build of large projects.
## Package managers and build systems
## :electric_plug: Package managers and build systems
* **Cmake**
@@ -110,7 +110,7 @@ Newborn developers have a limited understanding of the tools available, which ma
Project build manager for C and C++ applications. The main advantages that this manager claims: quick project assembly. Supports cross-platform development, supports all popular compilers.
## Code analyzers
## :mag: Code analyzers
* **PVS Studio**
@@ -138,7 +138,7 @@ Newborn developers have a limited understanding of the tools available, which ma
A set of tools that can help you investigate a variety of problems while the application is running: memory leaks, brake profiling, etc. It suits various Linux distributions.
## Git clients
## :floppy_disk: Git clients
* **SmartGit**