Programming Project Ideas - Give your Unique and Interesting project ideas here.

You might enjoy nand2tetris, which is on Coursera. For me, the content was a little too ambitious and rushed but the overall idea of (like the name suggests) starting with basic logic gates and proceeding through intermediate steps to what we consider software suitable for an end-user is incredibly solid. Plus, if this matters, the instructors Shimon Schocken and Noam Nisan (both Israelis) have cool accents. I can't help but think of the "Data-Driven Astronomy" course on Coursera where the instructors are Australian and I just liked listening to them.
I've heard of that course before. It does look pretty cool. I don't think I'm ever going to do something like build a computer from scratch though. My inspiration was more something like the PICO-8. I did have these grand ideas of making it something you could make games on and making it public and stuff, but, it was a learning project and something that would probably need a big rewrite to make it public. But it was fun to make.

It wasn't so much the hardware aspect I was into, I was actually originally interested in romhacking and was learning how roms are laid out in memory and how 8 and 16 bit processors worked and shit like that and that ended up becoming more interesting than the actual romhacking so I wanted to try making something where you could make games in a way that resembled working on those old consoles, but without as much finicky fucky around bullshit.
 
  • Like
Reactions: Belisarius Cawl
Well OK what were some sites or books that gave you guidance in parsing your assembly code
Assembly is actually very easy to parse once you realize that CPUs don't "parse" assembly so much as run it as naively as possible. The CPU will assume that all assembly is in the pattern "opcode, operand, opcode, operand". No exceptions. If the thing it just read was a operand, it WILL assume the next thing is an opcode. If it isn't, it breaks catastrophically. There's a name for what happens specifically, but basically it starts executing operands as opcodes and opcodes as operands. The pattern gets flipped, and once it's flipped it's generally impossible to recover.

There's no sanity checking, no pattern parsing. All of that is slow. The one two punch is fast. CPUs want to be fast.

This may have changed at some point in the past 30 years, but this is how CPUs worked for a very long time. Making a software CPU that does this isn't terribly difficult. Now if you want to emulate one that has precaching and all that shit, good luck. But there's a reason all it takes to make a SNES emulator is one jobless autist.
 
  • Like
Reactions: Belisarius Cawl
Strongly recommend sites like Project Euler and CodeAbbey
I also recommend Project Euler. I've used it when trying to learn a new language to get a feel for how the language does functions, flow control, and integer handling.

Personal projects I like include things like decoders for protocols or file formats. Making a CRC calculator for the first time made me appreciate how optimized ones work. This paper is a really good starting point. Related are probably hashing algorithms and random number generators. Image manipulation is also a really fun project to start learning things like transformations that can be used to understand 3D transformations and 3D graphics. Card and dice games often are straight-forward to implement and can use your own rng and image library as well.

Some RFCs make for some fun projects. There are many RFCs with info spanning over fifty years now, but formats like PNG, Base64, JSON are defined there as well as things like IP and DNS and even date and time zone information.

Even making something that makes an API request to something like the USDA food database for a personal calorie counter is also a fun project.

I guess it just depends on what you want to learn or do.
 
This may have changed at some point in the past 30 years, but this is how CPUs worked for a very long time. Making a software CPU that does this isn't terribly difficult. Now if you want to emulate one that has precaching and all that shit, good luck. But there's a reason all it takes to make a SNES emulator is one jobless autist.

What I really want to know is the nitty-gritty of how AI coders interface emulators with their AI attempts at doing things like speed-running through Mario games
 
Surprised no one has suggested getting an arduino or something.

I learned a lot of the basics on little microcontrollers like that. It's nice to have physical things for the inputs (like active/passive sensors) and outputs (lights, speakers, motors, etc.). It's rewarding when all of that shit actually works.

For a beginner, it's nice because arduino has a reasonable level of hardware abstraction and the programs have a simple structure (just a method called once when powered on and a method that loops infinitely).

You can get them very cheap, there is a lot of variety, and there are like a gorillion tutorials.
 
