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**

View File

@@ -1,4 +1,4 @@
# C++ Developer Roadmap
# :bulb: C++ Developer Roadmap
## Additional languages: [Русский](Russian/README.md)

View File

@@ -1,4 +1,4 @@
# Области применения C++
# :clipboard: Области применения C++
У языка С++ довольно широкая сфера применения. Преимущественно его используют там, где требуется высокая производительность или низкое потребление памяти. Ниже представлены материалы, в которых более подробно рассказывается о сферах применения C++:
- [Язык программирования С++. Антон Полухин](https://www.youtube.com/watch?v=pic8c9_snJw)

View File

@@ -1,6 +1,6 @@
# Junior
# :yum: Junior
## Мотивация и опыт
## :innocent: Мотивация и опыт
- [Роберт Мартин - Идеальный программист](https://www.ozon.ru/product/idealnyy-programmist-kak-stat-professionalom-razrabotki-po-martin-robert-k-211433126/?asb=z4%252BBD7UDRGAKgK5PMnilay5QBkwvjGXgnMhfF1fAOWM%253D&asb2=Gvhxd5LT0NA_AobRO1muUz0icHnQ6j-JL2zxEOH1wzQ&keywords=%D0%B8%D0%B4%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82&sh=6BDpuJeM)
@@ -14,13 +14,13 @@
Не смотря на почтенный возраст книги, её можно считать библией разработчика. Она системно описывает устройство индустрии, а также дает массу советов: каким образом расти и развиваться, чтобы стать эффективным специалистом.
## Computer Science
## :bar_chart: Computer Science
- [Томас Кормен - Алгоритмы. Вводный курс](https://www.ozon.ru/product/algoritmy-vvodnyy-kurs-24903185/?sh=oABFs2sD)
Хорошее продолжение после книги "Грокаем алгоритмы". Книга знакомит с базовыми распространенными алгоритмами сортировок, работа со списками и т.д., но на более глубоком уровне. Все ещё написана довольно простым языком, потому она может помочь подготовиться к глубокому погружению в алгоритмы.
## C++
## :pencil: C++
- [Скотт Мейерс - Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ](https://www.ozon.ru/product/effektivnoe-ispolzovanie-c-55-vernyh-sovetov-uluchshit-strukturu-i-kod-vashih-programm-2610625/?sh=VdYASWTH)
@@ -34,7 +34,7 @@
Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из различных компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. даст вам общее представление, какие правила написания кода распространены во многих проектах.
## Технические навыки
## :electric_plug: Технические навыки
- [Фримен Эрик, Робсон Элизабет - Head First. Паттерны проектирования](https://www.ozon.ru/product/head-first-patterny-proektirovaniya-obnovlennoe-yubileynoe-izdanie-144233005/?sh=VWSHgt2E)

View File

@@ -1,6 +1,6 @@
# Middle
# :sunglasses: Middle
## C++
## :pencil: C++
- [Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14](https://www.ozon.ru/product/effektivnyy-i-sovremennyy-s-42-rekomendatsii-po-ispolzovaniyu-c11-i-c14-effektivnyy-i-sovremennyy-34747131/?sh=CHL5ECEP)
@@ -19,7 +19,7 @@
Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает актуальные механизмы применения шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой. Вы познакомитесь, как с азами метапрограммирования, так и с различными нюансами того или иного приема.
## Оптимизация приложений
## :bicyclist: Оптимизация приложений
- [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG)
@@ -30,7 +30,7 @@
Практические руководства, которые дают исчерпывающую информацию о потенциальных возможностях оптимизации приложений, разработанных на C++, или связанных с взаимодействием с центральным процессором, памятью и т.д.
## Технические навыки
## :electric_plug: Технические навыки
- [Джонсон Ральф, Хелм Ричард - Приемы объектно-ориентированного проектирования. Паттерны проектирования](https://www.ozon.ru/product/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-2457392/?sh=U_1tfTeu)
@@ -49,7 +49,7 @@
Краткое практическое пособие о том, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения будет сложно отыскать. Рекомендуем оизучить пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги.
## Операционные системы
## :zap: Операционные системы
- [Эндрю Таненбаум - Современные операционные системы](https://www.ozon.ru/product/sovremennye-operatsionnye-sistemy-tanenbaum-endryu-bos-herbert-211432884)
@@ -68,7 +68,7 @@
Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться.
## Компьютерные сети
## :globe_with_meridians: Компьютерные сети
- [Эндрю Таненбаум - Компьютерные сети](https://www.ozon.ru/product/kompyuternye-seti-tanenbaum-endryu-uezeroll-devid-tanenbaum-endryu-uezeroll-devid-211432815)

View File

@@ -1,13 +1,13 @@
# Книги и материалы
# :books: Книги и материалы
В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем обзорно посмотреть каждый раздел, и подобрать набор литературы под свои нужды. В данных разделах собраны книги для получения общих знаний по C++, которые пригодятся в большинстве коммерческих проектов.
Представленная библиотека не концентрируется на книгах, не связанных с какой-либо предметной областью или узкоспециализированными направлениями. Идея этого проекта состоит в том, чтобы помочь людям получить общие знания о C++ и разработке программного обеспечения. Если вы ищете специализированные материалы, то рекомендуем обратиться к экспертам, в интересующей вас области.
- [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,12 +1,12 @@
# Pre-Junior
# :alien: Pre-Junior
## Мотивация и опыт
## :innocent: Мотивация и опыт
- [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784)
Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом, и оставаться на гребне волны.
## Computer Science
## :bar_chart: Computer Science
- [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027)
@@ -20,7 +20,7 @@
Отличное вводное пособие в мир алгоритмов. Написано легким языком, который поймет большинство новичков. Также есть немного практических задач, чтобы попробовать написать свои первые алгоритмы.
## C++
## :pencil: C++
- [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584)
@@ -41,7 +41,7 @@
- [Лекции C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fItmofHO4KuGjfGtbQtEj-x)
- [Алгоритмы и структуры данных на C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fL_5Xvnufpwj2uYZnZBBnsr)
## Технические навыки
## :electric_plug: Технические навыки
- [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160)

View File

@@ -1,11 +1,11 @@
# Senior
# :smiling_imp: Senior
## C++
## :pencil: C++
- Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков.
## Управление командой
## :muscle: Управление командой
- [Дж. Ханк Рейнвотер - Как пасти котов](https://www.ozon.ru/product/kak-pasti-kotov-nastavlenie-dlya-programmistov-rukovodyashchih-drugimi-programmistami-147226659)
@@ -32,7 +32,7 @@
Классическая книга о логических ошибках мышления человека. Полезна тем, что это поможет более рационально подходить к принятию различных решений, беря в расчет когнитивные искажения в человеческом мышлении. Необходимый навык для специалистов, которые находятся в зоне принятия ключевых решений. Книга может показаться довольно занудной, в таком случае вы можете попробовать поискать альтернативные работы, которые повествуют о когнитивных искажениях.
## Требования и архитектура ПО
## :clipboard: Требования и архитектура ПО
- [Карл Вигерс - Разработка требований к программному обеспечению](https://www.ozon.ru/product/razrabotka-trebovaniy-k-programmnomu-obespecheniyu-vigers-karl-i-bitti-dzhoy-221778297)

View File

@@ -1,6 +1,6 @@
# Community sources
# :gem: Community sources
## C++ общее
## :bookmark_tabs: C++ общее
- [CppReference](https://en.cppreference.com)
- [CPlusPlus](https://www.cplusplus.com/reference)
@@ -10,28 +10,28 @@
- [Новости от комитета стандартизации С++ (ENG)](https://isocpp.org/)
- [C++ Online Compiler Explorer](https://gcc.godbolt.org)
## Популярные конференции по С++
## :satellite: Популярные конференции по С++
- [C++ Russia](https://cppconf.ru/)
- [Cpp Con](https://cppcon.org/)
- [Meeting C++](https://meetingcpp.com/)
- [C++ Now](https://cppnow.org/)
## Каналы конференций по C++ на YouTube
## :tv: Каналы конференций по C++ на YouTube
- [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)
## Альтернативные источники для изучения С++
## :exclamation: Альтернативные источники для изучения С++
- [Hackingcpp.com](https://hackingcpp.com/index.html) - Портал с различным набором структурированных материалов по C++: книги, шпаргалки, видео с конференций
- [Awesomecpp.com](https://awesomecpp.com) - Коллекция различных ресурсов по C++.
- [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e)
- [Learncpp.com](https://www.learncpp.com/) - C++ курс для изучения основ языка. Обновляется и дополняется.
## Другие интересные репозитории
## :star: Другие интересные репозитории
- [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features)
- [Путеводитель C++ программиста по неопределенному поведению](https://github.com/Nekrolm/ubbook)

View File

@@ -1,4 +1,4 @@
# C++ — это просто!
# :space_invader: C++ — это просто
Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти.
@@ -16,9 +16,9 @@
Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом.
Потому не бойтесь изучать его!ы
Потому не бойтесь изучать его!
Удачи!
Удачи! :dizzy:
---

View File

@@ -1,10 +1,10 @@
# Junior C++
# :yum: Junior C++
## Кто это?
## :question: Кто это?
Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Также может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Такой разработчик способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров.
## Что ожидается по умению написания кода?
## :computer: Что ожидается по умению написания кода?
- Умение читать документацию библиотек, фреймворков и т.д.
- Умение собирать и подключать сторонние библиотеки к проекту
@@ -13,14 +13,14 @@
- Писать тесты к коду
- Базовые знания и опыт работы с Git
## Что ожидается по общим навыкам?
## :bust_in_silhouette: Что ожидается по общим навыкам?
- Быстрое обучение
- Умение самостоятельно искать информацию в интернете, книгах и т.д.
- Умение своевременно задавать вопросы коллегам
- Способность работать в команде
## Рекомендации и советы
## :eyes: Рекомендации и советы
- Постарайтесь найти парочку энтузиастов на проекте и присоединитесь к ним. Они могут стать вашим источником знаний и опыта.
- Задавайте вопросы старшим коллегам. Нет глупых вопросов, есть глупые ответы.

View File

@@ -1,12 +1,12 @@
# Middle C++
# :sunglasses: Middle C++
## Кто это?
## :question: Кто это?
Это разработчик, который понимает технический контекст разработки и способен создать дизайн/решение для функционала в рамках компонента/приложения, даже в случае неполноты требований. Также имеет практический опыт работы на проектах, в рамках принятых бизнес-процессов.
В основном решает технические задачи, но в отличие от джуниора, способен сделать это самостоятельно или под менторством синьора/тимлида.
## Что ожидается по умению написания кода?
## :computer: Что ожидается по умению написания кода?
- Компилятор и язык его больше не пугают и практически не приносят сюрпризов. А если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь
- Ориентируется в базовых концепциях языка, а также понимает, какие ещё языки программирования существуют, и чем они отличаются
@@ -22,7 +22,7 @@
- Выполнение на целевой системе
- Глубже знает и понимает базовую информатику (структуры данных, конечные автоматы, алгоритмы)
## Что ожидается по общим навыкам?
## :bust_in_silhouette: Что ожидается по общим навыкам?
- Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него
- Понимает, когда нужно остановиться, чтобы не переусложнить решение
@@ -31,15 +31,15 @@
- Имеет практический опыт работы по различным методологиям: Kanban, Agile/Scrum, Waterfall и т.д.
- Помогает другим членам команды
## Рекомендации и советы
## :eyes: Рекомендации и советы
### Про обучение
### :arrow_forward: Про обучение
- Начинайте прокачивать софт-скиллы, если хотите вырасти до синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый план выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот кто понимает, как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если будут удалены пара десятков/сотен строк.
- Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам.
- Должное внимание "софт" скиллам повышает вероятность того, что вы быстрее станете более востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны узкопрофильные эксперты в больших количествах, а во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков.
### Про опыт
### :arrow_forward: Про опыт
- Основная ловушка многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие используемых технологий или оверинжиниринг.
- Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не добавляйте их за спиной всей команды! Это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта, и принесёт неожиданные проблемы.

View File

@@ -1,4 +1,4 @@
# Уровень разработчиков
# :chart_with_upwards_trend: Уровень разработчиков
> Уровень разработчика (eng.: *grade*) - это попытка классифицировать разработчиков по навыкам, компетенциям и практическому опыту. По нему возможно сопоставить потенциальную сложность задач с требуемым набором компетенций и навыков для их успешного решения.
@@ -17,13 +17,10 @@
В нижеперечисленных статьях мы попытались дать осредненное описание для каждого уровня разработчика:
- [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++
## Кто это?
## :question: Кто это?
Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например:
- выполняет арифметические вычисления
@@ -10,7 +10,7 @@
- и т.д.
## Что ожидается по умению написания кода?
## :computer: Что ожидается по умению написания кода?
- Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д.
- Умение пользоваться отладчиком при помощи IDE
@@ -22,15 +22,15 @@
- Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция
## Что ожидается по общим навыкам?
## :bust_in_silhouette: Что ожидается по общим навыкам?
- Желание учиться и впитывать новые знания
- Желание разбираться в возникающих проблемах
- Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе
## Рекомендации и советы
## :eyes: Рекомендации и советы
### Про обучение
### :arrow_forward: Про обучение
- Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала, прежде чем сможете пройти собеседование, и получить свой первый оффер.
- Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники.
- Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется.
@@ -38,7 +38,7 @@
- Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию, и вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачи.
- На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих площадок - отработать навыки применения классических алгоритмов и структур данных. Эти платформы спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях.
### Про английский язык
### :arrow_forward: Про английский язык
- Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий, то не мучайте себя. Так вы быстро потеряете мотивацию. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке.
- Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке.

View File

@@ -1,23 +1,23 @@
# Senior C++
# :smiling_imp: Senior C++
## Кто это?
## :question: Кто это?
Это разработчик, который понимает не только технический, но и бизнес контекст, а также способен создать дизайн и решение для компонента/приложения/системы с учётом неполноты требований и общей сложности. Помимо этого, помогает другим членам команды развиваться, следит за техническими тенденциями мира разработки.
## Что ожидается по умению написания кода?
## :computer: Что ожидается по умению написания кода?
- Способен переводить задачи с языка бизнеса на язык разработки, декомпозировать задачи
- Способен вести диалог с бизнесом, объяснять технические детали и сложности людям вне команды
- Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения
- Понимание и использование архитектурных принципов
## Что ожидается по общим навыкам?
## :bust_in_silhouette: Что ожидается по общим навыкам?
- Высокий навык коммуникации
- Способен при необходимости самостоятельно собрать требования
- Помогает развивать членов команды
## Рекомендации и советы
## :eyes: Рекомендации и советы
В зависимости от специфики компании и ваших личных пожеланий, путь дальнейшего развития лежит, либо в освоении новых технологий и технических навыков, либо в области управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂

View File

@@ -1,8 +1,8 @@
# Как учиться?
# :mortar_board: Как учиться?
Главное правило: только вы отвечаете за своё развитие. Безусловно, вы найдете вокруг немало энтузиастов, которые с радостью помогут вам советом, но никто не разработает за вас полноценную программу обучения. Лучший друг в этом деле - вы, учебники и поисковик.
## Как учить новые стандарты C++ 11/14/17/20?
## :question: Как учить новые стандарты C++ 11/14/17/20?
Новичкам можно посоветовать сильно не акцентироваться на стандартах в начале своего обучения. Начните с книг из списка [для начинающих](Books/PreJunior.md), и начинайте изучать фундаментальные основы. Современные книги для новичков содержат в себе информацию о различных возможностях стандартов C++11 и новее.
@@ -15,7 +15,7 @@
C++ развивается похожим образом, как и другие языки: берётся какая-то популярная идея из информатики (computer science) или удачная фича из других языков, и внедряется в язык. Изучать такие конструкции и использовать их важно, но на первых парах стоит изучить основы, которые были заложены более старыми стандартами (С++11/С++14). Они и описаны в большинстве современных книг для начинающих.
## По каким источникам изучать новые возможности стандартов C++?
## :question: По каким источникам изучать новые возможности стандартов C++?
- Доклады на [конференциях по C++](CommunitySources.md)
- На главной странице [CppReference](https://en.cppreference.com/w/cpp) вы найдете ссылки, со списками возможностей, введенные в каждом стандарте С++
@@ -24,7 +24,7 @@ C++ развивается похожим образом, как и другие
- Ролики с разбором новых возможностей стандартов на YouTube
- [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features)
## Рекомендации по обучению
## :eyes: Рекомендации по обучению
- Учитесь в своем ритме, а также в любом возрасте! Не акцентрируйтесь на историях: "Я программирую с пеленок" и т.п.. Большинство подобных историй — [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или же попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++!
- Большинство проблем с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем.

View File

@@ -1,13 +1,13 @@
# Легенды и мифы про C++
# :ghost: Легенды и мифы про C++
## Язык C++ умер, на нем невозможно что-либо писать
## :question: Язык C++ умер, на нем невозможно что-либо писать
Живее всех живых.
На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в 2000-е годы, когда его развитие временно застыло, а комитет по стандартизации приостановил свою активность. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно обновляется и пополняется новым функционалом, в среднем, каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены. Но в силу того, что такие специалисты скорее всего перестали работать с C++, либо по верхам изучили в ВУЗе/на курсах, то и продолжают порождать и сеять различные мифы о том, насколько C++ ужасен.
## Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc
## :question: Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc
Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на таком этапе обучения стоит сконцентрироваться только на изучении основ языка C++. Рекомендуем вам попробовать написать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)).
@@ -16,36 +16,36 @@
Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первой тренировке, т.к. понимают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом ином IDE, операционной системе и т.д.. Но это уже совершенно другая история...
## Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
## :question: Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc.
Нет, нет и ещё раз нет!
Такое утверждение живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" разработчиков, т.к. многие из таких специалистов проходили подобный карьерный путь. Современный C++ не требует подобного подхода к изучению. Этот язык полностью автономен. Гораздо вероятнее, у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами". А ассемблер потребуется только в особых ситуациях.
## Изучайте C++ по книге Страуструпа
## :question: Изучайте C++ по книге Страуструпа
Крайне спорный тезис. Вероятнее всего что этот совет предлагают те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник: ([Язык программирования C++](https://www.ozon.ru/product/yazyk-programmirovaniya-c-spetsialnoe-izdanie-straustrup-bern-straustrup-bern-210215691)). Потому и работать с ней требуется соответственно, что уже требует наличие знаний о C++ и практики использования. Рекомендуем заглянуть в раздел [Книги](Books.md), где вы найдете материал для любого уровня владения языком программирования.
## Изучайте C++ только по стандарту
## :question: Изучайте C++ только по стандарту
Тоже крайне опасный тезис. Во-первых, современный стандарт C++ уже превысил объем в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. В-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по стандарту можно пожать руку, но мы не рекомендуем такой путь, ибо он долог и тернист. Лучше загляните в раздел [Книги](Books.md), там вы найдете материал для любого уровня владения языком.
## Undefined Behavior преследует разработчика повсюду
## :question: Undefined Behavior преследует разработчика повсюду
Скорее нет, чем да.
Современный C++, а также имеющийся инструментарий, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь можно дать совет: если сомневаетесь, что делает та или иная конструкция, то попробуйте поискать информацию на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если же после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила!
## Нужно вручную управлять памятью, в языке нет сборщика мусора
## :question: Нужно вручную управлять памятью, в языке нет сборщика мусора
Это утверждение также идет от представителей "старой гвардии", которые перестали писать на языке до появления стандарта C++11, или же от тех, кто слабо знаком с последними стандартами языка. Современный C++ имеет в своей библиотеке набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти все больше и больше отходит на второй план. Во многих компаниях вы также встретите внутреннее правило: "не использовать сырых указателей". И напоследок, не пренебрегайте современным инструментарием и санитайзерами. Они способны отыскать потенциальную утечку памяти ещё на этапе анализа исходного кода.
## C++ - это сплошной легаси-код
## :question: C++ - это сплошной легаси-код
Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться "легаси". Качество кода зависит от технической культуры внутри компании и команд разработки и их визионеров, т.к. легаcи-код порождается человеческим фактором: уровень разработчиков и компетенций, отношение к работе, горящие сроки, практики в команде и т.п. На C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения очень рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего невозможно поделать. Постепенно такие системы тоже переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инжениринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д.

View File

@@ -1,10 +1,10 @@
# Пет-проекты
# :telescope: Пет-проекты
Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, библиотек и фреймворков. Они могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру.
Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать хорошим началом для последующего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему.
## Сторонние ресурсы
## :arrows_counterclockwise: Сторонние ресурсы
* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)
@@ -19,9 +19,9 @@
Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :)
## Список идей для пет-проектов
## :boom: Список идей для пет-проектов
### Игры
### :arrow_forward: Игры
Ниже представлен список классических видеоигр, которые не содержат в себе сложного искусственного интеллекта или динамическую генерацию мира. Вы можете попробовать реализовать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [SFML](https://www.sfml-dev.org/). Это простая в использовании библиотека, которая предоставляет достаточный набор возможностей для создания несложных графических интерфейсов для 2D или 2.5D игр при помощи [спрайтов](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)). Если же вы захотите сделать что-то более сложное, где применяется физика, то можете начать с простых движков, например: [Box2D](https://box2d.org/). Или же освоить более продвинутые: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность.
@@ -46,7 +46,7 @@
---
### Приложения
### :arrow_forward: Приложения
При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Помните о принципе: "от простого к сложному".
@@ -59,7 +59,7 @@
---
### Студенческие приложения
### :arrow_forward: Студенческие приложения
Нижеперечисленные примеры больше подойдут для студентов, которые изучают или недавно изучили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. свежи знания по академическим дисциплинам.

View File

@@ -1,4 +1,4 @@
# C++ Developer Roadmap
# :bulb: C++ Developer Roadmap
## Additional languages: [English](../README.md)
@@ -13,7 +13,7 @@
1. :flashlight: [Почему появилась дорожная карта](Rationale.md)
1. :mag: [А нужен ли вам C++?](SelfIdentification.md)
1. :space_invader: [C++ - это просто!](FunCpp.md)
1. :space_invader: [C++ - это просто](FunCpp.md)
1. :clipboard: [Области применения языка](AreasOfApplication.md)
1. :ghost: [Легенды и мифы про C++](Mythbusters.md)
1. :chart_with_upwards_trend: [Грейды разработчиков](Grades/Overview.md)

View File

@@ -1,4 +1,4 @@
# Почему появилась дорожная карта
# :flashlight: Почему появилась дорожная карта
C++ активно используется во многих коммерческих проектах. Сегодня язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и сориентироваться в его изучении.

View File

@@ -1,4 +1,4 @@
# А нужен ли вам C++?
# :mag: А нужен ли вам C++?
Первое, о чем действительно стоит подумать: для чего вам требуется изучение C++?
@@ -9,7 +9,7 @@
- В специфичных сферах может быть популярен иной инструментарий. К примеру: в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему.
# Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
# :question: Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++?
И да, и нет. :)

View File

@@ -1,8 +1,8 @@
# Инструментарий для работы с языком
# :triangular_ruler: Инструментарий для работы с языком
Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, повышает эффективность и оберегает от многих ошибок. Все представленные инструменты - не серебряная пуля от всех бед языка, но значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое.
## Текстовые редакторы
## :page_facing_up: Текстовые редакторы
* **Visual Studio Code**
@@ -22,7 +22,7 @@
Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code, его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов.
## IDE (Integrated Development Environment)
## :open_file_folder: IDE (Integrated Development Environment)
* **Microsoft Visual Studio IDE**
@@ -60,7 +60,7 @@
Мощная мультиплатформенная IDE от компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++.
## Расширения
## :flashlight: Расширения
* **JetBrains ReSharper C++**
@@ -86,7 +86,7 @@
Приложение/расширение для распределенной сборки проектов. Объединяет рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин параллельно. Это позволяет ускорить скорость сборки больших проектов в несколько раз.
## Пакетные менеджеры и системы сборки
## :electric_plug: Пакетные менеджеры и системы сборки
* **Cmake**
@@ -112,7 +112,7 @@
Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ менеджера: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы.
## Анализаторы кода
## :mag: Анализаторы кода
* **PVS Studio**
@@ -140,7 +140,7 @@
Набор инструментов, который поможет исследовать разнообразные проблемы во время работы приложения: утечка памяти, профилирование тормозов и т.д. Заточен для работы с различными дистрибутивами Linux.
## Git клиенты
## :floppy_disk: Git клиенты
* **SmartGit**