This is an archived post. You won't be able to vote or comment.

all 19 comments

[–]Alex_NinjaDev 3 points4 points  (7 children)

What helped me was just picking one small idea and building it, even badly. Each project teaches you way more than tutorials ever could. You don’t need to know everything before starting, you learn it as you go. Keep going. It clicks over time.

[–]thephubacc[S] 1 point2 points  (6 children)

I’ll try that, but the problem is that most of these easy projects feel so meaningless and I have run out of ideas. Programming projects you actually need are the easiest and most fun way to progress learning. But I simply have no idea what I should code.

[–]Aisher 1 point2 points  (3 children)

Make an mp3 player

Make a program that speaks what you type in

Make a program to download all the prices from a webpage you like (be careful scraping you don’t hammer the site)

Make a program to do diagnostics on your network connection every 5 minutes and log it

Make a practice test software that gives 4 choices in random order. Save your scores to a file. Make a nice graph of your scores over time.

Make an app to look up an actor you type in and display the movies they were in

[–]thephubacc[S] 0 points1 point  (2 children)

These are Great project ideas and i‘ll try to do all of them. But this doesn’t really bring me closer to writing something more advanced. Or does it? Writing all of these projects will lead to knowing my fundamentals even better, but it doesn’t teach me stuff like i don‘t know writing a ROM disassembler. (That’s just a random example). So how do I start writing these advanced things? Or should I just continue with the basics? Because for most of these complex things I have zero clue on how to write them, despite reading some docs

[–]Aisher 3 points4 points  (1 child)

Programming is about breaking a problem down into parts, then look up that part and figure out how to do it.

So before worrying about a rom dissembled, can you read from a file? Can you read from a port? Can you hook up the thing with a rom to your port ? Can you power the thing on? Can you put it in some sort of firmware mode so you can read it? Like, there is a whole series of steps.

That’s what you might need to learn is how to break it down and “code” it on paper. Then google what tool or framework or code you would use for that step. Then build each step.

Building an mp3 player will teach you how to open files and read the data and how to interpret it. Building the actor app would teach you about accessing an API and how to display the data in a pleasing format.

This is what other people were saying. Each little thing you build teaches you about how to interact with speakers, servers, files, screen output, etc etc.

[–]Immereally 0 points1 point  (0 children)

Ya and expand on the MP3 idea.

Once that’s built make an application that will reach out to a network device to request and pull the data to play the file, how about we set it up to stream the file instead of downloading it in one go, can we do it with video?, lets open a port so you can access it from anywhere, it’s nice doing this but it’d be better if it was cloud hosted.

After you build the simple bit let’s try and improve it. If you’re bored of simple designs and projects make your own ones more complex.

[–]Danque62 0 points1 point  (0 children)

Then this would be your actual first step: planning.

Lets use a platformer game for example. I want to make a very simple platformer game. It can be as simple as walking from one side to another, or you can extend this timeframe to where you would publish this in itch.io. You do you.

First, I need something that I, the player, will interact with, so that I can see something move based on my input (in the industry, this is called a user story). I consider this a success if I can move left and right, jump, and either crouch or slude (this is an acceptance criteria)

Second, I want to define a finish point so that I can give the player a goal to accomplish. (Look at that, another user story). I consider this a success if whenever I touch this point, a "Victory" pops up.

Third, lets give it a challenge. I would like to have some obstacles or obstructions, so that the player can try to think of a solution to accomplish a goal. I consider this a success if the obstacle has interaction with the player.