What I really want to know is the nitty-gritty of how AI coders interface emulators with their AI attempts at doing things like speed-running through Mario games
If you're talking about MarIO or whatever, it's actually super simple. The program reads whatever memory address corresponds to how far the screen has scrolled. More scrolling equals more better. Thus the AI (such as it is) does whatever it can to increase that scrolling value as quickly as possible. But everything it does is based on that one value.

It's probably gotten a lot more complex since MarIO first came out, but that's how it worked in the beginning and probably still is for the most part.
 
  • Winner
Reactions: Belisarius Cawl
are you seriously telling some kid who is a brand new coder to get into fucking hardware design and compiler construction as a starter project? this is insane dude even most university graduates probably can't do what you are describing
Echoing what DumbDude said. Don't recommend too advanced projects, recommend more beginner or intermediate projects.
It depends on what language and type of programming you're interested in.
I'm currently learning Python and after becoming somewhat proficient at it I'm thinking to start learning about C. I'm interesting about learning AI (voice cloning algorithms like RVC, LLMs or image generation like DALL-E etc.) and about cybersecurity (in the red teaming side of things).
 
  • Agree
Reactions: Belisarius Cawl
For python, I'd recommend you try the projects in "Automate the boring stuff", it's free online.
On its own, this book won’t turn you into a professional software developer any more than a few guitar lessons will turn you into a rock star. But if you’re an office worker, administrator, academic, or anyone else who uses a computer for work or fun, you will learn the basics of programming so that you can automate simple tasks such as these:
  • Moving and renaming thousands of files and sorting them into folders
  • Filling out online forms—no typing required
  • Downloading files or copying text from a website whenever it updates
  • Having your computer text you custom notifications
  • Updating or formatting Excel spreadsheets
  • Checking your email and sending out prewritten responses
These tasks are simple but time-consuming for humans, and they’re often so trivial or specific that there’s no ready-made software to perform them. Armed with a little bit of programming knowledge, however, you can have your computer do these tasks for you.
Simple but useful.
 
Can anyone recommend resources on assembly programming and compiler design. I want to learn the basics of that stuff for fun and I want to learn how to make NES/SNES games without using the shitty tools available. Its much better than fucking nonsense the industry wants to shove down your throat, I dont want to hear another fucking word about Javascript and Python.
 
  • Like
Reactions: Kiwi2Shoes
I made my own virtual 16-bit CPU, assembly language and assembler when I was learning D. It's actually not as difficult as it might sound and it was pretty fun to work on. The hardest part was actually the text parsing for the assembler.
I did a course at university for compilers and interpreters and it was, by far, the hardest course I've ever done. The sheer amount of complexity involved with lexical parsing, tokenisation and optimisation is absurd.
 
Can anyone recommend resources on assembly programming
One of my courses used Computer Organization and Design by David Peterson and John Hennessy. Typing that into Google resulted in the PDF, and it looks like many of the normal sellers have it for cheap (at least the older fifth edition). It goes over operands, how a processor is structured and how many operations work. I remember working with the MARS MIPS simulator. A good place to start is with Hello, World and build from there. I also have a book on 68000 assembly I got for free some time ago and it seems to go over 68k assembly from an introductory standpoint, and there's tons of resources on that architecture, but that's the Genesis/Mega Drive .

If you're interested specifically in NES/SNES, there's tons of really neat videos and resources on that. Luckily their architecture is very well documented and somewhat related in that the NES uses a modified 6502 while the SNES has a modified 65C816 that was designed from the 6502.

For the NES specifically, javidx9 did a really good video series on writing an emulator starting with the absolute basics on bitwise operators and how the 6502 and the rest of the architecture works:

There's also Displaced Gamers that goes over the assembly code and bugs of NES games:

There are other people, but luckily there is a ton of information on the NES.

Surprised no one has suggested getting an arduino or something.
I was considering it, but sometimes it's a hard sell to get someone to buy a bunch of things and learn some electronics in addition to programming, but those are what got me really invested in embedded systems and highly recommend them. The Raspberry Pi Pico can be had for just a few dollars and is an impressive MCU for its cost.

With that, does anyone have any experience with any good FPGA dev boards? I've been wanting to get back into those for a while and haven't looked at them since college.
 
