[Off Topic] Learning to take code apart. For a living?

I started to follow my motivations to work with computers more closely, and found that I largely wanted to program as a means of learning to take apart code, to understand it, and not be playing video games, or similar tasks in a black box, because otherwise I would never be able to make it do exactly what I wanted; or troubleshoot more freely.

As a child I started with learning CAD thinking I could make games with only that, and then ran an earlier jailbreak on ios, then wanted to make game mods which while also enjoying my guitar lead me to wanting to learn how to access the computer’s system. Now I am 22 and out of school with time to relax and do almost nothing.

My question is, is JUCE, driver, or embedded programming a useful proxy to understanding reverse engineering of code, or what “old school” architecture do you recommend playing with? Could I run JUCE code through something like IDA Free to break it down into understandable parts?

The juce codebase is roughly as old as you are, so there is a part of “old school code”, but luckily most of it got or is currently being modernised, since some legacy constraints like C++11 could be lifted.

I think it is a good bit of code to learn from and adopt.
To learn architecture the best is to write stuff and make mistakes. If you come back to code you wrote a few months ago, you will see it with different eyes, more like an outsider. Naturally you want to change things, which is the moment when I feel I learned most.

I don’t know what advice to give about reverse engineering, I don’t think any used framework would lend itself specifically for that process, especially since you usually don’t know that beforehand.

TL;DR: you learn the most when moving from disposable code to maintaining your own projects over time.

1 Like

Thanks. I’ve been overly stressed about getting a job lately when I don’t have to be, I just want to relax and have fun; and of course mod games to allow stuff that should have been there by default.

1 Like

Coding is rewarding, but it’s also stressful when I have so much pressure I put on myself to be the best I can be.

So it’s okay to write bad code while I’m learning and have to look things up?

Better writing bad code than no code. And best to improve it over time.

And I can relate to the stress, don’t push yourself, don’t aim too high. Start simple and grow over time. Baby steps, as they say…

With the downtime one of my college professor’s husband, also a professor where I went; recommends writing/taking apart code on a simulated PDP11 to get better with ISA. Anything helps!

Taking code apart is just like writing code. I have been coding longer than you have been alive and I still have those questions about quality and “looking things up”.

I hear a familiar tone in your voice, best you can do is keep learning, keep creating, don’t limit yourself to taking things apart, use what you learned taking them apart to build new ideas that are really in your head.

Programmers have a lot of confidence problems since, when a program fails, everybody knows where the blame goes. When you create failures over and over, eventually, you start writing software/programs that don’t crash and you one day say, yeah I made it (confidence wise).

I don’t have a degree in software engineering, but I am around all these devs that do. Some days that can get to me, but my experience and perseverance to at least try and create got me passed that years ago.

my 2cents. :slight_smile:

1 Like

Writing tests is actually a really good way of understanding code. It makes you think long and hard about what a piece of code should do and what it shouldn’t do.

3 Likes

How do I start? I’m pretty confused on how to test large code bases autonomously.

This is why you start with design & testing. :slight_smile: Seriously though, you are over thinking this.

Assert that this expected value/state is the same as the outcome, message me if this assertion is incorrect.

That is the gist of a test, so ask questions about parts of the code, assert the answer. Rinse and repeat.

If you are literally asking about C++ unit test implementations, I am still using other languages more than C++ right now so I don’t explicitly know for C++;.

https://docs.juce.com/master/classUnitTest.html

https://docs.juce.com/master/classUnitTestRunner.html