mirror of
https://github.com/salmer/CppDeveloperRoadmap.git
synced 2025-12-16 20:17:07 +03:00
Rework of all the articles in English (#76)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# :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++:
|
||||
The C++ language has a wide range of applications, mainly used when high performance or low memory consumption is required. To learn more about the specific application areas of C++, you can find additional resources below:
|
||||
- [What Is C++ Used For? Top 12 Real-World Applications And Uses Of C++](https://www.softwaretestinghelp.com/cpp-applications/)
|
||||
- [Why and where should you still use C/C++ languages?](https://hackernoon.com/why-and-where-should-you-still-use-cc-languages-6l1r838gh)
|
||||
- [What Can You Do With C++?](https://www.ko2.co.uk/what-can-you-do-with-c-plus-plus/)
|
||||
|
||||
@@ -8,33 +8,32 @@
|
||||
|
||||
- [Robert Martin - Clean Code: A Handbook of Agile Software Craftsmanship](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)
|
||||
|
||||
Nowadays, you might find a lot of criticism about this book. Despite all, we still guess this book can be quite helpful for newbies rather than harmful in short-term distance. This book contains a collection of working tricks which will help you to write well-structured, readable and maintainable code. As with any other knowledge, don't try to place on the "throne" and transform it to cargo-cult. Use this knowledge wisely. Try to collect a set of tricks from the book which are suitable for you and helpful for improving of your code-style.
|
||||
Despite criticism that you might encounter regarding this book, we still believe that it can be a valuable resource for new developers in the short term. The book features a collection of effective techniques that can help you write well-structured, readable, and maintainable code. However, it's important to not view this book as a gospel and avoid turning it into a "cargo-cult." Instead, use this knowledge wisely and select the techniques that best suit your needs and improve your coding style.
|
||||
|
||||
- [Steve McConnell - Code Complete: A Practical Handbook of Software Construction](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670)
|
||||
|
||||
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.
|
||||
Despite its age, this book can still be considered a developer's "bible" as it provides a comprehensive overview of the IT industry. It offers a wealth of practical advice on how to grow and develop as a top-tier professional.
|
||||
|
||||
|
||||
## :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.
|
||||
|
||||
This book serves as a great follow-up to "Grokking Algorithms". It delves into common sorting algorithms and working with lists, providing more in-depth information. The writing style is approachable and friendly. Reading this book will be helpful in preparing yourself for a deep dive into the field of algorithms.
|
||||
|
||||
## :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)
|
||||
|
||||
This book is a perfect cookbook of C++ foundations. This book is about C++03 features, but it's still valuable and relevant information. All recommendations described in this book are perfectly suitable for the newest standards.
|
||||
This book is the ultimate cookbook for C++ foundations. Although it covers C++03 features, the information it provides is still valuable and relevant. The recommendations outlined in the book are perfectly suitable for the latest standards.
|
||||
|
||||
- [Jason Turner - C++ Best Practices: 45ish Simple Rules with Specific Action Items for Better C++](https://www.amazon.com/Best-Practices-Simple-Specific-Action/dp/B08SJSZKJ5)
|
||||
|
||||
A collection of tips for developers with little experience writing C++ code. It contains recommendations on the most common errors. All explanations are presented briefly and concisely. The most of these recommendations contain links to additional sources. This book doesn't provide a fundamental analysis of each advice, therefore it is recommended to deal with each recommendation in more detail in the future in order to understand true reasons behind them.
|
||||
This is a compilation of tips for inexperienced C++ developers, focusing on the most common mistakes. The explanations are brief and to the point. Most of the tips include links to additional resources. Since the book doesn't offer a thorough examination of each piece of advice, it's recommended to delve into each one further in the future to truly understand the reasoning behind them.
|
||||
|
||||
- [Herb Sutter, Andrei Alexandrescu - C++ Coding Standards: 101 Rules, Guidelines, and Best Practices](https://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586)
|
||||
|
||||
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.
|
||||
This small book outlines common best practices for writing code in commercial projects. It's a compilation of experiences gathered from various companies. This book was also a foundation for the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). It is recommended to start with this book first before visiting the C++ Core Guidelines. It will give you a first impression of code guidelines used in projects. After you have read the book, you can then visit the C++ Core Guidelines website to get the latest approved approaches.
|
||||
|
||||
|
||||
## :electric_plug: Hard skills
|
||||
@@ -45,7 +44,7 @@
|
||||
|
||||
- [Sanjay Madhav, Josh Glazer - Multiplayer Game Programming: Architecting Networked Games](https://www.amazon.com/Multiplayer-Game-Programming-Architecting-Networked/dp/0134034309)
|
||||
|
||||
This book is an excellent introduction to networking theory. It will explain network foundations through video games examples. They will help you to write your first application working via a network. Besides a theory, you will gain experience in how to work with it in C++. All examples are written in C++11/14.
|
||||
This book is an excellent introduction to networking theory, explaining network foundations through video game examples. It will help you write your first application that works over a network, and you will gain practical experience in working with networking in C++. All of the examples in the book are written using C++11/14.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,81 +4,81 @@
|
||||
|
||||
- [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)
|
||||
|
||||
It's a new chapter of a Scott Meyers books collection. This book contains a collection of advice about C++11/14 standards.
|
||||
It's a new chapter in the collection of books by Scott Meyers. This book compiles a set of tips for the C++11/14 standards.
|
||||
|
||||
- [Anthony Williams - C++ Concurrency in Action](https://www.amazon.com/C-Concurrency-Action-Anthony-Williams/dp/1617294691/ref=sr_1_3?keywords=C%2B%2B+Concurrency+in+Action%3A+Practical+Multithreading&qid=1636314477&s=books&sr=1-3)
|
||||
|
||||
This book is a guide for multithreading programming and using the standard library features. It contains detailed explanations about all primitives and their nuances "behind the curtain".
|
||||
This book is a comprehensive guide to multithreading programming and the use of standard library features. It provides detailed explanations about all primitives and their intricacies "behind the scenes."
|
||||
|
||||
- Herb Sutter:
|
||||
- [Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Engineering-Programming-Problems-Solutions/dp/0201615622)
|
||||
- [Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Style-Engineering-Programming-Solutions/dp/0201760428)
|
||||
- [More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/More-Exceptional-Engineering-Programming-Solutions/dp/020170434X)
|
||||
|
||||
The collection of books describes a lot of tasks related to designing or writing code in C++. They propose a collection of effective solutions. A lot of them are approved and declared as classic idioms. You will regularly find these idioms around projects.
|
||||
The collection of books covers many tasks related to designing or writing code in C++, offering a range of effective solutions. Many of these solutions have been deemed classic idioms and are widely used in various projects.
|
||||
|
||||
- [David Vandevoorde - C++ Templates: The Complete Guide](https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121)
|
||||
|
||||
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.
|
||||
The newest and relevant book about C++ metaprogramming, specifically templates, is a comprehensive work that describes relevant techniques and foundations added in recent standards, including C++17. If you're looking to write generic and parameterized code, this book will become an indispensable resource for you, offering insights into the basics of templates as well as a multitude of nuances related to different techniques.
|
||||
|
||||
|
||||
## :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)
|
||||
|
||||
This book is a guidebook for the performance improvement of C++ applications. Some advice in this book is based on different idioms and tricks described in books of Herb Sutter or Scott Meyers. It's recommended to read this book after reading the books above.
|
||||
This book is a guidebook for improving the performance of C++ applications. Some of the advice in this book is based on various idioms and tricks outlined in books by Herb Sutter or Scott Meyers. It is recommended to read this book after reading the previously mentioned books.
|
||||
|
||||
- [Agner Fog - Optimizing software in C++](https://agner.org/optimize/optimizing_cpp.pdf) or [Optimization manuals](https://agner.org/optimize)
|
||||
|
||||
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.
|
||||
Practical-oriented guides provide comprehensive information about the potential optimization possibilities for applications developed in C++ or related to interaction with the CPU, memory, etc.
|
||||
|
||||
## :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)
|
||||
|
||||
This book is a classic guidebook of design patterns. Each pattern is precisely described and advised to a suitable use-case. This book is a good continuation of "Head First Design Patterns" by Eric Freeman. But be ready, this book is more complex than the previous one.
|
||||
This book is a classic guidebook on design patterns. Each pattern is described in detail and advised on its appropriate use case. This book is a good follow-up to "Head First Design Patterns" by Eric Freeman. However, be prepared, as this book is more complex than the previous one.
|
||||
|
||||
- [Gary McLean Hall - Adaptive Code](https://www.amazon.com/Adaptive-Code-Developer-Best-Practices/dp/0136891446)
|
||||
|
||||
One of the best books that describe SOLID principles in simple terms. All code examples are written in C#, but it shouldn't be a problem as they were written in a simplistic way.
|
||||
This book is an excellent resource for understanding the SOLID principles of software design. The explanations are presented in simple terms, making them easy to understand. The code examples, which are written in C#, are also simple and serve to illustrate the principles effectively.
|
||||
|
||||
- [Robert Martin - Clean Architecture: A Craftsman's Guide to Software Structure and Design](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164)
|
||||
|
||||
One more work by Uncle Bob. For this time, this book will explain how to think about the architecture of an application/component first before starting rushing into coding. It shows where to pay attention upon analyzing a solution design. This book is a good start for people who are interested in architecture tasks in software design and don't know where to begin. The knowledge from this book is common for a lot of engineers and will be useful to prevent widespread mistakes in software design.
|
||||
This book, written by Uncle Bob, provides guidance on how to approach software design with a focus on architecture. It emphasizes the importance of thinking about the architecture of an application or component before starting to code. The book provides insights on what to consider when analyzing the design of a solution and helps prevent common mistakes in software design. This book is a great starting point for individuals interested in architectural tasks in software design who are seeking to gain a deeper understanding of the field. The knowledge contained in this book is widely used among engineers and will help them in avoiding widespread mistakes.
|
||||
|
||||
- [Samary Baranov - Finite State Machines and Algorithmic State Machines: Fast and Simple Design of Complex Finite State Machines](https://www.amazon.com/Finite-State-Machines-Algorithmic-Complex-ebook/dp/B078RYYBCJ)
|
||||
|
||||
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.
|
||||
This is a short and practical guide on how to approach programming using the theory of finite machines. You won't find a simpler and more elegant explanation of finite machine theory and its practical applications.
|
||||
|
||||
|
||||
## :zap: Operating systems
|
||||
|
||||
- [Andrew S. Tanenbaum - Modern Operating Systems](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X)
|
||||
|
||||
The best book about operating systems. This is a fundamental book about its construction: file system, network, memory management, task scheduler, multithreading, etc. Each chapter contains large explanations for different OS aspects. It tries to explain deep details in simple words, but without diving in specific OS distributive.
|
||||
This is a comprehensive guide to operating systems, covering its construction and various aspects such as file systems, networks, memory management, task scheduling, and multithreading. The book provides in-depth explanations in simple terms, without focusing on a specific OS distribution. Each chapter offers a detailed exploration of different aspects of operating systems, making it a fundamental resource for understanding this complex subject.
|
||||
|
||||
- [Mark Russinovich - Windows Internals, Part 1](https://www.amazon.com/Windows-Internals-Part-architecture-management/dp/0735684189), [Mark Russinovich - Windows Internals, Part 2](https://www.amazon.com/Windows-Internals-Part-2-7th/dp/0135462401)
|
||||
|
||||
This book discusses the same issues as the previous book, but focuses exclusively on Microsoft Windows OS. It dwells in detail on every aspect of the OS with a projection on Windows, and also talks about various nuances and aspects that may not be officially declared by the developers. A useful book for those who develop low-level applications that require intensive interaction with OS system libraries.
|
||||
This book delves into the same topics as the previous book, but with a focus exclusively on the Microsoft Windows operating system. It provides a deep and detailed look at every aspect of the OS with a specific focus on Windows and covers various nuances and aspects that may not be officially declared by the developers. It is a useful resource for those who develop low-level applications that require intensive interaction with the OS system libraries.
|
||||
|
||||
- [Christopher Negus - Linux Bible](https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/1119578884)
|
||||
|
||||
This book can be a continuation after Tanenbaum's work. It goes into detail on every aspect of the Linux OS. All examples are analyzed for popular distributions: Red Hat, Ubuntu and Fedora. Suitable for developers who use this OS in their daily activities.
|
||||
This book can serve as a follow-up to Tanenbaum's work, delving into the intricacies of the Linux operating system. The book includes detailed analysis of various aspects of the OS, with a focus on popular distributions like Red Hat, Ubuntu, and Fedora. It is an ideal resource for developers who use Linux on a daily basis
|
||||
|
||||
- [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf)
|
||||
|
||||
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).
|
||||
This article provides a comprehensive overview of how PC memory works and why it operates in the manner described. It presents not only high-level information, but also delves into low-level aspects, making it ideal for those who want to delve deeper into the subject matter.
|
||||
|
||||
|
||||
## :globe_with_meridians: Computer networks
|
||||
|
||||
- [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958)
|
||||
|
||||
A classic book on the theoretical foundations of computer networks. It contains a detailed description, starting from the physical layer and ending with data transfer protocols. It will be extremely useful for those developers who are closely involved in projects that interact with networks.
|
||||
A classic book on the theoretical foundations of computer networks provides a detailed description, starting from the physical layer and ending with data transfer protocols. It will be extremely useful for developers who are closely involved in projects that interact with networks.
|
||||
|
||||
- [Victor Olifer - Computer Networks: Principles, Technologies and Protocols for Network Design](https://www.amazon.com/Computer-Networks-Principles-Technologies-Protocols-ebook/dp/B001GQ35P4)
|
||||
|
||||
Another great book on the basics of computer networks. At some points, the presentation of information can seem a little more complicated, compared to Tanenbaum's work. Therefore, we recommend choosing the book whose narrative is more suitable for you.
|
||||
This book provides comprehensive information on the basics of computer networks. It may present information in a slightly more complex manner compared to Tanenbaum's work. As a result, it is recommended to choose the book that presents the information in a style that is most suitable for you
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# :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.
|
||||
This guide presents a collection of books for learning C++, divided into appropriate levels of difficulty. It is suggested to determine your current proficiency and select books that match it. The focus of this guide is to provide a general understanding of C++ and software development, rather than covering specialized topics. If you are searching for more specific information, it is advised to reach out to experts in your area of interest.
|
||||
|
||||
- :blue_book: [PreJunior](PreJunior.md)
|
||||
- :green_book: [Junior](Junior.md)
|
||||
|
||||
@@ -4,44 +4,44 @@
|
||||
|
||||
- [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.
|
||||
The book is a classic in the motivation genre for beginners. Chad Fowler shares his experience on how to become a professional programmer and navigate the IT industry.
|
||||
|
||||
|
||||
## :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)
|
||||
|
||||
The book is an overview on different Computer Science basics: math, algorithms, databases, hardware basics of computers, etc. It can be a good starting point to find interesting areas for yourself and to prioritize them.
|
||||
The book provides a comprehensive overview of various basic concepts in Computer Science, including mathematics, algorithms, databases, and the hardware basics of computers. It serves as an ideal starting point to discover and prioritize areas of interest in the field.
|
||||
|
||||
- [Charles Petzold - Code: The Hidden Language of Computer Hardware and Software](https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319)
|
||||
|
||||
Before starting studying C++ it's recommended to pick this book first. In simple words, it describes how a computer works. It avoids complex technical or theoretical aspects. This book contains foundations that won't become obsolete in the far future. It will also help you to better understand the foundation ideas of C++ later. This book is a good complement to the previous one as it dives deeper into the device of computers.
|
||||
Before starting your study of C++, it's recommended to read this book first. It provides a simple explanation of how a computer works, avoiding complex technical or theoretical aspects. The concepts presented in this book are fundamental and will remain relevant in the future. It will also aid in your understanding of the foundational ideas of C++ later on. This book serves as a complement to the previous one as it delves deeper into the workings of computers.
|
||||
|
||||
- [Aditya Bhargava - Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People](https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230)
|
||||
|
||||
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.
|
||||
The book provides a brilliant introduction to the world of computer science algorithms and data structures for beginners. It also includes a list of tasks that will help you implement your first algorithms.
|
||||
|
||||
|
||||
## :pencil: C++
|
||||
|
||||
- [Stephen Prata - C++ Primer Plus](https://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402)
|
||||
|
||||
The book is an excellent start for people who stand at the beginning of the studying path in C++ World. It doesn't require any extra knowledge to start your path. This book also contains a list of exercises which help to get experience and understanding of C++ basics.
|
||||
The book is an excellent starting point for people who are just beginning their journey in the world of C++. No prior knowledge is required to get started. The book also includes a list of exercises that can help you gain hands-on experience and a deeper understanding of the basics of C++.
|
||||
|
||||
- [Stanley Lippman - C++ Primer](https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113)
|
||||
|
||||
The book is a good complement to the previous one. It's good to use this book in parallel with Prata's book. We recommend you find a balance between these books, as information is given differently: mixing information from both books will help you to better understand different topics and language aspects.
|
||||
This book is a great complement to the previous one. It's recommended to use it in parallel with Prata's book. Finding a balance between these books is advised, as the information is presented differently. Mixing information from both books will help to better understand various topics and aspects of the language.
|
||||
|
||||
- [Andrew Koenig - Accelerated C++: Practical Programming by Example](https://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X)
|
||||
|
||||
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.
|
||||
This book is an excellent choice for beginners. Each chapter provides a comprehensive description of different foundational aspects of the language. Upon completion of each chapter, the reader is offered a set of exercises to practice and reinforce their understanding. The book covers the most fundamental topics that can be applied in future studies of new language mechanisms. It is recommended to read this book after studying Prata's or Lippman's books or alongside them.
|
||||
|
||||
|
||||
## :electric_plug: Hard skills
|
||||
|
||||
- [MSDN](https://docs.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-160)
|
||||
|
||||
If you are at the starting point of your studying path, it's recommended to start practicing and doing exercises in the IDE: Microsoft Visual Studio (Community Edition). Nowadays, it's one of the friendliest IDEs among others to beginners, either in installation or usage (and it's absolutely for free!). It will help you to concentrate on language and not to struggle with the development environment. On MSDN you will find a nice guidebook that describes the following aspects: how to install the Visual Studio, create the first console project, and implement the first application.
|
||||
If you are just starting on your learning journey, it is recommended to begin practicing and doing exercises in the IDE Microsoft Visual Studio (Community Edition). It is currently one of the most user-friendly IDEs for beginners, both in terms of installation and usage, and it's completely free! This will allow you to focus on the language and not be burdened by the development environment. A helpful guidebook on MSDN explains the steps to install Visual Studio, create your first console project, and implement your first application.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,53 +2,53 @@
|
||||
|
||||
## :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.
|
||||
- There are no specific recommendations for books for senior level students. At this level, it is assumed that you have a good understanding of the fundamentals of C++. The only challenge is to stay updated on the latest standards, new features, and tools in the C++ ecosystem.
|
||||
|
||||
|
||||
## :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)
|
||||
|
||||
The classic books that tells about the difficulties that arise when managing developers. Although this book is outdated in some aspects, nevertheless it will be an excellent start for finding information about managing programmers. Many chapters are still relevant, and will also give an initial idea of managing people. Such knowledge can be useful when monitoring junior developers.
|
||||
This classic book sheds light on the challenges that arise when managing developers. Although some aspects of the book may be outdated, it still serves as a great starting point for learning about managing programmers. Many of its chapters are still relevant and provide an initial understanding of people management, which can be helpful when overseeing junior developers.
|
||||
|
||||
- [Michael Lopp - Managing Humans: Biting and Humorous Tales of a Software Engineering Manager](https://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/1484221575)
|
||||
|
||||
This book explains about how to be a leader, what difficulties such a person faces. It will help you learn to think like a manager, to understand what problems bother your manager. This will allow you to build a more effective interaction between you, the manager and the development team.
|
||||
This book explains the responsibilities and challenges faced by leaders. It will help you develop the skills to think like a manager and understand the issues faced by those in management positions. This knowledge can help improve communication and collaboration between you, your manager, and the development team.
|
||||
|
||||
- [Frederick Brooks - Mythical Man-Month, The: Essays on Software Engineering](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959)
|
||||
|
||||
This book is also considered a classic in project management. The book is focused on the mistakes that are made on projects that lead to their failures. Today, this work is also partly considered outdated, but for those developers who are just starting their way as a manager, this book will be a great start to protect themselves from typical mistakes.
|
||||
This book is considered a classic in project management and focuses on the mistakes that lead to project failures. Although partially outdated, it is a great starting point for new managers to protect themselves from typical mistakes.
|
||||
|
||||
- [Tom DeMarco - The Deadline: A Novel About Project Management](https://www.amazon.com/Deadline-Novel-About-Project-Management-ebook/dp/B006MN4RAS)
|
||||
|
||||
The book is a novel that tells about the work of a manager and how project management takes place. It is extremely useful because it conveys in an artistic manner the colossal experience of managerial everyday life. It is extremely useful because it most fully reveals the issues that the manager faces on a daily basis.
|
||||
The book is a novel that tells the story of a manager and their work in project management. It is incredibly useful because it conveys the everyday experiences of a manager in an artistic manner. It provides a comprehensive look into the various challenges a manager faces on a daily basis.
|
||||
|
||||
- [Daniel Kahneman - Thinking, Fast and Slow](https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555)
|
||||
|
||||
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.
|
||||
The classic book about the logical fallacies in human thinking is a must-read. It is useful in helping you take a more rational approach in making decisions, by considering the cognitive biases and distortions in human thought. This is an essential skill for specialists involved in making critical decisions. If the book seems dull, you can try looking for alternative works that discuss cognitive biases.
|
||||
|
||||
|
||||
## :clipboard: Requirements and software architecture
|
||||
|
||||
- [Karl Wiegers - Software Requirements](https://www.amazon.com/Software-Requirements-Developer-Best-Practices/dp/0735679665)
|
||||
|
||||
The book will be useful for those who are busy collecting and working out software requirements. It will explain about how to interact with managers, customers and developers when collecting requirements, and how to turn verbal ideas into a technical solution with clear requirements and limitations.
|
||||
This book is an excellent resource for anyone involved in the process of gathering and refining software requirements. It provides guidance on how to effectively communicate with managers, customers, and developers to gather requirements and turn abstract ideas into concrete, technical solutions with well-defined limitations. Whether you are new to software requirements or an experienced practitioner, this book will be a valuable resource.
|
||||
|
||||
- [Len Bass, Paul Clements, Rick Kazman - Software Architecture in Practice](https://www.amazon.com/Software-Architecture-Practice-SEI-Engineering/dp/0136886094)
|
||||
|
||||
A classic work on the basics of architectural approaches to software design. Contains a collection of classic architectural patterns and techniques for building large software systems.
|
||||
A classic work on the basics of architectural approaches in software design, containing a collection of classic architectural patterns and techniques for constructing large software systems.
|
||||
|
||||
- [Mark Richards, Neal Ford - Fundamentals of Software Architecture: An Engineering Approach](https://www.amazon.com/Fundamentals-Software-Architecture-Comprehensive-Characteristics/dp/1492043451)
|
||||
|
||||
The book is about the basics of software design. This book, like the previous one, also tells about the basics of design. The difference from the previous book is that this one offers to consider approaches to software design from an engineering point of view: the ability to achieve reliability, repeatability of system components, their predictability, etc.
|
||||
This book provides an overview of the fundamental concepts of software design with a focus on engineering principles. It covers topics such as reliability, repeatability, and predictability of system components, and offers an approach to software design from an engineering perspective.
|
||||
|
||||
- [Martin Fowler - Patterns of Enterprise Application Architecture](https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420)
|
||||
|
||||
A set of architectural approaches for building various corporate systems. This book can be useful for those who build large corporate systems with varying degrees of complexity and focus: financial transactions, document management, etc.
|
||||
The book provides a comprehensive overview of different architectural approaches for building corporate systems. It covers a wide range of applications, from financial transactions to document management, and is designed to be relevant for systems of varying degrees of complexity and focus. Whether you are an experienced software engineer or just starting out in the field, this book can be an invaluable resource for building robust and scalable corporate systems.
|
||||
|
||||
- [Chris Richardson - Microservices Patterns](https://www.amazon.com/Microservices-Patterns-examples-Chris-Richardson/dp/1617294543)
|
||||
|
||||
The book focuses on the modern architectural approach of system design - microservices. This work will explain how to make a consistent transformation of an application from a "monolithic" state into a set of microservices. It contains a set of patterns, as well as tips for refactoring existing code in order to perform this procedure most effectively.
|
||||
This book will be useful for those who want to learn about microservices architecture, as well as for developers and architects who are looking for ways to build scalable and maintainable systems. The book provides practical insights and real-world examples to help readers understand how to design, build, and deploy microservices-based systems. Whether you're just starting to learn about this architectural approach or looking to deepen your existing knowledge, this book can provide valuable guidance and best practices to help you succeed in your projects.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -25,15 +25,15 @@
|
||||
|
||||
## :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.
|
||||
- [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 set of different sources about the C++.
|
||||
- [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e)
|
||||
|
||||
## :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)
|
||||
- [Collection of libraries and frameworks for C++](https://github.com/fffaraz/awesome-cpp)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
# :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.
|
||||
Modern C++ is much simpler than it is commonly perceived. The language has undergone significant changes over the years and has acquired the ability to write safe and efficient code. With the latest standards, there is no need to worry about memory leaks. The compiler has also become much smarter, performing a vast number of optimizations on your code to deliver maximum performance. However, it is still possible to optimize the code through manual tweaks and tricks.
|
||||
|
||||
The language has its shortcomings nonetheless. The main is the absence of a standard package manager. There is bunch of products that aspire to fill this niche, but as yet to no avail.
|
||||
The main shortcoming of the language is the lack of a standard package manager. Although several products aim to fill this gap, none have been successful so far.
|
||||
|
||||
Also, C++ succumbed to its own paradigm: "The developer does not pay for what they do not use". In practice the developers of commercial software aren't too picky about the dependencies, which leads to the reverse situation: the developer pays each time they need a dependency. It leads to "interesting" side effects during the project build. Anyway, this problem is being solved gradually, too.
|
||||
Also, C++ has suffered from its own paradigm of "The developer doesn't pay for what they don't use." In practice, developers of commercial software don't pay much attention to dependencies, which results in the opposite situation where the developer has to pay every time they need a dependency. This leads to "interesting" side effects during the project build. Nevertheless, this problem is gradually being resolved as well.
|
||||
|
||||
To get started with C++ one needs a basic set of school knowledge:
|
||||
- Arithmetic;
|
||||
- Boolean algebra;
|
||||
- Drawing flowcharts;
|
||||
- Number representation in different numeral systems.
|
||||
To get started with C++, one needs a basic understanding of:
|
||||
- Arithmetic
|
||||
- Boolean algebra
|
||||
- Drawing flowcharts
|
||||
- NRepresentation of numbers in different numeral systems
|
||||
|
||||
Despite all the history behind C++ we believe that its modern version is much simpler that it used to be.
|
||||
Despite its history, modern C++ is much simpler than it used to be.
|
||||
|
||||
Don't be afraid to learn it and good luck! :dizzy:
|
||||
Don't be afraid to learn it, and good luck! :dizzy:
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,31 +2,31 @@
|
||||
|
||||
## :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.
|
||||
It is a junior developer who has theoretical knowledge of software development and little practical experience from personal or educational projects. They may also have a theoretical understanding of how the industry works. Junior developers can perform simple tasks within a real project under the guidance of experienced colleagues.
|
||||
|
||||
## :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
|
||||
- Ability to read code from a different developer and understand it
|
||||
- Search and fix bugs using the debugger or using logs
|
||||
- Write tests to the code
|
||||
- Basic knowledge and experience with Git
|
||||
- Ability to read documentation for libraries, frameworks, etc.
|
||||
- Ability to gather and integrate third-party libraries into the project
|
||||
- Ability to read and understand code written by other developers
|
||||
- Ability to search for and fix bugs using the debugger or log data
|
||||
- Ability to write tests for code
|
||||
- Basic knowledge and hands-on experience with Git
|
||||
|
||||
## :bust_in_silhouette: What general skills are expected?
|
||||
|
||||
- Fast learning
|
||||
- Fast learning ability
|
||||
- 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
|
||||
- Ability to ask colleagues questions in a timely and appropriate manner
|
||||
- Ability to work effectively in a team environment.
|
||||
|
||||
## :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.
|
||||
- Don't bury yourself in the task for too long. If after several attempts there is no progress, immediately contact your colleagues for help. They expect that the task will be completed by you within a reasonable period. Your main goal is to solve problems, not create them for the team.
|
||||
- When difficulties arise, try to find a couple of possible solutions yourself, and then approach your mentor. Your mentor will adjust or complement your solution.
|
||||
- Juniors tend to fall into a common trap: the more lines of code are written, the cooler they are as developers. Don't get caught! Remember, the more code you write, the higher the chance of an error. Ideally, the code should be written so that when you return to it six months later, you can quickly recall what it does. A good developer is not someone who writes a lot of code. A good developer behaves like a samurai: he delivers one precise and deadly blow, rather than pointlessly swinging his sword to hit the enemy.
|
||||
- Try to find a group of enthusiastic individuals at your company and join them. They can be a source of knowledge and experience for you.
|
||||
- Don't hesitate to ask questions to more experienced colleagues. There are no stupid questions, only poor answers.
|
||||
- Don't get too absorbed in a task for too long. If after several attempts, you're unable to make progress, reach out to your colleagues for help immediately. They expect the task to be completed within a reasonable time frame. Your primary goal is to solve problems, not create them for the team.
|
||||
- When faced with difficulties, try to come up with a few potential solutions on your own before seeking guidance from your mentor. Your mentor can then adjust or improve your solution.
|
||||
- Junior developers often fall into the trap of thinking that writing more lines of code equates to being a better programmer. Don't make this mistake. The more code you write, the greater the likelihood of errors. Ideally, your code should be written in a way that when you return to it six months later, you can quickly understand what it does. A good developer is not someone who writes a lot of code, but rather behaves like a samurai, delivering one precise and effective strike instead of aimlessly swinging their sword.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,49 +2,48 @@
|
||||
|
||||
## :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.
|
||||
It's a developer who understands the technical context of software development and has the ability to create a design and solution for functionality that is part of an application or component. The design can also be created even when there is an insufficient amount of requirements. This person has a background in commercial experience and is familiar with common business processes in 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.
|
||||
In general, the middle developer solves technical tasks, and compared to a Junior, this person can complete work without help or with minimal assistance from a Senior/Lead engineer.
|
||||
|
||||
|
||||
## :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
|
||||
- Writes readable, extendable, and maintainable code
|
||||
- Knows design patterns and principles, can make technical decisions
|
||||
- Understands the technical context of the language: e.g. how the code is compiled, knows the tools that help to maintain a code lifecycle:
|
||||
- Code writing (IDE, text editors, code quality, best practices, etc.)
|
||||
- Source code and product storage (version system control, package managers, servers, etc.)
|
||||
- Compilation (compilers, build systems, libraries)
|
||||
- Testing (frameworks, testing strategies)
|
||||
- Shipment/Deployment
|
||||
- Execution on a target system,
|
||||
- Has more knowledge on Computer Science foundations (data structures, graphs, finite machines, algorithms)
|
||||
- Does not see a compiler and a programming language as a "magic box" anymore; able to solve any obstacles or surprises by generating hypotheses, validating them, and confirming or rejecting them.
|
||||
- Has a deep understanding of the foundation concepts of C++ and knowledge of other programming languages, able to compare them.
|
||||
- Writes readable, extendable, and maintainable code.
|
||||
- Familiar with design patterns and principles and able to make technical decisions.
|
||||
- Has a clear understanding of the technical context of C++, including:
|
||||
- the code writing process (such as using IDEs, text editors, and following best practices)
|
||||
- source code and product storage (such as using version control systems and package managers)
|
||||
- compilation (compilers, build systems, and libraries)
|
||||
- testing (testing frameworks and strategies)
|
||||
- shipment/deployment and execution on a target system.
|
||||
- Has a strong knowledge of computer science foundations, including data structures, graphs, finite machines, and algorithms.
|
||||
|
||||
|
||||
## :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
|
||||
- Has a team player mindset
|
||||
- Can formulate and share an opinion with other teammates
|
||||
- Has experience of work with different methodologies: Kanban, Agile/Scrum, Waterfall, etc.
|
||||
- Helps other teammates
|
||||
- Is able to make decisions based on personal technical knowledge and background of a project
|
||||
- Understands the concept of "good enough" solutions to prevent overengineering
|
||||
- Has a mindset of being a team player
|
||||
- Can articulate and share opinions with other team members
|
||||
- Has experience working with various methodologies such as Kanban, Agile/Scrum, Waterfall, etc.
|
||||
- Is willing to assist and support other team members.
|
||||
|
||||
|
||||
## :eyes: Tips and recommendations
|
||||
|
||||
### :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.
|
||||
- Improving soft skills is crucial if you want to become a senior developer. Technical expertise takes a backseat and the ability to build relationships and find compromises with others becomes more important. A good developer is not someone who writes a lot of code, but rather, someone who knows how to solve a problem efficiently with minimal losses. Ideally, you should be able to solve a problem without writing any new code or even remove tens or hundreds of lines of code.
|
||||
- The middle role is the most challenging to master. You have to focus on both hard skills and soft skills and business problem-solving. This means you need to concentrate on both aspects at the same time.
|
||||
- Paying attention to soft skills increases your chances of becoming a highly sought-after professional in the market. You can choose to focus on becoming a highly specialized developer and ignore soft skills, but keep in mind that such specialists are not always in high demand and the competition among them is extremely high. If you're ready to compete with the best specialists in the market, then by all means, go ahead. However, we still recommend considering diversifying your skills.
|
||||
|
||||
### :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.
|
||||
- Many middle developers fall into the trap of becoming "fanboys" of technologies, frameworks, design patterns, or methodologies. It's important to be more pragmatic while solving tasks on your project and not just try to adopt the latest ideas for the sake of adding another skill to your resume. The middle role can lead to overengineering or constantly changing frameworks.
|
||||
- If you believe that a library or framework is necessary for a project, it's best to discuss it with a Senior or Lead engineer first. Propose creating a "proof of concept" where you can test all of your hypotheses before adding a new dependency. Don't try to do this behind your team's back, as it could result in increased maintenance costs and unforeseen consequences.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# :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.
|
||||
> Grading is an approach to classify developers based on their skills and experience. Through grading, it is possible to understand how to differentiate the difficulty of tasks and the expected set of skills required to handle them.
|
||||
|
||||
Nowadays, you can meet the following common grading approach. It is possible to mark the following levels:
|
||||
Nowadays, you can encounter the following common grading approach. The following levels can be marked:
|
||||
- Junior;
|
||||
- Middle;
|
||||
- Senior.
|
||||
|
||||
Each company has its own vision of developers grading and a set of skills/responsibilities declared for different levels. It's really simple to meet the following case: you will be promoted as a senior in a first company, but if you go to another one you will be assessed as a middle. Despite all, it's possible to introduce common expectations for each level. We will use a simplified approach declared before to describe each grade.
|
||||
Each company has its own vision of developer grading and a set of skills and responsibilities declared for different levels. It's common to encounter the following situation: you may be promoted to a senior role in one company, but in another company you might be assessed as a mid-level developer. Despite this, it's possible to introduce common expectations for each level. We will use the simplified approach described previously to describe each grade.
|
||||
|
||||
**Example:** You can check this website to get knowledge about leveling systems in different companies: [levels.fyi](https://www.levels.fyi/)
|
||||

|
||||
@@ -15,7 +15,7 @@ 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:
|
||||
You can read these articles to gain understanding about each level and its common expectations:
|
||||
- :alien: [Pre-Junior C++](PreJunior.md)
|
||||
- :yum: [Junior C++](Junior.md)
|
||||
- :sunglasses: [Middle C++](Middle.md)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## :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:
|
||||
It is someone who is familiar with the syntax of the language and can write a simple program without the use of third-party libraries. The program performs simple procedures such as:
|
||||
- arithmetic operations
|
||||
- file manipulation: either reading or writing
|
||||
- wait for the keyboard input
|
||||
@@ -11,36 +11,36 @@ It is someone who is familiar the syntax of the language and can write a simple
|
||||
|
||||
## :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
|
||||
- Understand the compilation and linking process of a C++ program
|
||||
- Write an application making use of arithmetic and logical operations, conditionals, and loops
|
||||
- Write an application using the standard input/output streams
|
||||
- Manipulate pointers and references
|
||||
- Know the types of memory used in an application
|
||||
- Understand basic OOP in the frame of C++: inheritance, polymorphism, encapsulation
|
||||
- Create and build a small working C++ project using one of the IDEs such as Visual Studio or Qt Creator.
|
||||
- Use the debugger through the IDE.
|
||||
- Understand the compilation and linking process of a C++ program.
|
||||
- Write an application that makes use of arithmetic and logical operations, conditionals, and loops.
|
||||
- Write an application that uses the standard input/output streams.
|
||||
- Manipulate pointers and references.
|
||||
- Know the types of memory used in an application.
|
||||
- Understand basic OOP in the context of C++, including inheritance, polymorphism, and encapsulation.
|
||||
|
||||
## :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
|
||||
- A desire to learn and acquire new knowledge
|
||||
- A desire to solve encountered problems
|
||||
- The ability to formulate a query to find a solution to a problem using a search engine or relevant literature.
|
||||
|
||||
## :eyes: Tips and recommendations
|
||||
|
||||
### :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.
|
||||
- Practice and only practice will let you harness C++! You'll forget most of what you read or hear without regular coding.
|
||||
- Don't try to write perfect code. Your main goal is to write a pile of code that WORKS, i.e. does exactly what is required. You need to learn to communicate with the computer. It's similar to studying foreign languages. First you talk sloppily, but then you refine your skills, you get a better feel of the grammar, you expand your vocabulary, and so on.
|
||||
- Don't jump at a huge problem at once - like creating your own game. In the beginning you are likely to lack the knowledge and experience to cope with the task alone. This approach frustrates quickly and leads to the disappointment in oneself and one's abilities, forcing to abandon education. Better progress from simple to complicated, gradually inventing more and more difficult tasks for yourself.
|
||||
- Don't focus on Leetcode and Codewars and other similar resources at first. The purpose of these portals is to refine the skill of the application of classic algorithms and data structures. These playgrounds are designed to abstract away the details of the programming languages. This won't benefit you considerably in the beginning, it's better to focus on the language itself and its capabilities.
|
||||
- There is no single solution to help you learn C++ in a day, week, or month. Be prepared for a long and self-guided process of learning various materials before you are ready to pass an interview and secure your first job offer.
|
||||
- If you find that you don't understand a certain topic, seek out alternative resources.
|
||||
- Practicing and only practicing will enable you to master C++! You'll forget most of what you read or hear without regular coding.
|
||||
- Don't try to write perfect code. Your primary goal is to write code that works and does what is required. You need to learn how to communicate with the computer. This is similar to learning a foreign language. At first, you'll talk sloppily, but as you refine your skills, you'll have a better understanding of grammar, expand your vocabulary, and so on.
|
||||
- Don't tackle a massive problem right away, such as creating your own game. In the beginning, you probably lack the knowledge and experience to handle the task on your own. This approach is likely to quickly become frustrating and lead to disappointment in yourself and your abilities, causing you to abandon your education. It's better to progress from simple to complex, gradually challenging yourself with more and more difficult tasks.
|
||||
- Don't focus on Leetcode, Codewars, or other similar resources at first. These portals are designed to improve your ability to apply classic algorithms and data structures. However, in the beginning, these exercises may not greatly benefit you as they abstract away the details of the programming language. It's better to focus on the language itself and its capabilities.
|
||||
|
||||
### :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.
|
||||
- It's easier to find solutions in English, but don't push yourself too hard if your English proficiency is not strong enough. This can quickly lead to discouragement. Most of the problems you may encounter in the beginning can be found in your native language.
|
||||
- If you feel that your English is not sufficient, start improving it through more enjoyable means: watching series, playing video games, reading fiction, or reading news outlets or articles that interest you. In a few months, you should be able to improve your English comprehension skills.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
## :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.
|
||||
It is a developer who not only understands the technical aspects, but also the business context. They are able to create a design and solution for a component, application, or system, taking both into account. Additionally, a Senior helps other team members to grow and keeps up with the latest developments and trends in the world of software development.
|
||||
|
||||
## :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
|
||||
- Ability to translate tasks from business language into development language and decompose them
|
||||
- Ability to hold a dialogue with the business and explain technical details and difficulties to non-technical stakeholders
|
||||
- Ability to not only make design decisions, but also create component and application architecture
|
||||
- Understanding and use of architectural principles.
|
||||
|
||||
## :bust_in_silhouette: What general skills are expected?
|
||||
|
||||
- High communication skill
|
||||
- Able to independently collect requirements, if necessary
|
||||
- Helps develop team members
|
||||
- Excellent communication skills
|
||||
- Ability to independently gather requirements, if necessary
|
||||
- Assists in the development of team members
|
||||
|
||||
## :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. 🙂
|
||||
Depending on the company's specifics and your own goals, the path of further career development can be either in acquiring recent technologies and technical skills within your chosen field of expertise (for example, specialized areas of mathematics, physics, etc. - the path of a technical expert), or in the area of management and interpersonal interaction (such as tech lead, team lead, project manager, etc.). Choose wisely. 🙂
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,39 +1,34 @@
|
||||
# :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.
|
||||
The main piece of advice that can be given is that you should understand that you are solely responsible for your own development. Of course, you will come across many enthusiasts who will be happy to offer you advice, but no one will create specific tasks or training programs for you. Your best friends in this process will be yourself, Google search, and tutorials.
|
||||
|
||||
## :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.
|
||||
Beginners should not focus too much on standards at the start of their journey. It's recommended to pick up books from the [Beginner's List](Books/PreJunior.md) and learn the fundamentals. Modern books for beginners typically contain limited information about the capabilities of C++11 and newer standards. In the beginning, it's best not to focus on the new language standards.
|
||||
|
||||
A natural question arises: "Why is it like that?" It is like that because modern standards are focused on three main things:
|
||||
It is important to understand why modern standards are primarily focused on fixing issues, providing syntactic sugar, and introducing new functionality. Fixing problems and providing syntactic sugar are straightforward; new constructs are introduced to correct problems in older standards, and new abstractions are introduced to simplify repetitive code. However, with new functionality, it's a bit more complicated.
|
||||
|
||||
- fixing issues
|
||||
- syntactic sugar
|
||||
- new functionality
|
||||
|
||||
If with fixing problems and with syntactic sugar everything is obvious (in the first case, new constructions are introduced that correct the problems of old standards, and in the second, new abstractions appear that simplify writing repetitive code and so on), then with new functionality it's a bit more complicated.
|
||||
|
||||
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.
|
||||
C++, like other languages, evolves by incorporating popular ideas from computer science and successful features from other languages. It is important to study such constructs and use them as necessary, but first, it is crucial to study the foundations that were established by older standards (C++11/C++14), which are described in most modern books for beginners.
|
||||
|
||||
|
||||
## :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
|
||||
- You can read the following book by [Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-2nd-Depth-Bjarne-Stroustrup/dp/0134997832). Regularly check the book republication as it's updated when a new C++ standard is released
|
||||
- You can read the following book by [Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-2nd-Depth-Bjarne-Stroustrup/dp/0134997832). Regularly check the book for updates, as it is revised with each new release of the C++ standard
|
||||
- Professional forums/chats/discussions/etc.
|
||||
- Overview videos on YouTube by community
|
||||
- [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features)
|
||||
|
||||
## :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.
|
||||
- Remember, you should be learning the language at first and not struggling with the work environment instead. Fighting with the environment can lead to complete frustration and loss of motivation.
|
||||
- Remember that many experienced developers run into problems too and can get stuck in "obvious" places. Just take a break, do something else, and then return to the task after a break.
|
||||
- Find like-minded people who are also starting their learning path. So, it will be more interesting for you to immerse yourself in learning the language together as well as share knowledge and experience with each other. It will also help to develop teamwork skills. The days of "free artists" have ended. Almost everywhere you will have to work as a team.
|
||||
- Try to find yourself an experienced mentor. Under his guidance, you will be able to avoid various typical traps and wasted time on them.
|
||||
- Learn at your own pace, no matter what your age may be! Don't be discouraged by stories of "I'm a programmer since I was born." Most of these stories are an example of [survivorship bias](https://en.wikipedia.org/wiki/Survivorship_bias) or an attempt to flatter their vanity at your expense. You have the ability to learn programming from scratch, including C++!
|
||||
- When facing problems, it is advisable to search for solutions on the internet, as most of the problems you encounter are likely already solved. If you cannot find the answer, try reformulating your request in a different way. If you still can't find the solution, try to simplify the problem.
|
||||
- It is important to focus on learning the language rather than struggling with the work environment, as this can lead to frustration and a loss of motivation.
|
||||
- Keep in mind that even experienced developers encounter problems and can get stuck, so taking a break and returning to the task later is a good idea.
|
||||
- Finding like-minded individuals who are also starting their learning path can make the process more enjoyable, as you can share knowledge and experience with each other, and develop teamwork skills. In today's world, almost everywhere you will have to work as a team, so it is helpful to develop these skills.
|
||||
- Having an experienced mentor can also be valuable, as he can guide you to avoid common pitfalls and save you time.
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,45 +4,45 @@
|
||||
|
||||
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++.
|
||||
In fact, it has consistently ranked among the top programming languages in various ratings, such as the [Tiobe](https://www.tiobe.com/tiobe-index/) index. The perception that C++ is a "dead language" emerged during the early 2000s, when the language standardization committee was inactive. However, C++ has since undergone a resurgence, with new features and functionality being added every three years since the C++11 standard. Despite this, there are still those who perpetuate the myths and legends of C++ being a difficult and problematic language, often because they haven't kept up with the developments in the language or have only had limited exposure to it in their education.
|
||||
|
||||
## :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).
|
||||
If you are not familiar with the mentioned combination, it is recommended to focus on learning the basics of C++ first. It is suggested to start developing your first applications using Microsoft Visual Studio IDE. For more information, see the [PreJunior Books](Books/PreJunior.md).
|
||||
|
||||
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...
|
||||
Taking the challenging path may seem cool, but there is a high probability that the amount of information needed to create a "Hello World" program using Linux, Vim, and GCC will be overwhelming. This could lead to early frustration and disillusionment with programming as a whole. Try to follow a path that starts with simple things and gradually increases in complexity. Just like a novice shouldn't try to lift the heaviest weights during their first workout, the same rule applies to learning. Once you are comfortable with the language, you can try developing using Linux. But that is a different story altogether...
|
||||
|
||||
## :question: You'd better master C/Assembler/etc. before learning C++
|
||||
|
||||
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.
|
||||
This statement persists due to two widespread scenarios: it's how C++ was taught in universities in the past, and members of the "Old Guard" went through a similar path. Modern C++ does not require such a challenging approach. The language is self-sufficient and can be learned without any prior background. It's more likely that learning C++ through the "C -> C++" approach will result in confusion and a desire to write C++ in a "C with classes" style.
|
||||
|
||||
## :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.
|
||||
A highly damaging statement that originates from the "Old Guard" or those who were 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.
|
||||
This piece of advice is likely given by those who have extensive experience in developing other languages (such as C, Fortran, Delphi, etc.) and then transitioned to C++. Stroustrup wrote the book [The C++ Programming Language](https://www.amazon.com/C-Programming-Language-4th/dp/0321563840) as a reference, so it must be used in an appropriate manner, which requires some knowledge of the language. Instead, it's better to look at the [Books](Books/Overview.md) section, where you'll find books for all levels of language proficiency.
|
||||
|
||||
## :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.
|
||||
The modern C++ standard, which exceeds 2000 pages, requires payment for access to the up-to-date version and is not composed in a user-friendly manner. While it is commendable for those who learned the language using its standard, it is not recommended as a way to learn for most individuals. Instead, it's better to check out the [Books](Books/Overview.md) section, where you'll find books suitable for various levels of language proficiency.
|
||||
|
||||
## :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.
|
||||
Modern C++ and the tooling that has emerged around the language allow avoiding the lion's share of problems related to undefined behavior. We can give a simple piece of advice: when unsure what a particular construct does, read about it on [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) or other dedicated resources. If you're still in doubt after reading, try rewriting the code in a simpler manner to avoid undefined behavior. There lies great power in simplicity.
|
||||
|
||||
## :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.
|
||||
This is another urban legend from the "Old Guard," who stopped writing C++ before C++11 or those who superficially learned it in university and disregarded the latest standards. Modern C++ has a set of primitives in its standard library that are responsible for automatic memory allocation and deallocation. Manual memory management has fallen by the wayside. Many teams and companies even have the rule: "No raw pointers." Once again, do not neglect the modern tools and sanitizers, as they can detect possible memory leaks at the source code level.
|
||||
|
||||
## :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.
|
||||
Partially, it's true, but it's worth noting that it's not only applicable to C++. The code quality in any language mainly depends on the technical culture of a team and its pioneers, not just the language. The majority of legacy code is produced due to human factors: the developer's skill level, work ethic, and incorrect estimations, among others. Nowadays, there are many projects written in C++ that have been working 24/7 for years and are the foundation of a company's revenue. In such cases, it's dangerous to make any significant changes in a short period. The developers take great care when making changes to avoid any regressions. However, don't think that working on legacy projects cannot help you improve. In fact, these projects can provide a challenge that can give you a wealth of experience in areas such as code reading, reverse engineering, testing, software architecture design, automation, and requirements gathering, among others.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,72 +1,74 @@
|
||||
# :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.
|
||||
Pet-projects are a great opportunity to gain practical experience while learning a programming language, libraries, and/or frameworks. They can also serve as a launching pad for interviews and help initiate job opportunities.
|
||||
|
||||
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!
|
||||
Finding and selecting the right idea for a pet-project can be challenging. To help overcome this, we've compiled a list of links and ideas to get you started. After reading through this list, you should be able to choose the most appropriate idea or be inspired to create one of your own!
|
||||
|
||||
|
||||
## :arrows_counterclockwise: External links
|
||||
|
||||
* [Google Summer of Code](https://summerofcode.withgoogle.com/archive)
|
||||
|
||||
A collection of projects that were offered by various companies or the community as part of the annual student internship program from Google. The archive contains projects from the last few years. A large number of projects for the C++ language are presented. Perhaps you will find something interesting for yourself in the archive for practice, or try your hand at future internships.
|
||||
A collection of projects is offered by various companies and the community as part of the annual Google student internship program. The archive contains projects from recent years, with a significant number of projects for the C++ language available. You may find something of interest for your own practice or consider trying your hand at future internships.
|
||||
|
||||
* [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc)
|
||||
|
||||
The repository contains a collection of pet projects collected for various programming languages. Also includes an extensive list of ideas for C++.
|
||||
The repository holds a collection of pet projects for different programming languages, including an extensive list of ideas for C++.
|
||||
|
||||
* [Programming challenges](https://programming-challenges.jeremyjaydan.dev/) - [PNG image](https://programming-challenges.jeremyjaydan.dev/media/programming-challenges-v4.0.png)
|
||||
|
||||
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 Roulette of Ideas for Pet Projects allows you to set the desired complexity level and spin the wheel. The result of the spin will determine the task for you to solve, chosen randomly. :)
|
||||
|
||||
|
||||
## :boom: The list of pet-project ideas
|
||||
|
||||
### :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.
|
||||
Below is a list of classic video games that don't contain complex AI or dynamic world generation, which can be implemented as a starting point. You can refine additional functionality as you progress. For the graphics library, you can use [SFML](https://www.sfml-dev.org/), which is an easy-to-use library that provides sufficient features for creating simple 2D or 2.5D graphical interfaces using [sprites](https://en.wikipedia.org/wiki/Sprite_(computer_graphics)). If you want to do something more complex with physics applied, you can start with simple engines such as [Box2D](https://box2d.org/) or learn more advanced ones like [Cocos2D](https://www.cocos.com/en/) and [Unreal Engine](https://www.unrealengine.com/en-US/). Remember to follow the rule "from simple to complex" by starting with a simple game and gradually increasing the difficulty.
|
||||
|
||||
* [Snake](https://en.wikipedia.org/wiki/Snake_(video_game_genre))
|
||||
* [Tetris](https://en.wikipedia.org/wiki/Tetris)
|
||||
* [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)
|
||||
* [15 puzzle](https://en.wikipedia.org/wiki/15_puzzle)
|
||||
* [Arkanoid](https://en.wikipedia.org/wiki/Arkanoid)
|
||||
* [Minesweeper ](https://en.wikipedia.org/wiki/Minesweeper_(video_game))
|
||||
* [2048](https://en.wikipedia.org/wiki/2048_(video_game))
|
||||
* [Solitaire](https://en.wikipedia.org/wiki/Solitaire)
|
||||
* [Spider Solitaire](https://en.wikipedia.org/wiki/Spider_(solitaire))
|
||||
* [Ping-pong](https://en.wikipedia.org/wiki/Pong)
|
||||
* [Donkey Kong](https://en.wikipedia.org/wiki/Donkey_Kong_(video_game))
|
||||
* [Labyrinth](https://en.wikipedia.org/wiki/Labyrinth:_The_Computer_Game)
|
||||
* [Network games for 2-4 players: ping-pong, poker, chess, battleships, etc.](https://en.wikipedia.org/wiki/Online_game)
|
||||
- [Snake](https://en.wikipedia.org/wiki/Snake_(video_game_genre))
|
||||
- [Tetris](https://en.wikipedia.org/wiki/Tetris)
|
||||
- [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)
|
||||
- [15 puzzle](https://en.wikipedia.org/wiki/15_puzzle)
|
||||
- [Arkanoid](https://en.wikipedia.org/wiki/Arkanoid)
|
||||
- [Minesweeper ](https://en.wikipedia.org/wiki/Minesweeper_(video_game))
|
||||
- [2048](https://en.wikipedia.org/wiki/2048_(video_game))
|
||||
- [Solitaire](https://en.wikipedia.org/wiki/Solitaire)
|
||||
- [Spider Solitaire](https://en.wikipedia.org/wiki/Spider_(solitaire))
|
||||
- [Ping-pong](https://en.wikipedia.org/wiki/Pong)
|
||||
- [Donkey Kong](https://en.wikipedia.org/wiki/Donkey_Kong_(video_game))
|
||||
- [Labyrinth](https://en.wikipedia.org/wiki/Labyrinth:_The_Computer_Game)
|
||||
- [Network games for 2-4 players: ping-pong, poker, chess, battleships, etc.](https://en.wikipedia.org/wiki/Online_game)
|
||||
|
||||
It's recommended reading the following sources, which contain more information about various algorithms for gamedev. They can be useful for one of the above games, or for your own ideas:
|
||||
* https://www.redblobgames.com/
|
||||
* http://www.squidi.net/three/
|
||||
It is recommended to read the following sources that contain more information about various algorithms for gamedev. They can be useful for one of the games mentioned above, or for your own ideas:
|
||||
- https://www.redblobgames.com/
|
||||
- http://www.squidi.net/three/
|
||||
|
||||
|
||||
---
|
||||
|
||||
### :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."
|
||||
When creating an application, start with the simplest implementation, such as a console application. After each completed step, set a more complex task, such as adding a graphical interface, making the application request data from a source using an HTTP request, and then writing/reading the received data to a file/database, etc. Always follow the principle of "from simple to complex."
|
||||
|
||||
* Network chat (raw sockets or using [gRPC](https://grpc.io/docs/languages/cpp/quickstart))
|
||||
* Calculator
|
||||
* File Manager
|
||||
* Currency Converter
|
||||
* Getting a list of "Pull-Requests" or "Issues" in any Github repository
|
||||
* Routine automation: various calculations and generation of reports in the form of tables
|
||||
Here are some examples of potential projects for beginners:
|
||||
|
||||
- A network chat (raw sockets or using [gRPC](https://grpc.io/docs/languages/cpp/quickstart))
|
||||
- A calculator
|
||||
- A file manager
|
||||
- A currency converter
|
||||
- Retrieving a list of "pull-requests" or "issues" from any Github repository
|
||||
- Automating routine tasks, such as various calculations and generating reports in the form of tables.
|
||||
|
||||
---
|
||||
|
||||
### :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.
|
||||
The following examples are more suitable for students who have taken or recently taken basic courses such as linear algebra, analytical geometry, mathematical analysis, physics, etc. Tasks that involve applying the theory they have learned can help them achieve two objectives: consolidate their knowledge through practical application, and practice programming. This path is not restricted to others, but it is easier for students as their knowledge of academic disciplines is still fresh.
|
||||
|
||||
* Linear algebra library: matrices, vectors, calculations, etc.
|
||||
* Modeling of various processes: physics, theoretical mechanics, etc.
|
||||
* Application of numerical methods: integration, differentiation, approximation, interpolation, etc.
|
||||
- Developing a linear algebra library, which involves working with matrices, vectors, and performing calculations
|
||||
- Modeling various processes, such as physics and theoretical mechanics
|
||||
- Implementing numerical methods, including integration, differentiation, approximation, and interpolation
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# :flashlight: Why and what for the roadmap has been created?
|
||||
# :flashlight: Why was the roadmap created and for what purpose?
|
||||
|
||||
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.
|
||||
|
||||
@@ -10,6 +10,12 @@ This roadmap tries to fill the gap that has been formed. The idea of creation ar
|
||||
|
||||
Also, the map can be useful for those who have already been practicing using C++ for some time in personal and work projects. It can help you to understand what knowledge you are lacking to deepen the level of language proficiency, as well as become a highly qualified specialist.
|
||||
|
||||
Speculation, myths, and fears still surround the C++ language, causing many people to shy away from learning it. Our goal is to dispel these myths and help beginners navigate their way to learning the language.
|
||||
|
||||
There is a shortage of C++ developers in the market. Many active developers have learned the language through sheer determination and not because it was easy to find information. Most educational platforms or courses do not offer high-quality lessons, leaving a gap in relevant information for beginners. It is not sufficient to meet the demands of the market with the current approach to learning C++.
|
||||
|
||||
This roadmap was created after conducting numerous interviews with inexperienced C++ developers, who showed common patterns such as gaps in basic knowledge and a lack of understanding on how to learn the language. It is not only aimed at beginners, but also those who have been practicing C++ for some time in personal and work projects, helping them to deepen their understanding of the language and become highly qualified specialists.
|
||||
|
||||
---
|
||||
|
||||
[**To main page**](../README.md)
|
||||
@@ -1,20 +1,19 @@
|
||||
# :mag: Are you sure that you need C++?
|
||||
# :mag: Are you certain that you require knowledge of C++?
|
||||
|
||||
The first thing about which you should really think is: Why do you need to learn C++?
|
||||
The first thing you should consider is: Why do you want to learn C++?
|
||||
|
||||
The language has specific areas of application. Try to search and dive into them before you start exploring C++. Find the one that interests you, take a close look and it might be that the real situation will be different from your expectations. Here are some examples why it is worth to do it beforehand:
|
||||
The language has specific areas of application, and it's important to understand them before diving into C++. Research and explore these areas to get a better understanding of what you're getting into. Here are a few examples of why it's worth doing this research beforehand:
|
||||
|
||||
- Some development areas look different from their idealized image. Game development is a good example. Alongside with known advantages it has many dark sides: crunches, lack of intelligible management, work for the drawer, etc.
|
||||
|
||||
- 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.
|
||||
- Some areas of development may be different from what you expect. Game development, for example, can have many challenges, such as crunch time, poor management, and work-for-hire situations.
|
||||
- The language you are interested in may not be the most popular in a particular area. For example, in machine learning, Python and its specialized libraries are the most commonly used.
|
||||
|
||||
# :question: I already know C/C#/Java/Python and so on. Can I already start to work using C++?
|
||||
|
||||
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".
|
||||
Having a basic understanding of computer science concepts will certainly be helpful, such as understanding procedural programming, OOP, and other general knowledge. However, you shouldn't rely solely on these concepts. The most common mistake made by beginners is trying to write C++ in the paradigms of other languages. For example, C developers often write C++ programs in a procedural style or think that C++ is just "C with classes".
|
||||
|
||||
C++ is rich in ideas and coding approaches. Therefore, it is recommended to start learning the language with a clean head. Understand its ideas. This will help you to use the language effectively in your work tasks. Knowledge of other languages will help you compare them with each other and identify strengths and weaknesses.
|
||||
C++ is rich in ideas and coding approaches, so it's recommended to start learning the language with an open mind. Try to understand its ideas, as this will help you use the language effectively in your work tasks. Knowledge of other languages can help you compare them and identify their strengths and weaknesses.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# :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.
|
||||
Newborn developers often have a limited understanding of the tools available to make working with code easier, increase efficiency, and protect against many mistakes. These tools are not a silver bullet for the difficulties the language may present, but they can significantly smooth out the rough edges. The following is a list of common and popular tools recognized by developers around the world, but it is only a small portion of what is available. Over time, you will become more familiar with these tools and discover new ones that suit your needs.
|
||||
|
||||
## :page_facing_up: Text editors
|
||||
|
||||
@@ -10,7 +10,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
Powerful and efficient editor for text files and source code. Has a rich library of extensions that will allow you to customize it for yourself. It is also possible to customize it to work with source code: compile, run and debug. It has a powerful search engine for files and folders, which increases the efficiency of searching, reading and working with large projects.
|
||||
A powerful and efficient editor for text files and source code is available. It has a rich library of extensions that enables customization for personal preferences. It can also be configured to work with source code, allowing you to compile, run, and debug your code with ease. Additionally, it has a powerful search engine for files and folders, making it easier to search, read, and work with large projects.
|
||||
|
||||
|
||||
* :arrow_forward: **Notepad++**
|
||||
@@ -19,7 +19,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
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.
|
||||
A lightweight editor for text files and source code, it supports syntax highlighting for common programming languages. Compared to Visual Studio Code, it is more convenient for quickly opening and viewing files and due to its lightweight design, it is comfortable to work with a large number of text files.
|
||||
|
||||
|
||||
## :open_file_folder: IDE (Integrated Development Environment)
|
||||
@@ -30,7 +30,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: Community Edition is free
|
||||
|
||||
Integrated development environment from Microsoft. Provides all the necessary set of tools (code editor, compiler, debugger, profiler, etc.) out of the box. Supports development in various programming languages as well as cross-platform development. A great start for newbies as the modern interface of the studio is as friendly as possible, and practically does not require any adjustment out of the box.
|
||||
An integrated development environment (IDE) from Microsoft, providing a comprehensive set of tools including a code editor, compiler, debugger, and profiler, for various programming languages and cross-platform development. A great option for beginners, as its modern interface is user-friendly and requires minimal customization out of the box.
|
||||
|
||||
|
||||
* :arrow_forward: **Qt Creator IDE**
|
||||
@@ -39,7 +39,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free for open source projects (more details: [Qt Open Source](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5))
|
||||
|
||||
Initially, Qt Creator was positioned as an IDE for developing graphical interfaces for applications in C++. But over the time, the framework has acquired tremendous opportunities. As a result, the framework has grown into a full-fledged ecosystem for developing cross-platform applications. It provides a large library of primitives for various needs: networking, graphical interface, database work, work with popular formats: images, text files, etc. Modern Qt Creator acts as a competitor for Visual Studio, but mostly it has gained developers who develop applications for various Linux distributions.
|
||||
Initially, Qt Creator was positioned as an IDE for developing graphical interfaces for C++ applications. Over time, the framework has acquired numerous capabilities and evolved into a comprehensive ecosystem for cross-platform development. It offers a vast library of primitives for various needs such as networking, graphical interface, database work, and handling popular formats like images and text files. Today, Qt Creator serves as a competitor to Visual Studio and is particularly popular among developers creating applications for various Linux distributions.
|
||||
|
||||
|
||||
* :arrow_forward: **Eclipse IDE**
|
||||
@@ -48,7 +48,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
Quite a powerful multi-platform development environment, but at the same time heavyweight. A key feature of Eclipse is modularity. The philosophy of Eclipse is that any developer can modify the development environment for himself by connecting additional extensions. Taken as a basis by some compiler developers for specialized OS or microcontrollers (for example: QNX real-time OS).
|
||||
Eclipse is a highly capable multi-platform development environment, but it is also quite heavy. One of the key features of Eclipse is its modularity. The philosophy of Eclipse is that any developer can modify the development environment to fit their needs by connecting additional extensions. It is used as a foundation by some compiler developers for specialized OS or microcontrollers, such as the QNX real-time OS, Red-Hat Linux and more.
|
||||
|
||||
|
||||
* :arrow_forward: **JetBrains Clion IDE**
|
||||
@@ -57,7 +57,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free for students and teachers
|
||||
|
||||
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++.
|
||||
Powerful multi-platform IDE from JetBrains. Like other IDEs, it provides a comprehensive set of tools for comfortable software development. It is convenient for cross-platform development in both C and C++.
|
||||
|
||||
## :flashlight: Extensions
|
||||
|
||||
@@ -67,13 +67,13 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free for students and teachers
|
||||
|
||||
Extension for MS Visual Studio. Adds additional features for working with source code: extended highlighting of the code and hints on it, building dependency diagrams between projects, recommendations on common errors in the code and how to improve it, extended information during debugging, advanced search, project navigation, etc. It is a competitor to Visual Assist.
|
||||
An extension for Microsoft Visual Studio, it adds advanced features for working with source code such as extended code highlighting and hints, building dependency diagrams between projects, recommendations for correcting common errors in code, enhanced information during debugging, improved searching and navigating within projects, etc. It competes with Visual Assist.
|
||||
|
||||
* :arrow_forward: **Visual Assist**
|
||||
|
||||
Site: https://www.wholetomato.com
|
||||
|
||||
Extension for MS Visual Studio. Adds additional features for working with source code: extended code highlighting and hints on it, extended information during debugging or when writing code, advanced search, project navigation, etc. It is a competitor to JetBrains ReSharper.
|
||||
An extension for Microsoft Visual Studio that provides additional features for working with source code, such as enhanced code highlighting and hints, increased information during debugging and coding, advanced search capabilities, and improved project navigation. It competes with JetBrains ReSharper.
|
||||
|
||||
|
||||
* :arrow_forward: **Incredibuild**
|
||||
@@ -82,7 +82,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: have to contact incredibuild team to find the price
|
||||
|
||||
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.
|
||||
Application/extension for distributed compilation of projects, which unites all developer workstations into a single network, providing the possibility of using dozens of machines to assemble and compile the source code. This speeds up the build process for large projects.
|
||||
|
||||
## :electric_plug: Package managers and build systems
|
||||
|
||||
@@ -90,7 +90,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Site: https://cmake.org
|
||||
|
||||
A cross-platform automation system for building an application from source code. Generates the necessary artifacts for the subsequent assembly of the application on the target platform. It is currently considered the "standard" tool for building various libraries when supplied as source.
|
||||
A cross-platform automation system for building an application from source code, which generates the necessary artifacts for subsequent assembly on the target platform. It is currently considered the standard tool for building various libraries when supplied as source.
|
||||
|
||||
* :arrow_forward: **Conan**
|
||||
|
||||
@@ -98,7 +98,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
A package manager as well as a dependency manager for organizing C++ libraries and frameworks. Supports work with various platforms: Windows, Linux, etc. Supports integration with CMake, Visual Studio, etc.
|
||||
A package manager and dependency manager for organizing C++ libraries and frameworks. It supports work on various platforms such as Windows and Linux, and has integration with tools such as CMake and Visual Studio.
|
||||
|
||||
|
||||
* :arrow_forward: **Ninja**
|
||||
@@ -107,7 +107,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
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.
|
||||
Project build manager for C and C++ applications. The main advantage of this manager is quick project assembly. It supports cross-platform development and works with all popular compilers.
|
||||
|
||||
|
||||
## :mag: Code analyzers
|
||||
@@ -118,7 +118,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: 30 days trial
|
||||
|
||||
Cross-platform (Windows, Linux, MacOS) static code analyzer from the Russian company PVS-Studio. The main task of the analyzer is to analyze the source code for various errors that are not detected by compilers or at the stage of code review. It helps to minimize number of errors associated with the syntactic structures of the language and their pitfalls.
|
||||
Cross-platform (Windows, Linux, MacOS) static code analyzer by PVS-Studio. The main aim of the analyzer is to analyze the source code for various errors that may go undetected by compilers or during code review. It helps reduce the number of errors related to language syntax and pitfalls.
|
||||
|
||||
|
||||
* :arrow_forward: **Cpp Check**
|
||||
@@ -127,7 +127,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
Free code analyzer. It will help you catch common errors by analyzing the source code, which may be missed by the compiler or during the code review process. Cross-platform, supports popular Linux distributions and Windows.
|
||||
A free code analyzer that helps you catch common errors in your source code that might be missed by the compiler or during code review. It is cross-platform and supports popular Linux distributions and Windows.
|
||||
|
||||
|
||||
* :arrow_forward: **Valgrind**
|
||||
@@ -136,7 +136,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
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.
|
||||
A set of tools that can help you investigate various problems while the application is running, such as memory leaks and performance profiling. It is compatible with multiple Linux distributions.
|
||||
|
||||
## :floppy_disk: Git clients
|
||||
|
||||
@@ -146,7 +146,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free for open source projects
|
||||
|
||||
A complete cross-platform tool for working with git repositories. Out of the box, it provides the following features: receiving/sending changes to the repository, viewing the history of changes, a text editor for resolving conflicts, etc. Supports integration with all popular repositories: GitHub, BitBucket, GitLab, etc.
|
||||
A complete, cross-platform tool for working with Git repositories. Out of the box, it provides the following features: receiving and sending changes to the repository, viewing the history of changes, a text editor for resolving conflicts, etc. Supports integration with all popular repositories like GitHub, BitBucket, GitLab, etc.
|
||||
|
||||
* :arrow_forward: **Atlassian SourceTree**
|
||||
|
||||
@@ -154,7 +154,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free
|
||||
|
||||
A great free alternative for working with git using GUI. Has the same functionality as SmartGit. The only exception is absence of its own editor for conflict resolution. But this can be easily fixed by integrating Visual Code or any other editor that can compare files with each other. In all other respects, it completely duplicates the functionality of SmartGit: cross-platform, supports integration with public repositories: GitHub, BitBucket, GitLab, etc.
|
||||
A great free alternative for working with Git using a GUI. It has the same functionality as SmartGit, with the exception of the absence of its own editor for conflict resolution. However, this can be easily fixed by integrating Visual Studio Code or any other editor that can compare files. In all other respects, it completely duplicates the functionality of SmartGit: it is cross-platform and supports integration with popular repositories such as GitHub, BitBucket, GitLab, etc.
|
||||
|
||||
|
||||
* :arrow_forward: **Git Kraken**
|
||||
@@ -163,7 +163,7 @@ Newborn developers have a limited understanding of the tools available, which ma
|
||||
|
||||
Price: free for open source projects
|
||||
|
||||
Cross-platform and highly efficient client for Windows, Linux, MacOS. Supports integration with GitHub, Bitbucket and Gitlab, as well as all the necessary functionality for everyday work: studying the history of changes, receiving/submitting changes, switching between branches, built-in conflict resolution editor, etc.
|
||||
A cross-platform and highly efficient client for Windows, Linux, and MacOS. It supports integration with GitHub, Bitbucket, and Gitlab, and has all the necessary functionality for everyday work, such as viewing the change history, submitting and receiving changes, switching between branches, and a built-in conflict resolution editor.
|
||||
|
||||
---
|
||||
|
||||
|
||||
22
README.md
22
README.md
@@ -2,17 +2,17 @@
|
||||
|
||||
## :speech_balloon: Additional languages: [Русский](Russian/README.md)
|
||||
|
||||
C++ is still one of the most popular development languages: [2021](https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof), [2022](https://survey.stackoverflow.co/2022/#most-popular-technologies-language-prof). There are quite a number of people that want to start learning it and become a C++ developer. They face with the questions: "Where should I start? What and in what order should I study? What books should I read?"
|
||||
C++ is still one of the most popular development languages in [2021](https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof) and [2022](https://survey.stackoverflow.co/2022/#most-popular-technologies-language-prof). There are quite a few people who want to start learning C++ and become a developer. They face the questions: "Where should I start? What and in what order should I study? What books should I read?
|
||||
|
||||
We tried to answer these questions in the presented roadmap. The map focuses on general competencies and skills that could be found in most projects. It is designed to help those who are just starting their education or have little experience. You can create a more productive learning plan without being distracted by side information if you study the set of listed materials. It will help you to master C++ at the level that is used in many commercial projects.
|
||||
We have tried to answer these questions through the presented roadmap. The roadmap focuses on the general competencies and skills that are commonly found in most projects. It is designed to assist those who are just beginning their education or have limited experience. You can create a more effective learning plan without being sidetracked by irrelevant information if you study the materials listed. It will aid you in mastering C++ to the level commonly used in many commercial projects.
|
||||
|
||||
Before you start exploring the map, it's recommended to read the articles listed below.
|
||||
It is recommended that you read the articles listed below before starting to explore the map.
|
||||
|
||||
|
||||
# :bookmark_tabs: Articles
|
||||
|
||||
1. :flashlight: [Why and what for the roadmap has been created?](English/Rationale.md)
|
||||
1. :mag: [Are you sure that you need C++?](English/SelfIdentification.md)
|
||||
1. :flashlight: [Why was the roadmap created and for what purpose?](English/Rationale.md)
|
||||
1. :mag: [Are you certain that you require knowledge of C++?](English/SelfIdentification.md)
|
||||
1. :space_invader: [C++ - It's Not Rocket Science](English/FunCpp.md)
|
||||
1. :clipboard: [Application areas of C++](English/AreasOfApplication.md)
|
||||
1. :ghost: [Myths and Legends of C++](English/Mythbusters.md)
|
||||
@@ -31,22 +31,22 @@ The roadmap is available in the following formats:
|
||||
* :arrow_forward: [Miro](https://miro.com/app/board/o9J_lpap34Q=/)
|
||||
* :arrow_forward: [GraphML](English/Graph/roadmap.svg)
|
||||
|
||||
More information on how to view and edit graphML file is stored [here](English/Graph/README.md)
|
||||
Instructions on how to view and edit a graphML file can be found [here](English/Graph/README.md)
|
||||
|
||||
# :key: License and conditions
|
||||
The roadmap is published under the license **CC BY-NC-SA 4.0**: [RUS](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ru) || [ENG](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en). In a nutshell:
|
||||
|
||||
- You can share, adopt or copy any chunk of the presented materials only in case you share a link to the original sources
|
||||
- It's **PROHIBITED** to use any chunk of the materials with any commercial reason.
|
||||
- You may only share, adopt, or copy any portion of the presented materials if you provide a link to the original sources.
|
||||
- It's **PROHIBITED** to use any portion of the materials for any commercial purposes.
|
||||
|
||||
|
||||
# :mailbox: Feedback and communication
|
||||
|
||||
In case of any remarks, proposals or ideas don't hesitate to contact us. We really appreciate your support :)
|
||||
In the event of any comments, proposals, or ideas, please do not hesitate to contact us. We truly value your support.
|
||||
|
||||
Please use one of the following paths via Github:
|
||||
You can reach us through one of the following channels via Github:
|
||||
- In case of any proposal or modification in the **repository** content - create a new PR in [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls)
|
||||
- In case of any proposal or modification in the **repository** content - submit a new Issue in [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (Unfortunately, the Miro framework doesn't support a history tracker and the access to the roadmap is limited. We add all changes manually after their review and acceptance)
|
||||
- In case of any proposal or modification in the **repository** content - submit a new Issue in [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (Unfortunately, the Miro framework does not have a history tracker and access to the roadmap is restricted. All changes are added manually after they have been reviewed and approved)
|
||||
|
||||
|
||||
# :telephone: Contacts
|
||||
|
||||
Reference in New Issue
Block a user