Skip to content

Commit 9ab7941

Browse files
committed
feat: update README and resources with structured learning insights and notes
1 parent db85bbe commit 9ab7941

17 files changed

Lines changed: 279 additions & 67 deletions

README.md

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,42 @@
22

33
> Built in parallel with **IFT1166 — Programmation orientée objet en C++** · Université de Montréal · Hiver 2026
44
5-
This repository documents my structured learning journey in C++ as a public learning artifact. It complements the coursework from IFT1166 with additional exploration, personal projects, and curated resources.
6-
7-
## Primary Goal
8-
9-
**Portfolio artifact**: show clear progression, organized thinking, and clean code habits while mastering core C++.
10-
11-
## Current Scope
12-
13-
Early–intermediate C++ with focus on:
14-
15-
- Core language fundamentals
16-
- Multi-file project structure
17-
- Introductory OOP
18-
- Manual array-based data handling
19-
- Basic file I/O
20-
- Macros and preprocessor basics
21-
- Small console projects
22-
23-
## Not Covered Yet (Planned)
24-
25-
- STL-heavy work (`vector`, `map`, etc.)
26-
- Templates
27-
- Smart pointers and RAII depth
28-
- Advanced exception handling
29-
- Modern C++ features in depth
30-
- Unit test frameworks
31-
- CMake and advanced build systems
32-
33-
## Repository Structure
34-
35-
- `fundamentals/`
36-
- `modular-programming/`
37-
- `oop/`
38-
- `file-handling/`
39-
- `macros/`
40-
- `projects/`
41-
- `experiments/`
42-
- `resources/`
43-
- `build-notes/`
44-
- `course-work/`, `clean-examples/`, `refactored/`
5+
A public learning repository documenting my progression through C++ — from language fundamentals to object-oriented design to applied console projects. It complements my IFT1166 coursework with additional exploration, personal projects, curated resources, and community insights.
6+
7+
## Why Learn in Public?
8+
9+
- **Accountability** — committing progress in the open keeps momentum.
10+
- **Portfolio** — show clear progression, organized thinking, and clean code habits.
11+
- **Community** — collect feedback, resources, and perspectives from other developers.
12+
- **Future reference** — a searchable personal knowledge base I can come back to.
13+
14+
## What's Inside
15+
16+
| Folder | Contents |
17+
|--------|----------|
18+
| `fundamentals/` | Variables, control flow, functions, arrays |
19+
| `modular-programming/` | Header/source separation, include guards, compilation notes |
20+
| `oop/` | Classes, constructors, member functions, inheritance, polymorphism |
21+
| `file-handling/` | Text/binary/CSV I/O, directory ops, search & replace |
22+
| `macros/` | Preprocessor macros and `#define` constants |
23+
| `projects/` | End-to-end console apps (employee mgmt, library system) |
24+
| `experiments/` | Scratch prototypes before cleanup |
25+
| `resources/` | Curated links, books, tools, community insights, and reading notes |
26+
| `build-notes/` | Compiler guides (g++, MSVC, VS Code, Dev-C++) |
27+
| `course-work/` | Exercises from IFT1166 (ex01–ex19) |
28+
| `clean-examples/` | Polished templates and skeletons |
29+
| `refactored/` | Cleaned-up rewrites of earlier code |
30+
31+
See the [ROADMAP](ROADMAP.md) for a phase-by-phase breakdown of topics covered and in progress.
32+
33+
## Current Progress
34+
35+
- **Phase 1 — Foundations** — core language basics ✔
36+
- **Phase 2 — Modular Programming** — multi-file organization (in progress)
37+
- **Phase 3 — OOP** — classes, inheritance, polymorphism (in progress)
38+
- **Phase 4 — File I/O** — reading, writing, persistence ✔
39+
- **Phase 5 — Console Projects** — applied programs (in progress)
40+
- **Phase 6 — Next Steps** — STL, templates, smart pointers, CMake (planned)
4541

4642
## Related Repositories
4743

