I’d appreciate advice on learning in public and on whether the approach below makes sense.
I’m a 19-year-old programmer from Brazil. I’ve been working on systems for aerospace machining facilities since I was 17. As I’ve learned more about professional software development, I’ve also realized how messy my early code was—which I think is a normal part of learning.
I started a Computer Engineering degree at a state university when I was 18. So far, the experience has been far from what I expected. Many courses feel disconnected from real systems or hardware, with exercises that seem abstract and rarely connected to each other.
If calculus I, II, and III are essential to solving computer engineering problems, why do we mostly work with artificial examples? If concepts like frequency filters and statistics are foundational to real systems, why are they often taught without practical context?
Projects such as Nand2Tetris or Programming from the Ground Up seem to exist precisely to fill these gaps. This makes me wonder why this disconnect appears so frequently in university curricula.
Before university, I had a very different learning experience. At 14, I studied Machining Mechanics at SENAI, a Brazilian institution closely connected to industry and employers. We would learn the math behind a component in the morning and apply it the same day on real machines. We designed machining processes and built practical tools—things we could take home, use, and show to others.
Later, I participated in a CNC competition program aiming for WorldSkills qualification. That experience taught me discipline, performance, and continuous improvement.
This is the feeling I miss in my Computer Engineering education.
I’ve often been asked to teach—by friends, classmates, and even people online. I’ve helped peers and supported teachers informally for years. At some point, I realized I should stop only criticizing and try to build something that represents what I believe Computer Engineering education could look like.
I’ve always believed that engineers should be able to build their “something” from the ground up. Not as scientists, but as the people who make complex systems actually work.
For a project-based learning course, I decided to build a drone and a Ground Control Station (GCS) as the core project.
My idea is to use a top-down approach, working across multiple abstraction layers. We would start with design patterns, engineering thinking, and real-world development practices using C#. The system would begin as a modular monolith, then be decomposed into microservices. Over time, services would be reimplemented in C++, and later in C, to make trade-offs between abstraction, performance, and control explicit.
While access to electronics labs is limited, I still want to explain how the underlying physics and mathematics behind gyroscopes, GPS, and barometers are translated into real drone components by computer engineers.
The GCS would involve networking, authentication, security, and control systems, implemented as a web-accessible server, with a mobile app acting as the remote controller.
I fully expect to be corrected many times—and that’s part of the goal. This isn’t meant to be a simple DIY project, but an attempt to bring together everything I enjoy about engineering into a coherent, project-based learning experience.
My questions are:
Does this project make sense as a learning path for computer engineering?
Is this a reasonable scope for a student-led, project-based course?
Would you be willing to review the outline of a free book I’m writing based on this approach and share feedback?