Skip to content

Latest commit

 

History

History
202 lines (131 loc) · 12.5 KB

File metadata and controls

202 lines (131 loc) · 12.5 KB

The Journey to Become a C/C++ Game/Engine Developer

Welcome to my journey in C/C++ game and engine development. This repository serves as a personal log of my progress, learning resources, and projects.


👤 About Me

Hi, I'm Erkam, an aspiring game developer with a passion for C/C++ and game and engine development. I enjoy learning new technologies and sharing my progress with the community.


🎯 Objective

To document my journey in mastering C/C++ for game and engine development by building hands-on projects, exploring foundational concepts, and honing my skills in both high and low-level game development. This repository aims to serve as a transparent record of my learning process, inspire others who are on similar paths, and encourage feedback and collaboration within the developer community.


Logs

2025-02-13

  1. While studying The C Programming Language by Kernighan and Ritchie, I realized that the book is more of a documentation of C itself rather than a teaching guide for beginners. Although I learned some valuable things, I didn’t feel like my overall familiarity with C improved significantly. Additionally, I found the exercises quite challenging, especially in the last three chapters. Therefore, I’ve decided not to continue with the remaining chapters and instead start C Programming: A Modern Approach by K. N. King, as I’ve heard it's better suited for learning C in a more comprehensive and beginner-friendly manner. My goal is to complete this book to solidify my understanding of C before moving on to more advanced topics.

2025-01-24

  1. I decided to read Computer Systems: A Programmer's Perspective after reading and finishing The C Programming Language, because I thought I would need a relatively good knowledge of C programming to do the exercises in it, and the authors of Computer Systems: A Programmer's Perspective also recommends The C Programming Language for learning C programming.
  2. Also, while I am currently working on a project called Hex Survivor, I wanted to take the time to learn only one subject in depth. The subject I decided to learn in depth for now is computer systems and low level programming. So I decided to stop reading the 3D Math Primer for Graphics and Game Development for now and continue reading it after I finished reading Computer Systems: A Programmer's Perspective.

🔜 TODO

📝 Projects

  • Simple 2D C/C++ OpenGL Game

📚 Learning Resources


🔛 In Progress

📝 Projects

Hex Survivor

Technologies Used: Unity, C#
Status: Ongoing
This project is a turn-based 2D game developed in Unity using C#. It aims to create a maintainable, extensible, and clean codebase while learning low-level game development using C/C++ and OpenGL. Additionally, it provides an opportunity to showcase my skills in C# and Unity, as well as to gain experience by publishing a game and observing the post-launch process.

📚 Learning Resources

1. Computer Systems: A Programmer's Perspective, Third Edition by Randal E. Bryant and David R. O'Hallaron.

Start Date: 2025-03-28
Status: Ongoing
Repo: My Solutions to the Computer Systems: A Programmer's Perspective, Third Edition

Chapters
  • 1. A Tour of Computer Systems
  • 2. Representing and Manipulating Information
  • 3. Machine-Level Representation of Programs
  • 4. Processor Architecture
  • 5. Optimizing Program Performance
  • 6. The Memory Hierarchy
  • 7. Linking
  • 8. Exceptional Control Flow
  • 9. Virtual Memory
  • 10. System-Level I/O
  • 11. Network Programming
  • 12. Concurrent Programming

Start Date: 2025-03-28
Status: Ongoing
Repo: My Solutions to the Programming: Principles and Practice Using C++, Third Edition

Chapters
  • 1. Hello, World!
  • 2. Objects, Types, and Values
  • 3 Computation
  • 4. Errors!
  • 5. Writing a Program
  • 6. Completing a Program
  • 7. Technicalities: Functions, etc.
  • 8. Technicalities: Classes, etc.
  • 9. Input and Output Streams
  • 10. A Display Model
  • 11. Graphics Classes
  • 12. Class Design
  • 13. Graphing Functions and Data
  • 14. Graphical User Interfaces
  • 15. Vector and Free Store
  • 16. Arrays, Pointers, and References
  • 17. Essential Operations
  • 18. Templates and Exceptions
  • 19. Containers and Iterators
  • 20. Maps and Sets
  • 21. Algorithms

✔️ Done

📚 Learning Resources

Descending order

Start Date: 2025-02-13
End Date: 2025-03-28
Completion Time: ~120 Hours
Status: Done
Repo: My Solutions to the C Programming: A Modern Approach

My Takeaways from C Programming: A Modern Approach in a Nutshell

This is the second book I’ve read to learn C by solving problems. I first tried The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie because this book is considered the go-to for all things C. However, when I reached the middle of the book, I realized that, as someone still unfamiliar with C, I wasn't able to learn much from it.