With that, does anyone have any experience with any good FPGA dev boards? I've been wanting to get back into those for a while and haven't looked at them since college.
I used an arduino uno microcontroller for my college experiments 4 years ago. From what I remember its pretty good
 
  • Like
Reactions: LabourRace
I did a course at university for compilers and interpreters and it was, by far, the hardest course I've ever done. The sheer amount of complexity involved with lexical parsing, tokenisation and optimisation is absurd.
Yeah modern compilers are pretty complicated and intense especially for big languages. That's why I made a toy language instead of trying to make one for a real language.
 
I made my own virtual 16-bit CPU, assembly language and assembler when I was learning D. It's actually not as difficult as it might sound and it was pretty fun to work on. The hardest part was actually the text parsing for the assembler.
Cool, I did the same in verilog and wrote a toy assembler for mine too. It was a one instruction per cycle though, which limited my instruction set. I want to redo it. I wrote a version of wozmon for it.
 
  • Like
Reactions: LabourRace and Grub
I sort of agree with the sentiment of what you're saying here (look at the post right before yours) but I would recommend doing things locally or in a VM first. That reduces the complexity considerably and from there you can set up cloud services.
Yea you're right, I was just going off how I learned, and tbf there is some additional learning you'd probably need to do for cloud components and services before setting it up.
 
  • Agree
Reactions: Belisarius Cawl
Surprised no one has suggested getting an arduino or something.

I learned a lot of the basics on little microcontrollers like that. It's nice to have physical things for the inputs (like active/passive sensors) and outputs (lights, speakers, motors, etc.). It's rewarding when all of that shit actually works.

For a beginner, it's nice because arduino has a reasonable level of hardware abstraction and the programs have a simple structure (just a method called once when powered on and a method that loops infinitely).

You can get them very cheap, there is a lot of variety, and there are like a gorillion tutorials.
The expense was mentioned earlier and there are two other factors that come to mind that could get in the way. You really need to have a decent workbench area where accidentally dropping components won't result in a long search in the carpet or whatever. Additionally if you want to do anything really badass with an Arduino like cosplay you will have to move past the breadboard and buy additional equipment for soldering and have the knack to use it. I've had a tremor in my hands from the age of 11 so that's just not realistic for me. At least with pure programming you can always hit the backspace key.
 
The expense was mentioned earlier and there are two other factors that come to mind that could get in the way. You really need to have a decent workbench area where accidentally dropping components won't result in a long search in the carpet or whatever. Additionally if you want to do anything really badass with an Arduino like cosplay you will have to move past the breadboard and buy additional equipment for soldering and have the knack to use it. I've had a tremor in my hands from the age of 11 so that's just not realistic for me. At least with pure programming you can always hit the backspace key.

All of that is very true. I like having a snappy and fast build process to test code, and embedded hardware can be hard to do that with in my opinion.

Learning to properly use a debugger changed my life. I had the PICkit 3 which has some simple debugging (3 breakpoints lol) but it helped a lot when developing.
 
  • Agree
Reactions: Belisarius Cawl
All of that is very true. I like having a snappy and fast build process to test code, and embedded hardware can be hard to do that with in my opinion.

Learning to properly use a debugger changed my life. I had the PICkit 3 which has some simple debugging (3 breakpoints lol) but it helped a lot when developing.
I am mainly a print-to-debug troglodyte but it's worth noting that Linus Torvalds is also in that category. However, working with JS gave me a solid reminder of what actual debugging can do and that's something I need to focus on more in the future.
 
  • Feels
Reactions: Flabba Wabba Jabba
I am mainly a print-to-debug troglodyte but it's worth noting that Linus Torvalds is also in that category. However, working with JS gave me a solid reminder of what actual debugging can do and that's something I need to focus on more in the future.
it sucks because I've only ever really debugged with languages like Java, .NET and C. I don't really get to debug anymore with webdev work since it's all hot-reload, so it's not even worth it. May as well just spam console.log() everywhere and be done with it.
 
  • Agree
Reactions: Belisarius Cawl
Back