├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── jekyll-gh-pages.yml ├── Chinese ├── AreasOfApplication.md ├── Books │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ └── Senior.md ├── CommunitySources.md ├── FunCpp.md ├── Grades │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ ├── Senior.md │ └── Source │ │ └── GradeTable.PNG ├── Graph │ ├── README.md │ ├── example.png │ ├── roadmap.graphml │ └── roadmap.svg ├── HowToStudy.md ├── Mythbusters.md ├── PetProjects.md ├── README.md ├── Rationale.md ├── SelfIdentification.md └── Tooling.md ├── English ├── AreasOfApplication.md ├── Books │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ └── Senior.md ├── CommunitySources.md ├── FunCpp.md ├── Grades │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ ├── Senior.md │ └── Source │ │ └── GradeTable.PNG ├── Graph │ ├── README.md │ ├── example.png │ ├── roadmap.graphml │ └── roadmap.svg ├── HowToStudy.md ├── Mythbusters.md ├── PetProjects.md ├── Rationale.md ├── SelfIdentification.md └── Tooling.md ├── LICENSE.md ├── README.md ├── Russian ├── AreasOfApplication.md ├── Books │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ └── Senior.md ├── CommunitySources.md ├── FunCpp.md ├── Grades │ ├── Junior.md │ ├── Middle.md │ ├── Overview.md │ ├── PreJunior.md │ ├── Senior.md │ └── Source │ │ └── GradeTable.PNG ├── Graph │ ├── README.md │ ├── example.png │ ├── roadmap.graphml │ └── roadmap.svg ├── HowToStudy.md ├── Mythbusters.md ├── PetProjects.md ├── README.md ├── Rationale.md ├── SelfIdentification.md └── Tooling.md └── _config.yml /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/jekyll-gh-pages.yml: -------------------------------------------------------------------------------- 1 | # Sample workflow for building and deploying a Jekyll site to GitHub Pages 2 | name: Deploy Jekyll with GitHub Pages dependencies preinstalled 3 | 4 | on: 5 | # Runs on pushes targeting the default branch 6 | push: 7 | branches: ["main"] 8 | 9 | # Allows you to run this workflow manually from the Actions tab 10 | workflow_dispatch: 11 | 12 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 13 | permissions: 14 | contents: read 15 | pages: write 16 | id-token: write 17 | 18 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 19 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 20 | concurrency: 21 | group: "pages" 22 | cancel-in-progress: false 23 | 24 | jobs: 25 | # Build job 26 | build: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - name: Checkout 30 | uses: actions/checkout@v4 31 | - name: Setup Pages 32 | uses: actions/configure-pages@v5 33 | - name: Build with Jekyll 34 | uses: actions/jekyll-build-pages@v1 35 | with: 36 | source: ./ 37 | destination: ./_site 38 | - name: Upload artifact 39 | uses: actions/upload-pages-artifact@v3 40 | 41 | # Deployment job 42 | deploy: 43 | environment: 44 | name: github-pages 45 | url: ${{ steps.deployment.outputs.page_url }} 46 | runs-on: ubuntu-latest 47 | needs: build 48 | steps: 49 | - name: Deploy to GitHub Pages 50 | id: deployment 51 | uses: actions/deploy-pages@v4 52 | -------------------------------------------------------------------------------- /Chinese/AreasOfApplication.md: -------------------------------------------------------------------------------- 1 | # :clipboard: C++的应用领域 2 | 3 | C++ 语言具有广泛的应用领域,主要在需要高性能或低内存消耗时使用。如果想了解更多关于 C++ 特定应用领域的信息,可以参考以下资源: 4 | 5 | - [C++ 的 12 个实际应用场景](https://www.softwaretestinghelp.com/cpp-applications/) 6 | 7 | - [为什么和在哪里仍然需要使用 C/C++ 语言?](https://hackernoon.com/why-and-where-should-you-still-use-cc-languages-6l1r838gh) 8 | 9 | - [你可以用 C++ 做些什么?](https://www.ko2.co.uk/what-can-you-do-with-c-plus-plus/) 10 | 11 | - [C++ 应用案例](https://www.stroustrup.com/applications.html) 12 | 13 | - [C++ 被用来做什么?](https://www.codecademy.com/resources/blog/what-is-c-plus-plus-used-for/) 14 | 15 | --- 16 | 17 | [**返回主页**](README.md) -------------------------------------------------------------------------------- /Chinese/Books/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: 初级开发者 2 | 3 | ## :innocent: 动机和经验 4 | 5 | - [罗伯特·马丁 - 代码整洁之道](https://book.douban.com/subject/4199741/) 6 | 7 | Uncle Bob 分享了他在 IT 行业中如何“生存”并取得成功的建议。这本书不仅涉及技术技能,还介绍了心理挑战以及应对它们的方法。 8 | 9 | - [罗伯特·马丁 - 整洁代码:可持续软件的艺术](https://book.douban.com/subject/3032825/) 10 | 11 | 尽管你可能会遇到关于这本书的批评,但我们仍然认为它可以成为新开发人员短期内有价值的资源。该书收集了一系列有效技巧,可以帮助您编写结构良好、易读、易于维护的代码。然而,重要的是不要将此书视为圣经,并避免将其变成“货物崇拜”。相反,请明智地使用这些知识,并选择最适合您需求并改善您编码风格的技术。 12 | 13 | - [史蒂夫·麦康奈尔 - 代码大全(第 2 版)](https://book.douban.com/subject/1477390/) 14 | 15 | 尽管年代久远,但该书仍可被视为开发人员的“圣经”,因为它提供了 IT 行业全面概述。它提供了大量实用建议,告诉你如何成长和发展成顶尖专业人士。 16 | 17 | ## :bar_chart: 计算机科学 18 | 19 | - [Thomas H. Cormen - 算法导论(原书第 3 版)](https://book.douban.com/subject/20432061/) 20 | 21 | 这本书是《图解算法》很好地跟进材料。深入探讨常见排序算法和列表操作等内容,并提供更深入信息。文体平易近人友好。阅读此书有助于准备自己深入研究算法领域。 22 | 23 | ## :pencil: C++ 24 | 25 | - [Scott Meyers - Effective C++:改善程序与设计 55 个具体做法(第三版)](https://book.douban.com/subject/25953851/) 26 | 27 | 这本书是 C++ 基础知识方面最佳教程手册之一。虽然它涵盖 C++03 特性,但所提供信息依旧有价值且相关性强。该指南中所列出来推荐都非常适用于最新标准版本。 28 | 29 | - [Jason Turner - C++ 最佳实践:45 个简单规则和具体行动项目,以获得更好的 C++](https://www.amazon.com/Best-Practices-Simple-Specific-Action/dp/B08SJSZKJ5) 30 | 31 | 这是一份针对经验不足的 C++ 开发人员的技巧汇编,重点放在最常见的错误上。解释简洁明了。大多数提示包括指向其他资源的链接。由于该书没有对每条建议进行彻底检查,因此建议将来深入研究每一个建议,以真正理解它们背后的原因。 32 | 33 | - [Herb Sutter, Andrei Alexandrescu - C++ 编程规范:101 条规则、准则与最佳实践](https://book.douban.com/subject/26899830/) 34 | 35 | 这本小书概述了商业项目中编写代码的常见最佳实践。这是从各种公司收集到的经验总结。这本书也是[C++ 核心准则](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) 的基础之一。建议先阅读本书再访问 C++ 核心准则网站。它将为您提供有关项目中使用代码指南的第一印象。阅读完本书后,您可以访问 C++ 核心准则网站获取最新批准方法。 36 | 37 | ## :electric_plug: 硬技能 38 | 39 | - [Eric Freeman, Elisabeth Robson - Head First 设计模式:面向对象设计基础(中文版)](https://book.douban.com/subject/2243615/) 40 | 41 | 该书是学习设计模式的完美起点。另外一个选择是[refactoring.guru](https://refactoring.guru/design-patterns),但如果使用这本书,则可以进行大量练习,帮助您更好地理解常见设计模式思想。 42 | 43 | - [Sanjay Madhav, Josh Glazer - 网络多人游戏架构与编程](https://book.douban.com/subject/27135506/) 44 | 45 | 该书是网络理论方面出色介绍,并通过视频游戏示例解释网络基础知识。它将帮助你编写第一个可通过网络工作应用程序,并且你会获得与在 C++ 中处理网络相关问题方面有关联系方面实际经验。该书中所有示例都使用 C++11 /14 编写。 46 | 47 | --- 48 | 49 | [**返回**](Overview.md) | [**回到主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Books/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: 中级 2 | 3 | ## :pencil: C++ 4 | 5 | - [Scott Meyers - Effective Modern C++:改善 C++11 和 C++14](https://book.douban.com/subject/30178902/) 6 | 7 | 这是 Scott Meyers 的书籍系列中的新章节。本书汇编了一组针对 C++11 / 14 标准的技巧。 8 | 9 | - [Anthony Williams - C++ 并发编程实战](https://book.douban.com/subject/35653912/) 10 | 11 | 本书是多线程编程和使用标准库特性的全面指南。它提供了有关所有原语及其“幕后”复杂性的详细说明。 12 | 13 | - Herb Sutter: 14 | - [Exceptional C++:47 个 C++工程难题、编程问题和解决方案](https://book.douban.com/subject/1459013/) 15 | - [Exceptional C++ Style: 40 个新的工程难题、编程问题及解决方案](https://book.douban.com/subject/1470842/) 16 | - [More Exceptional C++: 40 个新的工程难题、编程疑问及解决方法](https://book.douban.com/subject/1244943/) 17 | 18 | 这些书籍涵盖了许多与在 C ++中设计或编写代码相关的任务,并提供了一系列有效解决方案。其中许多解决方案被认为是经典习惯用法,广泛应用于各种项目中。 19 | 20 | - [David Vandevoorde - C++ Templates: The Complete Guide](https://book.douban.com/subject/1455780/) 21 | 这本最新的关于 C++ 元编程,特别是模板的相关书籍,全面描述了近期标准中添加的相关技术和基础知识,包括 C++17。如果你想要编写通用和参数化代码,这本书将成为你不可或缺的资源,并提供有关模板基础知识以及与不同技术相关的许多细微差别。 22 | 23 | ## :bicyclist: 优化 C++应用程序 24 | 25 | - [Kurt Guntheroth - C++ 性能优化指南](https://book.douban.com/subject/27666339/) 26 | 这本书是一本改善 C++ 应用程序性能的指南。该书中一些建议基于 Herb Sutter 或 Scott Meyers 所述的各种习语和技巧。建议在阅读前面提到过的书籍后再阅读此书。 27 | 28 | - [Agner Fog - Optimizing software in C++](https://agner.org/optimize/optimizing_cpp.pdf) 或者[Optimization manuals](https://agner.org/optimize) 29 | 实践导向指南为使用 C++ 开发或涉及与 CPU、内存等交互方面进行了全面介绍潜在优化可能性提供了详尽信息。 30 | 31 | ## :electric_plug: 硬技能 32 | 33 | - [Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 或 "四人组" - 《设计模式:可复用面向对象软件的基础》](https://book.douban.com/subject/34262305/) 34 | 35 | 这本书是关于设计模式的经典指南。每个模式都有详细的描述和适当使用案例的建议。这本书是 Eric Freeman 的《Head First Design Patterns》的好后续读物。然而,准备好了吗?因为这本书比前一本更加复杂。 36 | 37 | - [Gary McLean Hall - 自适应代码](https://www.amazon.com/Adaptive-Code-Developer-Best-Practices/dp/0136891446) 38 | 这本书是理解软件设计中 SOLID 原则的优秀资源。解释以简单易懂的方式呈现出来,使它们易于理解。C# 编写的代码示例也很简单,并有效地说明了原则。 39 | 40 | - [Robert Martin - 架构整洁之道](https://book.douban.com/subject/30333919/) 41 | 这本由 Uncle Bob 写作提供了如何从架构角度考虑软件设计方面指导。它强调在开始编码之前思考应用程序或组件体系结构的重要性。该书提供了分析解决方案设计时需要考虑什么以及帮助避免常见软件设计错误等见解。对于想要深入了解软件设计中架构任务并寻求获得更深入理解领域知识点起点良好者而言,这本书是一个不错选择。此书所包含知识被工程师广泛使用,并将帮助他们避免普遍错误。 42 | 43 | - [Samary Baranov - 《有限状态机和算法状态机:快速、简单地进行复杂有限状态机设计》](https://www.amazon.com/Finite-State-Machines-AlgorithmiComplex-ebook/dp/B078RYYBCJ) 44 | 这是一份关于如何运用有限机器理论进行编程实践指南短小精干且实用性强。你不会找到比这更简单、更优雅地阐述有限机器理论及其实际应用方法。 45 | 46 | - [Vladimir Khorikov - 单元测试原则、实践和模式:使用 C# 示例进行单元测试、Mocking 和集成测试效果良好](https://www.amazon.com/gp/product/B09782L692/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i0) 47 | 48 | 该图书提供了在单位测试领域常见推荐事项、模式和反模式详细概述。阅读完此图书后,您将掌握创建成功项目所需所有内容,通过良好测试轻松扩展且易于维护。 49 | 50 | ## :zap: 操作系统 51 | 52 | - [Andrew S. Tanenbaum - 现代操作系统](https://book.douban.com/subject/27096665/) 53 | 这是一本关于操作系统的综合指南,涵盖了其构建和各个方面,如文件系统、网络、内存管理、任务调度和多线程。该书用简单易懂的语言提供深入的解释,不专注于特定的操作系统分发。每章都对操作系统的不同方面进行了详细探讨,使它成为理解这个复杂主题的基础资源。 54 | 55 | - [Mark Russinovich - 深入解析 Windows 操作系统 卷 1](https://book.douban.com/subject/19978475/), [Mark Russinovich - 深入解析 Windows 操作系统 卷 2](https://book.douban.com/subject/20473374/) 56 | 57 | 本书深入探讨了与前一本书相同的主题,但重点专注于微软 Windows 操作系统。它提供了一个深入而详细地查看 OS 每个方面,并着重介绍 Windows 可能没有被开发人员正式声明的各种微妙差别和方面。对于那些需要与 OS 系统库密切交互并且需要低级应用程序开发人员来说是一个有用资源。 58 | 59 | - [Christopher Negus - Linux 宝典](https://book.douban.com/subject/26807323/) 60 | 61 | 本书可以作为 Tanenbaum 工作后续研究 Linux 操作系统复杂性时使用。该书包括对 OS 各个方面进行详细分析,并侧重于像 Red Hat、Ubuntu 和 Fedora 等流行版本。对于日常使用 Linux 的开发人员来说是一个理想资源。 62 | 63 | - [Ulrich Drepper - 关于内存编程者应知道什么?](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf) 64 | 65 | 这篇文章全面介绍 PC 内存如何运作以及为什么会按照所描述方式运行。它不仅提供高层次信息,还深入探讨低层次问题,因此非常适合那些希望更深入地研究这一主题内容。 66 | 67 | ## :globe_with_meridians: 计算机网络 68 | 69 | - [Andrew S. Tanenbaum - 计算机网络](https://book.douban.com/subject/10510747/) 70 | 71 | 计算机网络理论基础上经典著作提供从物理层开始到数据传输协议结束之间详尽描述。对于紧密参与与网络交互项目中开发人员将极其有用。 72 | 73 | - [Victor Olifer –计算机网络:设计网络原则、技术和协议](https://book.douban.com/subject/2589366/) 74 | 75 | 本书全面介绍计算机网络基础知识,可能比 Tanenbaum 工作呈现出略微更加复杂。因此,建议选择最适合您风格呈现信息 的图书 76 | 77 | [**返回**](Overview.md) | [**回到主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Books/Overview.md: -------------------------------------------------------------------------------- 1 | # :books: 书籍和资源 2 | 3 | 本指南提供了一系列适合不同难度水平学习 C++的书籍。建议您确定自己当前的熟练程度,并选择相匹配的书籍。本指南的重点是提供对 C++和软件开发的普遍理解,而不是涵盖专业主题。如果您正在寻找更具体的信息,建议向您感兴趣领域中的专家寻求帮助。 4 | 5 | - :blue_book: [PreJunior](PreJunior.md) 6 | - :green_book: [Junior](Junior.md) 7 | - :orange_book: [Middle](Middle.md) 8 | - :closed_book: [Senior](Senior.md) 9 | 10 | --- 11 | 12 | [**返回主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Books/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: Pre-Junior 2 | 3 | ## :innocent: 动机和经验 4 | 5 | - [Chad Fowler - 我编程,我快乐](https://book.douban.com/subject/4923179/) 6 | 这本书是初学者动机类书籍中的经典之作。查德·福勒分享了他成为专业程序员并在 IT 行业中导航的经验。 7 | 8 | ## :bar_chart: 计算机科学 9 | 10 | - [Wladston Ferreira Filho - 计算机科学精髓:解决计算问题的艺术](https://book.douban.com/subject/30382590/) 11 | 该书全面概述了计算机科学中各种基本概念,包括数学、算法、数据库以及计算机硬件基础知识。它是发现和优先考虑领域兴趣点的理想起点。 12 | 13 | - [Charles Petzold - 编码:隐匿在计算机软硬件背后的语言](https://book.douban.com/subject/4822685/) 14 | 在开始 C++研究之前,建议先阅读这本书。它提供了一个简单易懂的关于电脑如何工作的解释,避免复杂技术或理论方面。此书介绍的概念是基础性质,并将在未来保持相关性。它还有助于您更好地理解后来 C++基本思想。这本书作为上一本深入探讨电脑运作方式补充资料。 15 | 16 | - [Aditya Bhargava - 算法图解](https://book.douban.com/subject/26979890/) 17 | 该书为初学者提供了通俗易懂地介绍计算机科学中各种不同类型 (搜索,图形,贪心等) 的常见高效率应用场景。同时也包含大量可视化例子帮助读者更好得理解其中原理。 18 | 19 | ## :pencil: C++ 20 | 21 | - [Stephen Prata - C++ Primer Plus](https://book.douban.com/subject/10789789/) 22 | 23 | 这本书是 C++世界中刚开始学习的人们的绝佳起点。无需先前知识即可入门。该书还包括一系列练习,可以帮助您获得实践经验和更深入地理解 C++基础知识。 24 | 25 | - [Stanley Lippman - C++ Primer](https://book.douban.com/subject/25708312/) 26 | 27 | 这本书是上一本书的很好补充。建议与 Prata 的书并行使用,并找到两者之间的平衡,因为信息呈现方式不同。混合来自两本书的信息将有助于更好地理解语言的各个主题和方面。 28 | 29 | - [Andrew Koenig - Accelerated C++中文版](https://book.douban.com/subject/1143879/) 30 | 31 | 对于初学者而言,这本书是一个极佳选择。每章提供了对语言不同基础方面全面描述。完成每章后,读者都会得到一组练习来加强他们对所学内容的理解和掌握程度。该书涵盖了最基础、最重要、能够应用在未来新语言机制研究中最核心主题。 32 | 33 | ## :electric_plug: 硬技能 34 | 35 | - [MSDN](https://learn.microsoft.com/zh-cn/cpp/build/vscpp-step-0-installation?view=msvc-170) 36 | 37 | 如果你刚开始学习编程,建议在 Microsoft Visual Studio(社区版)IDE 中进行实践和做练习。它目前是针对初学者最友好易用性较高 IDE 之一,而且完全免费!这将使您专注于语言而不被开发环境所困扰。MSDN 上提供了一个有用指南,解释如何安装 Visual Studio、创建第一个控制台项目以及实现第一个应用程序。 38 | 39 | --- 40 | 41 | [**返回**](Overview.md) | [**回到首页**](../README.md) 42 | -------------------------------------------------------------------------------- /Chinese/Books/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: 高级 2 | 3 | ## :pencil: C++ 4 | 5 | - 对于高级学生,没有特定的书籍推荐。在这个层次上,假设您已经对 C++的基础知识有很好的理解。唯一的挑战是要了解 C++生态系统中最新标准、新功能和工具。 6 | 7 | ## :muscle: 团队管理 8 | 9 | - [J. Hank Rainwater - Herding Cats:程序员领导程序员入门](https://www.amazon.com/Herding-Cats-Primer-Programmers-Lead/dp/1590590171) 10 | 11 | 这本经典著作揭示了管理开发人员时出现的挑战。尽管该书某些方面可能已过时,但仍可作为学习管理程序员的良好起点。它的许多章节仍然相关,并提供初步了解人力资源管理方面内容,这对监督初级开发人员非常有帮助。 12 | 13 | - [Michael Lopp - 软件人才管理的艺术](https://book.douban.com/subject/4999476/) 14 | 15 | 本书阐明了领导者所面临的责任和挑战。它将帮助您培养像经理一样思考并理解那些处于管理职位上所面临问题所需技能。此知识可以帮助改善您、您的经理以及开发团队之间的沟通与协作。 16 | 17 | - [Frederick Brooks - 人月神话](hthttps://book.douban.com/subject/26358448/) 18 | 19 | 本书被认为是项目管理中不可或缺之物,并侧重于导致项目失败的错误。虽然部分过时,但对新手来说是一个避免犯常见错误良好起点。 20 | 21 | - [Tom DeMarco - 最后期限](https://book.douban.com/subject/1231972/) 22 | 23 | 这本小说讲述了一个经理在项目管理中所遇到日常体验,是非常有用因为它以艺术形式传达了一个经理每天都会面临各种各样挑战性情况。它全面展示了一个经理每天都会遇到各种挑战性情况。 24 | 25 | - [Daniel Kahneman - 快思慢想](https://book.douban.com/subject/22366506/) 26 | 27 | 关于人类思维逻辑谬误 的 经典著作必读。它有助于通过考虑人类思维中存在认知偏差和扭曲来更加合乎逻辑地进行决策制定,这是专业从事重大决策制定涉及到必备技能。如果觉得这本书枯燥无味,则可以寻找其他探讨认知偏差主题 的 资料。 28 | 29 | ## :clipboard: 需求和软件架构 30 | 31 | - [Karl Wiegers - 软件需求](https://book.douban.com/subject/26307910/) 32 | 这本书是一个优秀的资源,适用于任何参与收集和完善软件需求过程的人。它提供了如何有效地与经理、客户和开发人员沟通以收集要求,并将抽象的想法转化为具有明确定义限制的具体技术解决方案的指导。无论您是新手还是经验丰富的从业者,这本书都将是一份有价值的资源。 33 | 34 | - [Len Bass, Paul Clements, Rick Kazman - 软件架构实践](https://book.douban.com/subject/36243220/) 35 | 一部关于软件设计中基础架构方法论方面工作经典著作,包含大型软件系统建设所需使用到各种传统架构模式及技巧。 36 | 37 | - [Mark Richards, Neal Ford - 软件架构:架构模式、特征及实践指南](https://book.douban.com/subject/35487561/) 38 | 该书概述了软件设计基本概念,并侧重于工程原则。它涵盖了诸如系统组成部分可靠性、可重复性和可预测性等主题,并提供了一种从工程角度看待软件设计问题并进行处理方式。 39 | 40 | - [Martin Fowler - 企业应用程序体系结构模式](https://book.douban.com/subject/4826290/) 41 | 这本书全面介绍了不同建立公司系统所采取不同类型体系结构方法。它涵盖广泛应用领域,从金融交易到文档管理,并旨在适用于各种复杂度和焦点范围内系统。无论您是否是经验丰富的软件工程师或刚开始进入该领域,这本书都可以成为创建强大而可扩展公司系统时非常有价值 的资源。 42 | 43 | - [Chris Richardson - 微服务架构设计模式](https://book.douban.com/subject/33425123/) 44 | 对于那些想学习微服务体系结构以及正在寻找建立可扩展且易维护系统方式的开发人员和架构师来说,这本书会很有用。该书提供实际见解和现实世界示例,以帮助读者理解如何设计、构建和部署基于微服务的系统。无论你刚开始学习这个体系结构方法还是想加深已有知识,这本书都可以提供宝贵指导和最佳实践,帮助您在项目中取得成功。 45 | 46 | --- 47 | 48 | [**返回**](Overview.md) | [**回到主页**](../README.md) 49 | -------------------------------------------------------------------------------- /Chinese/CommunitySources.md: -------------------------------------------------------------------------------- 1 | # :gem: 社区资源 2 | 3 | ## :bookmark_tabs: C++ 通用 4 | 5 | - [CppReference](https://en.cppreference.com) 6 | - [CPlusPlus](https://www.cplusplus.com/reference) 7 | - [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) 8 | - [Microsoft GSL C++ (Guidelines Support Library)](https://github.com/microsoft/GSL) 9 | - [News from the C++ Standardization Committee](https://isocpp.org/) 10 | - [C++ Online Compiler Explorer](https://gcc.godbolt.org) 11 | 12 | ## :satellite: 流行的 C++ 会议 13 | 14 | - [C++ Russia](https://cppconf.ru/en) 15 | - [Cpp Con](https://cppcon.org/) 16 | - [Meeting C++](https://meetingcpp.com/) 17 | - [C++ Now](https://cppnow.org/) 18 | 19 | ## :tv: C++ 会议 YouTube 频道 20 | 21 | - [C++ Russia](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA) 22 | - [Cpp Con](https://www.youtube.com/user/CppCon) 23 | - [Meeting C++](https://www.youtube.com/user/MeetingCPP) 24 | - [C++ Now](https://www.youtube.com/user/BoostCon) 25 | 26 | ## :exclamation: 学习 C++ 的可选资源 27 | 28 | - [Learncpp.com](https://www.learncpp.com/)- 一个致力于教您如何使用 C++ 进行编程的免费网站,定期更新。 29 | - [Hackingcpp.com](https://hackingcpp.com/index.html) - 一站式的 C++ 资源网站,包括书籍、速查表、会议记录等。 30 | - [Awesomecpp.com](https://awesomecpp.com) - 一系列 C++ 相关的资源 31 | - [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e) 32 | 33 | ## :star: 其他有趣的仓库 34 | 35 | - [现代 C++语言和库特性速查表](https://github.com/AnthonyCalandra/modern-cpp-features) 36 | - [C++的库和框架集合](https://github.com/fffaraz/awesome-cpp) 37 | 38 | --- 39 | 40 | [**To main page**](README.md) 41 | -------------------------------------------------------------------------------- /Chinese/FunCpp.md: -------------------------------------------------------------------------------- 1 | # :space_invader: C++ - 它并不是火箭科学 2 | 3 | 现代 C++ 比通常认为的要简单得多。这种语言经过多年的发展,已经具备编写安全高效代码的能力。通过最新标准,无需担心内存泄漏问题。编译器也变得更加智能化,对您的代码执行大量优化以提供最佳性能。但是,仍然可以通过手动调整和技巧来优化代码。 4 | 5 | 该语言主要缺点是缺乏标准软件包管理器。尽管有几个产品旨在填补这一空白,但迄今为止没有成功。 6 | 7 | 此外,C++ 遭受了自己范式“开发人员不支付他们不使用的内容”的影响,在实践中商业软件开发人员很少关注依赖项,导致相反情况出现:每次需要依赖项时都必须付费。这会在项目构建期间产生“有趣”的副作用。尽管如此,这个问题也正在逐渐解决。 8 | 9 | 要开始学习 C++ ,需要基本了解以下内容: 10 | 11 | * 算术 12 | * 布尔代数 13 | * 绘制流程图 14 | * 不同数字系统中数字表示法 15 | 16 | 尽管历史悠久,现代 C ++ 比以前简单得多。 17 | 18 | 别害怕去学它吧!祝你好运!:dizzy: 19 | 20 | --- 21 | 22 | [**返回主页**](README.md) -------------------------------------------------------------------------------- /Chinese/Grades/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: 初级 C++ 2 | 3 | ## :question: 它是谁? 4 | 5 | 初级开发人员具有软件开发的理论知识和个人或教育项目中少量实践经验。他们可能也对行业运作有一定的理论了解。初级开发人员可以在经验丰富的同事指导下,在真实项目中执行简单任务。 6 | 7 | ## :computer: 期望具备哪些编码能力? 8 | 9 | - 能够阅读库、框架等文档 10 | - 能够收集并整合第三方库到项目中 11 | - 能够阅读和理解其他开发者编写的代码 12 | - 能够使用调试器或日志数据搜索并修复错误 13 | - 能够为代码编写测试 14 | - 具备 Git 基础知识和实际操作经验 15 | 16 | ## :bust_in_silhouette: 期望具备哪些通用技能? 17 | 18 | - 快速学习能力 19 | - 独立在互联网、书籍等资源上查找信息的能力 20 | - 及时适当地向同事提问的能力 21 | - 在团队环境中有效工作的能力 22 | 23 | ## :eyes: 提示与建议 24 | 25 | - 尽量找到公司内热情洋溢、积极进取的小组,并加入其中,他们可以成为你获取知识和经验的来源。 26 | - 不要犹豫,向更有经验的同事提问。没有愚蠢问题,只有不好回答。 27 | - 不要过于沉迷于一个任务而耗费过长时间。如果尝试多次后仍无法取得进展,请立即寻求同事帮助。他们期望任务在合理时间内完成。你主要目标是解决问题,而不是给团队制造问题。 28 | - 面对困难,在向导师寻求指导之前,请自己想出几种潜在解决方案。然后您导师可以调整或改善您提供 的解决方案。 29 | - 初级开发人员常常会陷入认为撰写更多代码就意味着成为更好程序员这一误区。不要犯这个错误!你所写越多代码,则出错机率越大;最好将代码以便于六个月后再次返回时快速了解其功能方式进行编写。优秀程序员不是那些撰写大量代码但毫无头绪地挥舞剑刃,而应像武士一样精确高效地交付打击。 30 | 31 | --- 32 | 33 | [**返回**](Overview.md) | [**回到主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Grades/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: 中级 C++ 2 | 3 | ## :question: 这是谁? 4 | 5 | 这是一位开发人员,他了解软件开发的技术背景,并具有为应用程序或组件的功能创建设计和解决方案的能力。即使缺乏足够的需求,也可以创建设计。此人具有商业经验背景,并熟悉开发中常见的业务流程。 6 | 7 | 总体而言,中级开发人员解决技术任务,并且相对于初级工程师来说,这个人可以在没有高级/首席工程师协助或仅需少量协助下完成工作。 8 | 9 | ## :computer: 期望具备哪些编码能力? 10 | 11 | - 不再将编译器和编程语言视为“魔法盒子”,能够通过生成假设、验证并确认或拒绝它们来解决任何障碍或意外情况。 12 | - 深入理解 C++ 的基础概念以及其他编程语言的知识,并能进行比较。 13 | - 编写可读性强、可扩展性好、易于维护的代码。 14 | - 熟悉设计模式和原则,并能做出技术决策。 15 | - 清楚地了解 C++ 的技术背景,包括: 16 | - 代码编写过程(如使用 IDE、文本编辑器和遵循最佳实践) 17 | - 源代码和产品存储(如使用版本控制系统和包管理器) 18 | - 编译(编译器、构建系统和库) 19 | - 测试(测试框架和策略) 20 | - 发货/部署以及在目标系统上执行。 21 | - 具有计算机科学基础知识,包括数据结构、图形、有限状态机和算法。 22 | 23 | ## :bust_in_silhouette: 期望具备的通用技能 24 | 25 | - 能够根据个人技术知识和项目背景做出决策 26 | - 理解“足够好”的解决方案的概念,以防止过度设计 27 | - 具有团队合作精神 28 | - 能够与其他团队成员表达观点并分享意见 29 | - 具有使用各种方法论(如看板、敏捷/Scrum、瀑布等)的经验。 30 | - 愿意协助和支持其他团队成员。 31 | 32 | ## :eyes: 提示和建议 33 | 34 | ### :arrow_forward: 学习 35 | 36 | 如果想成为高级开发人员,则提高软技能至关重要。技术专业知识变得次要,与他人建立关系并找到妥协的能力变得更加重要。优秀的开发人员不是写很多代码的人,而是知道如何在最小化损失的情况下有效地解决问题的人。理想情况下,您应该能够在不编写任何新代码甚至删除数十或数百行代码的情况下解决问题。 37 | 中间角色是最具挑战性且难以掌握的。您必须同时专注于硬实力、软实力和业务问题解决。这意味着您需要同时集中注意两个方面。 38 | 注重软技能可以增加您在市场上成为备受追捧职业者的机会。您可以选择专注于成为高度专业化开发人员并忽略软技能,但请记住此类专家并非总是供不应求,并且他们之间竞争极其激烈。如果你准备好与市场上最优秀的专家竞争,请继续前进。然而,我们仍然建议考虑多样化自己所拥有 的 技能。 39 | 40 | ### :arrow_forward: 经验 41 | 42 | 许多中级开发者陷入了成为某项技术、框架、设计模式或方法论“铁粉”的陷阱中。在处理项目任务时更加务实非常重要,不能只是试图采纳最新思路来添加简历上 的 另一项 技 能。中间角色可能导致过度设计或频繁更改框架。 43 | 如果认为库或框架对项目必需,则最好先与资深工程师或首席工程师进行讨论。建议创建一个“概念验证”,在其中测试所有假设后再添加新依赖项。不要试图背着团队去做这件事,因为它可能会导致增加维护 成本 和未预料到 的 后果。 44 | 45 | --- 46 | 47 | [**返回**](Overview.md) | [**回到主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Grades/Overview.md: -------------------------------------------------------------------------------- 1 | # 开发者分级 2 | 3 | > 分级是一种根据开发人员的技能和经验进行分类的方法。通过分级,可以了解如何区分任务的难度以及处理它们所需的预期技能集。 4 | 5 | 现在,您可以遇到以下常见的评分方法。可以标记以下级别: 6 | 7 | - 初级 8 | - 中间 9 | - 高级。 10 | 11 | 每个公司都有自己对开发人员评估和不同等级所声明的技能和责任视野。通常会遇到以下情况:您可能会在一家公司晋升为高级角色,但在另一家公司中被评估为中层开发人员。尽管如此,仍然可以针对每个等级引入共同期望。我们将使用先前描述过程来描述每个等级。 12 | 13 | **示例:** 您可以查看此网站以了解不同公司中关于定位系统知识:[levels.fyi](https://www.levels.fyi/) 14 | ![定位](https://github.com/Salmer/CppDeveloperRoadmap/blob/main/Russian/Grades/Source/GradeTable.PNG?raw=true "GradeTable") 15 | 16 | ## 级别说明 17 | 18 | 您可以阅读这些文章来了解每个水平及其公共期望: 19 | 20 | - :alien: [Pre-Junior C++](PreJunior.md) 21 | - :yum: [Junior C++](Junior.md) 22 | - :sunglasses: [Middle C++](Middle.md) 23 | - :smiling_imp: [Senior C++](Senior.md) 24 | 25 | --- 26 | 27 | [**返回主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Grades/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: 初级 C++ 2 | 3 | ## :question: 它是谁? 4 | 5 | 它是一个熟悉语言语法并能够编写简单程序而不使用第三方库的人。该程序执行简单的过程,例如: 6 | 7 | - 算术运算 8 | - 文件操作:读取或写入 9 | - 等待键盘输入 10 | - 在控制台中显示结果或其他数据 11 | - 等等。 12 | 13 | ## :computer: 期望具备哪些编码能力? 14 | 15 | - 使用 Visual Studio 或 Qt Creator 等 IDE 之一创建和构建小型工作 C++ 项目。 16 | - 通过 IDE 使用调试器。 17 | - 理解 C++ 程序的编译和链接过程。 18 | - 编写应用程序,利用算术和逻辑运算、条件语句和循环结构。 19 | - 编写使用标准输入/输出流的应用程序。 20 | - 操作指针和引用。 21 | - 了解应用程序中使用的内存类型。 22 | - 在 C++ 的上下文中理解基本面向对象编程,包括继承、多态性和封装。 23 | 24 | ## :bust_in_silhouette: 期望具备哪些通用技能? 25 | 26 | - 学习并获取新知识的愿望 27 | - 解决遇到问题的愿望 28 | - 使用搜索引擎或相关文献制定查询以找到问题解决方案的能力 29 | 30 | ## :eyes: 提示与建议 31 | 32 | ### :arrow_forward: 学习 33 | 34 | - 没有一种方法可以帮助您在一天、一周或一个月内学会 C ++。要做好长时间自我指导学习各种材料准备,在你准备好通过面试并获得第一个工作机会之前需要这样做。 35 | - 如果发现自己不理解某个主题,请寻找替代资源。 36 | - 只有实践才能让你精通 C ++!如果没有经常进行编码,大部分所读所听都将被遗忘。 37 | - 不要试图编写完美代码。您最初的目标是编写可正常工作且符合要求的代码。您需要学会如何与计算机交互,这类似于学习外语。起初,你可能说话不清楚,但随着技能提高,你将更好地理解语法、扩展词汇量等等。 38 | - 不要立即尝试处理庞大问题(例如创建自己游戏)。刚开始时,您可能缺少处理任务所需知识和经验,这种方法很容易变得令人沮丧,并对自己及其技能产生失望感,导致放弃教育。最好从简单到复杂逐步挑战自己,并逐渐增加困难任务来提高水平。 39 | 40 | ### :arrow_forward: 英语语言 41 | 42 | - 在英语中寻找解决方案更容易,但如果你的英语水平不够强,请不要过于勉强自己。这可能会很快导致灰心丧气。在开始阶段,你遇到的大多数问题都可以用母语解决。 43 | - 如果你觉得自己的英语水平还不够好,可以通过更有趣的方式来提高:看电视剧、玩视频游戏、读小说或者阅读感兴趣的新闻媒体或文章。几个月后,你应该能够提高自己的英文理解能力。 44 | 45 | --- 46 | 47 | [**返回**](Overview.md) | [**回到主页**](../README.md) 48 | -------------------------------------------------------------------------------- /Chinese/Grades/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: 高级 C++ 2 | 3 | ## :question: 它是谁? 4 | 5 | 它是一位不仅了解技术方面,还了解业务背景的开发人员。他们能够考虑到两者,为组件、应用程序或系统创建设计和解决方案。此外,高级人员帮助其他团队成员成长,并跟上软件开发领域的最新发展和趋势。 6 | 7 | ## :computer: 期望具备哪些编码能力? 8 | 9 | - 能够将业务语言转化为开发语言并分解任务 10 | - 能够与业务进行对话,并向非技术利益相关者解释技术细节和难点 11 | - 不仅能做出设计决策,还能创建组件和应用程序架构 12 | - 理解并使用架构原则。 13 | 14 | ## :bust_in_silhouette: 期望具备哪些通用技能? 15 | 16 | - 出色的沟通技巧 17 | - 如有必要,独立收集需求 18 | - 协助团队成员的发展 19 | 20 | ## :eyes: 提示和建议 21 | 22 | 根据公司特定情况及个人目标,在您选择的专业领域内获取最新技术和技能(例如数学、物理等专门领域 - 技术专家之路),或在管理和人际互动领域(如技术主管、团队负责人、项目经理等)寻找进一步职业发展道路。明智地选择吧。🙂 23 | 24 | --- 25 | 26 | [**返回**](Overview.md) | [**回到主页**](../README.md) -------------------------------------------------------------------------------- /Chinese/Grades/Source/GradeTable.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/Chinese/Grades/Source/GradeTable.PNG -------------------------------------------------------------------------------- /Chinese/Graph/README.md: -------------------------------------------------------------------------------- 1 | # 如何查看和修改 GraphML 格式的路线图 2 | 3 | GraphML 是一种基于 XML 的图形文件格式。许多应用程序都支持它进行查看。 4 | 5 | 例如,您可以使用[yEd](https://www.yworks.com/products/yed)来查看 graphML 文件并根据需要进行修改。 6 | 7 | ![示例](./example.png) 8 | -------------------------------------------------------------------------------- /Chinese/Graph/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/Chinese/Graph/example.png -------------------------------------------------------------------------------- /Chinese/HowToStudy.md: -------------------------------------------------------------------------------- 1 | # :mortar_board: 如何学习? 2 | 3 | 可以给出的主要建议是,你应该明白自己对于个人发展负有全部责任。当然,你会遇到很多热心人士愿意为你提供建议,但没有人会为你创建具体任务或培训计划。在这个过程中,最好的朋友将是自己、谷歌搜索和教程。 4 | 5 | ## :question: 如何学习新的 C++ 11/14/17/20 标准? 6 | 7 | 初学者不应该在旅途开始时过分关注标准。推荐从[初级列表](Books/PreJunior.md)中挑选书籍并学习基础知识。现代初学者书籍通常包含有限的关于 C++11 和更新标准功能的信息。一开始最好不要专注于新语言标准。 8 | 9 | 重要的是理解现代标准主要集中在修复问题、提供语法糖和引入新功能上的原因。修复问题和提供语法糖都很简单;引入新构造来纠正旧标准中存在问题,并且引入新抽象来简化重复代码。但是,在使用新功能方面则稍微麻烦些。 10 | 11 | 像其他编程语言一样,C++通过吸收计算机科学领域流行思想以及其他编程语言成功特性而进化发展。了解这些构造并根据需要使用它们非常重要,但首先必须深入研究由较老版本(C ++ 11 / C ++ 14)确立的基础知识,在大多数现代初级读物中都有描述。” 12 | 13 | ## :question: 如何了解最新的 C++标准特性? 14 | 15 | - 在[C++会议](CommunitySources.md)中的演示 16 | - 在[CppReference](https://en.cppreference.com/w/cpp)主页上,您将找到链接到最新功能概述列表页面的链接 17 | - 您可以阅读[Bjarne Stroustrup - A Tour of C++](https://www.amazon.com/Tour-2nd-Depth-Bjarne-Stroustrup/dp/0134997832)这本书。定期检查该书以获取更新,因为它会随着每个新版本的 C ++标准进行修订。 18 | - 专业论坛/聊天/讨论等。 19 | - 社区 YouTube 上的概述视频 20 | - [现代 C ++语言和库功能速查表](https://github.com/AnthonyCalandra/modern-cpp-feature) 21 | 22 | ## :eyes: 培训建议 23 | 24 | - 以自己的节奏学习,无论年龄如何!不要被“我从出生时就是程序员”的故事所吓倒。大多数这些故事都是 [幸存者偏差](https://en.wikipedia.org/wiki/Survivorship_bias) 或试图在你身上夸耀他们自己而已。您有能力从头开始学习编程,包括 C ++! 25 |   面对问题时,建议在互联网上搜索解决方案,因为您遇到的大多数问题可能已经得到解决。如果找不到答案,请尝试用不同方式重新制定请求。如果仍然找不到解决方案,请尝试简化问题。 26 |   重点应放在学习语言而非与工作环境斗争上,因为这可能导致挫败感和动力丧失。 27 |   请记住即使经验丰富的开发人员也会遇到问题并陷入困境,所以休息一下并稍后返回任务是一个好主意。 28 |    找到志同道合、正在开始学习之路的人可以使过程更加愉快,因为你们可以相互分享知识和经验,并发展团队合作技能。在今天的世界里,几乎无处不需要像团队一样工作,因此培养这些技能很有帮助。 29 |    拥有经验丰富的导师也可能很有价值,因为他可以指导您避免常见陷阱并节省时间。 30 | 31 | --- 32 | 33 | [**回首页**](README.md) -------------------------------------------------------------------------------- /Chinese/Mythbusters.md: -------------------------------------------------------------------------------- 1 | # :ghost: C++的神话和传说 2 | 3 | ## :question: C++已死,无法使用它编写任何东西 4 | 5 | C++并没有死。 6 | 7 | 事实上,在各种排名中,如[Tiobe](https://www.tiobe.com/tiobe-index/)指数等,它一直位居最受欢迎的编程语言之列。关于 C++是“死亡语言”的看法出现在 21 世纪初期,当时该语言标准化委员会处于不活跃状态。然而,自从 C++11 标准以来每三年就会添加新功能和功能性,并且有了复苏。尽管如此,仍有人坚持认为 C ++是一种难以掌握和存在问题的语言的神话和传说,这往往是因为他们没有跟上这门语言发展或只接触过少量教育内容。 8 | 9 | ## :question: 真正的程序员使用Linux/Vim/gcc学习C++ 10 | 11 | 如果您对所提到的组合不熟悉,则建议首先专注于学习 C ++基础知识。建议使用 Microsoft Visual Studio IDE 开发您的第一个应用程序。有关更多信息,请参见[PreJunior Books](Books/PreJunior.md)。 12 | 13 | 走具有挑战性的道路可能看起来很酷,但创建一个使用 Linux、Vim 和 GCC 创建“Hello World”程序所需信息量非常大,并且可能导致早期挫败感并对整个编程产生幻灭感。试着遵循从简单到逐渐增加复杂度的路径。就像新手在第一次锻炼时不应该试图举起最重的重量一样,在学习中也适用同样规则。一旦你熟悉了这门语言,就可以尝试使用 Linux 进行开发。但那完全是另外一个故事... 14 | 15 | ## :question: 在学习 C++之前最好先掌握 C/汇编语言等 16 | 17 | 不,不是这样的! 18 | 19 | 这种说法存在两种普遍情况:过去大学里教授 C++就是这么做的,而“老一辈”的成员也经历了类似的道路。现代 C++并不需要如此具有挑战性的方法。该语言自给自足,可以在没有任何背景知识的情况下学习。更可能的是通过“从 C 到 C ++”的方式来学习 C ++ 会导致混淆和想要以“带类”的方式编写 C ++。 20 | 21 | ## :question: 使用 Stroustrup 所著书籍来学习 C++ 22 | 23 | 一个极其有害的声明,源于那些手中拿着键盘出生或者对其他语言(例如 C、Fortran、Delphi 等)有丰富开发经验然后转向 C++ 的人。 24 | 25 | 这条建议很可能是由那些在开发其他语言方面拥有丰富经验(如 C、Fortran、Delphi 等)然后转向使用 C ++ 的人提出来的。Stroustrup 写了《The C++ Programming Language》作为参考书,因此必须以适当方式使用它,并需要一定程度上对该语言进行了解。相反,在[Books](Books/Overview.md)部分查找更好,在那里您将找到适用于所有级别语言熟练度水平的书籍。 26 | 27 | ## :question: 只使用标准学习 C++ 28 | 29 | 另一个自命不凡的说法。 30 | 31 | 现代 C++ 标准超过 2000 页,需要付费才能获得最新版本,并且不是以用户友好的方式组成。虽然对于那些使用其标准学习语言的人值得称赞,但并不建议大多数人采用这种方式进行学习。相反,最好查看 [Books](Books/Overview.md) 部分,在那里您会找到适合各种语言熟练程度的书籍。 32 | 33 | ## :question: 未定义行为困扰着开发者 34 | 35 | 更可能是否定而非肯定。 36 | 37 | 现代 C++ 和围绕该语言出现的工具可以避免与未定义行为相关的大部分问题。我们可以给出一个简单的建议:当不确定特定结构体执行什么操作时,请在 [CppReference](https://en.cppreference.com)、[StackOverflow](https://stackoverflow.com/) 或其他专门资源上阅读有关它们的信息。如果阅读后仍然存在疑问,请尝试以更简单的方式重写代码以避免未定义行为。简洁中蕴含巨大力量。 38 | 39 | ## :question: 需要手动管理内存,该语言没有垃圾回收机制 40 | 41 | 这是来自“老卫士”的另一个城市传说,他们在 C++11 之前停止编写 C++ 或者只是浅显地在大学里学了一下,并忽略了最新标准。现代 C++ 在其标准库中拥有一组原始类型负责自动内存分配和释放。手动内存管理已经被淘汰了。许多团队和公司甚至有规则:“禁止使用裸指针”。再次强调,不要忽视现代工具和检查器,因为它们可以在源代码级别检测到可能存在内存泄漏。 42 | 43 | ## :question: C++ 只属于旧技术领域 44 | 45 | 部分正确,但值得注意的是这并不仅适用于 C ++ 。任何语言中代码质量主要取决于团队及其先驱者所处技术文化水平而非单纯依靠编程语言本身。由于诸如开发人员技能水平、职业道德和错误估计等人类因素导致产生了大量旧版代码。如今,许多项目都采用 C ++ 编写,并且已经连续运作数年,是公司收入来源 的基础。在这种情况下,在短时间内进行任何重大变更都很危险。开发人员在进行更改时会格外小心以避免任何退步。然而,不要认为处理旧项目不能帮助您提高技能水平。实际上,这些项目可能提供挑战性任务 , 帮助你积累从代码阅读、反向工程、测试、软件架构设计、自动化到需求收集等方面获取丰富经验。 46 | 47 | --- 48 | 49 | [**返回首页**](README.md) -------------------------------------------------------------------------------- /Chinese/PetProjects.md: -------------------------------------------------------------------------------- 1 | # :telescope: 宠物项目 2 | 3 | 宠物项目是学习编程语言、库和/或框架的实践经验的绝佳机会。它们还可以作为面试的起点,并帮助开启工作机会。 4 | 5 | 找到并选择适合宠物项目的正确想法可能具有挑战性。为了帮助克服这一问题,我们已经编制了一个链接和想法列表,以便让您开始。阅读完此列表后,您应该能够选择最合适的想法或受到启发创建自己的想法! 6 | 7 | ## :arrows_counterclockwise: 外部链接 8 | 9 | * [Google Summer of Code](https://summerofcode.withgoogle.com/archive) 10 | 11 | 各种公司和社区提供了一系列项目,作为年度 Google 学生实习计划的一部分。存档包含近年来的项目,其中有大量针对 C++ 语言可用的项目。您可以在自己练习中找到感兴趣的东西或考虑尝试未来实习。 12 | 13 | * [基于项目学习 - C++](https://github.com/practical-tutorials/project-based-learning#cc) 14 | 15 | 该存储库保存了不同编程语言(包括 C++)的一组小型项目集合,并提供广泛且详细清单。 16 | 17 | * [Programming challenges](https://challenges.jeremyjaydan.com/) - [PNG image](https://challenges.jeremyjaydan.com/media/programming-challenges-v4.0.png) 18 | 19 | Pet Projects 想法轮盘允许您设置所需复杂性级别并旋转轮盘。旋转结果将随机选择要解决任务:) 20 | 21 | 22 | ## :boom: 宠物 - 项 目 列 表 23 | 24 | ### :arrow_forward: 游戏 25 | 26 | 以下是不包含复杂 AI 或动态世界生成内容但可作为起点实现游戏功能列表。你可以在进展过程中改善额外功能。对于图形库,你可以使用易于使用且提供足够特色以创建简单 2D 或 2.5D 图形接口(使用精灵)的[SFML](https://www.sfml-dev.org/) 。如果你想做更多与应用 物理相关方面,则可以从简单引擎如[Box2D](https://box2d.org/) 开始,也可以学习更高级引擎 如[Cocos2D](https:/ /www.cocos.com/en/) 和[Unreal Engine](https://www.unrealengine.com/en-US/)。记得遵循“从简单到复杂”的规则,先从简单游戏开始,然后逐渐增加难度。 27 | 28 | * 贪吃蛇 29 | * 俄罗斯方块 30 | * 生命游戏 31 | * 十五数码问题 32 | * 打砖块 33 | * 扫雷 34 | * 2048 35 | * 纸牌接龙 36 | * 蜘蛛纸牌接龙 37 | * 弹球 38 | * 奇才大冒险 39 | * 迷宫 40 | * 面向两个至四个玩家网络游戏:弹球、扑克、国际象棋、海战等 41 | 42 | 建议阅读以下源代码,其中包含有关 gamedev 各种算法信息。他们可能对上述任何一个游戏或者你自己构思出来都非常有用: 43 | - https://www.redblobgames.com/ 44 | - http://www.squidi.net/three/ 45 | 46 | --- 47 | 48 | ### :arrow_forward: 应用程序 49 | 50 | 创建应用程序时,从最简单的实现开始,例如控制台应用程序。完成每个步骤后,设置更复杂的任务,例如添加图形界面、使应用程序使用 HTTP 请求从源请求数据,然后将接收到的数据写入/读取到文件/数据库等。始终遵循“由简至繁”的原则。 51 | 52 | 以下是一些适合初学者的潜在项目示例: 53 | 54 | * 网络聊天(原始套接字或使用[gRPC](https://grpc.io/docs/languages/cpp/quickstart)) 55 | * 计算器 56 | * 文件管理器 57 | * 货币转换器 58 | * 从任何 Github 存储库检索“pull-request”或“issue”列表 59 | * 自动化常规任务,如各种计算和生成表格形式的报告。 60 | 61 | --- 62 | 63 | ### :arrow_forward: 学生申请 64 | 65 | 以下示例更适合已经学习过或最近学习过基础课程(如线性代数、解析几何、数学分析、物理等)的学生。涉及应用他们所学理论知识的任务可以帮助他们实现两个目标:通过实际应用巩固知识,并练习编程。这条路不限于其他人,但对于学生来说比较容易因为他们对于这些科目有着新鲜记忆。 66 | 67 | * 开发一个线性代数库,包括矩阵,向量和执行计算。 68 | * 建模各种进程,如物理和理论力学。 69 | * 实施数字方法,包括积分,微分,近似和插值 70 | 71 | --- 72 | 73 | [**返回主页**](README.md) -------------------------------------------------------------------------------- /Chinese/README.md: -------------------------------------------------------------------------------- 1 | # C++ 开发者路线图 2 | 3 | ## :speech_balloon: Additional languages: [English](../README.md) [Русский](../Russian/README.md) 4 | 5 | C++ 仍然是 [2024 年](https://survey.stackoverflow.co/2024/technology#most-popular-technologies) 中最受欢迎的开发语言之一。有很多人想开始学习 C++ 并成为开发者。他们面临着这些问题:“我应该从哪里开始?我应该按照什么顺序学习?我应该读哪些书?” 6 | 7 | 我们试图通过提供的路线图来回答这些问题。路线图侧重于大多数项目中常见的通用能力和技能。它旨在帮助那些刚开始教育或经验有限的人士。如果您学习了列出的材料,就可以创建一个更有效的学习计划,而不会被无关信息分心。它将帮助您达到 C++ 在许多商业项目中普遍使用的水平。 8 | 9 | 建议在开始探索地图之前阅读下面列出的文章。 10 | 11 | ## :bookmark_tabs: 文章 12 | 13 | 1. :flashlight: [为什么创建了这个路线图以及其目标是什么?](Rationale.md) 14 | 2. :mag: [你确定需要了解 C++ 吗?](SelfIdentification.md) 15 | 3. :space_invader: [C++ - 这不是火箭科学](FunCpp.md) 16 | 4. :clipboard: [C++ 的应用领域](AreasOfApplication.md) 17 | 5. :ghost: [C++ 的神话和传说](Mythbusters.md) 18 | 6. :chart_with_upwards_trend: [开发者评级体系概述 ](Grades/Overview.md) 19 | 7. :mortar_board: [如何学习?](HowToStudy.md) 20 | 8. :books: [关于 C++ 的书籍和其他资源](Books/Overview.md) 21 | 9. :telescope: [宠物项目](PetProjects.md) 22 | 10. :triangular_ruler: [工具](Tooling.md) 23 | 11. :gem: [更多的 C++ 资源/社区等](CommunitySources.md) 24 | 25 | ## :milky_way: 路线图 26 | 27 | 路线图提供以下格式: 28 | 29 | * :arrow_forward: [Miro](https://miro.com/app/board/uXjVMQjliUg=/) 30 | * :arrow_forward: [GraphML](Graph/roadmap.svg) 31 | 32 | 有关如何查看和编辑 graphML 文件的说明,请参见[此处](English/Graph/README.md)。 33 | 34 | ## :key: 许可证和条件 35 | 36 | 该路线图根据许可证**CC BY-NC-SA 4.0**发布:[中文](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)|| [ENG](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)。简而言之: 37 | 38 | * 只有在提供原始来源链接时,您才可以共享、采用或复制所呈现材料的任何部分。 39 | * **禁止**将任何部分材料用于任何商业目的。 40 | 41 | ## :mailbox: 反馈与沟通 42 | 43 | 如果有任何评论、建议或想法,请随时与我们联系。我们非常重视您的支持。 44 | 45 | 您可以通过 Github 中的以下渠道之一联系我们: 46 | 47 | * 如果对存储库内容进行任何建议或修改 - 在[Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls) 中创建新 PR 48 | * 如果对存储库内容进行任何建议或修改 - 在[Issues](https://github.com/salmer/CppDeveloperRoadmap/issues)中提交新问题。(不幸的是,Miro 框架没有历史跟踪器并且无法访问路线图。所有更改都是在审核和批准后手动添加。) 49 | 50 | # :telephone: Contacts 51 | 52 | Creators: 53 | - [Evgenii Melnikov](https://github.com/salmer), 54 | - [Dmitrii Dmitriev](https://github.com/DmitrievDmitriyA), 55 | - [lusipad](https://github.com/lusipad) 56 | -------------------------------------------------------------------------------- /Chinese/Rationale.md: -------------------------------------------------------------------------------- 1 | # :flashlight: 路线图是为什么创建的,目的是什么? 2 | 3 | C++ 在许多商业项目中被广泛使用,并在其历史上经历了重大变化,使其更方便日常使用。然而,仍然有许多关于该语言的神话、猜测和恐惧围绕着它,吓退了潜在学习者。我们的目标是帮助打消这些谣言,使初学者更容易学习 C++。 4 | 5 | 目前市场上缺少 C++ 开发人员。我们的经验表明,许多成功的开发人员通过自学学习这门语言,因为很难找到高质量的信息和资源。大多数教育平台和课程没有提供高质量的课程,在很多情况下过于高级或过时。 6 | 7 | 与其他语言相比,进入 C++ 开发领域需要更高的门槛,因为大部分可用信息都面向有经验的开发人员,并进一步强化了其异常复杂性之谣传。对于初学者来说缺乏相关信息会使他们难以掌握这门语言。 8 | 9 | 本路线图旨在解决这些挑战。它创建的想法来自于对无经验 C++ 开发人员候选人进行数轮访谈后得出结论:他们都存在基础知识方面共同缺陷和不知道如何及从哪里开始学习该语言等问题。 10 | 11 | 此路线图也可以对那些已经在个人和工作项目中实践 C++ 的人有所帮助。它可以帮助您确定任何知识空白并加深您对该语言的理解,从而成为一个高素质专家。 12 | 13 | --- 14 | 15 | [**返回主页**](README.md) 16 | -------------------------------------------------------------------------------- /Chinese/SelfIdentification.md: -------------------------------------------------------------------------------- 1 | # :mag: 你确定需要学习 C++吗? 2 | 3 | 首先要考虑的是:为什么想要学习 C++? 4 | 5 | 这门语言有特定的应用领域,在深入学习 C++之前,了解它们非常重要。研究和探索这些领域可以更好地理解你所涉及到的内容。以下是一些值得事先进行研究的例子: 6 | 7 | - 某些开发领域可能与你预期不同。例如,游戏开发可能会面临许多挑战,如加班时间、管理不善以及按工作量付费等情况。 8 | - 你感兴趣的语言可能并不是某个特定领域中最流行的语言。例如,在机器学习中,Python 及其专业库是最常用的。 9 | 10 | ## :question: 我已经知道了C/C#/Java/Python等编程语言,我能直接使用C++开始工作吗? 11 | 12 | 答案既是肯定也是否定 :) 13 | 14 | 具备计算机科学概念方面基本理解当然会很有帮助,比如理解过程式编程、OOP 和其他通用知识等。但不能仅依赖于这些概念。初学者最常见的错误就是试图将其他编程语言范式下写出来的代码套用到 C++ 中去。例如,C 开发人员经常以过程化风格编写 C++ 程序或认为 C++ 只是“带类”的 C。 15 | 16 | C++ 富含思想和编码方法,因此建议您以开放心态开始学习该语言。尽力去理解它背后蕴含着哪些思想,这将有助于您在工作任务中有效地使用该语言。其他编程语言方面的知识可以帮助您进行比较并确定它们各自优缺点。 17 | 18 | --- 19 | 20 | [**返回主页**](README.md) -------------------------------------------------------------------------------- /Chinese/Tooling.md: -------------------------------------------------------------------------------- 1 | # :triangular_ruler: 语言工具包 2 | 3 | 新手开发者通常对于可用的工具了解有限,这些工具可以使编写代码更加容易、提高效率并防止许多错误。这些工具不是解决语言可能出现的困难的万能药,但它们可以化腐朽为神奇。以下是全球开发人员公认的常见和流行的工具列表,但这只是其中一小部分。随着时间推移,您将会更加熟悉这些工具,并发现适合自己需求的新工具。 4 | 5 | ## :page_facing_up: 文本编辑器 6 | 7 | * :arrow_forward: **Visual Studio Code** 8 | 9 | 网址:https://code.visualstudio.com/ 10 | 价格:免费 11 | 12 | 提供强大而高效的文本文件和源代码编辑器。它拥有丰富的扩展库,可根据个人喜好进行定制化设置。还可以配置为与源代码一起使用,轻松编译、运行和调试您的代码。此外,它还拥有一个强大搜索引擎来查找文件和文件夹,在处理大型项目时更容易搜索、阅读和操作。 13 | 14 | * :arrow_forward: **Notepad++** 15 | 16 | 网址:https://notepad-plus-plus.org/ 17 | 价格:免费 18 | 19 | 轻量级文本文件和源代码编辑器。支持常见编程语言语法高亮显示功能。相比于 Visual Studio Code,它更方便快速打开和查看文件,并且由于其轻量级设计,在处理大量文本文件时非常舒适。 20 | 21 | ## :open_file_folder: IDE(集成开发环境) 22 | 23 | * :arrow_forward: **Microsoft Visual Studio IDE** 24 | 25 | 网址:https://visualstudio.microsoft.com 26 | 价格:社区版免费 27 | 28 | 来自 Microsoft 的集成开发环境(IDE),提供了一套全面的工具,包含各种程序设计语言以及跨平台开发所需要用到得编码器、编译器、调试器以及分析仪等等。对初学者来说是一个很好选择,因为其拥有友好的界面,并且初始状态下不需要进行过多的自定义设置。 29 | 30 | * :arrow_forward: **Qt Creator IDE** 31 | 32 | 网址:https://www.qt.io/product/development-tools 33 | 价格:开放源码项目免费(详细信息请参考 [Qt Open Source](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)) 34 | 35 | 最初 Qt Creator 是作为 C++ 应用程序图形界面开发 IDE 而定位。随着时间推移,框架已经拥有了众多功能并演变成跨平台应用程序的综合生态系统。它提供了广泛基础库原件以满足各种需求,如网络连接,图形接口,数据库操作和处理像图片或文本格式之类流行格式。如今 Qt Creator 成为 Visual Studio 的竞争对手,并特别受到创建适用于各种 Linux 发行版应用程序的开发人员的欢迎。 36 | 37 | * :arrow_forward: **Eclipse IDE** 38 | Eclipse 是一个功能强大的跨平台开发环境,但也相当沉重。Eclipse 的关键特性之一是其模块化。Eclipse 的哲学是任何开发人员都可以通过连接其他扩展来修改开发环境以适应他们的需求。它被某些编译器开发人员用作专门针对 OS 或微控制器(例如 QNX 实时操作系统,Red-Hat Linux 等)的基础。 39 | 40 | * :arrow_forward: **JetBrains Clion IDE** 41 | Clion 是来自 JetBrains 公司的强大跨平台 IDE。与其他 IDE 一样,它提供了全面的工具集,方便软件开发,并且非常适合 C 和 C++中进行跨平台开发。 42 | 43 | ## :flashlight: 扩展 44 | 45 | * :arrow_forward: **JetBrains ReSharper C++** 46 | JetBrains ReSharper C++ 是 Microsoft Visual Studio 的扩展程序之一,它增加了高级源代码处理功能,如扩展代码突出显示和提示、构建项目间依赖关系图、纠正常见错误推荐、调试期间改进信息、改进搜索并导航到项目等等,可与 Visual Assist 竞争。 47 | 48 | * :arrow_forward: **Visual Assist** 49 | 50 | 网址:https://www.wholetomato.com 51 | 52 | 一个为微软 Visual Studio 提供额外功能的扩展,如增强代码高亮和提示、调试和编码期间增加信息、高级搜索能力以及改进的项目导航。它与 JetBrains ReSharper 竞争。 53 | 54 | * :arrow_forward: **Incredibuild** 55 | 56 | 网址:https://www.incredibuild.com 57 | 58 | 这是一个用于分布式编译项目的应用程序/扩展,它将所有开发者工作站合并成一个单一的网络,提供使用数十台机器来组装和编译源代码的可能性。这可以加速大型项目的构建过程。 59 | 60 | ## :electric_plug: Package managers and build systems 61 | 62 | * :arrow_forward: **Cmake** 63 | 64 | 网址:https://cmake.org 65 | 价格:免费 66 | 67 | 一个跨平台的自动化系统,用于从源代码构建应用程序,并生成必要的工件以便在目标平台上进行后续组装。它目前被认为是从源码构建各种库时的标准工具。 68 | 69 | * :arrow_forward: **Conan** 70 | 71 | 网址:https://conan.io 72 | 价格:免费 73 | 74 | 一个用于组织 C++ 库和框架的软件包管理器和依赖项管理器。它支持在 Windows 和 Linux 等各种平台上工作,并与 CMake 和 Visual Studio 等工具集成。 75 | 76 | * :arrow_forward: **Ninja** 77 | 78 | 网址:https://ninja-build.org 79 | 价格:免费 80 | 81 | PC 和 C++应用程序的项目构建管理器。该管理器的主要优点是快速项目组装。它支持跨平台开发,并与所有流行的编译器兼容。 82 | 83 | ## :mag: Code analyzers 84 | 85 | * :arrow_forward: **PVS Studio** 86 | 87 | 网址:https://pvs-studio.com 88 | 价格:30 天免费试用 89 | 90 | 由 PVS-Studio 开发的跨平台(Windows、Linux、MacOS)静态代码分析器。该分析器的主要目标是对源代码进行分析,以检测编译器或代码审查期间可能未被发现的各种错误。它有助于减少与语言语法和陷阱相关的错误数量。 91 | 92 | * :arrow_forward: **Cpp Check** 93 | 94 | 网址:https://cppcheck.sourceforge.io 95 | 价格:免费 96 | 97 | 一个免费的代码分析器,可以帮助您捕捉编译器或代码审查期间可能被忽略的源代码中常见错误。它是跨平台的,并支持流行的 Linux 发行版和 Windows。 98 | 99 | * :arrow_forward: **Valgrind** 100 | 101 | Site: https://www.valgrind.org 102 | 价格:免费 103 | 104 | 一组工具,可以帮助您在应用程序运行时调查各种问题,例如内存泄漏和性能分析。它与多个 Linux 发行版兼容。 105 | 106 | ## :floppy_disk: Git clients 107 | 108 | * :arrow_forward: **SmartGit** 109 | 110 | 网址:https://www.syntevo.com/smartgit/ 111 | 价格:开源免费 112 | 113 | 一个完整的、跨平台的用于处理 Git 仓库的工具。开箱即用,提供以下功能:接收和发送对仓库的更改,查看更改历史记录,文本编辑器以解决冲突等。支持与所有流行的代码托管服务集成,如 GitHub、BitBucket、GitLab 等。 114 | 115 | * :arrow_forward: **Atlassian SourceTree** 116 | 117 | 网址:https://www.sourcetreeapp.com/ 118 | 价格:免费 119 | 120 | 一个很好的免费替代品,使用图形界面来处理 Git。它具有与 SmartGit 相同的功能,唯一不同之处是没有自己的编辑器用于冲突解决。但是,可以通过集成 Visual Studio Code 或任何其他可以比较文件的编辑器轻松解决此问题。在所有其他方面,它完全复制了 SmartGit 的功能:跨平台,并支持与流行存储库(如 GitHub、BitBucket、GitLab 等)集成。 121 | 122 | * :arrow_forward: **Git Kraken** 123 | 124 | 网址:https://www.gitkraken.com/ 125 | 价格:开源免费 126 | 127 | 一款跨平台高效的客户端,适用于 Windows、Linux 和 MacOS。它支持与 GitHub、Bitbucket 和 Gitlab 集成,并具有日常工作所需的所有必要功能,如查看更改历史记录、提交和接收更改、在分支之间切换以及内置冲突解决编辑器。 128 | 129 | --- 130 | 131 | [**回到主页**](README.md) 132 | -------------------------------------------------------------------------------- /English/AreasOfApplication.md: -------------------------------------------------------------------------------- 1 | # :clipboard: Application areas of C++ 2 | 3 | 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: 4 | - [What Is C++ Used For? Top 12 Real-World Applications And Uses Of C++](https://www.softwaretestinghelp.com/cpp-applications/) 5 | - [Why and where should you still use C/C++ languages?](https://hackernoon.com/why-and-where-should-you-still-use-cc-languages-6l1r838gh) 6 | - [What Can You Do With C++?](https://www.ko2.co.uk/what-can-you-do-with-c-plus-plus/) 7 | - [C++ Applications](https://www.stroustrup.com/applications.html) 8 | - [What is C++ used for?](https://www.codecademy.com/resources/blog/what-is-c-plus-plus-used-for/) 9 | 10 | --- 11 | 12 | [**To main page**](../README.md) -------------------------------------------------------------------------------- /English/Books/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: Junior 2 | 3 | ## :innocent: Motivation and experience 4 | 5 | - [Robert Martin - The clean coder](https://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073) 6 | 7 | Uncle Bob shares his recommendations on how to "survive" and be successful in the IT industry. This book isn't just about technical skills. It also presents psychological challenges and struggles with them. 8 | 9 | - [Robert Martin - Clean Code: A Handbook of Agile Software Craftsmanship](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) 10 | 11 | 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. 12 | 13 | - [Steve McConnell - Code Complete: A Practical Handbook of Software Construction](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670) 14 | 15 | 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. 16 | 17 | 18 | ## :bar_chart: Computer Science 19 | 20 | - [Thomas H. Cormen - Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) 21 | 22 | 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. 23 | 24 | ## :pencil: C++ 25 | 26 | - [Scott Meyers - Effective C++: 55 Specific Ways to Improve Your Programs and Designs](https://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876) 27 | 28 | 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. 29 | 30 | - [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) 31 | 32 | 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. 33 | 34 | - [Herb Sutter, Andrei Alexandrescu - C++ Coding Standards: 101 Rules, Guidelines, and Best Practices](https://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586) 35 | 36 | 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. 37 | 38 | 39 | ## :electric_plug: Hard skills 40 | 41 | - [Eric Freeman, Elisabeth Robson - Head First Design Patterns: A Brain-Friendly Guide](https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124) 42 | 43 | This book is a perfect start to studying design patterns. As another alternative, you can also visit [refactoring.guru](https://refactoring.guru/design-patterns), but in case of using this book, you will be able to have a lot of practice on-the-fly which help you to better understand ideas of common design patterns. 44 | 45 | - [Sanjay Madhav, Josh Glazer - Multiplayer Game Programming: Architecting Networked Games](https://www.amazon.com/Multiplayer-Game-Programming-Architecting-Networked/dp/0134034309) 46 | 47 | 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. 48 | 49 | --- 50 | 51 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Books/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: Middle 2 | 3 | ## :pencil: C++ 4 | 5 | - [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) 6 | 7 | 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. 8 | 9 | - [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) 10 | 11 | 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." 12 | 13 | - Herb Sutter: 14 | - [Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Engineering-Programming-Problems-Solutions/dp/0201615622) 15 | - [Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/Exceptional-Style-Engineering-Programming-Solutions/dp/0201760428) 16 | - [More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions](https://www.amazon.com/More-Exceptional-Engineering-Programming-Solutions/dp/020170434X) 17 | 18 | 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. 19 | 20 | - [David Vandevoorde - C++ Templates: The Complete Guide](https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121) 21 | 22 | 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. 23 | 24 | 25 | ## :bicyclist: Optimization for C++ applications 26 | 27 | - [Kurt Guntheroth - Optimized C++: Proven Techniques for Heightened Performance](https://www.amazon.com/Optimized-Proven-Techniques-Heightened-Performance/dp/1491922060) 28 | 29 | 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. 30 | 31 | - [Agner Fog - Optimizing software in C++](https://agner.org/optimize/optimizing_cpp.pdf) or [Optimization manuals](https://agner.org/optimize) 32 | 33 | 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. 34 | 35 | ## :electric_plug: Hard skills 36 | 37 | - [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) 38 | 39 | 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. 40 | 41 | - [Gary McLean Hall - Adaptive Code](https://www.amazon.com/Adaptive-Code-Developer-Best-Practices/dp/0136891446) 42 | 43 | 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. 44 | 45 | - [Robert Martin - Clean Architecture: A Craftsman's Guide to Software Structure and Design](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164) 46 | 47 | 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. 48 | 49 | - [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) 50 | 51 | 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. 52 | 53 | - [Vladimir Khorikov - Unit Testing Principles, Practices, and Patterns: Effective testing styles, patterns, and reliable automation for unit testing, mocking, and integration testing with examples in C#](https://www.amazon.com/Unit-Testing-Principles-Practices-Patterns-ebook/dp/B09782L692) 54 | 55 | The book provides insights into the best practices and common anti-patterns that surround the topic of unit testing. After reading this book, armed with your newfound skills, you’ll have the knowledge needed to become an expert at delivering successful projects that are easy to maintain and extend, thanks to the tests you build along the way. 56 | 57 | 58 | ## :zap: Operating systems 59 | 60 | - [Andrew S. Tanenbaum - Modern Operating Systems](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X) 61 | 62 | 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. 63 | 64 | - [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) 65 | 66 | 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. 67 | 68 | - [Christopher Negus - Linux Bible](https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/1119578884) 69 | 70 | 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 71 | 72 | - [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf) 73 | 74 | 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. 75 | 76 | 77 | ## :globe_with_meridians: Computer networks 78 | 79 | - [Andrew S. Tanenbaum - Computer Networks](https://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958) 80 | 81 | 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. 82 | 83 | - [Victor Olifer - Computer Networks: Principles, Technologies and Protocols for Network Design](https://www.amazon.com/Computer-Networks-Principles-Technologies-Protocols-ebook/dp/B001GQ35P4) 84 | 85 | 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 86 | 87 | --- 88 | 89 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Books/Overview.md: -------------------------------------------------------------------------------- 1 | # :books: Books and sources 2 | 3 | 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. 4 | 5 | - :blue_book: [PreJunior](PreJunior.md) 6 | - :green_book: [Junior](Junior.md) 7 | - :orange_book: [Middle](Middle.md) 8 | - :closed_book: [Senior](Senior.md) 9 | 10 | --- 11 | 12 | [**To main page**](../../README.md) 13 | -------------------------------------------------------------------------------- /English/Books/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: Pre-Junior 2 | 3 | ## :innocent: Motivation and experience 4 | 5 | - [Chad Fowler - Passionate Programmer](https://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic-ebook/dp/B00AYQNR5U) 6 | 7 | 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. 8 | 9 | 10 | ## :bar_chart: Computer Science 11 | 12 | - [Wladston Ferreira Filho - Computer Science Distilled: Learn the Art of Solving Computational Problems](https://www.amazon.com/Computer-Science-Distilled-Computational-Problems/dp/0997316020) 13 | 14 | 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. 15 | 16 | - [Charles Petzold - Code: The Hidden Language of Computer Hardware and Software](https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319) 17 | 18 | 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. 19 | 20 | - [Aditya Bhargava - Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People](https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230) 21 | 22 | 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. 23 | 24 | 25 | ## :pencil: C++ 26 | 27 | - [Stephen Prata - C++ Primer Plus](https://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402) 28 | 29 | 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++. 30 | 31 | - [Stanley Lippman - C++ Primer](https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113) 32 | 33 | 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. 34 | 35 | - [Andrew Koenig - Accelerated C++: Practical Programming by Example](https://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X) 36 | 37 | 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. 38 | 39 | 40 | ## :electric_plug: Hard skills 41 | 42 | - [MSDN](https://docs.microsoft.com/en-us/cpp/build/vscpp-step-0-installation?view=msvc-160) 43 | 44 | 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. 45 | 46 | --- 47 | 48 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Books/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: Senior 2 | 3 | ## :pencil: C++ 4 | 5 | - 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. 6 | 7 | 8 | ## :muscle: Team management 9 | 10 | - [J. Hank Rainwater - Herding Cats: A Primer for Programmers Who Lead Programmers ](https://www.amazon.com/Herding-Cats-Primer-Programmers-Lead/dp/1590590171) 11 | 12 | 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. 13 | 14 | - [Michael Lopp - Managing Humans: Biting and Humorous Tales of a Software Engineering Manager](https://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/1484221575) 15 | 16 | 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. 17 | 18 | - [Frederick Brooks - Mythical Man-Month, The: Essays on Software Engineering](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959) 19 | 20 | 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. 21 | 22 | - [Tom DeMarco - The Deadline: A Novel About Project Management](https://www.amazon.com/Deadline-Novel-About-Project-Management-ebook/dp/B006MN4RAS) 23 | 24 | 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. 25 | 26 | - [Daniel Kahneman - Thinking, Fast and Slow](https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555) 27 | 28 | 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. 29 | 30 | 31 | ## :clipboard: Requirements and software architecture 32 | 33 | - [Karl Wiegers - Software Requirements](https://www.amazon.com/Software-Requirements-Developer-Best-Practices/dp/0735679665) 34 | 35 | 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. 36 | 37 | - [Len Bass, Paul Clements, Rick Kazman - Software Architecture in Practice](https://www.amazon.com/Software-Architecture-Practice-SEI-Engineering/dp/0136886094) 38 | 39 | 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. 40 | 41 | - [Mark Richards, Neal Ford - Fundamentals of Software Architecture: An Engineering Approach](https://www.amazon.com/Fundamentals-Software-Architecture-Comprehensive-Characteristics/dp/1492043451) 42 | 43 | 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. 44 | 45 | - [Martin Fowler - Patterns of Enterprise Application Architecture](https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420) 46 | 47 | 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. 48 | 49 | - [Chris Richardson - Microservices Patterns](https://www.amazon.com/Microservices-Patterns-examples-Chris-Richardson/dp/1617294543) 50 | 51 | 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. 52 | 53 | --- 54 | 55 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/CommunitySources.md: -------------------------------------------------------------------------------- 1 | # :gem: Community sources 2 | 3 | ## :bookmark_tabs: C++ General 4 | 5 | - [CppReference](https://en.cppreference.com) 6 | - [CPlusPlus](https://www.cplusplus.com/reference) 7 | - [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) 8 | - [Microsoft GSL C++ (Guidelines Support Library)](https://github.com/microsoft/GSL) 9 | - [News from the C++ Standardization Committee](https://isocpp.org/) 10 | - [C++ Online Compiler Explorer](https://gcc.godbolt.org) 11 | 12 | ## :satellite: Popular C++ conferences 13 | 14 | - [C++ Russia](https://cppconf.ru/en) 15 | - [Cpp Con](https://cppcon.org/) 16 | - [Meeting C++](https://meetingcpp.com/) 17 | - [C++ Now](https://cppnow.org/) 18 | 19 | ## :tv: C++ Conference YouTube Channels 20 | 21 | - [C++ Russia](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA) 22 | - [Cpp Con](https://www.youtube.com/user/CppCon) 23 | - [Meeting C++](https://www.youtube.com/user/MeetingCPP) 24 | - [C++ Now](https://www.youtube.com/user/BoostCon) 25 | 26 | ## :exclamation: Alternative sources for learning C++ 27 | 28 | - [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. 29 | - [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. 30 | - [Awesomecpp.com](https://awesomecpp.com) - The set of different sources about the C++. 31 | - [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e) 32 | 33 | ## :star: Other interesting repositories 34 | 35 | - [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features) 36 | - [Collection of libraries and frameworks for C++](https://github.com/fffaraz/awesome-cpp) 37 | 38 | --- 39 | 40 | [**To main page**](../README.md) 41 | -------------------------------------------------------------------------------- /English/FunCpp.md: -------------------------------------------------------------------------------- 1 | # :space_invader: C++ - It's Not Rocket Science 2 | 3 | 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. 4 | 5 | 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. 6 | 7 | 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. 8 | 9 | To get started with C++, one needs a basic understanding of: 10 | - Arithmetic 11 | - Boolean algebra 12 | - Drawing flowcharts 13 | - Representation of numbers in different numeral systems 14 | 15 | Despite its history, modern C++ is much simpler than it used to be. 16 | 17 | Don't be afraid to learn it, and good luck! :dizzy: 18 | 19 | --- 20 | 21 | [**To main page**](../README.md) 22 | -------------------------------------------------------------------------------- /English/Grades/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: Junior C++ 2 | 3 | ## :question: Who is it? 4 | 5 | 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. 6 | 7 | ## :computer: What coding abilities are expected? 8 | 9 | - Ability to read documentation for libraries, frameworks, etc. 10 | - Ability to gather and integrate third-party libraries into the project 11 | - Ability to read and understand code written by other developers 12 | - Ability to search for and fix bugs using the debugger or log data 13 | - Ability to write tests for code 14 | - Basic knowledge and hands-on experience with Git 15 | 16 | ## :bust_in_silhouette: What general skills are expected? 17 | 18 | - Fast learning ability 19 | - Ability to independently search for information on the Internet, books, etc. 20 | - Ability to ask colleagues questions in a timely and appropriate manner 21 | - Ability to work effectively in a team environment. 22 | 23 | ## :eyes: Tips and recommendations 24 | 25 | - 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. 26 | - Don't hesitate to ask questions to more experienced colleagues. There are no stupid questions, only poor answers. 27 | - 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. 28 | - 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. 29 | - 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. 30 | 31 | --- 32 | 33 | [**Go back**](Overview.md) | [**To main page**](../../README.md) 34 | -------------------------------------------------------------------------------- /English/Grades/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: Middle C++ 2 | 3 | ## :question: Who is it? 4 | 5 | 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. 6 | 7 | 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. 8 | 9 | 10 | ## :computer: What coding abilities are expected? 11 | 12 | - 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. 13 | - Has a deep understanding of the foundation concepts of C++ and knowledge of other programming languages, able to compare them. 14 | - Writes readable, extendable, and maintainable code. 15 | - Familiar with design patterns and principles and able to make technical decisions. 16 | - Has a clear understanding of the technical context of C++, including: 17 | - the code writing process (such as using IDEs, text editors, and following best practices) 18 | - source code and product storage (such as using version control systems and package managers) 19 | - compilation (compilers, build systems, and libraries) 20 | - testing (testing frameworks and strategies) 21 | - shipment/deployment and execution on a target system. 22 | - Has a strong knowledge of computer science foundations, including data structures, graphs, finite machines, and algorithms. 23 | 24 | 25 | ## :bust_in_silhouette: What general skills are expected? 26 | 27 | - Is able to make decisions based on personal technical knowledge and background of a project 28 | - Understands the concept of "good enough" solutions to prevent overengineering 29 | - Has a mindset of being a team player 30 | - Can articulate and share opinions with other team members 31 | - Has experience working with various methodologies such as Kanban, Agile/Scrum, Waterfall, etc. 32 | - Is willing to assist and support other team members. 33 | 34 | 35 | ## :eyes: Tips and recommendations 36 | 37 | ### :arrow_forward: Studying 38 | 39 | - 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. 40 | - 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. 41 | - 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. 42 | 43 | ### :arrow_forward: Experience 44 | 45 | - 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. 46 | - 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. 47 | 48 | --- 49 | 50 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Grades/Overview.md: -------------------------------------------------------------------------------- 1 | # :chart_with_upwards_trend: Developers grading 2 | 3 | > 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. 4 | 5 | Nowadays, you can encounter the following common grading approach. The following levels can be marked: 6 | - Junior; 7 | - Middle; 8 | - Senior. 9 | 10 | 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. 11 | 12 | **Example:** You can check this website to get knowledge about leveling systems in different companies: [levels.fyi](https://www.levels.fyi/) 13 | ![](https://github.com/Salmer/CppDeveloperRoadmap/blob/main/Russian/Grades/Source/GradeTable.PNG?raw=true "GradeTable") 14 | 15 | 16 | ## Level Descriptions 17 | 18 | You can read these articles to gain understanding about each level and its common expectations: 19 | - :alien: [Pre-Junior C++](PreJunior.md) 20 | - :yum: [Junior C++](Junior.md) 21 | - :sunglasses: [Middle C++](Middle.md) 22 | - :smiling_imp: [Senior C++](Senior.md) 23 | 24 | --- 25 | 26 | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Grades/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: Pre-Junior C++ 2 | 3 | ## :question: Who is it? 4 | 5 | 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: 6 | - arithmetic operations 7 | - file manipulation: either reading or writing 8 | - wait for the keyboard input 9 | - display the result or other data in the console 10 | - etc. 11 | 12 | ## :computer: What coding abilities are expected? 13 | 14 | - Create and build a small working C++ project using one of the IDEs such as Visual Studio or Qt Creator. 15 | - Use the debugger through the IDE. 16 | - Understand the compilation and linking process of a C++ program. 17 | - Write an application that makes use of arithmetic and logical operations, conditionals, and loops. 18 | - Write an application that uses the standard input/output streams. 19 | - Manipulate pointers and references. 20 | - Know the types of memory used in an application. 21 | - Understand basic OOP in the context of C++, including inheritance, polymorphism, and encapsulation. 22 | 23 | ## :bust_in_silhouette: What general skills are expected? 24 | 25 | - A desire to learn and acquire new knowledge 26 | - A desire to solve encountered problems 27 | - The ability to formulate a query to find a solution to a problem using a search engine or relevant literature. 28 | 29 | ## :eyes: Tips and recommendations 30 | 31 | ### :arrow_forward: Studying 32 | 33 | - 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. 34 | - If you find that you don't understand a certain topic, seek out alternative resources. 35 | - Practicing and only practicing will enable you to master C++! You'll forget most of what you read or hear without regular coding. 36 | - 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. 37 | - 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. 38 | - 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. 39 | 40 | ### :arrow_forward: English language 41 | 42 | - 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. 43 | - 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. 44 | 45 | --- 46 | 47 | [**Go back**](Overview.md) | [**To main page**](../../README.md) 48 | -------------------------------------------------------------------------------- /English/Grades/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: Senior C++ 2 | 3 | ## :question: Who is it? 4 | 5 | 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. 6 | 7 | ## :computer: What coding abilities are expected? 8 | 9 | - Ability to translate tasks from business language into development language and decompose them 10 | - Ability to hold a dialogue with the business and explain technical details and difficulties to non-technical stakeholders 11 | - Ability to not only make design decisions, but also create component and application architecture 12 | - Understanding and use of architectural principles. 13 | 14 | ## :bust_in_silhouette: What general skills are expected? 15 | 16 | - Excellent communication skills 17 | - Ability to independently gather requirements, if necessary 18 | - Assists in the development of team members 19 | 20 | ## :eyes: Tips and recommendations 21 | 22 | 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. 🙂 23 | 24 | --- 25 | 26 | [**Go back**](Overview.md) | [**To main page**](../../README.md) -------------------------------------------------------------------------------- /English/Grades/Source/GradeTable.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/English/Grades/Source/GradeTable.PNG -------------------------------------------------------------------------------- /English/Graph/README.md: -------------------------------------------------------------------------------- 1 | # How to view and modify the roadmap in graphML format 2 | 3 | GraphML — is an XML-based file format for graphs. It is supported by many applications for viewing it. 4 | 5 | For example, you can use [yEd](https://www.yworks.com/products/yed) to view graphML file and modify it as you want. 6 | 7 | ![](./example.png) -------------------------------------------------------------------------------- /English/Graph/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/English/Graph/example.png -------------------------------------------------------------------------------- /English/HowToStudy.md: -------------------------------------------------------------------------------- 1 | # :mortar_board: How to study? 2 | 3 | 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. 4 | 5 | ## :question: How to study new C++ 11/14/17/20 standards? 6 | 7 | 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. 8 | 9 | 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. 10 | 11 | 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. 12 | 13 | 14 | ## :question: Where to get an overview of the latest C++ standards features? 15 | 16 | - Presentations among [C++ conferences](CommunitySources.md) 17 | - 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 18 | - 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 19 | - Professional forums/chats/discussions/etc. 20 | - Overview videos on YouTube by community 21 | - [A cheatsheet of modern C++ language and library features](https://github.com/AnthonyCalandra/modern-cpp-features) 22 | 23 | ## :eyes: Training recommendations 24 | 25 | - 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++! 26 | - 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. 27 | - 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. 28 | - 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. 29 | - 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. 30 | - Having an experienced mentor can also be valuable, as he can guide you to avoid common pitfalls and save you time. 31 | 32 | 33 | --- 34 | 35 | [**To main page**](../README.md) -------------------------------------------------------------------------------- /English/Mythbusters.md: -------------------------------------------------------------------------------- 1 | # :ghost: Myths and Legends of C++ 2 | 3 | ## :question: C++ is dead, it's impossible to code anything with it 4 | 5 | C++'s not dead. 6 | 7 | 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. 8 | 9 | ## :question: Real programmers learn C++ using Linux/Vim/gcc 10 | 11 | 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). 12 | 13 | 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... 14 | 15 | ## :question: You'd better master C/Assembler/etc. before learning C++ 16 | 17 | No, no, and no again! 18 | 19 | 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. 20 | 21 | ## :question: Learn C++ using the book by Stroustrup 22 | 23 | A highly damaging statement that originates from the "Old Guard" or those who were born with a keyboard in hand. 24 | 25 | 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. 26 | 27 | ## :question: Learn C++ using the Standard only 28 | 29 | Another snobbish statement. 30 | 31 | 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. 32 | 33 | ## :question: Undefined Behavior haunts the developer everywhere 34 | 35 | More likely no than yes. 36 | 37 | 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. 38 | 39 | ## :question: One needs to manage memory manually, there is no garbage collection in the language 40 | 41 | 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. 42 | 43 | ## :question: C++ is legacy area only 44 | 45 | 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. 46 | 47 | --- 48 | 49 | [**To main page**](../README.md) -------------------------------------------------------------------------------- /English/PetProjects.md: -------------------------------------------------------------------------------- 1 | # :telescope: Pet-projects 2 | 3 | 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. 4 | 5 | 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! 6 | 7 | 8 | ## :arrows_counterclockwise: External links 9 | 10 | * [Google Summer of Code](https://summerofcode.withgoogle.com/archive) 11 | 12 | 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. 13 | 14 | * [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc) 15 | 16 | The repository holds a collection of pet projects for different programming languages, including an extensive list of ideas for C++. 17 | 18 | * [Programming challenges](https://challenges.jeremyjaydan.com/) - [PNG image](https://challenges.jeremyjaydan.com/media/programming-challenges-v4.0.png) 19 | 20 | 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. :) 21 | 22 | 23 | ## :boom: The list of pet-project ideas 24 | 25 | ### :arrow_forward: Games 26 | 27 | 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. 28 | 29 | - [Snake](https://en.wikipedia.org/wiki/Snake_(video_game_genre)) 30 | - [Tetris](https://en.wikipedia.org/wiki/Tetris) 31 | - [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) 32 | - [15 puzzle](https://en.wikipedia.org/wiki/15_puzzle) 33 | - [Arkanoid](https://en.wikipedia.org/wiki/Arkanoid) 34 | - [Minesweeper ](https://en.wikipedia.org/wiki/Minesweeper_(video_game)) 35 | - [2048](https://en.wikipedia.org/wiki/2048_(video_game)) 36 | - [Solitaire](https://en.wikipedia.org/wiki/Solitaire) 37 | - [Spider Solitaire](https://en.wikipedia.org/wiki/Spider_(solitaire)) 38 | - [Ping-pong](https://en.wikipedia.org/wiki/Pong) 39 | - [Donkey Kong](https://en.wikipedia.org/wiki/Donkey_Kong_(video_game)) 40 | - [Labyrinth](https://en.wikipedia.org/wiki/Labyrinth:_The_Computer_Game) 41 | - [Network games for 2-4 players: ping-pong, poker, chess, battleships, etc.](https://en.wikipedia.org/wiki/Online_game) 42 | 43 | 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: 44 | - https://www.redblobgames.com/ 45 | - http://www.squidi.net/three/ 46 | 47 | 48 | --- 49 | 50 | ### :arrow_forward: Applications 51 | 52 | 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." 53 | 54 | Here are some examples of potential projects for beginners: 55 | 56 | - A network chat (raw sockets or using [gRPC](https://grpc.io/docs/languages/cpp/quickstart)) 57 | - A calculator 58 | - A file manager 59 | - A currency converter 60 | - Retrieving a list of "pull-requests" or "issues" from any Github repository 61 | - Automating routine tasks, such as various calculations and generating reports in the form of tables. 62 | 63 | --- 64 | 65 | ### :arrow_forward: Student applications 66 | 67 | 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. 68 | 69 | - Developing a linear algebra library, which involves working with matrices, vectors, and performing calculations 70 | - Modeling various processes, such as physics and theoretical mechanics 71 | - Implementing numerical methods, including integration, differentiation, approximation, and interpolation 72 | 73 | --- 74 | 75 | [**To main page**](../README.md) 76 | -------------------------------------------------------------------------------- /English/Rationale.md: -------------------------------------------------------------------------------- 1 | # :flashlight: Why was the roadmap created and for what purpose? 2 | 3 | C++ is widely used in many commercial projects and has undergone significant changes throughout its history, making it more convenient for everyday use. However, there are still many myths, speculation, and fears surrounding the language that scare off potential learners. Our aim is to help dispel these myths and make it easier for beginners to learn C++. 4 | 5 | There is currently a shortage of C++ developers in the market. Our experience shows that many successful developers learned the language through self-study, as it was difficult to find quality information and resources. Most educational platforms and courses do not offer high-quality lessons, with many being too high-level or outdated. 6 | 7 | The entry barrier into C++ development is higher compared to other languages, as most of the available information is targeted towards experienced developers, further perpetuating the myth of its exceptional complexity. There is a lack of relevant information for beginners, making it difficult for them to learn the language. 8 | 9 | This roadmap aims to address these challenges. The idea for its creation came from conducting numerous interviews with inexperienced C++ developer candidates, who all shared common gaps in basic knowledge and a lack of understanding on how and where to learn the language. 10 | 11 | This roadmap can also be useful for those who have already been practicing C++ in personal and work projects. It can help you identify any gaps in your knowledge and deepen your understanding of the language, enabling you to become a highly qualified specialist. 12 | 13 | --- 14 | 15 | [**To main page**](../README.md) -------------------------------------------------------------------------------- /English/SelfIdentification.md: -------------------------------------------------------------------------------- 1 | # :mag: Are you certain that you require knowledge of C++? 2 | 3 | The first thing you should consider is: Why do you want to learn C++? 4 | 5 | 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: 6 | 7 | - 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. 8 | - 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. 9 | 10 | # :question: I already know C/C#/Java/Python and so on. Can I already start to work using C++? 11 | 12 | Yes and no. :) 13 | 14 | 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". 15 | 16 | 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. 17 | 18 | --- 19 | 20 | [**To main page**](../README.md) -------------------------------------------------------------------------------- /English/Tooling.md: -------------------------------------------------------------------------------- 1 | # :triangular_ruler: Language toolkit 2 | 3 | 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. 4 | 5 | ## :page_facing_up: Text editors 6 | 7 | * :arrow_forward: **Visual Studio Code** 8 | 9 | Site: https://code.visualstudio.com/ 10 | 11 | Price: free 12 | 13 | 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. 14 | 15 | 16 | * :arrow_forward: **Notepad++** 17 | 18 | Site: https://notepad-plus-plus.org/ 19 | 20 | Price: free 21 | 22 | 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. 23 | 24 | 25 | ## :open_file_folder: IDE (Integrated Development Environment) 26 | 27 | * :arrow_forward: **Microsoft Visual Studio IDE** 28 | 29 | Site: https://visualstudio.microsoft.com 30 | 31 | Price: Community Edition is free 32 | 33 | 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. 34 | 35 | 36 | * :arrow_forward: **Qt Creator IDE** 37 | 38 | Site: https://www.qt.io/product/development-tools 39 | 40 | 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)) 41 | 42 | 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. 43 | 44 | 45 | * :arrow_forward: **Eclipse IDE** 46 | 47 | Site: https://www.eclipse.org/downloads/packages 48 | 49 | Price: free 50 | 51 | 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. 52 | 53 | 54 | * :arrow_forward: **JetBrains Clion IDE** 55 | 56 | Site: https://www.jetbrains.com/clion 57 | 58 | Price: free for students and teachers 59 | 60 | 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++. 61 | 62 | ## :flashlight: Extensions 63 | 64 | * :arrow_forward: **JetBrains ReSharper C++** 65 | 66 | Site: https://www.jetbrains.com/resharper-cpp 67 | 68 | Price: free for students and teachers 69 | 70 | 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. 71 | 72 | * :arrow_forward: **Visual Assist** 73 | 74 | Site: https://www.wholetomato.com 75 | 76 | 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. 77 | 78 | 79 | * :arrow_forward: **Incredibuild** 80 | 81 | Site: https://www.incredibuild.com 82 | 83 | Price: have to contact incredibuild team to find the price 84 | 85 | 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. 86 | 87 | ## :electric_plug: Package managers and build systems 88 | 89 | * :arrow_forward: **Cmake** 90 | 91 | Site: https://cmake.org 92 | 93 | 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. 94 | 95 | * :arrow_forward: **Conan** 96 | 97 | Site: https://conan.io 98 | 99 | Price: free 100 | 101 | 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. 102 | 103 | 104 | * :arrow_forward: **Ninja** 105 | 106 | Site: https://ninja-build.org 107 | 108 | Price: free 109 | 110 | 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. 111 | 112 | 113 | ## :mag: Code analyzers 114 | 115 | * :arrow_forward: **PVS Studio** 116 | 117 | Site: https://pvs-studio.com 118 | 119 | Price: 30 days trial 120 | 121 | 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. 122 | 123 | 124 | * :arrow_forward: **Cpp Check** 125 | 126 | Site: https://cppcheck.sourceforge.io 127 | 128 | Price: free 129 | 130 | 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. 131 | 132 | 133 | * :arrow_forward: **Valgrind** 134 | 135 | Site: https://www.valgrind.org 136 | 137 | Price: free 138 | 139 | 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. 140 | 141 | ## :floppy_disk: Git clients 142 | 143 | * :arrow_forward: **SmartGit** 144 | 145 | Site: https://www.syntevo.com/smartgit/ 146 | 147 | Price: free for open source projects 148 | 149 | 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. 150 | 151 | * :arrow_forward: **Atlassian SourceTree** 152 | 153 | Site: https://www.sourcetreeapp.com/ 154 | 155 | Price: free 156 | 157 | 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. 158 | 159 | 160 | * :arrow_forward: **Git Kraken** 161 | 162 | Site: https://www.gitkraken.com/ 163 | 164 | Price: free for open source projects 165 | 166 | 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. 167 | 168 | --- 169 | 170 | [**To main page**](../README.md) 171 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International 2 | 3 | [English](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) || [Русский](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ru) 4 | 5 | --- 6 | 7 | ## Attribution-NonCommercial-ShareAlike 4.0 International 8 | 9 | Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. 10 | 11 | --- 12 | 13 | ## Using Creative Commons Public Licenses 14 | 15 | Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. 16 | 17 | * __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors). 18 | 19 | * __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees). 20 | 21 | --- 22 | 23 | ## Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License 24 | 25 | By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. 26 | 27 | --- 28 | 29 | ## Section 1 – Definitions. 30 | 31 | a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. 32 | 33 | b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. 34 | 35 | c. __BY-NC-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License. 36 | 37 | d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 38 | 39 | e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. 40 | 41 | f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. 42 | 43 | g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. 44 | 45 | h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License. 46 | 47 | i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. 48 | 49 | h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License. 50 | 51 | i. __NonCommercial__ means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. 52 | 53 | j. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. 54 | 55 | k. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. 56 | 57 | l. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. 58 | 59 | --- 60 | 61 | ## Section 2 – Scope. 62 | 63 | a. ___License grant.___ 64 | 65 | 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: 66 | 67 | A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and 68 | 69 | B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. 70 | 71 | 2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 72 | 73 | 3. __Term.__ The term of this Public License is specified in Section 6(a). 74 | 75 | 4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 76 | 77 | 5. __Downstream recipients.__ 78 | 79 | A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. 80 | 81 | B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. 82 | 83 | C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 84 | 85 | 6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). 86 | 87 | b. ___Other rights.___ 88 | 89 | 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 90 | 91 | 2. Patent and trademark rights are not licensed under this Public License. 92 | 93 | 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. 94 | 95 | --- 96 | 97 | ## Section 3 – License Conditions. 98 | 99 | Your exercise of the Licensed Rights is expressly made subject to the following conditions. 100 | 101 | a. ___Attribution.___ 102 | 103 | 1. If You Share the Licensed Material (including in modified form), You must: 104 | 105 | A. retain the following if it is supplied by the Licensor with the Licensed Material: 106 | 107 | i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); 108 | 109 | ii. a copyright notice; 110 | 111 | iii. a notice that refers to this Public License; 112 | 113 | iv. a notice that refers to the disclaimer of warranties; 114 | 115 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; 116 | 117 | B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and 118 | 119 | C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 120 | 121 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 122 | 123 | 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 124 | 125 | b. ___ShareAlike.___ 126 | 127 | In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 128 | 129 | 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. 130 | 131 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 132 | 133 | 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. 134 | 135 | --- 136 | 137 | ## Section 4 – Sui Generis Database Rights. 138 | 139 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: 140 | 141 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; 142 | 143 | b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and 144 | 145 | c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. 146 | 147 | For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. 148 | 149 | --- 150 | 151 | ## Section 5 – Disclaimer of Warranties and Limitation of Liability. 152 | 153 | a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__ 154 | 155 | b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__ 156 | 157 | c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. 158 | 159 | --- 160 | 161 | ## Section 6 – Term and Termination. 162 | 163 | a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. 164 | 165 | b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 166 | 167 | 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 168 | 169 | 2. upon express reinstatement by the Licensor. 170 | 171 | For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. 172 | 173 | c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. 174 | 175 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 176 | 177 | --- 178 | 179 | ## Section 7 – Other Terms and Conditions. 180 | 181 | a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. 182 | 183 | b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. 184 | 185 | --- 186 | 187 | ## Section 8 – Interpretation. 188 | 189 | a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. 190 | 191 | b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. 192 | 193 | c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. 194 | 195 | d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. 196 | 197 | > Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. 198 | > 199 | > Creative Commons may be contacted at creativecommons.org -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # C++ Developer Roadmap 2 | 3 | ## :speech_balloon: Additional languages: [Русский](Russian/README.md) [中文](Chinese/README.md) 4 | 5 | C++ is still one of the most popular development languages in [2024](https://survey.stackoverflow.co/2024/technology#most-popular-technologies). 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? 6 | 7 | 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. 8 | 9 | It is recommended that you read the articles listed below before starting to explore the map. 10 | 11 | 12 | # :bookmark_tabs: Articles 13 | 14 | 1. :flashlight: [Why was the roadmap created and for what purpose?](English/Rationale.md) 15 | 1. :mag: [Are you certain that you require knowledge of C++?](English/SelfIdentification.md) 16 | 1. :space_invader: [C++ - It's Not Rocket Science](English/FunCpp.md) 17 | 1. :clipboard: [Application areas of C++](English/AreasOfApplication.md) 18 | 1. :ghost: [Myths and Legends of C++](English/Mythbusters.md) 19 | 1. :chart_with_upwards_trend: [Developers grading](English/Grades/Overview.md) 20 | 1. :mortar_board: [How to study?](English/HowToStudy.md) 21 | 1. :books: [Books and other resources about C++](English/Books/Overview.md) 22 | 1. :telescope: [Pet-project ideas](English/PetProjects.md) 23 | 1. :triangular_ruler: [Language toolkit](English/Tooling.md) 24 | 1. :gem: [More resources about C++: documentation, community links, etc.](English/CommunitySources.md) 25 | 26 | 27 | # :milky_way: Roadmap 28 | 29 | The roadmap is available in the following formats: 30 | 31 | * :arrow_forward: [Miro](https://miro.com/app/board/o9J_lpap34Q=/) 32 | * :arrow_forward: [GraphML](English/Graph/roadmap.svg) 33 | 34 | Instructions on how to view and edit a graphML file can be found [here](English/Graph/README.md) 35 | 36 | # :key: License and conditions 37 | 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: 38 | 39 | - You may only share, adopt, or copy any portion of the presented materials if you provide a link to the original sources. 40 | - It's **PROHIBITED** to use any portion of the materials for any commercial purposes. 41 | 42 | 43 | # :mailbox: Feedback and communication 44 | 45 | In the event of any comments, proposals, or ideas, please do not hesitate to contact us. We truly value your support. 46 | 47 | You can reach us through one of the following channels via Github: 48 | - In case of any proposal or modification in the **repository** content - create a new PR in [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls) 49 | - 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) 50 | 51 | 52 | # :telephone: Contacts 53 | 54 | Creators: 55 | - [Evgenii Melnikov](https://github.com/salmer), 56 | - [Dmitrii Dmitriev](https://github.com/DmitrievDmitriyA), 57 | - [Dmitriy Savin](https://github.com/SD57) 58 | 59 | Reviewers: 60 | - [Sergey Tyulenev](https://github.com/marleeeeeey), 61 | - [Konstantin Komarov](https://github.com/MolinRE), 62 | - [Sergey Skliar](https://github.com/SergeiSkliar) 63 | - Community :) 64 | -------------------------------------------------------------------------------- /Russian/AreasOfApplication.md: -------------------------------------------------------------------------------- 1 | # :clipboard: Области применения C++ 2 | 3 | У языка С++ довольно широкая сфера применения. Преимущественно его используют там, где требуется высокая производительность или низкое потребление памяти. Ниже представлены материалы, в которых более подробно рассказывается о сферах применения C++: 4 | - [Язык программирования С++. Антон Полухин](https://www.youtube.com/watch?v=pic8c9_snJw) 5 | - [Антон Полухин — Незаменимый С++](https://www.youtube.com/watch?v=LZflL44SVVY&ab_channel=C%2B%2BUserGroup) 6 | - [АйТиБорода - ЯЗЫК ЯЗЫКОВ! / Всё про C++ и разработку игр / Интервью с Lead Core Developer World of Tanks Blitz](https://www.youtube.com/watch?v=QQZmDWnV618) 7 | - [Языки C и C++. Где их используют и зачем?](https://medium.com/nuances-of-programming/%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8-c-%D0%B8-c-%D0%B3%D0%B4%D0%B5-%D0%B5%D1%89%D1%91-%D0%B8%D1%85-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8E%D1%82-%D0%B8-%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-9ff56559d5bf) 8 | - [Олимпиадное программирование](https://academy.yandex.ru/posts/sport-dlya-razrabotchikov-kak-ustroeno-olimpiadnoe-programmirovanie) 9 | - [What Can You Do With C++?](https://www.ko2.co.uk/what-can-you-do-with-c-plus-plus/) 10 | 11 | --- 12 | 13 | [**На главную страницу**](README.md) 14 | -------------------------------------------------------------------------------- /Russian/Books/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: Junior 2 | 3 | ## :innocent: Мотивация и опыт 4 | 5 | - [Роберт Мартин - Идеальный программист](https://www.ozon.ru/product/idealnyy-programmist-kak-stat-professionalom-razrabotki-po-martin-robert-k-211433126/?asb=z4%252BBD7UDRGAKgK5PMnilay5QBkwvjGXgnMhfF1fAOWM%253D&asb2=Gvhxd5LT0NA_AobRO1muUz0icHnQ6j-JL2zxEOH1wzQ&keywords=%D0%B8%D0%B4%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82&sh=6BDpuJeM) 6 | 7 | Дядюшка Боб вывел набор советов и рекомендаций, которые помогут вам найти себя в индустрии. Эта книга не только про технические навыки, но и про психологические аспекты работы, и как справляться с ними. 8 | 9 | - [Роберт Мартин - Чистый код. Создание, анализ и рефакторинг](https://www.ozon.ru/product/chistyy-kod-sozdanie-analiz-i-refaktoring-chistyy-kod-sozdanie-analiz-i-refaktoring-142429922/?sh=awbarJsR) 10 | 11 | Сегодня вокруг этой книги витает много критики. Тем не менее мы считаем, что она принесет новичкам больше пользы, нежели чем вреда, в краткосрочной перспективе. Эта книга даст набор рабочих рекомендаций, которые помогут писать более структурированный, читаемый и поддерживаемый код. Как и с любым другим знанием, его не нужно слепо превращать в карго-культ. Используйте знания с умом. Подберите для себя те техники и приемы из книги, которые считаете разумными. 12 | 13 | - [Стив Макконнелл - Совершенный код. Мастер-класс](https://www.ozon.ru/product/sovershennyy-kod-master-klass-138437220/?sh=dxL38m9c) 14 | 15 | Не смотря на почтенный возраст книги, её можно считать библией разработчика. Она системно описывает устройство индустрии, а также дает массу советов: каким образом расти и развиваться, чтобы стать эффективным специалистом. 16 | 17 | ## :bar_chart: Computer Science 18 | 19 | - [Томас Кормен - Алгоритмы. Вводный курс](https://www.ozon.ru/product/algoritmy-vvodnyy-kurs-24903185/?sh=oABFs2sD) 20 | 21 | Хорошее продолжение после книги "Грокаем алгоритмы". Книга знакомит с базовыми распространенными алгоритмами сортировок, работа со списками и т.д., но на более глубоком уровне. Все ещё написана довольно простым языком, потому она может помочь подготовиться к глубокому погружению в алгоритмы. 22 | 23 | ## :pencil: C++ 24 | 25 | - [Скотт Мейерс - Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ](https://www.ozon.ru/product/effektivnoe-ispolzovanie-c-55-vernyh-sovetov-uluchshit-strukturu-i-kod-vashih-programm-2610625/?sh=VdYASWTH) 26 | 27 | Отличный сборник практических рекомендаций по использованию различных языковых средств C++. Данная книга написана во времена стандарта C++03, но ценность информации по-прежнему остается актуальной. Все рекомендации, техники и советы, описанные в книге, масштабируются и активно переиспользуются в новых стандартах языка. 28 | 29 | - [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) 30 | 31 | Сборник советов для разработчиков с небольшим опытом написания кода на C++. Она содержит рекомендации по наиболее распространенным ошибкам. Все объяснения представлены коротко и лаконично, ко многим из них добавлены ссылки на дополнительные источники. В данной книге не представлен фундаментальный разбор каждого совета, потому рекомендуется более детально разобраться с каждой рекомендацией по отдельности в будущем, чтобы понимать их истинные причины. К данной книге отсутствует перевод на русский, но уровень используемого английского языка невысок, потому можете попробовать начать её чтение, в ином случае - временно пропустите её. 32 | 33 | - [Александреску Андрей, Саттер Герб - Стандарты программирования на С++](https://www.ozon.ru/product/standarty-programmirovaniya-na-s-2381848/?sh=SUs05K52) 34 | 35 | Небольшая книга, которая описывает общепринятые практики и правила написания кода в коммерческих проектах. Данная книга - это агрегация правил из различных компаний. Данная работа стала прообразом сайта: [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines). Тем не менее рекомендуем прочитать данную книгу, т.к. даст вам общее представление, какие правила написания кода распространены во многих проектах. 36 | 37 | ## :electric_plug: Технические навыки 38 | 39 | - [Фримен Эрик, Робсон Элизабет - Head First. Паттерны проектирования](https://www.ozon.ru/product/head-first-patterny-proektirovaniya-obnovlennoe-yubileynoe-izdanie-144233005/?sh=VWSHgt2E) 40 | 41 | Отличная книга для начала изучения паттернов проектирования. В качестве неплохой альтернативы можем также предложить сайт [refactoring.guru](https://refactoring.guru/design-patterns), но в данной книге также имеется масса практических заданий, которые помогут вам лучше усвоить идеи паттернов, в каких случаях их применять. 42 | 43 | - [Глейзер Джошуа, Мадхав Санджай - Многопользовательские игры. Разработка сетевых приложений](https://www.ozon.ru/product/mnogopolzovatelskie-igry-razrabotka-setevyh-prilozheniy-137764980/?sh=rocQznEP) 44 | 45 | Данная книга станет практическим пособием по работе с сетями на примере разработки многопользовательских игр. К концу книги вы получите достаточно сведений, чтобы написать собственное сетевое приложение. Помимо того, что вы освоите базовую теорию по компьютерным сетям, вы также овладеете навыками работы с ней на языке C++. Все примеры в книге написаны именно на нем, с использованием стандарта C++11/14. 46 | 47 | - [Андрей Созыкин - Компьютерные сети. Базовый курс](https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1) 48 | 49 | Прекрасный курс видеолекций по компьютерным сетям. За основу взяты книги Таненбаума и других классиков по теме. В большинстве проектов этих знаний будет достаточно, чтобы не совершать очевидных ошибок при работе с сетями. 50 | 51 | --- 52 | 53 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) -------------------------------------------------------------------------------- /Russian/Books/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: Middle 2 | 3 | ## :pencil: C++ 4 | 5 | - [Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14](https://www.ozon.ru/product/effektivnyy-i-sovremennyy-s-42-rekomendatsii-po-ispolzovaniyu-c11-i-c14-effektivnyy-i-sovremennyy-34747131/?sh=CHL5ECEP) 6 | 7 | Продолжение предыдущей книги Скотта Мейерса. Сборник советов для работы с новыми стандартами C++11 и C++14. 8 | 9 | - [Параллельное программирование на С++ в действии. Практика разработки многопоточных программ](https://www.ozon.ru/product/parallelnoe-programmirovanie-na-s-v-deystvii-praktika-razrabotki-mnogopotochnyh-programm-217051361/?asb=uff2kmWPtH7totJyGfGyYsPFkTR%252BIxeTdrNvGvZlqzc%253D&asb2=L78tfqOpsfrZsUEmgaZ9kZgbmpv4Jyn9UhBcKxIEO3Q&keywords=%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+C%2B%2B&sh=nq_ppy1R) 10 | 11 | Отличное руководство по многопоточному программированию в составе стандартной библиотеки C++. Представлено подробное описание ко всем примитивам библиотеки. Также даются объяснения работы этих примитивов, скрытыми под абстракциями. 12 | 13 | - [Герб Саттер - Решение сложных задач на С++](https://www.ozon.ru/product/reshenie-slozhnyh-zadach-na-s-1273200/?sh=gy2qlNpv) и [Герб Саттер - Новые сложные задачи на C++](https://www.ozon.ru/product/novye-slozhnye-zadachi-na-c-2342923/?sh=PpLM-a9C) 14 | 15 | Сборники, которые описывают разнообразные задачи с точки зрения проектирования и написания кода. Предлагают коллекцию эффективных решений, многие из которых считаются классическими идиомами языка. Многие идиомы, представленные в книге, встречаются на многих проектах повсеместно. 16 | 17 | - [Дэвид Вандевурд - Шаблоны C++. Справочник разработчика](https://www.ozon.ru/product/shablony-c-spravochnik-razrabotchika-145861864) 18 | 19 | Наиболее свежая и актуальная работа по использованию шаблонов в C++. Это фундаментальная работа, которая описывает актуальные механизмы применения шаблонов, внедренные в новых стандартах, вплоть до C++17. Если вам необходимо писать параметризуемый код, то этот справочник станет мощной опорой. Вы познакомитесь, как с азами метапрограммирования, так и с различными нюансами того или иного приема. 20 | 21 | 22 | ## :bicyclist: Оптимизация приложений 23 | 24 | - [Курт Гантерог - Оптимизация программ на C++](https://www.ozon.ru/product/optimizatsiya-programm-na-c-proverennye-metody-povysheniya-proizvoditelnosti-140145932/?sh=OlHzzZHG) 25 | 26 | Хороший сборник советов и рекомендаций по улучшению производительности приложений на языке C++. Некоторые советы основаны на идиомах и конструкциях языка, описанные Гербом Саттером или Скоттом Майерсом. Потому рекомендуется её прочтение после знакомства с предыдущими книгами. 27 | 28 | - [Агнер Фог - Оптимизация С++ приложений](https://agner.org/optimize/optimizing_cpp.pdf) или [Набор руководств по оптимизации приложений](https://agner.org/optimize) 29 | 30 | Практические руководства, которые дают исчерпывающую информацию о потенциальных возможностях оптимизации приложений, разработанных на C++, или связанных с взаимодействием с центральным процессором, памятью и т.д. 31 | 32 | 33 | ## :electric_plug: Технические навыки 34 | 35 | - [Джонсон Ральф, Хелм Ричард - Приемы объектно-ориентированного проектирования. Паттерны проектирования](https://www.ozon.ru/product/priemy-obektno-orientirovannogo-proektirovaniya-patterny-proektirovaniya-2457392/?sh=U_1tfTeu) 36 | 37 | Классический справочник по паттернам проектирования. Каждый паттерн детально разбирается, и предлагаются случаи, где они могут быть применены. Данная книга будет отличным продолжением после "Паттернов проектирования" от Эрика Фримена. Будьте готовы, что читается она тяжелее, чем предыдущая. 38 | 39 | - [Гэри Маклин Холл - Адаптивный код: гибкое кодирование с помощью паттернов проектирования и принципов SOLID](https://www.ozon.ru/product/adaptivnyy-kod-gibkoe-kodirovanie-s-pomoshchyu-patternov-proektirovaniya-i-printsipov-solid-142089791/?sh=yQeAC0en) 40 | 41 | Одна из достойнейших книг, которая доступно объясняет принципы SOLID. Примеры написаны на языке C#, но это не должно вызвать сложностей при их чтении, т.к. используется минималистичный набор инструкций языка. 42 | 43 | - [Роберт Мартин - Чистая архитектура. Искусство разработки программного обеспечения](https://www.ozon.ru/product/chistaya-arhitektura-iskusstvo-razrabotki-programmnogo-obespecheniya-martin-robert-martin-robert-211433166) 44 | 45 | Ещё одна работа дядюшки Боба. На этот раз она рассказвает о том, каким образом подойти к разработки архитектуры приложения/компонента, каким образом принимать те или иные архитектурные решения, на чем заострить свое внимание. Книга станет хорошим началом для тех, кто интересуется архитектурными задачами в разработке ПО, но не знает с чего начать. Знания из этой книги пригодятся подавляющему большинству инженеров, чтобы не допускать очевидные ошибки во время проектирования дизайна ПО. 46 | 47 | - [Надежда Поликарпова, Анатолий Шалыто - Автоматное программирование](https://www.ozon.ru/product/avtomatnoe-programmirovanie-28260411/?sh=KMISCILZ) 48 | 49 | Краткое практическое пособие о том, как подходить к написанию программ посредством конечных автоматов. Наверно более простого и элегантного описания теории конечных автоматов и её практического применения будет сложно отыскать. Рекомендуем оизучить пару коммерческих работ, выполненных в описанной парадигме. Ссылки к исходному коду вы найдете в конце книги. 50 | 51 | - [Владимир Хориков - Принципы юнит-тестирования](https://www.ozon.ru/product/printsipy-yunit-testirovaniya-horikov-vladimir-211424826) 52 | 53 | В книге подробно рассматриваются рекомендации, паттерны и антипаттерны, встречающиеся в области юнит-тестирования. После чтения этой книги вы будете знать все необходимое для того, чтобы стать экспертом в области создания успешных проектов, которые легко расширять и сопровождать благодаря хорошим тестам. 54 | 55 | 56 | ## :zap: Операционные системы 57 | 58 | - [Эндрю Таненбаум - Современные операционные системы](https://www.ozon.ru/product/sovremennye-operatsionnye-sistemy-tanenbaum-endryu-bos-herbert-211432884) 59 | 60 | Одна из лучших книг про операционные системы, которую можно встретить. Фундаментальная работа по их устройству: файловая система, сеть, менеджмент памяти, планировщик задач, многопоточноть и т.д. Каждый раздел книги очень подробно рассказывает про каждую часть устройства операционной системы, при этом все объясняется простым языком. Она старается рассказать про общее устройство ОС, сильно не погружаясь в детали того или иного дистрибутива. 61 | 62 | - [Марк Руссинович - Внутреннее устройство Windows](https://www.ozon.ru/product/vnutrennee-ustroystvo-windows-russinovich-mark-solomon-devid-russinovich-mark-solomon-devid-211433055) 63 | 64 | Данная книга обсуждает те же вопросы, что и предыдущая, но акцентируется исключительно на ОС Microsoft Windows. Она детально останавливается на каждом аспекте устройства ОС, но с проекцией на Windows, а также рассказывает о различных нюансах и аспектах, которые могут быть официально не задекларированы разработчиками. Полезная книга для тех, кто ведет разработку низкоуровневых приложений, которым требуется интенсивное взаимодействие с системными библиотеками ОС. 65 | 66 | - [Кристофер Негус - Библия Linux](https://www.ozon.ru/product/bibliya-linux-10-e-izdanie-313214724) 67 | 68 | Данная книга может стать закономерным продолжением после работы Таненбаума. Она детально останавливается на каждом аспекте OS Linux. Все примеры разобраны для популярных дистрибутивов: Red Hat, Ubuntu и Fedorа. Подойдет для разработчиков, которые используют данную ОС в повседневной деятельности. 69 | 70 | - [Ulrich Drepper - What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf) 71 | 72 | Хорошая обзорная статья, дающая представление о том, как устроена память компьютера и зачем она так устроена. Даёт как высокоуровневое представление, так и набрасывает низкоуровневых деталей, если есть желание в них углубляться. 73 | 74 | 75 | ## :globe_with_meridians: Компьютерные сети 76 | 77 | - [Эндрю Таненбаум - Компьютерные сети](https://www.ozon.ru/product/kompyuternye-seti-tanenbaum-endryu-uezeroll-devid-tanenbaum-endryu-uezeroll-devid-211432815) 78 | 79 | Классическая книга по теоретическим основам компьютерных сетей. Содержит в себе подробное описание, начиная с физического уровня и заканчивая протоколами передачи данных. Будет полезна для тех разработчиков, которые плотно занимаются проектами, взаимодействующие с сетями. В ином случае вам будет достаточно просмотреть видеокурс Андрея Созыкина, представленный в разделе [Junior](Junior.md). Его курс базируется на данной книге, но также содержит в себе массу дополнений. 80 | 81 | - [Олифер Виктор - Компьютерные сети. Принципы, технологии, протоколы](https://www.ozon.ru/product/kompyuternye-seti-printsipy-tehnologii-protokoly-olifer-viktor-grigorevich-olifer-211432410) 82 | 83 | Ещё одна замечательная книга по основам компьютерных сетей. В каких-то моментах подача информации может показаться сложнее, по сравнению с работой Таненбаума. Потому рекомендуем выбрать ту книгу, повествование которой больше подходит именно для вас. 84 | 85 | --- 86 | 87 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) -------------------------------------------------------------------------------- /Russian/Books/Overview.md: -------------------------------------------------------------------------------- 1 | # :books: Книги и материалы 2 | 3 | В данных статьях собраны книги, которые помогут вам сориентироваться, и задать свой вектор обучения. Все книги поделены на несколько разделов, которые касаются различных навыков. Рекомендуем обзорно посмотреть каждый раздел, и подобрать набор литературы под свои нужды. В данных разделах собраны книги для получения общих знаний по C++, которые пригодятся в большинстве коммерческих проектов. 4 | 5 | Представленная библиотека не концентрируется на книгах, не связанных с какой-либо предметной областью или узкоспециализированными направлениями. Идея этого проекта состоит в том, чтобы помочь людям получить общие знания о C++ и разработке программного обеспечения. Если вы ищете специализированные материалы, то рекомендуем обратиться к экспертам, в интересующей вас области. 6 | 7 | - :blue_book: [PreJunior](PreJunior.md) 8 | - :green_book: [Junior](Junior.md) 9 | - :orange_book: [Middle](Middle.md) 10 | - :closed_book: [Senior](Senior.md) 11 | 12 | --- 13 | 14 | [**На главную страницу**](../README.md) 15 | -------------------------------------------------------------------------------- /Russian/Books/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: Pre-Junior 2 | 3 | ## :innocent: Мотивация и опыт 4 | 5 | - [Фаулер Чед - Программист-фанатик](https://www.ozon.ru/product/programmist-fanatik-32218784) 6 | 7 | Эту книгу можно считать признанной классикой в мире разработки, в которой Чед Фаулер пытается поделиться своим видением: как стать высококлассным, востребованным специалистом, и оставаться на гребне волны. 8 | 9 | ## :bar_chart: Computer Science 10 | 11 | - [Фило Владстон Феррейра - Теоретический минимум по Computer Science](https://www.ozon.ru/product/teoreticheskiy-minimum-po-computer-science-vse-chto-nuzhno-programmistu-i-razrabotchiku-144946027) 12 | 13 | Обзорная книга, которая рассказывает о различных направлениях Computer Science: математический аппарат, обзор существующих алгоритмов, базы данных, устройство компьютера и т.д. Она может стать хорошей отправной точкой, чтобы подыскать интересующие направления и расставить для себя приоритеты. 14 | 15 | - [Чарльз Петцольд - Код. Тайный язык информатики](https://www.ozon.ru/context/detail/id/125884) 16 | 17 | Прежде чем начать изучение языка, рекомендуем почитать данную книгу. Она расскажет простым языком о том как устроен компьютер, как он работает на физическом уровне. Здесь отсутствуют какие-либо сложные технические или академические детали. Книга содержит в себе основы основ, которые вряд ли в скором времени потеряют свою актуальность. Это поможет вам лучше понять фундаментальные идеи языка C++ позднее. Является отличным дополнением к предыдущей книге, т.к. глубже раскрывает устройство компьютера. 18 | 19 | - [Адитья Бхаргава - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих](https://www.ozon.ru/product/grokaem-algoritmy-illyustrirovannoe-posobie-dlya-programmistov-i-lyubopytstvuyushchih-139296295) 20 | 21 | Отличное вводное пособие в мир алгоритмов. Написано легким языком, который поймет большинство новичков. Также есть немного практических задач, чтобы попробовать написать свои первые алгоритмы. 22 | 23 | ## :pencil: C++ 24 | 25 | - [Стивен Прата - Язык программирования C++. Лекции и упражнения (шестое издание)](https://www.ozon.ru/product/yazyk-programmirovaniya-c-lektsii-i-uprazhneniya-147417584) 26 | 27 | Наиболее актуальная для новичков, с которой стоит начать свой путь изучения C++. Не требует наличия каких-то специфичных знаний, а также имеет набор упражнений к каждой главе. Они помогут вам отработать и понять фундаментальные возможности языка. 28 | 29 | - [Липпман Стенли - Язык программирования C++. Базовый курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-bazovyy-kurs-147417585) 30 | 31 | Отличное дополнение к книге Стивена Праты. К ней хорошо обращаться параллельно с предыдущей. Рекомендуем найти баланс между двумя книгами, т.к. информация подается по-разному, и шанс понять ту или иную тему у вас повысится. 32 | 33 | - [Эндрю Кёниг - Эффективное программирование на C++. Практическое программирование на примерах](https://www.ozon.ru/product/effektivnoe-programmirovanie-na-c-prakticheskoe-programmirovanie-na-primerah-1273565) 34 | 35 | Отличный задачник для начинающих разработчиков. Каждый раздел книги подробно разбирает какой-либо фундаментальный аспект языка, а затем предлагает набор практических упражнений, чтобы закрепить знания. В книги раскрыты наиболее важные темы, которые пригодятся при изучении любых новых аспектов языка в будущем. Рекомендуем обращаться к этой книге после прочтения книги Липпмана или Праты или параллельно. 36 | 37 | - В дополнение к представленным учебникам, можно порекомендовать следующие видео от лекторов МФТИ: 38 | - Илья Мещерин: [Курс лекций по C++](https://www.youtube.com/playlist?list=PLmSYEYYGhnBviRYhIDty-CSTDS16a3whl) 39 | - Константин Владимиров: [Лекции по современному C++ и обобщённому программированию в магистратуре МФТИ](https://www.youtube.com/channel/UCvmBEbr9NZt7UEh9doI7n_A/featured) 40 | - Тимофей Хирьянов: 41 | - [Лекции C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fItmofHO4KuGjfGtbQtEj-x) 42 | - [Алгоритмы и структуры данных на C++](https://www.youtube.com/playlist?list=PLRDzFCPr95fL_5Xvnufpwj2uYZnZBBnsr) 43 | 44 | ## :electric_plug: Технические навыки 45 | 46 | - [MSDN](https://docs.microsoft.com/ru-ru/cpp/build/vscpp-step-0-installation?view=msvc-160) 47 | 48 | Если вы начинаете изучать язык самостоятельно, то рекомендуем вести разработку первых программ или выполнять упражнения в IDE Microsoft Visual Studio (Community Edition). На сегодняшний день, это маскимально дружелюбная IDE к новичкам, как в установке, так и в использовании (и при этом абсолютно бесплатно!). Это позволит максимально сконцентрироваться на изучении языка, а не на борьбе с рабочим окружением. На сайте вы найдете небольшой учебник, который расскажет как установить Visual Studio, создать первый консольный проект и написать первое приложение. 49 | 50 | --- 51 | 52 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) 53 | -------------------------------------------------------------------------------- /Russian/Books/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: Senior 2 | 3 | ## :pencil: C++ 4 | 5 | - Сложно посоветовать что-то конкретное для разработчиков уровня Senior. Разработчики такого уровня уже должны уверенно владеть C++ и понимать его возможности/ограничения. Основная задача, которая стоит на этом уровне: мониторить появления новых стандартов и фич для языка, а также обновления библиотек/фреймворков. 6 | 7 | 8 | ## :muscle: Управление командой 9 | 10 | - [Дж. Ханк Рейнвотер - Как пасти котов](https://www.ozon.ru/product/kak-pasti-kotov-nastavlenie-dlya-programmistov-rukovodyashchih-drugimi-programmistami-147226659) 11 | 12 | Признанная классика, которая повествует о том, какие сложности возникают при управлении разработчиками. Данная книга хоть и устарела в каких-то аспектах, тем не менее она станет отличным началом для поиска информации об управлении программистами. Многие главы по-прежнему актуальны, а также дадут начальное представление об управлении людьми. Такие знания могут пригодиться при менторинге джуниоров. 13 | 14 | - [Марина Перескокова - Мама, я тимлид! Практические советы по руководству IT-командой](https://www.ozon.ru/product/mama-ya-timlid-prakticheskie-sovety-po-rukovodstvu-it-komandoy-pereskokova-marina-315820151) 15 | 16 | Небольшая по своему содержанию, но крайне полезная книга для тех разработчиков, которые стали тимлидами, выполняют какую-либо часть их обязанностей или думают над тем, чтобы попробовать эту роль для себя. Предоставляет широкий обзор по компетенциям и задачам, которые предстают для данной роли. 17 | 18 | - [Майкл Лопп - Как управлять интеллектуалами. Я, нерды и гики](https://www.ozon.ru/product/kak-upravlyat-intellektualami-ya-nerdy-i-giki-lopp-maykl-lopp-maykl-211432845) 19 | 20 | Данная книга повествует о том, как быть руководителем, какие сложности встают перед таким человеком. Она поможет вам научиться мыслить как менеджер, понять какие проблемы беспокоят вашего менеджера. Это позволит вам выстроить более эффективное взаимодействие между вами, менеджером и командой разработки. 21 | 22 | - [Фредерик Брукс - Мифический человеко-месяц, или Как создаются программные системы](https://www.ozon.ru/product/mificheskiy-cheloveko-mesyats-ili-kak-sozdayutsya-programmnye-sistemy-bruks-frederik-bruks-frederik-211424648) 23 | 24 | Книга считается классикой в управлении проектами. Акцент этой книги сосредоточен на ошибках, которые допускаются на проектах, приводящие к их провалам. Сегодня эта работа тоже отчасти считается устаревшей, но для тех разработчиков, которые только начинают свой путь в качестве управленца, она будет отличным началом, чтобы уберечь себя от типовых ошибок. 25 | 26 | - [Том ДеМарко - Deadline. Роман об управлении проектами](https://www.ozon.ru/product/deadline-roman-ob-upravlenii-proektami-demarko-tom-405808639) 27 | 28 | Книга-роман, повествующая о работе менеджера и о том, как происходит управление проектами. Крайне полезна тем, что в художественной манере передает колоссальный опыт управленческих будней менеджера. Наиболее полно раскрывает те вопросы, с которыми менеджер сталкивается в повседневной работе. 29 | 30 | - [Даниэль Канеман - Думай медленно... решай быстро](https://www.ozon.ru/product/dumay-medlenno-reshay-bystro-kaneman-daniel-240690039) 31 | 32 | Классическая книга о логических ошибках мышления человека. Полезна тем, что это поможет более рационально подходить к принятию различных решений, беря в расчет когнитивные искажения в человеческом мышлении. Необходимый навык для специалистов, которые находятся в зоне принятия ключевых решений. Книга может показаться довольно занудной, в таком случае вы можете попробовать поискать альтернативные работы, которые повествуют о когнитивных искажениях. 33 | 34 | 35 | ## :clipboard: Требования и архитектура ПО 36 | 37 | - [Карл Вигерс - Разработка требований к программному обеспечению](https://www.ozon.ru/product/razrabotka-trebovaniy-k-programmnomu-obespecheniyu-vigers-karl-i-bitti-dzhoy-221778297) 38 | 39 | Книга пригодится тем, кто занят сбором и проработкой требований к программному обеспечению. Она расскажет о том, каким образом взаимодействовать с менеджерами, заказчиками и разработчиками при сборе требований, каким образом превратить словесные идеи в техническое решение с понятными требованиями и ограничениями. 40 | 41 | - [Len Bass, Paul Clements, Rick Kazman - Software Architecture in Practice (ENG only)](https://www.livelib.ru/book/1002753583-software-architecture-in-practice-len-bass-paul-clements-rick-kazman) 42 | 43 | Классика по основам архитектурных подходов проектирования программного обеспечения. Содержит коллекцию базовых архитектурных шаблонов и приемов построения больших программных систем. 44 | 45 | - [Марк Ричардс, Нил Форд - Основы архитектуры программного обеспечения: инженерный подход (ENG only)](https://www.ozon.ru/product/osnovy-arhitektury-programmnogo-obespecheniya-inzhenernyy-podhod-339635830) 46 | 47 | Книга по основам проектирования программного обеспечения. Как и предыдущая работа, повествует об основах проектирования. Отличие от предыдущей книги в том, что предлагается рассмотреть подходы к проектированию ПО, с инженерной точки зрения: возможность добиться надежности, повторяемости компонентов системы, их предсказуемости и т.п. 48 | 49 | - [Мартин Фаулер - Шаблоны корпоративных приложений](https://www.ozon.ru/product/shablony-korporativnyh-prilozheniy-147417586) 50 | 51 | Набор архитектурных подходов для построения различных корпоративных систем. Данная книга может быть полезна тем, кто строит системы с разной степенью сложности и направленности: финансовые операции, документооборот и т.п. 52 | 53 | - [Крис Ричардсон - Микросервисы. Паттерны разработки и рефакторинга](https://www.ozon.ru/product/mikroservisy-patterny-razrabotki-i-refaktoringa-211432697) 54 | 55 | Книга концентрируется на современном архитектурном подходе проектирования систем - микросервисы. Это работа повествует о том, как произвести последовательную трансформацию приложения из "монолитного" состояния в набор микросервисов. Содержит набор паттернов, а также советы по рефакторингу существующего кода, чтобы наиболее эффективно произвести данную процедуру. 56 | 57 | --- 58 | 59 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) -------------------------------------------------------------------------------- /Russian/CommunitySources.md: -------------------------------------------------------------------------------- 1 | # :gem: Community sources 2 | 3 | ## :bookmark_tabs: C++ общее 4 | 5 | - [CppReference](https://en.cppreference.com) 6 | - [CPlusPlus](https://www.cplusplus.com/reference) 7 | - [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) 8 | - [Microsoft GSL C++ (Guidelines Support Library)](https://github.com/microsoft/GSL) 9 | - [Рабочая группа C++ - представители комитета по стандартизации языка в России](https://stdcpp.ru/) 10 | - [Новости от комитета стандартизации С++ (ENG)](https://isocpp.org/) 11 | - [C++ Online Compiler Explorer](https://gcc.godbolt.org) 12 | 13 | ## :satellite: Популярные конференции по С++ 14 | 15 | - [C++ Russia](https://cppconf.ru/) 16 | - [Cpp Con](https://cppcon.org/) 17 | - [Meeting C++](https://meetingcpp.com/) 18 | - [C++ Now](https://cppnow.org/) 19 | 20 | ## :tv: Каналы конференций по C++ на YouTube 21 | 22 | - [C++ Russia](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA) 23 | - [Cpp Con](https://www.youtube.com/user/CppCon) 24 | - [Meeting C++](https://www.youtube.com/user/MeetingCPP) 25 | - [C++ Now](https://www.youtube.com/user/BoostCon) 26 | 27 | ## :exclamation: Альтернативные источники для изучения С++ 28 | 29 | - [Hackingcpp.com](https://hackingcpp.com/index.html) - Портал с различным набором структурированных материалов по C++: книги, шпаргалки, видео с конференций 30 | - [Awesomecpp.com](https://awesomecpp.com) - Коллекция различных ресурсов по C++. 31 | - [Cpp Con (back to basics)](https://www.youtube.com/playlist?list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e) 32 | - [Learncpp.com](https://www.learncpp.com/) - C++ курс для изучения основ языка. Обновляется и дополняется. 33 | 34 | ## :star: Другие интересные репозитории 35 | 36 | - [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features) 37 | - [Путеводитель C++ программиста по неопределенному поведению](https://github.com/Nekrolm/ubbook) 38 | - [Коллекция библиотек и фреймворков для C++](https://github.com/fffaraz/awesome-cpp) 39 | 40 | --- 41 | 42 | [**На главную страницу**](README.md) 43 | 44 | -------------------------------------------------------------------------------- /Russian/FunCpp.md: -------------------------------------------------------------------------------- 1 | # :space_invader: C++ — это просто 2 | 3 | Современный C++ гораздо проще, чем принято считать. За годы трансформаций язык успел сильно преобразиться и обрасти возможностями, которые позволяют писать безопасный и эффективный код. Если использовать примитивы из последних стандартов, то больше не нужно беспокоиться о возможных утечках памяти. 4 | 5 | Компилятор также стал гораздо умнее. Он способен выполнять огромное число оптимизаций для вашего кода, выдавая максимальную производительность. При этом по-прежнему возможно оптимизировать код при помощи самостоятельных манипуляций и ухищрений. 6 | 7 | У языка всё же есть и недостатки. Главным из них - отсутствие стандартного пакетного менеджера. Есть сторонние разработчики с пакетными менеджерами, которые пытаются занять эту нишу, но пока ни один из них так и не смог стать лидером рынка. Наиболее популярные из них: [Conan](https://conan.io/), [vcpkg](https://vcpkg.io/en/index.html), [Nuget](https://devblogs.microsoft.com/cppblog/nuget-for-c/) и т.д. 8 | 9 | С++ также стал жертвой собственной парадигмы: "разработчик не платит за то, что ему не требуется". Практика же показывает, что в коммерческих проектах разработчики не слишком аккуратно обходятся с зависимостями, потому породилась обратная ситуация: разработчик платит каждый раз, когда ему нужно подключить новую зависимость. Это провоцирует различные побочные эффекты во время сборки проекта: растет время сборки, возникновение циклических зависимостей и т.д. Но и этот вопрос постепенно решается от проекта к проекту. 10 | 11 | Чтобы приступить к изучению языка потребуется набор базовых школьных знаний: 12 | - Арифметика; 13 | - Булева алгебра; 14 | - Составление блок-схем; 15 | - Представление чисел в различных системах счисления. 16 | 17 | Несмотря на весь бэкграунд и информационный шлейф, который тянется за C++, мы считаем, что его современная версия стала в разы проще, чем это было в прошлом. 18 | 19 | Потому не бойтесь изучать его! 20 | 21 | Удачи! :dizzy: 22 | 23 | --- 24 | 25 | [**На главную страницу**](README.md) -------------------------------------------------------------------------------- /Russian/Grades/Junior.md: -------------------------------------------------------------------------------- 1 | # :yum: Junior C++ 2 | 3 | ## :question: Кто это? 4 | 5 | Это разработчик, который имеет теоретические знания по разработке ПО, а также небольшой практический опыт в рамках личных/учебных проектов. Также может иметь теоретическое представление о том, как работает индустрия и рабочие процессы. Такой разработчик способен выполнять несложные задачи на реальном проекте под руководством опытных коллег, обычно миддлов или синьоров. 6 | 7 | ## :computer: Что ожидается по умению написания кода? 8 | 9 | - Умение читать документацию библиотек, фреймворков и т.д. 10 | - Умение собирать и подключать сторонние библиотеки к проекту 11 | - Читать чужой код и разбираться в нем 12 | - Искать и фиксить баги при помощи отладчика или по логам приложения 13 | - Писать тесты к коду 14 | - Базовые знания и опыт работы с Git 15 | 16 | ## :bust_in_silhouette: Что ожидается по общим навыкам? 17 | 18 | - Быстрое обучение 19 | - Умение самостоятельно искать информацию в интернете, книгах и т.д. 20 | - Умение своевременно задавать вопросы коллегам 21 | - Способность работать в команде 22 | 23 | ## :eyes: Рекомендации и советы 24 | 25 | - Постарайтесь найти парочку энтузиастов на проекте и присоединитесь к ним. Они могут стать вашим источником знаний и опыта. 26 | - Задавайте вопросы старшим коллегам. Нет глупых вопросов, есть глупые ответы. 27 | - Не закапывайтесь в задачу слишком долго. Если после нескольких вариантов нет сдвига, тут же обращайтесь к коллегам за помощью. Они рассчитывают, что задача будет вами решена в разумные сроки. Ваша основная цель - решать проблемы, а не создавать их для команды. 28 | - При возникновении сложностей старайтесь попробовать найти парочку возможных решений самостоятельно, а затем подходите к своему наставнику. Ваш колега подкорректирует представленные варианты решения или дополнит их. 29 | - Многие джуны попадают в распространенную ловушку: чем больше строк кода написано, тем они круче как разработчики. Не попадитесь в неё! Помните, что чем больше кода написано, тем выше вероятность ошибки. В идеале код должен быть написан так, чтобы при возвращении к нему через полгода, вы быстро могли вспомнить что он делает. Хороший разработчик не тот, кто пишет много кода. Хороший разработчик ведет себя как самурай: наносит один точный и смертельный удар. 30 | 31 | --- 32 | 33 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) 34 | -------------------------------------------------------------------------------- /Russian/Grades/Middle.md: -------------------------------------------------------------------------------- 1 | # :sunglasses: Middle C++ 2 | 3 | ## :question: Кто это? 4 | 5 | Это разработчик, который понимает технический контекст разработки и способен создать дизайн/решение для функционала в рамках компонента/приложения, даже в случае неполноты требований. Также имеет практический опыт работы на проектах, в рамках принятых бизнес-процессов. 6 | 7 | В основном решает технические задачи, но в отличие от джуниора, способен сделать это самостоятельно или под менторством синьора/тимлида. 8 | 9 | ## :computer: Что ожидается по умению написания кода? 10 | 11 | - Компилятор и язык его больше не пугают и практически не приносят сюрпризов. А если и приносят, то способен самостоятельно генерировать гипотезы, проверять их и копать вглубь 12 | - Ориентируется в базовых концепциях языка, а также понимает, какие ещё языки программирования существуют, и чем они отличаются 13 | - Пишет понятный и поддерживаемый код 14 | - Знает базовые принципы дизайна, на их основе способен принять техническое решение 15 | - Владеет языком программирования, а также контекстом его использования: весь технический цикл, через который проходит код 16 | - Также ориентируется в инструментах, которые помогают поддерживать цикл разработки кода в проекте: 17 | - Написание кода (IDE, текстовые редакторы, практики программирования, качество кода) 18 | - Хранение исходного кода и продуктов (системы контроля версий, пакетные менеджеры, серверы) 19 | - Компиляция (компиляторы, системы сборки, библиотеки) 20 | - Тестирование (фреймворки, стратегии тестирования) 21 | - Доставка 22 | - Выполнение на целевой системе 23 | - Глубже знает и понимает базовую информатику (структуры данных, конечные автоматы, алгоритмы) 24 | 25 | ## :bust_in_silhouette: Что ожидается по общим навыкам? 26 | 27 | - Способен самостоятельно ориентироваться в технической части проекта и принимать решения, которые вписываются в него 28 | - Понимает, когда нужно остановиться, чтобы не переусложнить решение 29 | - Имеет практический опыт работы в команде 30 | - Способен формулировать и доносить идеи и мысли до других членов команды 31 | - Имеет практический опыт работы по различным методологиям: Kanban, Agile/Scrum, Waterfall и т.д. 32 | - Помогает другим членам команды 33 | 34 | ## :eyes: Рекомендации и советы 35 | 36 | ### :arrow_forward: Про обучение 37 | - Начинайте прокачивать софт-скиллы, если хотите вырасти до синьора. На синьорском уровне техническая экспертиза часто отходит на второй план, а на первый план выходит умение вести диалог и договариваться. Хороший разработчик, не тот кто пишет много кода, а тот кто понимает, как решить проблему максимально просто и эффективно. В идеале - без написания нового кода, а ещё лучше - если будут удалены пара десятков/сотен строк. 38 | - Стадия миддла самая энергозатратная с точки зрения обучения. От вас требуется не только прокачивать технические скиллы, но также навыки коммуникации и погружение в проблемы бизнеса. Это значит, что вам требуется одновременно развиваться в нескольких направлениях. Уделяйте внимание в равной степени как "хард", так и "софт" скиллам. 39 | - Должное внимание "софт" скиллам повышает вероятность того, что вы быстрее станете более востребованным профессионалом на рынке. Вы можете попытаться стать узконаправленным техническим специалистом и игнорировать коммуникативные навыки, но, во-первых, компаниям нечасто нужны узкопрофильные эксперты в больших количествах, а во-вторых, вам придется конкурировать с лучшими из лучших. Если вы действительно готовы состязаться с лучшими специалистами на рынке, то смело идите вперед, но все же рекомендуем подумать о диверсификации своих навыков. 40 | 41 | 42 | ### :arrow_forward: Про опыт 43 | - Основная ловушка многих мидлов: фанбойство по технологиям, фреймворкам, внедрением паттернов или подходам к разработке. Постарайтесь прагматично подходить к выполнению задач на проекте. Не нужно пытаться затянуть все последние новинки, только чтобы поиграться с ними или ради строчки в резюме. На этом этапе очень велик соблазн проявить свое мастерство через обилие используемых технологий или оверинжиниринг. 44 | - Если вы действительно считаете, что проекту нужна новая библиотека или фреймворк - обсудите это с синьором/тимлидом. Предложите им попробовать создать прототип, где сможете проверить их в действии прежде чем втягивать в проект. Пожалуйста, никогда не добавляйте их за спиной всей команды! Это станет головной болью в будущем, т.к. это повысит стоимость поддержки проекта, и принесёт неожиданные проблемы. 45 | 46 | --- 47 | 48 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) 49 | -------------------------------------------------------------------------------- /Russian/Grades/Overview.md: -------------------------------------------------------------------------------- 1 | # :chart_with_upwards_trend: Уровень разработчиков 2 | 3 | > Уровень разработчика (eng.: *grade*) - это попытка классифицировать разработчиков по навыкам, компетенциям и практическому опыту. По нему возможно сопоставить потенциальную сложность задач с требуемым набором компетенций и навыков для их успешного решения. 4 | 5 | В индустрии разработки существует более-менее устоявшаяся классификация разработчиков. Выделим основные уровни: 6 | - Junior; 7 | - Middle; 8 | - Senior. 9 | 10 | Многие компании имеют персональное видение по набору обязанностей и компетенций, предъявляемые к разработчикам. Легко встретить ситуацию: работая в одной компании, вы можете быть Senior разработчиком, а в другой - еле-еле дотягиваете до Middle. Тем не менее можно охарактеризовать общие ожидания для любого уровня во многих компаниях. В дальнейшем будет использоваться упрощенная классификация, описанная выше. 11 | 12 | **Пример:** Ознакомиться с принятыми классификациями в различных компаниях можно здесь: https://www.levels.fyi/ 13 | ![](https://github.com/Salmer/CppDeveloperRoadmap/blob/main/Grades/Source/GradeTable.PNG?raw=true "GradeTable") 14 | 15 | 16 | ## Описание 17 | 18 | В нижеперечисленных статьях мы попытались дать осредненное описание для каждого уровня разработчика: 19 | 20 | - :alien: [Pre-Junior C++](PreJunior.md) 21 | - :yum: [Junior C++](Junior.md) 22 | - :sunglasses: [Middle C++](Middle.md) 23 | - :smiling_imp: [Senior C++](Senior.md) 24 | 25 | --- 26 | 27 | [**На главную страницу**](../README.md) 28 | 29 | -------------------------------------------------------------------------------- /Russian/Grades/PreJunior.md: -------------------------------------------------------------------------------- 1 | # :alien: Pre-Junior C++ 2 | 3 | ## :question: Кто это? 4 | 5 | Это человек, который освоил синтаксис языка и способен написать несложную программу без использования сторонних библиотек. Программа способна выполнять различные действия, например: 6 | - выполняет арифметические вычисления 7 | - взаимодействует с файлами: чтение и запись 8 | - ожидает ввод данных с клавиатуры 9 | - выводит результаты работы и иные данные в консольное окно 10 | - и т.д. 11 | 12 | 13 | ## :computer: Что ожидается по умению написания кода? 14 | 15 | - Способность создать и собрать небольшой рабочий проект на C++ при помощи одной из IDE: Visual Studio, Qt Creator и т.д. 16 | - Умение пользоваться отладчиком при помощи IDE 17 | - Понимание процесса компиляции и сборки программы на C++ 18 | - Способность написать приложение, содержащее арифметические или логические операции/алгоритмы, условия и циклы 19 | - Умение написать приложение по работе со стандартным потоком ввода/вывода; 20 | - Умение работать с указателями и ссылками 21 | - Понимание отличия между видами памяти: стек и куча 22 | - Базовое понимание ООП в рамках C++: наследование, полиморфизм, инкапсуляция 23 | 24 | 25 | ## :bust_in_silhouette: Что ожидается по общим навыкам? 26 | 27 | - Желание учиться и впитывать новые знания 28 | - Желание разбираться в возникающих проблемах 29 | - Умение составить запрос на русском языке, чтобы найти ответ на проблему в поисковике или соответствующей литературе 30 | 31 | ## :eyes: Рекомендации и советы 32 | 33 | ### :arrow_forward: Про обучение 34 | - Не существует "серебряной пули", которая поможет вам выучить C++ за день/неделю/месяц. Будьте готовы к продолжительной самостоятельной работе по изучению материала, прежде чем сможете пройти собеседование, и получить свой первый оффер. 35 | - Если чувствуете, что не понимаете какую-то тему, поищите альтернативные источники. 36 | - Практика и только практика даст вам возможность освоить C++! Без регулярного написания кода, большая часть того, что вы прочитаете или услышите - забудется. 37 | - Не пытайтесь писать идеальный код. Ваша основная задача - написание РАБОЧЕГО кода, который делает ровно то, что от вас требуется. Вы должны научиться "общаться" с компьютером. Аналогично изучению иностранных языков: сначала вы говорите много и небрежно, но со временем ваш навык оттачивается, начинаете лучше чувствовать грамматику, увеличиваете свой словарный запас и т.д. 38 | - Не хватайтесь сразу за большую задачу, например: "написать свою игру". Скорее всего вам не хватит знаний и опыта на первых порах, чтобы осилить задачу в одиночку. Такого рода путь быстро демотивирует, что в итоге может привести к разочарованию, и вы забросите свое обучение. Идите по пути "от простого к сложному", постепенно придумывая себе все более сложные задачи. 39 | - На первых порах не стоит концентрироваться на таких ресурсах, как Leetcode или CodeWars. Цель этих площадок - отработать навыки применения классических алгоритмов и структур данных. Эти платформы спроектированы таким образом, чтобы максимально отгородить вас от нюансов языков программирования. На первых порах это не принесет вам особой пользы, лучше сконцентрируйтесь на самом языке и его возможностях. 40 | 41 | ### :arrow_forward: Про английский язык 42 | - Большинство проблем проще искать на английском языке, но если текущий уровень владения не очень высокий, то не мучайте себя. Так вы быстро потеряете мотивацию. Большая часть проблем в начале пути, с которыми вы столкнетесь, спокойно можно отыскать и на русском языке. 43 | - Если чувствуете, что ваш английский слабоват, то лучше начните его изучение с более простых и приятных вещей: сериалы, видеоигры, художественные книги, новостные сайты или статьи на интересующие темы. За несколько месяцев можно значительно улучшить навыки восприятия информации на английском языке. 44 | 45 | --- 46 | 47 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) 48 | -------------------------------------------------------------------------------- /Russian/Grades/Senior.md: -------------------------------------------------------------------------------- 1 | # :smiling_imp: Senior C++ 2 | 3 | ## :question: Кто это? 4 | 5 | Это разработчик, который понимает не только технический, но и бизнес контекст, а также способен создать дизайн и решение для компонента/приложения/системы с учётом неполноты требований и общей сложности. Помимо этого, помогает другим членам команды развиваться, следит за техническими тенденциями мира разработки. 6 | 7 | ## :computer: Что ожидается по умению написания кода? 8 | 9 | - Способен переводить задачи с языка бизнеса на язык разработки, декомпозировать задачи 10 | - Способен вести диалог с бизнесом, объяснять технические детали и сложности людям вне команды 11 | - Способен не только принять решение о дизайне, но и создать архитектуру компонента/приложения 12 | - Понимание и использование архитектурных принципов 13 | 14 | ## :bust_in_silhouette: Что ожидается по общим навыкам? 15 | 16 | - Высокий навык коммуникации 17 | - Способен при необходимости самостоятельно собрать требования 18 | - Помогает развивать членов команды 19 | 20 | ## :eyes: Рекомендации и советы 21 | 22 | В зависимости от специфики компании и ваших личных пожеланий, путь дальнейшего развития лежит, либо в освоении новых технологий и технических навыков, либо в области управления и взаимодействия с людьми (техлид, тимлид, ПМ и т.д.). Choose wisely. 🙂 23 | 24 | --- 25 | 26 | [**На предыдущую страницу**](Overview.md) | [**На главную страницу**](../README.md) 27 | -------------------------------------------------------------------------------- /Russian/Grades/Source/GradeTable.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/Russian/Grades/Source/GradeTable.PNG -------------------------------------------------------------------------------- /Russian/Graph/README.md: -------------------------------------------------------------------------------- 1 | # Как просматривать и модифицировать карту в graphML формате 2 | 3 | GraphML — язык описания графов на основе XML, который поддерживают различные приложения для их просмотра. 4 | 5 | Например, можете открыть graphML файл в [yEd](https://www.yworks.com/products/yed) и модифицировать карту, как вам захочется. 6 | 7 | ![](./example.png) -------------------------------------------------------------------------------- /Russian/Graph/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salmer/CppDeveloperRoadmap/7f2dbbadd129a95d44c909660920222088aa5ba5/Russian/Graph/example.png -------------------------------------------------------------------------------- /Russian/HowToStudy.md: -------------------------------------------------------------------------------- 1 | # :mortar_board: Как учиться? 2 | 3 | Главное правило: только вы отвечаете за своё развитие. Безусловно, вы найдете вокруг немало энтузиастов, которые с радостью помогут вам советом, но никто не разработает за вас полноценную программу обучения. Лучший друг в этом деле - вы, учебники и поисковик. 4 | 5 | ## :question: Как учить новые стандарты C++ 11/14/17/20? 6 | 7 | Новичкам можно посоветовать сильно не акцентироваться на стандартах в начале своего обучения. Начните с книг из списка [для начинающих](Books/PreJunior.md), и начинайте изучать фундаментальные основы. Современные книги для новичков содержат в себе информацию о различных возможностях стандартов C++11 и новее. 8 | 9 | Возникает закономерный вопрос: "Почему так?!" Дело в том, что современные стандарты сконцентрированы на трёх основных вещах: 10 | - исправление проблем 11 | - синтаксический сахар 12 | - новый функционал 13 | 14 | Если с исправлением проблем и синтаксическим сахаром всё более-менее очевидно (вводятся новые конструкции, которые исправляют проблемы старых стандартов; появляются новые абстракции, упрощающие написание повторяющегося кода и т.д.), то с новым функционалом всё немного сложнее. 15 | 16 | C++ развивается похожим образом, как и другие языки: берётся какая-то популярная идея из информатики (computer science) или удачная фича из других языков, и внедряется в язык. Изучать такие конструкции и использовать их важно, но на первых парах стоит изучить основы, которые были заложены более старыми стандартами (С++11/С++14). Они и описаны в большинстве современных книг для начинающих. 17 | 18 | ## :question: По каким источникам изучать новые возможности стандартов C++? 19 | 20 | - Доклады на [конференциях по C++](CommunitySources.md) 21 | - На главной странице [CppReference](https://en.cppreference.com/w/cpp) вы найдете ссылки, со списками возможностей, введенные в каждом стандарте С++ 22 | - Познакомиться обзорно с новым функционалом стандартов можно при помощи книг [Бьёрна Страуструпа - C++. Краткий курс](https://www.ozon.ru/product/yazyk-programmirovaniya-c-kratkiy-kurs-150586178). Это книга переиздается при выходе новых стандартов, потому рекомендуем следить за переизданиями этой книги 23 | - Профильные форумы/чаты/обсуждения 24 | - Ролики с разбором новых возможностей стандартов на YouTube 25 | - [Краткий обзор библиотечных функций C++11 и выше (ENG)](https://github.com/AnthonyCalandra/modern-cpp-features) 26 | 27 | ## :eyes: Рекомендации по обучению 28 | 29 | - Учитесь в своем ритме, а также в любом возрасте! Не акцентрируйтесь на историях: "Я программирую с пеленок" и т.п.. Большинство подобных историй — [систематическая ошибка выжившего](https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего), или же попытка потешить свое самолюбие за ваш счет. У вас достаточно способностей, чтобы научиться программированию, в том числе с нуля, в том числе и на C++! 30 | - Большинство проблем с которыми вы столкнетесь, скорее всего уже решены до вас. Если вы не можете найти ответ в интернете, попробуйте переформулировать запрос иным образом. Рано или поздно вы придете к правильному ответу. Если после этого ответа так и нет, то попробуйте решить задачу более простым путем. 31 | - Помните, что вы должны изучать язык, а не бороться с рабочим окружением в начале обучения. Борьба с окружением может вас привести к полному разочарованию и потере мотивации. 32 | - Помните, что многие опытные разработчики тоже встречают проблемы и застревают в "очевидных" местах. Просто возьмите паузу, позанимайтесь чем-нибудь другим, а через какое-то время возвращайтесь к задаче. 33 | - Найдите единомышленников, которые тоже начинают учиться. Так вам будет интереснее погружаться в изучение языка вместе, а также делиться знаниями и опытом друг с другом. Дополнительно это поможет выработать навык командной работы. Времена "вольных художников" подошли к концу. Практически везде вам придется работать в команде. 34 | - Попробуйте найти себе опытного ментора. Под его руководством вы сможете избежать различные типовые ловушки и потерю времени на них. 35 | 36 | --- 37 | 38 | [**На главную страницу**](README.md) 39 | -------------------------------------------------------------------------------- /Russian/Mythbusters.md: -------------------------------------------------------------------------------- 1 | # :ghost: Легенды и мифы про C++ 2 | 3 | ## :question: Язык C++ умер, на нем невозможно что-либо писать 4 | 5 | Живее всех живых. 6 | 7 | На сегодняшний день находится в топах различных рейтингов языков программирования и даже набирает очки популярности, например: индекс [Tiobe](https://www.tiobe.com/tiobe-index/). Дурную славу "мертвого языка" он сыскал в 2000-е годы, когда его развитие временно застыло, а комитет по стандартизации приостановил свою активность. Но начиная со стандарта C++11, язык пережил ренессанс. Сегодня он активно обновляется и пополняется новым функционалом, в среднем, каждые три года. Многие проблемы, о которых заявляют свидетели "мертвого" C++ уже решены. Но в силу того, что такие специалисты скорее всего перестали работать с C++, либо по верхам изучили в ВУЗе/на курсах, то и продолжают порождать и сеять различные мифы о том, насколько C++ ужасен. 8 | 9 | 10 | ## :question: Настоящие программисты начинают изучать C++ сразу под Linux/Vim/gcc 11 | 12 | Если вышеперечисленная связка инструментов выглядит для вас малознакомой, то на таком этапе обучения стоит сконцентрироваться только на изучении основ языка C++. Рекомендуем вам попробовать написать свои первые приложения в Microsoft Visual Studio IDE (подробнее см. [PreJunior Books](Books/PreJunior.md)). 13 | 14 | Пойти по наиболее трудному пути выглядит благородно. Но есть высокая доля вероятности, что объем информации, который придется изучить для сборки "Hello World" в связке Linux + Vim + gcc будет чрезмерно большим. Это чревато быстрой демотивацией и разочарованием в программировании. 15 | 16 | Старайтесь идти по пути: от простого к сложному. В спортзале новички не пытаются поднять самую тяжелую штангу на первой тренировке, т.к. понимают, чем это может быть чревато. Это же правило работает и при обучении. Когда более-менее освоитесь с языком, то можете попробовать поиграться с написанием кода в любом ином IDE, операционной системе и т.д.. Но это уже совершенно другая история... 17 | 18 | 19 | ## :question: Прежде чем учить C++ необходимо хорошо изучить C/Assembler/etc. 20 | 21 | Нет, нет и ещё раз нет! 22 | 23 | Такое утверждение живо из-за двух распространенных ситуаций: так учили в ВУЗе (Assembler -> C -> C++), либо от "старой гвардии" разработчиков, т.к. многие из таких специалистов проходили подобный карьерный путь. Современный C++ не требует подобного подхода к изучению. Этот язык полностью автономен. Гораздо вероятнее, у вас возникнет путаница в голове, а также устойчивое желание писать на C++ в стиле "Си с классами". А ассемблер потребуется только в особых ситуациях. 24 | 25 | 26 | ## :question: Изучайте C++ по книге Страуструпа 27 | 28 | Крайне спорный тезис. Вероятнее всего что этот совет предлагают те, кто уже имел большой опыт разработки на других языках (C, Fortran, Delphi, и т.д.) и переходил с них на C++. Книга Страуструпа написана больше как справочник: ([Язык программирования C++](https://www.ozon.ru/product/yazyk-programmirovaniya-c-spetsialnoe-izdanie-straustrup-bern-straustrup-bern-210215691)). Потому и работать с ней требуется соответственно, что уже требует наличие знаний о C++ и практики использования. Рекомендуем заглянуть в раздел [Книги](Books/Overview.md), где вы найдете материал для любого уровня владения языком программирования. 29 | 30 | 31 | ## :question: Изучайте C++ только по стандарту 32 | 33 | Тоже крайне опасный тезис. Во-первых, современный стандарт C++ уже превысил объем в 2000 страниц. Во-вторых, доступ к актуальной версии стандарта платный. В-третьих, стандарт написан не самым "дружелюбным" способом. Тем кто изучил язык по стандарту можно пожать руку, но мы не рекомендуем такой путь, ибо он долог и тернист. Лучше загляните в раздел [Книги](Books/Overview.md), там вы найдете материал для любого уровня владения языком. 34 | 35 | 36 | ## :question: Undefined Behavior преследует разработчика повсюду 37 | 38 | Скорее нет, чем да. 39 | 40 | Современный C++, а также имеющийся инструментарий, позволяют избежать львиную долю проблем, связанных с неопределенным поведением. Здесь можно дать совет: если сомневаетесь, что делает та или иная конструкция, то попробуйте поискать информацию на [CppReference](https://en.cppreference.com), [StackOverflow](https://stackoverflow.com/) или иных профильных порталах. Если же после прочтения конструкция остается непонятной, то попробуйте переписать блок кода альтернативным и более простым способом, чтобы избежать неопредленного поведения. В простоте кроется великая сила! 41 | 42 | 43 | ## :question: Нужно вручную управлять памятью, в языке нет сборщика мусора 44 | 45 | Это утверждение также идет от представителей "старой гвардии", которые перестали писать на языке до появления стандарта C++11, или же от тех, кто слабо знаком с последними стандартами языка. Современный C++ имеет в своей библиотеке набор примитивов, который отвечает за автоматическое выделение и освобождение памяти. Контроль за выделением памяти все больше и больше отходит на второй план. Во многих компаниях вы также встретите внутреннее правило: "не использовать сырых указателей". И напоследок, не пренебрегайте современным инструментарием и санитайзерами. Они способны отыскать потенциальную утечку памяти ещё на этапе анализа исходного кода. 46 | 47 | 48 | ## :question: C++ - это сплошной легаси-код 49 | 50 | Отчасти правдивый миф, но стоит отметить, что это применимо и к другим языкам. На самом современном стеке может производиться "легаси". Качество кода зависит от технической культуры внутри компании и команд разработки и их визионеров, т.к. легаcи-код порождается человеческим фактором: уровень разработчиков и компетенций, отношение к работе, горящие сроки, практики в команде и т.п. На C++ разработано огромное количество систем, которые не первый год работают в режиме 24/7. Такие системы могли быть написаны в прошлом без соблюдения всевозможных практик разработки. Они часто являются основой бизнеса, которые приносят значительную часть прибыли. Потому проводить в таких системах масштабные изменения очень рискованно. Разработчики работают с таким кодом предельно осторожно. Но не стоит думать, что с этим ничего невозможно поделать. Постепенно такие системы тоже переписываются с использованием современных практик и технологий. Такого рода задачи могут стать для вас не менее интересным вызовом, т.к. предоставляют отличную возможность освоить широкий спектр компетенций: чтение кода, реверс-инжениринг, написание тестов, проектирование архитектуры ПО, автоматизация, сбор требований и т.д. 51 | 52 | --- 53 | 54 | [**На главную страницу**](README.md) 55 | -------------------------------------------------------------------------------- /Russian/PetProjects.md: -------------------------------------------------------------------------------- 1 | # :telescope: Пет-проекты 2 | 3 | Пет-проекты - это отличная возможность получить практический опыт при изучении языка программирования, библиотек и фреймворков. Они могут стать отправной точкой для собеседований и приглашением к диалогу, если вы только начинаете свою карьеру. 4 | 5 | Часто возникают трудности с поиском и выбором идеи пет-проекта. Мы попробовали собрать небольшую коллекцию ссылок и идей, которые могут стать хорошим началом для последующего вдохновения. Ознакомившись с ним, возможно получится выбрать наиболее подходящую тему. 6 | 7 | ## :arrows_counterclockwise: Сторонние ресурсы 8 | 9 | * [Google Summer of Code](https://summerofcode.withgoogle.com/archive) 10 | 11 | Коллекция проектов, которые предлагались различными компаниями или комьюнити в рамках ежегодной программы стажировки студентов от Google. Архив содержит проекты за последние несколько лет. Представлено большое количество проектов для языка C++. Возможно вы найдете для себя что-то интересное в архиве для практики, либо попробуете свои силы в будущих стажировках. 12 | 13 | * [Project based learning - C++](https://github.com/practical-tutorials/project-based-learning#cc) 14 | 15 | Репозиторий содержит коллекцию пет-проектов, собранные для различных языков программирования. Также включает обширный список идей для C++. 16 | 17 | * [Programming challenges](https://challenges.jeremyjaydan.com/) - [PNG image](https://challenges.jeremyjaydan.com/media/programming-challenges-v4.0.png) 18 | 19 | Рулетка с идеями для пет-проектов. Настраиваете ожидаемую сложность проекта и запускаете рулетку. Дальше случайность решит за вас, какую задачу придется решать :) 20 | 21 | 22 | ## :boom: Список идей для пет-проектов 23 | 24 | ### :arrow_forward: Игры 25 | 26 | Ниже представлен список классических видеоигр, которые не содержат в себе сложного искусственного интеллекта или динамическую генерацию мира. Вы можете попробовать реализовать одну из нижеперечисленных игр, а далее дорабатывать дополнительный функционал. В качестве графической библиотеки вы можете использовать [SFML](https://www.sfml-dev.org/). Это простая в использовании библиотека, которая предоставляет достаточный набор возможностей для создания несложных графических интерфейсов для 2D или 2.5D игр при помощи [спрайтов](https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)). Если же вы захотите сделать что-то более сложное, где применяется физика, то можете начать с простых движков, например: [Box2D](https://box2d.org/). Или же освоить более продвинутые: [Cocos2D](https://www.cocos.com/en/), [Unreal Engine](https://www.unrealengine.com/en-US/) и т.п. Не забывайте о правиле: "от простого, к сложному". Начинайте с простого, и постепенно повышайте сложность. 27 | 28 | * [Змейка](https://habr.com/ru/company/microsoftlumia/blog/136629/) 29 | * [Тетрис](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81) 30 | * [Жизнь](https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0_%C2%AB%D0%96%D0%B8%D0%B7%D0%BD%D1%8C%C2%BB) 31 | * [Пятнашки](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B8%D1%81) 32 | * [Арканоид](https://ru.wikipedia.org/wiki/Arkanoid) 33 | * [Сапер](https://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%BF%D1%91%D1%80_(%D0%B8%D0%B3%D1%80%D0%B0)) 34 | * [2048](https://ru.wikipedia.org/wiki/2048_(%D0%B8%D0%B3%D1%80%D0%B0)) 35 | * [Пасьянс](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81) 36 | * [Пасьянс-паук](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%83%D0%BA_(%D0%BF%D0%B0%D1%81%D1%8C%D1%8F%D0%BD%D1%81)) 37 | * [Пинг-понг](https://ru.wikipedia.org/wiki/Pong_(%D0%B8%D0%B3%D1%80%D0%B0)) 38 | * [Donkey Kong](https://ru.wikipedia.org/wiki/Donkey_Kong) 39 | * [Лабиринт](https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D0%B8%D1%80%D0%B8%D0%BD%D1%82_(%D0%B6%D0%B0%D0%BD%D1%80)) 40 | * [Сетевые игры для 2-4 игроков: пинг-понг, морской бой, покер, шашки, шахматы и т.д.](https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%B3%D1%80%D0%B0) 41 | 42 | Рекомендуем ознакомиться с нижеперечисленными источниками, которые содержат больше информации о различных алгоритмах для игростроения. Они могут пригодиться для одной из вышеперечисленных игр, или же для собственных идей: 43 | * https://www.redblobgames.com/ 44 | * http://www.squidi.net/three/ 45 | 46 | 47 | --- 48 | 49 | ### :arrow_forward: Приложения 50 | 51 | При создании приложения начинайте с самой простой реализации консольного приложения. После каждого выполненного шага ставьте более сложную задачу, например: добавить графический интерфейс для приложения, научить приложение запрашивать данные из источника при помощи http-запроса, а затем записать/прочитать полученные данные в тестовый файл/базу данных и т.д. Помните о принципе: "от простого к сложному". 52 | 53 | * Сетевой чат (на чистых сокетах или при помощи [gRPC](https://grpc.io/docs/languages/cpp/quickstart/)) 54 | * Калькулятор 55 | * Файловый менеджер 56 | * Конвертер валют 57 | * Получение списка Pull-Requests или Issues в любом Github репозитории 58 | * Автоматизация рутинных: различные вычисления и формирование отчетов в виде таблиц 59 | 60 | --- 61 | 62 | ### :arrow_forward: Студенческие приложения 63 | 64 | Нижеперечисленные примеры больше подойдут для студентов, которые изучают или недавно изучили базовые дисциплины: линейная алгебра, аналитическая геометрия, математический анализ, физика и т.д. Задачи по применению изученной теории помогут одновременно "поймать двух зайцев": закрепить изученную теорию на практике, а также попрактиковаться в программировании. Этот путь не закрыт для остальных, но заведомо проще для студентов, т.к. свежи знания по академическим дисциплинам. 65 | 66 | * Библиотека линейной алгебры: матрицы, вектора, действия с ними 67 | * Моделирование различных процессов: физика, теоретическая механика и т.д. 68 | * Применение численных методов: интегрирование, дифференцирование, аппроксимация, интерполяция и т.д. 69 | 70 | --- 71 | 72 | [**На главную страницу**](README.md) -------------------------------------------------------------------------------- /Russian/README.md: -------------------------------------------------------------------------------- 1 | # C++ Developer Roadmap 2 | 3 | ## :speech_balloon: Additional languages: [English](../README.md) [中文](../Chinese/README.md) 4 | 5 | С++ является одним из самых популярных языков разработки: [2024](https://survey.stackoverflow.co/2024/technology#most-popular-technologies). Есть немало желающих начать его изучать и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке мне изучать? Какие книги стоит почитать?" 6 | 7 | Мы попытались ответить на поставленные вопросы в дорожной карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. Это поможет вам освоить C++ на достаточном уровне, который встречается в коммерческих проектах. 8 | 9 | Прежде чем начать изучать карту рекомендуем прочитать статьи, перечисленные ниже. 10 | 11 | 12 | # :bookmark_tabs: Статьи 13 | 14 | 1. :flashlight: [Почему появилась дорожная карта](Rationale.md) 15 | 1. :mag: [А нужен ли вам C++?](SelfIdentification.md) 16 | 1. :space_invader: [C++ - это просто](FunCpp.md) 17 | 1. :clipboard: [Области применения языка](AreasOfApplication.md) 18 | 1. :ghost: [Легенды и мифы про C++](Mythbusters.md) 19 | 1. :chart_with_upwards_trend: [Грейды разработчиков](Grades/Overview.md) 20 | 1. :mortar_board: [Как учиться](HowToStudy.md) 21 | 1. :books: [Книги и прочие материалы по С++](Books/Overview.md) 22 | 1. :telescope: [Идеи для пет-проектов](PetProjects.md) 23 | 1. :triangular_ruler: [Инструментарий для С++](Tooling.md) 24 | 1. :gem: [Ресурсы по C++: документация, каналы конференций и т.д.](CommunitySources.md) 25 | 26 | 27 | # :milky_way: Дорожная карта 28 | 29 | Дорожная карта представлена в двух вариантах: 30 | 31 | * :arrow_forward: [Miro](https://miro.com/app/board/o9J_lFH_iBs=/) 32 | * :arrow_forward: [GraphML](Graph/roadmap.svg) 33 | 34 | Информация о том, как просматривать и модифицировать роадмапу в формате graphML есть [здесь](./Graph/README.md) 35 | 36 | # :key: Лицензия 37 | Карта распространяется по лицензии **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). Если вкратце: 38 | 39 | - Вы можете делиться, адаптировать и копировать весь представленный материал, но с указанием ссылки на оригинал 40 | - **НЕ** допускается использование любой части представленных материалов в коммерческих целях 41 | 42 | 43 | # :mailbox: Предложения и замечания 44 | 45 | Если у вас есть замечания, вопросы или предложения, будем рады получить любую помощь и поддержку. Мы открыты для общения :) 46 | 47 | Для этого используйте следующие механизмы Github: 48 | - Предложения/правки **по репозиторию** - создавайте и присылайте новый PR в [Pull Requests](https://github.com/salmer/CppDeveloperRoadmap/pulls) 49 | - Предложения/правки **по дорожной карте в Miro** - создавайте и присылайте новый запрос в [Issues](https://github.com/salmer/CppDeveloperRoadmap/issues) (в Miro нет возможности вести историю изменений, потому доступ к изменениям в карте ограничен. Все правки мы вносим сами после ознакомления с предложениями). 50 | 51 | 52 | # :telephone: Контакты 53 | 54 | Авторы: 55 | - [Евгений Мельников](https://github.com/salmer), 56 | - [Дмитрий Дмитриев](https://github.com/DmitrievDmitriyA) 57 | 58 | Рецензенты: 59 | - [Сергей Тюленев](https://github.com/marleeeeeey), 60 | - [Константин Комаров](https://github.com/MolinRE), 61 | - [Дмитрий Савин](https://github.com/SD57), 62 | - [Сергей Скляр](https://github.com/SergeiSkliar) 63 | - Сообщество :) 64 | -------------------------------------------------------------------------------- /Russian/Rationale.md: -------------------------------------------------------------------------------- 1 | # :flashlight: Почему появилась дорожная карта 2 | 3 | C++ активно используется во многих коммерческих проектах. Сегодня язык претерпел большие изменения. Это сделало C++ гораздо более удобным для повседневного использования. Но вокруг языка витает много домыслов, мифов и страхов. Это отпугивает большое количество желающих. Наша цель - помочь новичкам развеять миф о сложности C++ и сориентироваться в его изучении. 4 | 5 | Рынок испытывает недостаток в специалистах, способных писать на C++. Исходя из нашего опыта, складывается впечатление, что многие практикующие разработчики выучили язык "вопреки": методом проб и ошибок, а также собственной настойчивости. Нечасто встретишь человека, который освоил C++ исключительно по учебной программе. Большая доля учебных заведений или курсов не могут предложить всеобъемлющий материал: либо предлагается информация по "верхам", либо курс отстает от актуального состояния на несколько лет. А этого недостаточно, чтобы начать успешно выполнять задачи в коммерческих проектах. 6 | 7 | По-прежнему порог входа в разработку на языке C++ выше по сравнению с другими языками. Большая часть имеющихся ресурсов заточена под практикующих разработчиков. Это и подогревает мифы об исключительной сложности языка. На деле же, не хватает актуальных материалов для новичков. 8 | 9 | Данная дорожная карта пытается заполнить образовавшуюся пустоту. Идея создания возникла после большого количества интервью с неопытными кандидатами, претендующие на позицию разработчика C++. Их объединяли общие черты: пробелы в базовых знаниях, непонимание каким образом изучать язык, откуда черпать знания. 10 | 11 | Также карта может пригодиться и тем, кто уже практикует какое-то время использование C++ в личных и рабочих проектах. Она может помочь вам понять каких знаний не хватает для того, чтобы повысить уровень владения языком, а также стать высококлассным специалистом. 12 | 13 | --- 14 | 15 | [**На главную страницу**](README.md) 16 | -------------------------------------------------------------------------------- /Russian/SelfIdentification.md: -------------------------------------------------------------------------------- 1 | # :mag: А нужен ли вам C++? 2 | 3 | Первое, о чем действительно стоит подумать: для чего вам требуется изучение C++? 4 | 5 | Язык имеет конкретные ниши применения. Прежде чем начать изучать язык, попробуйте поискать сферы, которые заинтересуют именно вас. Внимательно изучите их, если имеете только общее представление. Возможно ваши ожидания окажутся иными, по сравнению с реальным положением дел. Ниже перечислено несколько примеров, которые демонстрируют необходимость изучить вопрос "на берегу": 6 | 7 | - Некоторые сферы разработки выглядят иначе, в отличие от их романтизированного образа. В качестве примера возьмем разработку игр. Данное направление имеет много темных сторон: кранчи (переработки в режиме "живем в офисе следующие полгода"), отсутствие внятного менеджмента, работа в стол и т.д. 8 | 9 | - В специфичных сферах может быть популярен иной инструментарий. К примеру: в машинном обучении наиболее распространен язык Python и специализированные библиотеки к нему. 10 | 11 | 12 | # :question: Я уже знаю C/C#/Java/Python и т.д. Могу ли я сразу начать работать на C++? 13 | 14 | И да, и нет. :) 15 | 16 | Вам помогут фундаментальные знания, такие как: понимание процедурной/ООП/иных парадигм или иные знания общего характера. Но полностью на них полагаться не стоит. Наиболее распространенный случай в котором часто оказываются новички: попытка писать на C++ в парадигмах другого языка. Пример подобной ловушки распространен среди разработчиков на языке Си: писать на C++ в процедурном стиле или "Си с классами". 17 | 18 | C++ богат на идеи и подходы к написанию кода. Потому рекомендуется начать изучение языка с "чистой" головой. Подойдите к изучению языка основательно, разберитесь в его идеях. Это поможет вам эффективно использовать язык в рабочих задачах. Знание других языков поможет сравнивать их друг с другом и обнаруживать сильные/слабые стороны. 19 | 20 | --- 21 | 22 | [**На главную страницу**](README.md) -------------------------------------------------------------------------------- /Russian/Tooling.md: -------------------------------------------------------------------------------- 1 | # :triangular_ruler: Инструментарий для работы с языком 2 | 3 | Начинающие разработчики имеют малый кругозор по доступному инструментарию, который облегчает работу с кодом, повышает эффективность и оберегает от многих ошибок. Все представленные инструменты - не серебряная пуля от всех бед языка, но значительно сглаживают имеющиеся углы. Ниже представлен список распространенных и популярных инструментов, признанных разработчиками по всему миру. Данный список - лишь малая часть доступного инструментария. Со временем вы начнете лучше ориентироваться в них и найдете для себя что-то новое. 4 | 5 | ## :page_facing_up: Текстовые редакторы 6 | 7 | * :arrow_forward: **Visual Studio Code** 8 | 9 | Сайт: [https://code.visualstudio.com/](https://code.visualstudio.com/) 10 | 11 | Стоимость: бесплатно 12 | 13 | Мощный и эффективный редактор текстовых файлов и исходного кода. Имеет богатую библиотеку расширений, которая позволит настроить его под себя. Также возможно настроить его под работу с исходным кодом: компиляция, запуск и отладка. Обладает мощным поисковым движком, по файлам и папкам, что повышает эффективность поиска, чтения и работы с большими проектами. 14 | 15 | 16 | * :arrow_forward: **Notepad++** 17 | 18 | Сайт: [https://notepad-plus-plus.org/](https://notepad-plus-plus.org/) 19 | 20 | Стоимость: бесплатно 21 | 22 | Легковесный редактор текстовых файлов и исходного кода. Поддерживает синтаксис и подсветку распространенных языков программирования. По сравнению с Visual Studio Code, его удобно использовать для быстрого открытия и просмотра файлов. За счет своей легковесности комфортно работать с большим количеством текстовых файлов. 23 | 24 | 25 | ## :open_file_folder: IDE (Integrated Development Environment) 26 | 27 | * :arrow_forward: **Microsoft Visual Studio IDE** 28 | 29 | Сайт: [https://visualstudio.microsoft.com](https://visualstudio.microsoft.com) 30 | 31 | Стоимость: Community Edition - бесплатно 32 | 33 | Интегрированная среда разработки от компании Microsoft. Предоставляет весь необходимый набор инструментов (редактор кода, компилятор, отладчик, профилировщик и т.д.) из коробки. Поддерживает разработку на различных языках программирования, а также кроссплатформенную разработку. Отличное начало для новичков, т.к. современный интерфейс студии максимально дружелюбен, и практически не требует какой-либо доработки из коробки. 34 | 35 | 36 | * :arrow_forward: **Qt Creator IDE** 37 | 38 | Сайт: [https://www.qt.io/product/development-tools](https://www.qt.io/product/development-tools) 39 | 40 | Стоимость: бесплатно в open source проектах (более подробно: [Qt Open Source](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)) 41 | 42 | Изначально Qt Creator позиционировался как IDE для разработки графических интерфейсов приложений, разрабатываемых на языке C++. Со временем фреймворк оброс огромными возможностями. Все переросло в полноценную экосистему для разработки кроссплатформенных приложений. Фреймворк предоставляет большую библиотеку примитивов для различных потребностей: работа с сетью, графический интерфейс, работа с базами данных, работа с популярными форматами: изображения, текстовые файлы и т.д. Современный Qt Creator выступает в роли конкурента для Visual Studio, но в основном он снискал славу в среде разработчиков, которые разрабатывают приложения под различные дистрибутивы Linux. 43 | 44 | 45 | * :arrow_forward: **Eclipse IDE** 46 | 47 | Сайт: [https://www.eclipse.org/downloads/packages](https://www.eclipse.org/downloads/packages) 48 | 49 | Стоимость: бесплатно 50 | 51 | Довольно мощная мультиплатформенная среда разработки, но при этом тяжеловесная. Ключевая особенность Eclipse - модульность. Философия Eclipse состоит в том, что любой разработчик может доработать среду разработки под себя посредством подключения дополнительных расширений. Взята за основу некоторыми разработчиками компиляторов под специализированные ОС или микроконтроллеры (например: ОС реального времени - QNX). 52 | 53 | 54 | * :arrow_forward: **JetBrains Clion IDE** 55 | 56 | Сайт: [https://www.jetbrains.com/clion](https://www.jetbrains.com/clion) 57 | 58 | Стоимость: бесплатная для учебных заведений, в ином случае - платная 59 | 60 | Мощная мультиплатформенная IDE от компании JetBrains. Как и другие IDE, она содержит полный набор инструментов для комфортной разработки программного обеспечения. Удобен для кроссплатформенной разработки как на Cи, так и на C++. 61 | 62 | 63 | ## :flashlight: Расширения 64 | 65 | * :arrow_forward: **JetBrains ReSharper C++** 66 | 67 | Сайт: [https://www.jetbrains.com/resharper-cpp](https://www.jetbrains.com/resharper-cpp) 68 | 69 | Стоимость: бесплатная для учебных заведений, в ином случае - платная 70 | 71 | Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки по нему, построение диаграмм зависимостей между проектами, рекомендации по типовым ошибкам в коде и по его улучшению, расширенная информация во время отладки, продвинутый поиск, навигация по проектам и т.д. Является конкурентом Visual Assist. 72 | 73 | * :arrow_forward: **Visual Assist** 74 | 75 | Сайт: [https://www.wholetomato.com](https://www.wholetomato.com) 76 | 77 | Расширение для MS Visual Studio. Добавляет дополнительные возможности для работы с исходным кодом: расширенная подсветка кода и подсказки, подробная информация во время отладки или при написании кода, продвинутый поиск, навигация по проектам и т.д. Является конкурентом JetBrains ReSharper. 78 | 79 | 80 | * :arrow_forward: **Incredibuild** 81 | 82 | Сайт: [https://www.incredibuild.com](https://www.incredibuild.com) 83 | 84 | Стоимость: платно, актуальная цена указана на сайте 85 | 86 | Приложение/расширение для распределенной сборки проектов. Объединяет рабочие станции разработчиков в единую сеть, за счет чего сборка исходного кода может производиться одновременно на десятках машин параллельно. Это позволяет ускорить скорость сборки больших проектов в несколько раз. 87 | 88 | 89 | ## :electric_plug: Пакетные менеджеры и системы сборки 90 | 91 | * :arrow_forward: **Cmake** 92 | 93 | Сайт: [https://cmake.org](https://cmake.org) 94 | 95 | Кроссплатформенная система автоматизации сборки приложения из исходного кода. Генерирует необходимые артефакты для последующей сборки приложения на целевой платформе. На текущий момент считается "стандартным" инструментом для сборки различных библиотек, в случае поставки в качестве исходного кода. 96 | 97 | * :arrow_forward: **Conan** 98 | 99 | Сайт: [https://conan.io](https://conan.io) 100 | 101 | Стоимость: бесплатно 102 | 103 | Пакетный менеджер, а также менеджер зависимостей для организации C++ библиотек и фреймворков. Поддерживает работу с различными платформами: Windows, Linux, etc. Поддерживает интеграцию с CMake, Visual Studio и т.д. 104 | 105 | 106 | * :arrow_forward: **Ninja** 107 | 108 | Сайт: [https://ninja-build.org](https://ninja-build.org) 109 | 110 | Стоимость: бесплатно 111 | 112 | Менеджер сборки проектов для приложений, написанных на Си и C++. Основное преимуществ менеджера: быстрая сборка проектов. Поддерживает кроссплатформенную разработку, поддерживает все популярные компиляторы. 113 | 114 | 115 | ## :mag: Анализаторы кода 116 | 117 | * :arrow_forward: **PVS Studio** 118 | 119 | Сайт: [https://pvs-studio.com](https://pvs-studio.com) 120 | 121 | Стоимость: триал на 30 дней, далее платно 122 | 123 | Кроссплатформенный (Windows, Linux, MacOS) статический анализатор кода от российской компании PVS-Studio. Основная задача анализатора - провести анализ исходников на предмет различных ошибок, которые не обнаруживаются компиляторами или на этапе ревью кода. Благодаря ему можно минимизировать ошибки, связанные с синтаксическими конструкциями языка и их подводными камнями. 124 | 125 | 126 | * :arrow_forward: **Cpp Check** 127 | 128 | Сайт: [https://cppcheck.sourceforge.io](https://cppcheck.sourceforge.io) 129 | 130 | Стоимость: бесплатно 131 | 132 | Бесплатный анализатор кода. Поможет отыскать распространенные ошибки при помощи статического анализа исходного кода, которые могут быть упущены компилятором или разработчикам. Кроссплатформенный, поддерживает популярные дистрибутивы Linux, работает под Windows. 133 | 134 | 135 | * :arrow_forward: **Valgrind** 136 | 137 | Сайт: [https://www.valgrind.org](https://www.valgrind.org) 138 | 139 | Стоимость: бесплатно 140 | 141 | Набор инструментов, который поможет исследовать разнообразные проблемы во время работы приложения: утечка памяти, профилирование тормозов и т.д. Заточен для работы с различными дистрибутивами Linux. 142 | 143 | ## :floppy_disk: Git клиенты 144 | 145 | * :arrow_forward: **SmartGit** 146 | 147 | Сайт: [https://www.syntevo.com/smartgit/](https://www.syntevo.com/smartgit/) 148 | 149 | Стоимость: бесплатная для личных или open source проектов, в ином случае - платная 150 | 151 | Полноценный кроссплатформенный комбайн для работы с git репозиториями. Из коробки предоставляет следующие возможности: прием/отправка изменений в репозитории, просмотр истории изменений, текстовый редактор для разрешения конфликтов и т.д. Поддерживает интеграцию со всеми популярными репозиториями: GitHub, BitBucket, GitLab и т.д. 152 | 153 | * :arrow_forward: **Atlassian SourceTree** 154 | 155 | Сайт: [https://www.sourcetreeapp.com/](https://www.sourcetreeapp.com/) 156 | 157 | Стоимость: бесплатно 158 | 159 | Отличная бесплатная альтернатива для работы с git через графический интерфейс. Не уступает по функционалу SmartGit, за исключением отсутствия собственного редактора разрешения конфликтов. Это легко исправляется интеграцией с Visual Code или любого другого редактора, который умеет сравнивать файлы между собой. Во всем остальном дублирует функциональность SmartGit: кроссплатформенный, поддерживает интеграцию с публичными репозиториями: GitHub, BitBucket, GitLab и т.д. 160 | 161 | 162 | * :arrow_forward: **Git Kraken** 163 | 164 | Сайт: [https://www.gitkraken.com/](https://www.gitkraken.com/) 165 | 166 | Стоимость: бесплатная для личных или open-source проектов, в ином случае - платная 167 | 168 | Кроссплатформенный и высокоэффективный клиент для Windows, Linux, MacOS. Поддерживает интеграцию с GitHub, Bitbucket и Gitlab, а также весь необходимый функционал для повседневной работы: изучение истории изменений, прием/отправка изменений, переключение между ветками, встроенный редактор разрешения конфликтов и т.д. 169 | 170 | --- 171 | 172 | [**На главную страницу**](README.md) -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Used theme: https://github.com/pages-themes/cayman 2 | remote_theme: pages-themes/cayman@v0.2.0 3 | plugins: 4 | - jekyll-remote-theme 5 | - jemoji --------------------------------------------------------------------------------