When I started reading C Programming: A Modern Approach, I realized that The C Programming Language was not designed to teach me C. It’s simply a reference book, whereas C Programming: A Modern Approach is an excellent textbook. With its detailed explanations, exercises, programming projects, and especially the Q&A section, which offers a level of detail I haven't seen in other textbooks, it covers all the essential details of C, a language that is both simple and powerful, and addresses everything it believes to be important.

I’m glad I switched to this book instead of continuing with The C Programming Language. I highly recommend this book to anyone wanting to learn the C programming language.


Start Date: 2024-10-12
End Date: 2025-01-24
Completion Time: ~150 Hours
Status: Done
Repo: My Solutions of Introduction to Computing Systems

My Takeaways from Introduction to Computing Systems: From Bits & Gates to C/C++ & Beyond
1. Understanding the Big Picture

This book excels in showing the connection between the lowest-level hardware components and high-level programming languages, bridging the gap in a way that's both engaging and thorough. However, it’s important to note that the C and C++ lessons provided in the book are not sufficient to master these languages on their own. They serve more as a foundation for understanding how these languages operate closer to the hardware.

2. Assembly Language and Low-Level Programming

Writing assembly was genuinely challenging, yet immensely rewarding. It provided a unique opportunity to see how things work at the most fundamental level, giving me a deeper understanding of how code gets executed by the CPU. Tasks such as managing memory manually, handling registers, and writing loops or conditionals in assembly helped me truly grasp concepts like bitwise operations, recursion, and iteration, and how these abstractions actually function under the hood. Seeing the advantages and disadvantages of these concepts from a low-level perspective was invaluable.

3. Memory Systems and Emergence of Complexity

The book effectively demonstrates how simple and small components, like logic gates, come together to form complex systems—this concept, often referred to as emergence, was incredibly eye-opening. It’s fascinating to see how individual bits and operations combine to create something as versatile as a programming language or even a full-fledged operating system. It reminded me of how non-living atoms form living organisms.

4. Problem-Solving and Practical Learning

The book does an excellent job of teaching fundamental programming concepts, such as recursion, iteration, and data manipulation, while also showing how and why these concepts work. By requiring readers to write them at the assembly level, it provides an appreciation for their elegance and power. Additionally, the step-by-step progression from simple circuits to complete systems effectively illustrates the incremental problem-solving approach required for tackling complex challenges.

5. Programming Perspectives

What I particularly liked is how the book reframes the way you think about programming:

  • It’s no longer just about "writing code," but understanding why certain design choices are made and how they impact the underlying hardware.
  • Although the book isn’t intended for this purpose, it made me wish it included more real-world examples of programming design trade-offs and how these decisions manifest in low-level advantages or disadvantages. Such an addition would have tied its low-level explanations more explicitly to everyday programming challenges.
6. Challenges and Growth

The steep learning curve—especially while writing in assembly—was both frustrating and rewarding. The challenge paid off by giving me a clearer understanding of the low-level operations and their connections to higher-level abstractions. Even though assembly was tough, the experience was invaluable and felt like a rite of passage for anyone interested in understanding computers at their core.

7. Future Applications

This book has laid a strong foundation for my journey in game and engine development with C/C++. Many of the concepts I learned, such as memory management and low-level programming, are directly applicable to building efficient and performant systems. Understanding how abstractions are built on top of hardware processes will help me make more informed decisions when working with tools like OpenGL or Vulkan.

In conclusion, Introduction to Computing Systems is an excellent resource for anyone who wants to dive deep into computer systems and see how they function from the ground up. While the C and C++ lessons are not enough to fully learn the languages, the perspective this book provides will forever change how you approach programming and problem-solving. I highly recommend it, especially if you’re passionate about understanding the inner workings of computers and want to become a more deliberate programmer.


🛑 Hold / Cancel

📚 Learning Resources

The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie

Start Date: 2025-01-24
Hold Date: 2025-02-13
Status: Hold
Progression: 65%
Study Time: ~50 Hours
Repo: My Solutions of The C Programming Language

Why hold?

While studying The C Programming Language by Kernighan and Ritchie, I realized that the book is more of a documentation of C itself rather than a teaching guide for beginners. Although I learned some valuable things, I didn’t feel like my overall familiarity with C improved significantly. Additionally, I found the exercises quite challenging, especially in the last three chapters.

Therefore, I’ve decided not to continue with the remaining chapters and instead start C Programming: A Modern Approach by K. N. King, as I’ve heard it's better suited for learning C in a more comprehensive and beginner-friendly manner. My goal is to complete this book to solidify my understanding of C before moving on to more advanced topics.


🤝 Contributions & Feedback

I welcome suggestions for resources, projects, or improvements to this repository. If you find any mistakes, have ideas, or want to contribute, feel free to reach out, open an issue, or submit a pull request!


📫 Contact

You can reach me via e-mail or connect with me on LinkedIn.