Hey guys,
I want to start tinkering with FCEUX for making modded NES games.
But, I have almost no knowledge about programming. Let alone reverse engineering a game to modify it.
Hence, this is the path I have chosen to Advance my skills:
1)
Introduction to Computation and Programming Using Python2)
Art of Assembly3)
NES tutorials4)
LUA bookMaybe I'll be good to go after that.
What are your ideas about my plan? Please give me your suggestions about this course of action i have chosen.
Thank You
I don't know what exactly are your goal, but there is no need to learn Python or any other programming language before starting assembly. Many programming languages are different from each other, and assembly is definitely completely different in philosophy than any other programming language, because it is "low levels", you're almost closer to electronics than computer science (by modern standards).
If however you want to learn Python for other reason, then of course you can go ahead. But there is no requirement to learning assembly.
Still learning programming logic is very useful when learning assembly and many books and guides might even expect you to know a high level language before starting. I started with C before learning any assembler.
Art of Assembly seems to be about x86 but I guess when you know one assembler it's much easier to learn another one. I would give Nerdy Nights a shot but if you think it isn't good enough you could try that instead.
You will learn to program by finding projects that interest you and working on them. Which language isn't really important, just pick one that you are motivated enough too use.
Finding a good guide, like a book or tutorial can help, especially when trying to get started, and when programming you will always need reference tools, but ultimately what you need to do to learn is write code and run it to see what it does. It doesn't matter what books/tutorials you use. Don't expect to read 4 books and know how to program by the end.
Myself, I got started by typing in BASIC code listings from magazines, and then playing with the program until I understood what my changes were doing. Reading others' code helps too. You may want to look at (small) open source projects and follow along to see how they accomplish things.
In short: To learn to code you should write and test lots of code. The rest is secondary.
And for what it's worth, I sure as hell wouldn't go with Python to learn "programming logic", or any other highly-abstracted OO-oriented language (ex. Ruby, Go/golang, Node.js, JavaScript). I wouldn't recommend Perl either, mainly because of it's syntax (and note that I predominantly write stuff in Perl and have since the late 90s, so I feel I have a fair/neutral opinion there). You're going to learn the most bare-bones of "programming logic" with assembly, hands down. BASIC might work as a good stepping stone if needed, or maybe Lua (but some things may be lost with Lua as well).
My own opinion, and I won't be reply to this thread past this point just FYI: the problem with learning programming starting with an abstracted language like Python, Ruby, etc. is that you really aren't learning anything about "the computer" or what is actually going on under the hood. These languages are horrible for teaching you what the CPU is doing and understanding how to write some actual assembly instructions that run on the processor (which is what your main goal is, right?). So, to learn about the CPU and bare-bones programming using assembly, I strongly suggest simply learning assembly! :-) If you've never done any kind of programming before, like I said, BASIC might help you grasp some concepts that can then be applied to assembly much easier. The instant you get into the realm of OO, garbage collectors, and all this nonsensical unnecessary nonsense, you really have no idea what the processor is doing. In assembly, what you code is what the CPU does -- there is no intermediary "thing" between you and the processor.
koitsu wrote:
If you've never done any kind of programming before, like I said, BASIC might help you grasp some concepts that can then be applied to assembly much easier. The instant you get into the realm of OO, garbage collectors, and all this nonsensical unnecessary nonsense, you really have no idea what the processor is doing.
In other words,
the monster that BASIC has become. But even old-skool line-numbered BASIC still had what we now call a stop-the-world garbage collector for values of string variables. Remember
FRE(0)?
Nope, I don't. We had no such nonsense in Applesoft BASIC -- more specifically, nothing I wrote in Applesoft BASIC ever required me to use FRE. :-) And I don't think folks learning "basic programming model" should be focused on memory management -- that'd be a more advanced section, only after they understand loops, logic flow, expressions, and syntax.
I think most languages are okay to learn programming. Programming is about turning an idea into a series of mechanical steps that a computer can follow and execute. You can learn this skill in any programming language. What matters is that you can write code and see what it does.
I only mentioned BASIC because it was what I happened to learn with; it's now somewhat archaic and "Visual Basic" is something else entirely. Python is actually pretty good for getting up and running quickly, and being able to see an immediate response to the code you write.
If you want to learn how a particular type of computer works, that's a different goal than learning to program. It's necessary knowledge for some programming applications (especially ones using assembly language), but I certainly wouldn't consider it a necessity for learning how to program, unless you want to learn by doing one of these applications.
I would just suggest that you try a few different things out and see if any excite you. That's a far more important factor for learning than any of the other properties the various languages has.
Yeah if you have no interest in python other than as a stepping stone for learning 6502 you should probably skip directly to what interests you instead. The more prior knowledge you have about programming the easier it will be to learn a new language, but that goes for any language, and you got to start somewhere so you might as well start with what interests you.
I'm a hobby programmer (and still very much a newbie), that learned the basics of C in school and built upon that by myself with books, online tutorials and doing exercises in my free time. I can say that you will probably often read things without understanding much of it (Nerdy Nights is great but explains far from everything that is talked about in it), in those cases you should look up terms that puzzles you, read the troubling text over and over and just be persistent.
for what it is worth I am very very new to ASM and I don't know any other programming languages other than BASIC on ZX spectrums probably 25 years ago. I have just dived right into the Nerdy Nights tutorials and the Nintendo age programming resources (
http://www.nintendoage.com/forum/messag ... adid=33287) I am picking up quite a lot. I think jumping in at the deep end and fiddling with the code is a great way to learn. I have been doing things like setting myself a fairly simple goal of make 4 sprites move up the screen at the same time" then adding extra little criteria like "make 64 sprites in 3 colors move up the screen while pressing up" and working out how to achieve all the little incremental goals.
Its pretty fun!
Pokun wrote:
I can say that you will probably often read things without understanding much of it (Nerdy Nights is great but explains far from everything that is talked about in it), in those cases you should look up terms that puzzles you, read the troubling text over and over and just be persistent.
Exactly why I feel I'm missing something whenever I read something technical. I guess this is one way of doing it. The other way I have started to find extremely useful is to make notes of things I'm reading. Though it looks slow it helps a lot in retaining what I have learned.
Misunderstood words are one of the biggest barriers to understanding. They end up causing
bickering over definitions. Confucius say
knowing and using right names leads to successful dealing. So read with a
glossary handy.