List of medium-difficulty projects someone could complete either to learn more advanced programming, or practice their skills.
- Completed
Code a chess engine that supports UCI (Universal Chess Interface), or at least some basic subset of it. Should be able to load a position, and find the best move. Optionally, create a simple chessboard GUI that can interpret UCI commands, and let humans (or other bots) play against them. You could also create a tool that can get two engines to play each other some set amount of times, from random positions (to test which bot is better, or if a small change improves your own engine.)
Try to get your engine to the point where it can regularly beat you, but don't stop there. Try to improve it on itself, make it as good and fast as possible.
Make it in a high performance language such as C/C++/Rust.
This was actually the first thing I ever made in C, and it was a great way to learn the language.
Skills:
- Code Optimisation, the performance of a chess engine is directly tied to how fast it is
- Bitwise Arithmatic, an optimised chess engine generates possible moves using mostly bitwise, for speed
- Recuresive Algorithms, the core of a chess engine is always a recursive Search() function
- A little bit of String Manipulation, to interpret UCI commands
Resources to use:
- Sebastian Lague's two chess programming videos, which walk through the implementation of an engine, in case you don't know where to start (1, 2)
- UCI documentation, to control the engine via standardised commands (link)
- Chess Programming Wiki, if you want to go beyond the surface level (link)
- Completed
Code a simple program that can read the raw bytes of a PNG file, and display them to the user in a window. Don't use an image library. Let the user move the image around, rotate it, zoom in and out, etc. You could try implement the DEFLATE algorithm on your own, or just use ZLib.
Try to make it safe on malformed PNGs, and support as many PNG features as you can.
Can be made in nearly any language, although some will be easier then others.
Skills:
- Robustness, shouldn't crash on a malformed PNG
- Binary Files, understanding the layout and reading documentation, reading and interpreting bytes in the correct order.
- UI, adding basic image viewing capabilities
Resources to use: