eli5: How do you actually make and design programs made for editing and special effects?

262 views

Programs such as Premiere Pro and Adobe, how does one actually start from scratch to make one of those?

In: 1

3 Answers

Anonymous 0 Comments

Your computer today is a register machine. A register is an input or output of a CPU. Your CPU has many, some input-only, some output-only, some are both input and output. Some registers are for data only, some are for instructions only.

As a conceptual example, I would put the number 7 in register A, 5 in register B, and the “opcode” for the ADD instruction in the instruction register I. And what should show up in register A? 12. How all this actually happens at a physical level is kind of not important. Why it all happens is also kind of not important – as a software developer, I’d just read the manual on this CPU to learn how to use the ADD instruction, learning it reads from A and B and writes back to A.

Early computers were programmed directly like this. Early computers were very much thought of as electro-mechanical computation *machines*. They were programmed by physically wiring circuit paths. Data was stored on hole-punched tape. Later, so were the programs themselves.

Really, the early days of computing were quite marvelous what they were both able *and willing* to do. We joke about it, that early computers used to take up entire warehouses and when switched on, the greater LA area would *dim*, but the early pioneers and financial backers were not deterred by the magnitude of what they sought to do.

But then some genius got it in his head that he could use a more descriptive grammar. Instead of LOAD, STORE, COMP_LE, INCREMENT instructions (and by the way, these computers are all digital – they don’t know what ADD is, that’s just a mnemonic for some digital value, like 7 – instruction 7 ADDs registers A and B, and writes the result to register A), I could instead write:

int counter = 0;
while(counter <= 9) {
do_stuff();
counter = counter + 1;
}

The example above is valid syntax for C, C++, Objective C, C#, Java, I think Go… There are lots of different programming languages that follow a lineage, so their syntax is similar.

So you write a document. In this new-fangled programming language idea. And with it, you describe your program and how it does what it does. And we call this document “source code”. And the source code has to follow the rules of the language. Just as you wouldn’t fly to Japan and say to the locals, “Oui! Oui!”, you wouldn’t write Haskell code in a Python program.

And that is because this text document is the data, the input for a program that will read it and translate it into those machine instructions for you! That translator program is often called a compiler. So it’s a program that takes a specific programming language source code as input, and produces a program as output. You can then run that program on the intended machine.

The first compilers were written by hand in straight machine instructions on punch cards. You could then use your programming language to write a compiler for that language, in that language. This is called bootstrapping. Sometimes it’s nice to be a C++ developer and write and modify and fix and maintain your C++ compiler in C++ itself. Again, the output is a runnable program on punch cards, or in modern day, stored on your hard drive. So now you have a compiler that can compile new versions of itself.

So if you want to write your own program, you need to first pick up a book on some programming language – Python is a very popular first language. And since we live in the future, most people follow online tutorials. Once you have an idea of how to write programs, you then need to learn about the program you want to create. If you want a program that makes 3D renders and effects, then you’re going to have to learn a shitload of calculus, trigonometry, geometry, and linear algebra. You’re going to have to learn physics in regard to light. There’s a lot of domain knowledge you’re going to have to learn before you ever commit to a single line of code, because learning programming itself won’t teach you anything about the program you want to make.

You are viewing 1 out of 3 answers, click here to view all answers.