@@ -56,9 +52,11 @@ g++ main.cpp helper.cpp -o program
5652
./program
5753
```
5854

59-
## Contribution Rule for Myself
55+
## Contributing
56+
57+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines, code style, and commit conventions.
6058

61-
For each new concept:
62-
1. Add a concise note (`README.md`) in the matching topic folder.
63-
2. Add one small runnable `.cpp` sample.
64-
3. Add one reflection line on what I understood and what still confuses me.
59+
For each new concept I add:
60+
1. A concise note (`README.md`) in the matching topic folder.
61+
2. One small runnable `.cpp` sample.
62+
3. One reflection line on what I understood and what still confuses me.

UPDATES.md

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,54 @@
11
# UPDATES
22

3-
Changelog for **PtiCalin/cpp** — C++ Learning Repository.
3+
Changelog for **PtiCalin/cpp** — C++ Learning in Public.
4+
5+
---
6+
7+
## 2026-03-27
8+
9+
### Added
10+
11+
- **`.github/ISSUE_TEMPLATE/`** — Three issue form templates: Bug Report (`bug-report.yml`), New Content (`new-content.yml`), Question (`question.yml`), plus `config.yml` with blank issues enabled.
12+
- **`.github/workflows/ci.yml`** — CI workflow: syntax-checks all `.cpp` files on push/PR to `main`.
13+
- **`.github/workflows/label-sync.yml`** — Syncs repo labels from `.github/labels.yml`.
14+
- **`.github/workflows/stale.yml`** — Auto-closes inactive issues/PRs (30 + 7 day grace period).
15+
- **`.github/workflows/release-drafter.yml`** — Auto-drafts release notes from merged PRs.
16+
- **`.github/release-drafter.yml`** — Release Drafter category config.
17+
- **`.github/labels.yml`** — Label definitions (type, status, ROADMAP phase).
18+
- **`.github/.gitmessage`** — Commit message template with type prefixes (`Add`, `Fix`, `Refactor`, etc.).
19+
- **`CONTRIBUTING.md`** — Contribution guidelines, code style, commit conventions, and checklist.
20+
- **`resources/RESSOURCES.md`** — Curated resource list: official references, tutorials, books, tools, community picks, topic deep dives, and community insights.
21+
- **`resources/notes/`** — Blank reading-note files for every listed resource (13 files), linked from the resource tables.
22+
- **`resources/` section in `ROADMAP.md`** — Cross-link to the resources page.
23+
24+
### Changed
25+
26+
- **`README.md`** — Rewritten as "C++ — Learning in Public": added motivation section, descriptive folder table, progress summary, link to `CONTRIBUTING.md` and related repos.
27+
- **`ROADMAP.md`** — Added Resources section at the bottom.
28+
29+
---
30+
31+
## 2026-03-27
32+
33+
### Added
34+
35+
- **`resources/README.md`** — Initial resource page with official references, tutorials, books (including *C++ Essentials* by Sharam Hekmat), tools, and empty community/deep-dive tables.
36+
37+
### Changed
38+
39+
- **`README.md`** — Added IFT1166 / UdeM subtitle, related repositories table linking to TP2 assignment repo, and `resources/` to the structure list.
40+
41+
---
42+
43+
## 2026-03-02
44+
45+
### Added
46+
47+
- **`course-work/ex17-stl-algorithmes.cpp`** — STL algorithms exercise.
48+
- **`course-work/ex18-constructeurs-avances.cpp`** — Advanced constructors exercise.
49+
- **`course-work/ex19-projet-gestion-notes.cpp`** — Note management system project.
50+
- **`cpp-cheatsheet.md`** — Quick-reference C++ cheatsheet.
51+
- **`.github/pull_request_template.md`** — PR template with type-of-change checkboxes and checklist.
452

553
---
654

@@ -15,12 +63,16 @@ Changelog for **PtiCalin/cpp** — C++ Learning Repository.
1563
- **`clean-examples/squelette.cpp`** — Generic C++ program template (macros, prototypes, inheritance, operator overloading, composition, `main()`).
1664
- **`projects/library-system/exemple-bibliotheque.cpp`** — Library network management example (search, loans, employees, finances, statistics).
1765
- **`projects/employee-management/exemple-employes.cpp`** — Employee management system for TechNova Solutions Inc. (search, stats, CRUD, sorting, CSV/JSON export).
66+
- **`course-work/ex01``ex16`** — IFT1166 course exercises covering variables, conditions, loops, functions, arrays, vectors, strings, pointers, dynamic memory, macros, classes, composition, operator overloading, inheritance/polymorphism, file I/O, and multi-file projects.
67+
- **`build-notes/`** — Compilation and debugging guides for g++, Dev-C++, Visual Studio, and VS Code.
1868
- **`UPDATES.md`** — This changelog.
69+
- **`ROADMAP.md`** — 6-phase learning path with progress checkboxes.
70+
- **`STYLEGUIDE.md`** — Naming, formatting, and commit conventions.
1971

2072
### Changed
2173

2274
- **`LICENSE`** — Replaced Unlicense with MIT License.
23-
- **`ROADMAP.md`** — Restructured into 6 phases aligned with IFT1166 course progression; added checkboxes tracking completed topics with links to source files.
75+
- **`README.md`** — Restructured as a learning-artifact landing page.
2476
- Updated `README.md` files in `macros/`, `fundamentals/functions/`, `oop/classes-basics/`, `file-handling/`, `clean-examples/`, `projects/library-system/`, `projects/employee-management/` to describe newly added content.
2577

2678
---

resources/RESSOURCES.md

Lines changed: 84 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,36 @@ Curated collection of C++ resources — tutorials, references, tools, and commun
66

77
## Official References
88

9-
| Resource | Description |
10-
|----------|-------------|
11-
| [cppreference.com](https://en.cppreference.com/) | The go-to C++ standard library reference. |
12-
| [isocpp.org](https://isocpp.org/) | Official ISO C++ site — news, FAQ, and the C++ Core Guidelines. |
13-
| [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) | Best-practice guidelines maintained by Bjarne Stroustrup & Herb Sutter. |
9+
| Resource | Description | Reading Notes |
10+
|----------|-------------|:---:|
11+
| [cppreference.com](https://en.cppreference.com/) | The go-to C++ standard library reference. | [notes](notes/cppreference.md) |
12+
| [isocpp.org](https://isocpp.org/) | Official ISO C++ site — news, FAQ, and the C++ Core Guidelines. | [notes](notes/isocpp.md) |
13+
| [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) | Best-practice guidelines maintained by Bjarne Stroustrup & Herb Sutter. | [notes](notes/cpp-core-guidelines.md) |
1414

1515
## Learning & Tutorials
1616

17-
| Resource | Level | Notes |
18-
|----------|-------|-------|
19-
| [learncpp.com](https://www.learncpp.com/) | Beginner–Intermediate | Excellent free tutorial series, very thorough. |
20-
| [The Cherno — C++ playlist](https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) | Beginner–Intermediate | Popular YouTube series covering modern C++ concepts. |
21-
| [Programiz C++](https://www.programiz.com/cpp-programming) | Beginner | Quick reference with short runnable examples. |
17+
| Resource | Level | Notes | Reading Notes |
18+
|----------|-------|-------|:---:|
19+
| [learncpp.com](https://www.learncpp.com/) | Beginner–Intermediate | Excellent free tutorial series, very thorough. | [notes](notes/learncpp.md) |
20+
| [The Cherno — C++ playlist](https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) | Beginner–Intermediate | Popular YouTube series covering modern C++ concepts. | [notes](notes/the-cherno-cpp.md) |
21+
| [Programiz C++](https://www.programiz.com/cpp-programming) | Beginner | Quick reference with short runnable examples. | [notes](notes/programiz-cpp.md) |
2222

2323
## Books
2424

25-
| Title | Author(s) | Notes |
26-
|-------|-----------|-------|
27-
| *Programming: Principles and Practice Using C++* | Bjarne Stroustrup | Great intro from the language creator himself. |
28-
| *A Tour of C++* | Bjarne Stroustrup | Concise overview of modern C++. |
29-
| *Effective Modern C++* | Scott Meyers | Deep dive into C++11/14 best practices. |
25+
| Title | Author(s) | Notes | Reading Notes |
26+
|-------|-----------|-------|:---:|
27+
| *Programming: Principles and Practice Using C++* | Bjarne Stroustrup | Great intro from the language creator himself. | [notes](notes/programming-principles-stroustrup.md) |
28+
| *A Tour of C++* | Bjarne Stroustrup | Concise overview of modern C++. | [notes](notes/tour-of-cpp.md) |
29+
| *Effective Modern C++* | Scott Meyers | Deep dive into C++11/14 best practices. | [notes](notes/effective-modern-cpp.md) |
30+
| *C++ Essentials* | Sharam Hekmat | Free, 311-page intro to the C++ language — practical and to the point, no deep OOP. | [notes](notes/cpp-essentials.md) |
3031

3132
## Tools & Environments
3233

33-
| Tool | Description |
34-
|------|-------------|
35-
| [Compiler Explorer (Godbolt)](https://godbolt.org/) | Online tool to view assembly output of C++ code in real time. |
36-
| [C++ Insights](https://cppinsights.io/) | Shows what the compiler actually does with your code (template expansion, etc.). |
37-
| [OnlineGDB](https://www.onlinegdb.com/) | Online C++ compiler and debugger. |
34+
| Tool | Description | Reading Notes |
35+
|------|-------------|:---:|
36+
| [Compiler Explorer (Godbolt)](https://godbolt.org/) | Online tool to view assembly output of C++ code in real time. | [notes](notes/godbolt.md) |
37+
| [C++ Insights](https://cppinsights.io/) | Shows what the compiler actually does with your code (template expansion, etc.). | [notes](notes/cpp-insights.md) |
38+
| [OnlineGDB](https://www.onlinegdb.com/) | Online C++ compiler and debugger. | [notes](notes/onlinegdb.md) |
3839

3940
## Community Picks
4041

@@ -60,3 +61,66 @@ Longer articles or videos on focused topics. Tag with the relevant phase from th
6061
---
6162

6263
*Add new finds here as you go. A quick one-line comment on why each resource is useful helps future-you.*
64+
65+
---
66+
67+
## Community Insights
68+
69+
Interesting comments, advice, and perspectives shared by people in the C++ community — LinkedIn, Reddit, Discord, etc. Stored here to reflect on and revisit.
70+
71+
---
72+
73+
### On `std` and the Standard Library
74+
75+
> I still avoid std as much as possible. The threading abstractions are fine, but `std::vector`, `std::string` and the standard allocation system needs to be deprecated. `std::string` made sense in the 1990s when each operating system had their own incompatible character encoding without any multi-byte characters, but in hindsight its name sounds like the go-to solution for holding a string, which it is not when Unicode is the default in modern operating systems, and then you need to use `std::u32string` as a beginner or `std::u8string` as an experienced developer who knows how UTF-8 is encoded in memory.
76+
>
77+
> *David Piuva*
78+
79+
**Takeaway:** `std::string` is not as universal as its name implies — Unicode support requires `std::u8string` or `std::u32string`. Worth keeping in mind as I move past beginner examples.
80+
81+
> **Q:** What replaces `std::vector`? `boost::stable_vector` has reference stability and good cyclomatic complexity, but if not needing stable references, it's far slower at growing.
82+
>
83+
> *Callan Gray*
84+
85+
> For performance critical cases, I use a SIMD and cache aligned `Buffer` type with reference counting. Then I can fetch bound-checked pointers from the buffer to use with SIMD operations. In debug mode I get checks for out-of-bound and alignment errors. With extra safe debug settings, it catches double free, use after free, use from wrong thread, et cetera.
86+
>
87+
> When performance is not critical, I use a safer container that only allows access by index, to reduce the risk of accessing invalidated memory, but you can still get references to elements from the `[]` operator, because otherwise it would be useless for storing objects with side-effects in member methods.
88+
>
89+
> The problem with `std::vector` is that it is trying to be both at once.
90+
>
91+
> *David Piuva (reply)*
92+
93+
**Takeaway:** `std::vector` is fine for learning but has real trade-offs in production — reference stability vs. performance. Custom containers exist for a reason. Revisit this once I hit Phase 6 (RAII, smart pointers, advanced memory).
94+
95+
---
96+
97+
### On Learning Approach and Operator Overloading
98+
99+
> If you are new to C++ or trying it out, I'd say try the operator overloading, creating manual arrays using constructor, freeing them in destructor with messages, `fstream`, then low level file handling, etc. Try using `struct` for data object and `class` as controllers. Just a suggestion.
100+
>
101+
> Operator overloading example:
102+
> ```cpp
103+
> struct Category {
104+
> int id;
105+
> char name[31];
106+
>
107+
> friend ostream& operator<<(ostream& os, const Category& c) {
108+
> os << c.id << " " << c.name;
109+
> return os;
110+
> }
111+
> };
112+
>
113+
> // usage:
114+
> Category c{1, "Beverages"};
115+
> cout << c << endl;
116+
> ```
117+
118+
**Takeaway:** Good suggested learning order that aligns with my ROADMAP. The `struct` for data / `class` for controllers pattern is a clean mental model. Already covered operator overloading in Phase 3 — see [`ex13-surcharge-operateurs.cpp`](../course-work/ex13-surcharge-operateurs.cpp).
119+
120+
---
121+
122+
### On Long-Term C++ Journey and Frameworks
123+
124+
> I had started exploring C++ way back in 1995, but since I was a beginner then, and hence did not get opportunities. Hence stopped going ahead with it. Now that I retired from my company 4+ years ago, I thought to delve into different technologies, C++ being one of them. As you progress, you might be interested in looking at **Drogon**, C++ MVC framework.
125+
126+
**Takeaway:** Look into [Drogon](https://github.com/drogonframework/drogon) later — a C++ MVC web framework. Could be a fun project idea beyond IFT1166 scope (Phase 6+).
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — C++ Core Guidelines
2+
3+
> https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

resources/notes/cpp-essentials.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — C++ Essentials
2+
3+
> Sharam Hekmat
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

resources/notes/cpp-insights.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — C++ Insights
2+
3+
> https://cppinsights.io/
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

resources/notes/cppreference.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — cppreference.com
2+
3+
> https://en.cppreference.com/
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — Effective Modern C++
2+
3+
> Scott Meyers
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

resources/notes/godbolt.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — Compiler Explorer (Godbolt)
2+
3+
> https://godbolt.org/
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

resources/notes/isocpp.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Reading Notes — isocpp.org
2+
3+
> https://isocpp.org/
4+
5+
---
6+
7+
<!-- Add thoughts, useful pages, and learnings below. -->

0 commit comments

Comments
 (0)