projects for beginners

as the title says I want suggestions for projects, I've already done a calculator(using shunting yard), what should I do next in order to advance?
Last edited on
What are you interested in? Math? Image processing? Games? Machine learning?

Make a program to do your calculus homework - symbolic differentiation.

This project isn't too far off from a calculator. Basically you read in your equation, parse it, and then implement the differentiation rules by means of graph rewriting. It also makes solid progress towards a compiler, which in my opinion, is one of the best exercises for any programmer.

Alternatively, write a program to...
- View images.
- Ray-trace a scene.
- Render parts of the Mandelbrot set.
- Play Conway's Game of Life on an "infinite" board.
- Compress files (e.g., with the LZW algorithm).
- Add reverberation to a sound effect.
- ...?

Personally I want to figure out how to do recognition tasks - speech-to-text or image recognition. I don't know anything thing about these tasks or how hard they are, but it sounds like fun.

Last edited on
The real question is what do you want to do?

Pick any small project that you think would be fun or interesting or useful, even if just to yourself. Then do it. You learn new stuff as you go.

I did a poker game with up to four players — I’m the only person that ever played it, but I learned things about C++ I didn’t know before.

I did quite a few games: Snake and Breakout being some of the earliest. Both can be done on the console/terminal (I did Snake with NCurses but Breakout with Borland’s graphical toolkit, which was cutting-edge at the time, lol). These days you can easily use either SDL or SFML to make graphical games though.
https://www.libsdl.org
https://www.sfml-dev.org

If you are just looking for a challenge, there are a number of things you can do. A good number appear on https://codegolf.stackexchange.com , where simply solving the task is a good start.

Over the years I’ve written a gazillion utilities to do random stuff for my own personal use.

+1 for managing to use Shunting Yard. It trips a lot of newbies up.
@mbozzi i don't care about games that much, since I don't play much myself, but your calculus idea is good (I'll just have to learn calculus) maybe I'll do algebra first
Last edited on
There is also Project Euler.

It's quite mathematical, brute force is not the answer, there is always an elegant solution. For example the answer to the very first question does not involve loops, but a 1 line equation.
maybe I'll do algebra first

Should be doable using the same approach, as long as you keep your problems simple.

Computer algebra in general is a field (hah) on its own. Basically its goal is to get the computer to solve increasingly complicated problems.
Last edited on
Heh, I wrote a Mandelbrot (and Julia) app. The hardest part of that was choosing a good color palette for the resulting image.
I like monster projects that can grow as I learn.

If you want a project that will task your lexing and parsing skills, try creating your own compiler. There are quite a few free books online for getting started, and you can get as in depth as you want. (learning assembly is highly recommended in this project, but if you're just having fun you can create your own language and syntax that compiles to C which then can be compiled regularly).
Along the same lines, you might like adding a simple internal scripting language to your calculator to make it programmable.

This is an amazing book series about CGI raytracing, and it is done without any additional libraries - https://raytracing.github.io/books/RayTracingInOneWeekend.html

If you feel like those tasks would be too small, then check out https://wiki.osdev.org and create your own operating system. (Some assembly is required, but most of the code can be written in c/c++ after initial setup)

P.S.
Don't discount games too quickly. They are a good way to practice complex ideas in a format that is fun to share with others. A simple card game can involve: linked lists, sorting algorithms, enumerators, randomization, proper memory management, AI, GUI, networking, music and sound effects, animations, dynamic libraries for plugins, project management and or collaboration, graphic design, etc.

Just try a little bit of everything... It's like reading a book, if a project grabs your attention then it will be easier to see it through, otherwise it can be done bit by bit, or just tossed to the side for something that suites you better. It's all learning experience.
Last edited on
Topic archived. No new replies allowed.