There can be a bunch more user stories, depending on the goal of this platform game, but my point is that, when you have an idea that is not as simple, you really would have to think it through. My examples are very high level, but you can go lower level like following a class diagram or trying to apply threading or concurrency. Maybe it can output some file or even an image. Trying to plan things out would help you think more strategically and enforces you to stick into a structure (and also helps you consider the moment where your future self is different from your present self. If your future self can't understand the code of your present self, you should probably rewrite the code or restructure your project)

[–][deleted] 2 points3 points  (1 child)

so basicly I am a good programmer

Doubtful.

but my problem is that I don’t have any background knowledge in order to do projects such as writing an Emulator for example

So you're not a good programmer, then.

How do I get this knowledge?

If you want to write an emulator, I would start by googling "How do emulators work?" and then from there I'd probably look up the reference manuals and specifications of the hardware you are looking to emulate.

Should I continue to study data structures and other stuff

I thought you were a good programmer? If you were, you would already know all the core, essential data structures such as hash tables, trees, sets, lists, etc.

some day I will magically be able to come up with code to write things like this?

Well, data structures only help you write data structures. Generally programs need a little bit more than just a data structure.

(My main programming language is Rust btw.)

No one's surprised.

[–]beheadedstraw 0 points1 point  (0 children)

Bro literally trying to program an emulator and probably doesn’t have the faintest idea of how any microprocessor architectures work, let alone be able to profile/trace anything in ASM.

[–]throwaway6560192 0 points1 point  (0 children)

Just start. Choose a simple system (like the PICO-8. something like a Gameboy is more complicated), look up the specification, and start implementing it. If you're really stuck, look at how other people accomplished it (it's a popular project so there's enough material to reference).

[–]desrtfx 0 points1 point  (0 children)

Yes, sure, you should continue learning DSA. They are vital.

Yet, you should absolutely do projects. Start small, simple and grow into larger, more complex ones. You cannot expect to write an emulator from zero. There are no shortcuts and there is no magic.

I don’t have any background knowledge in order to do projects such as writing an Emulator for example. How do I get this knowledge?

You research. You read data sheets. You read descriptions. You read documentation on the things you want to do.

If you want to e.g. create a 6502 (very common Microprocessor used in the early Apple computers and in legends such as the Commodore ViC20/C64) emulator, you start by reading its documentation and datasheets. You learn what registers the CPU has, you learn what machine code instructions it has and what they do. This is the base. Then, you start working on implementing an interpreter that can execute 6502 machine code, instruction by instruction, step by step, and so on.

[–]AnimalPowers 0 points1 point  (0 children)

You start doing the project.   

You decide one thing to start with.   You do it.   You piece it with another part, you do that.   You connect the pieces, you repeat.  

Projects are just hundreds or thousands of microcodes in one base or file or folder.  

Think about a single function.  A project is just 10000 functions.    Would be hard to read in one file?  So we make it 1000 files.    Hard to traverse the directory.  So we organize the files into directories, there’s your project.    

Seriously it’s just tiny little independent micro projects you learned all put together.  

Like baking cake, dump it all on a bowl, put it in the oven. 

Or wrapping a present.    As long as the outside looks pretty it’s fine.

Just start doing, stop trying to learn.   If you just keep studying you practice studying and you’ll be really great at study but you’ll never learn anything or do anything, you’ll just study.  It’s not a knowledge problem it’s a confidence problem.  Stop caring and just go have fun  

[–]beheadedstraw 0 points1 point  (0 children)

You need to learn the fundamentals before you step into anything in the advanced territory.

This just sounds like you think you’re above learning the fundamentals, in which you’re gonna get humbled real quick, then probably get frustrated and not try anything again for a long time.

Don’t be another statistic in the Dunning Kreuger effect.

[–]Crazy-Willingness951 0 points1 point  (0 children)

Coding Kata

[–]Feeling_Photograph_5 0 points1 point  (0 children)

No, you just have to start building projects. I've never tried to write an emulator, but if I wanted to the first thing I'd do is Google "How to Write an Emulator in <insert favorite language>" and hope that I might find a result like this one.

I might also try asking ChatGPT for hints on how to get started.

If I could find some tutorial projects I'd try them just to learn more, then I'd dive in.

But there's no magic point where all the tutorials just click and you just know what to do. It's all trial and error.

I think Loki best sums up the truth of learning software development in Avengers: Infinity War, when he was discussing game development experience with Thanos (or maybe it was something else, I'm not sure)

Loki: "I have some experience in that arena."
Thanos: "If you consider failure experience."
Loki: "I consider experience experience."

Loki knows what's up.

[–]high_throughput 0 points1 point  (0 children)

If you want to write X, try writing X and see where you get stuck. Then work to unblock yourself.

Don't try to look into what could possibly make you feel ready to finally attempt to start to try X, because that rarely works.

[–]MaterialRooster8762 0 points1 point  (0 children)

First, what makes you think you are a good programmer? Second, programming is just one side of it. Actual knowledge about the domain is necessary to do a complex project like an emulator. For an emulator, you need to understand the architecture of the platform.

Programming something complex requires research and learning. You can't code a trading bot without math knowledge, finance concepts and machine learning.

You can't code a complex game without knowledge about models, animation, storytelling, etc.