I'm 15 and planning to formally enroll in a computer engineering program next year. For now, I'm completing prerequisites at a community college. I've studied the basics of C, Go, C++, and x86 assembly, but I still feel stuck at the syntax level and don't know how to build useful things with what I've learned.
I'm interested in operating-system development, ethical security research, and mobile development. I can't use Discord, so I'm looking for ways to learn independently outside of my private tutoring. What kinds of projects would be good starting points, especially if I'm interested in systems programming? Would working with FreeBSD, Plan 9, or another operating system be worthwhile?
At the moment I'm using an Apple Silicon MacBook, although I may soon have access to an older 16 GB laptop and a more powerful Xeon-based desktop. I'm also wondering whether I should study computer science independently while relying on university mainly for computer engineering. What would be a practical path forward?
3 Answers
The best way to move beyond memorizing syntax is to choose a small problem you actually care about and build a solution for it. For example, you could make a program that watches for a Bluetooth device and triggers a relay when you arrive home. Projects like that force you to learn operating-system APIs, hardware interfaces, debugging, and program structure naturally. Start small, finish things, and gradually increase the scope instead of waiting until you feel completely prepared.
Knowing several languages is useful, but the language itself is only a tool. Operating systems also require knowledge of CPU architecture, memory management, processes, filesystems, device I/O, compilers, and debugging. A good path would be to work through a beginner operating-system tutorial that boots a tiny kernel in a virtual machine, then add features one at a time. You can also study an existing operating system's source code, but don't feel obligated to start by contributing to a large project.
Your Apple Silicon machine is not a dead end. ARM is a capable architecture, and virtualization or emulation can let you experiment with x86 systems when necessary. The main limitation may be the host operating system and available tooling rather than ARM itself. FreeBSD can be educational, while Plan 9 is interesting historically, but either should be a learning aid rather than the only thing you study.
My frustration is less about the ARM instruction set and more about the restrictions of the host operating system and the amount of systems software that assumes Intel or AMD hardware. Still, I appreciate the advice about using virtual machines and focusing on the underlying concepts.
That makes sense. In that case, use the Mac for general development and run a suitable Linux or BSD environment in a virtual machine when you need a different toolchain. Your older laptop can also be useful for direct hardware experiments later.
Try building a progression of projects rather than jumping straight into malware research or a full operating system. You could start with command-line tools, a small shell, a file-format parser, a simple network server, or a toy compiler. After that, move to a bootable kernel, a basic scheduler, or a tiny filesystem. For security, focus on legal laboratory exercises such as analyzing deliberately vulnerable programs in an isolated environment. Each project should teach one or two new concepts and be small enough that you can finish it, document it, and explain how it works.

It helps if the project solves a problem you personally experience. Even a simple utility is useful practice as long as you take it from idea to working program.