r/cpp_questions • u/Ganesh10LM • 6d ago
OPEN System programming
I am starting to learn system programming(c++). As a beginner please recommend me the best project to work with so that it will force me to go on the depth as well as for the strong portfolio?
5
u/Grouchy_Edge632 6d ago
If you are a beginner, start with numbers ( the mirror of a number, the biggest common divisor of 2 numbers). You will understand more easily how the program works!
16
9
u/kingguru 5d ago
Write an OS kernel in C++.
Doesn't have to be anything big and fancy like Linux, just start with something that can boot on a Raspberry PI and print "Hello world".
Of course, this assumes you already know at least the basics of C++ and programming but I assume you do so?
4
u/Tack1234 5d ago
A CHIP-8 emulator is also a great project to get started with if a kernel is too much. I recently wrote mine in C and now I'm working on a custom assembler for it in C++ as my first C++ project, it's great fun.
3
u/kingguru 5d ago
An emulator indeed sounds like fun as well.
One of my colleagues wrote a GameBoy emulator. I guess it would be pretty satisfying to see your own code being able to run Super Mario.
Being able to show that you can do something like that is quite valuable in a job interview as well. There's a reason we hired him :-)
0
u/Ganesh10LM 5d ago
How much it fooster my portfolio, like big companies really looking for an engineer who can write custom chip simulator like 8085 and has great knowledge of os , memory management, data fetching, execution etc ?
5
u/kingguru 5d ago
I'm not exactly hiring for a big company but I can assure that if you've written a custom chip simulator you'd be a very interesting candidate.
You could also have written a Tetris implementation in Brainfuck for whatever reason but it would show that you actually have an interest in programming.
Maybe just figure out something that would be fun to write and do that in whatever language you like?
1
u/Ganesh10LM 5d ago
Sounds fascinating to work on own Small os. But my main question as a beginner is how to start the project like from where to study , it is good to use ai for the discussion of architecture like how the thing should work etc .. ?
1
u/kingguru 5d ago
Have you read the stickied post titled "Important. Read before posting"?
It might be important to read before posting.
3
2
2
2
u/DumbTro 2d ago edited 2d ago
Let me try to actually be helpful; way too many people wasting time commenting on here without getting to the point and answering the question.
If you are truly a beginner probably a better idea for you to not go about doing a random practice project. Go read CS:APP cover to cover. Do the associated book questions and labs. The labs have enough project worthy tasks for you to do. Writing your own malloc would be a good idea - go deep and that would look great as a portfolio project; you can learn about other allocator designs as well which provide more optimal cache locality and performance if the use case permits for that particular program. After you have a good grasp on computer systems maybe try reading glibc malloc, tc malloc, how the linux kernel implements concepts such as scheduling, etc.
After you see some read production code then you'll be in a better shape to go and code something up yourself. Low key a waste of time as a beginner to do practice projects when you really don't know anything. Most people from my experience don't even know the basic fundamentals on computer systems, how a program goes from code to being executed on the cpu, how the operating system sits as an abstraction layer between the application program and the hardware, etc.
1
u/moltenpuzzle 5d ago edited 5d ago
A web search engine from scratch. Indexing, retrieval and scoring.
There are many resources online on how to do it. But if you manage it in C++, there is no way you don't come out of it an experienced programmer. There is just no way around implementing it efficiently.
1
26
u/YogurtclosetThen6260 5d ago
A great project is literally do any, and I mean any, large scale pipeline project, and then optimize performance using systems techniques. For instance I'm working on a Huffman data compressor and I've reduced end to end latency from 800 ms to 350 ms.