I'm a CS and Math student. My ultimate goal is to work in rendering and optimization, but I also want to bolster up my general programming skills. I'm trying to pick a project to work on as I study math and modern graphics libraries, something that won't be a waste of time, but that will help me to build up the confidence I need to get into the industry after school.
I've been all over the place, spending a lot of time studying theory and focusing on my course work, but I want to get back into day-to-day programming and am looking for a good project idea.
Last year, I spent a couple of months working on a UNIX ascii roguelike game/editor (nowhere near finished), but I don't know if this is the best place to spend my time right now? https://github.com/Oltman-B/RogueFactory
Working on a practice project is a great idea. I think the best way to become a better programmer is just to write code, and write code every day :P By working on real projects you will gain experience that you never knew that you needed :P
There are many people here, including me that are working on projects that you could probably talk to to see if you could help out. Specifically I know of Nakst's Essence project and Gingerbill's Odin project, If you get on the HMH discord and ask about stuff you can do, i'm sure they would have some ideas. I am personally working on an unofficially announced project, (its a Display Server for Linux, as part of an effort to simplify the Linux desktop) and its certainly more work than I alone can do so if you're looking to help out, let me know...
However, Ultimately, I think you should just find a smallish project that you think that you could complete or get into some-kind of ship-able state, in a month or so and that you would be passionate about working on. Also, you mention that you are worried about the project being a waste of time, and I don't think that you should think about if that way. As long as you are learning, it is not a waste of time, because even if you spend time working on something that no-one else gets to see, you will have gained in skill, and if you were to try writing that thing again or something similar, you will probably do it faster and better than you did the first time.
Instead of giving you more suggestions of specific projects to work on, I'll just list some different skills that are useful to have:
- Hardware programming, (ex. learning how to drive a PCI card from DOS or a Micro-controller)
- Network programming, (ex. like making an HTTP server, or a MUD )
- Cryptography, (implement an existing HASH function or Cipher, or implementing your own, or cracking someone else's)
- Lexing/Parsing, (ex make a toy language interpreter)
- User interface programming, (Make a kanban, or something that you can get into the hands of other people so that you can get some feedback, make adjustments...)
Again, I think you should just find something that you are passionate about. Look at things that you have to do every day, and maybe write some software to help automate parts of that? Anyway, Good luck :P
Cool. Here's a project that uses your skills for UI and programming languages.
Think in terms of HTML5, but you could use other platforms instead if you wish.
var main = (new Panel);
main.addWidget(new Label("Add two numbers."));
var A = (new Input);
var B = (new Input);
var btn = new Button("Compute",
res.text = "" + (parseInt(A.text) + parseInt(B.text));
var outcome = (new Panel);
var res = (new Label);
Since your goal is to work in rendering and optimization why not build a software renderer like Casey was doing. It's the project I'm working on and you get into all the nitty gritty details of how rendering actually works and there is plenty of optimization opportunity with it. You also have Casey's videos to reflect on to help you along.
I would say stick to what you want to learn more about. If you like rendering you could make a 3d renderer, and learn about deferred rendering, pbr lighting, and materials etc. I like to break things down into steps, like step 1: load a model , step 2: draw the model to the screen step 3: make a camera 'class' step 4: move the camera around etc. ..., step n: write a pbr lighting shader
Its worth pursuing a project you think you can finish and aiming for a polished project. That way you can have it later to show in your portfolio and can just be proud to show people a complete thing.
Even simple 2d games can teach you a lot about the rendering pipeline. I think there's no better experience then realhands on experience.
Also I found learning something in context is a lot easier and funnier. Like instead of just learn rendering techniques, make a project that incorporates these techniques.
Profiler library - can use handmade hero's one as a jumping off point
Physics engine - 2d then 3d
Toy Programming language
GUI library like dear imgui