don't click here

You all suck at programming

Discussion in 'Technical Discussion' started by jman2050, Apr 7, 2008.

Thread Status:
Not open for further replies.
  1. jman2050

    jman2050

    Teh Sonik Haker Tech Member
    634
    4
    18
    So after a long time silently perusing this forum for the duration of my stay here, one thing has been made painfully apparent: most of you couldn't code your way out of a paper bag if your life depended on it. This *should* be an obvious conclusion for anyone who is paying attention, but apparently any sort of minor ASM modification (or even hex edit) means that one has the knowledge necessary to do anything more with their hacks than copy off people that know what they're talking about, and are treated as a person with such knowledge by the community. As a result, your hacks suck. No two ways about it.

    Of course, if your goal is simply to use the tools available and channel your efforts into another skill, such as art, music, or level design, and you do a good job in this regard, then I don't really have anything to say to you. To everyone else who wants to make the next big Sonic hack with all sorts of ASM work and crap, listen up.

    Here's the basic attitude of your average ASM hacker: "I want to make a Sonic hack with all sorts of cool stuff, but I'm unsure about how to do it. Let me look at some of the guides available... *looks up guides* ah, this music hacking guide is good, and this forum post on how to add spindash to Sonic 1 is understandable enough. I'll just follow the directions and copy the code given and put it in my hack. Actually, I kind of want to add Knuckles to the game as well. *looks at guides some more* Wow, I couldn't find a single complete guide on how to add Knuckles. Well, I guess that idea is out the window..." Repeat for each random idea the hacker has thought of. After a while you may have a hack with a bunch of different ASM ideas implemented, maybe some buggy because you didn't follow the directions fully. Alas, you may think you have learned ASM and are on your way to making a good, well-modified ASM hack!

    THIS. IS. NOT. PROGRAMMING.

    I'm going to be completely frank. There's a good reason why not every random person is a programmer, and why programming in general is generally a highly-paid position in the professional field. This reason is simple. Programming is hard work. Very hard work. Not on a physical level of course, but the skill set and attitude required to be a successful programmer is not something most people have naturally, and isn't developed easily. People go to college for 4 years for this crap in some cases. What does this mean for you? This means that if you had no prior programming experience or skill, going into a Sonic forum and learning how to modify disassemblies using preexisting guides isn't going to do much of anything to give you those skills.

    Here are some words that I would use to describe programming: boring, tedious, annoying, frustrating, time-consuming, confidence-draining. You get the idea. Programming is very much a field where the ends justify the means: the resulting program may end up being extremely useful and/or entertaining, but the process of creating it may make you want to kill yourself at times. Obviously, that's hyperbole, but it's not a job for the impatient, the easily distracted, or those who hate boredom.

    But here's the thing: I'm all three of the above. But alas, I'm a programmer anyway! What's the secret?

    Herein lies the point of the topic: Programming is not a talent that you are born with. Like most any other skill, it is developed by repetition and practice. Why do I bring this out? Because the first step in developing a skill is evaluating yourself and your abilities and understanding what inherent personality traits and how much lack of knowledge inhibits you. People who do not do this or refuse to do this fall into one of two categories. 1) People who understand the mindlessly simple things but upon trying to develop the skill to a greater degree, balk at the necessary requirements and simply declare in their mind that they're too stupid or lazy to possibly understand. 2) People who incorrectly assume that they already know what they need to know and don't bother improving further because they think it isn't necessary. Do you want to make an awesome ASM hack? The first step would be to open a 68000 ASM reference file and memorize the opcodes, while maybe reading a few other reference works to understand what each opcode is supposed to do, right? WRONG. Contrary to what you may think, programming isn't a skill tied to the language or platform. You don't "learn" C++, "learn" 68k ASM, "learn" Visual Basic. You "learn" programming, the concepts needed for it, and apply what you learn to the language necessary. From there, as I like to say, once you've learned one language, you've learned them all. What's left to learn is basically related to a language/platform's limitations and its syntax.

    If you *truly* want to do programming work on a Sonic hack or rom hack in general, you should take the time to actually learn the skill. If you don't care, then you're probably ignoring this anyway. (I'll probably know who fits into what category by whoever replies to this topic having only read the title and not much more). Obviously, this may require different methods and more effort depending on the person. I'm not going to teach you how to program, as I honestly would be pretty bad at that anyway. There are many online resources that teach the basics of programming using a specific language, although many of them do a pretty bad job of it. The language doesn't matter much, the point is to learn the concepts. Do your own research. Talk to programmers you may know in real life. Different programmers have different methodologies, so you'd do well to experiment using the language(s) of your choice and find out what you are most proficient at. Only after you do this will the real potential in rom hacking be open to you. Also, as a final note, realize that programming isn't supposed to be *fun*. If you find perverse pleasure in tedious work and endless repetition, then you may enjoy it, but in general it's not an easy skill to learn or perform, even if you're proficient at it. I don't consider myself particularly proficient, but I have enough experience and practice that I generally know what exactly what I want to do, and can do it with reasonable success. I imagine others like Upthorn and Stealth feel the same way, though I can't know for sure.

    Anyway, I didn't make this topic to rant, and I doubt it'll do anything to really improve the quality of work on this and other forums as a whole, but if even I can convince a few promising talents to take the time to truly *develop* this skill, I will be completely satisfied.
     
  2. FraGag

    FraGag

    Tech Member
    So, I've actually read the whole thing. Yeah, I think I'm trying to do the best hack ever, but I do know programming, and I have experience.

    I've learned to program by myself 5 years ago (I was 12 then). I started with Visual Basic for Applications, which is embedded in Microsoft Office programs since 97. I used to record macros to then look at the generated code and see how it worked so I could do it myself. Then I discovered UserForms (basically windows), for which there was a visual editor. I learned most of the notions of programming through the manuals that came with Office (variables, loops, events, functions and subroutines). After a while, I got stole Visual Studio 6 on Kazaa (a virus in the uninstaller??) to start making Windows executables. Then I switched to Visual Basic 2005, with the free Express edition. Then I went to C++ with GCC and MinGW. Then I learned 68k ASM :P. I'm not a script kiddie, I know how to program, but learning how to program for the Mega Drive/Genesis takes time, even more when you work in a game you know nothing of.

    I believe I'm in that situation too :D.

    That depends on the language. High-level languages (VB, C#, C++) have common constructs and you can switch from one to another after learning the language, but lower-level languages (ASM) don't have them and are used in a completely different way (however switching between assembly languages is pretty much the same as switching between VB.NET and C#). Sure, knowing common programming concepts help a lot, but ASM is a lot more complex, even more when the code isn't commented :(.

    However, I understand how you feel. Programming is fun when it works, but sure is irritating when it doesn't work; it's just even more rewarding when you finally get it to work :D.
     
  3. jman2050

    jman2050

    Teh Sonik Haker Tech Member
    634
    4
    18
    Actually, I think 'complex' is the wrong word to describe ASM. I mean, from a completely objective viewpoint, the instruction set and syntax for most assembly languages are extremely simple and straightforward, and by nature of it being low-level allowing much more direct control of the hardware. The seeming complexity comes from the fact that programming in assembly doesn't give you the inherent 'tools' a high-level language would. You need a more fundamental understanding of how your target hardware works and also need to be able to break down what you want to do into even simpler steps, which is much harder to do then it sounds. Then there's also the fact that the syntax, while simpler, is usually also counter-intuitive. Most idiots could probably figure out what it means when you type "a=b". "move.w a,b"? Not so much.

    Anyway, the details are important, but note that the purpose of the topic isn't specifically a discussion on the details and concepts of programming, but an encouragement for those willing to learn these concepts on their own.
     
  4. nineko

    nineko

    I am the Holy Cat Tech Member
    6,308
    486
    63
    italy
    Completely agreed. I know Basic since I was 4, and when I had to attend a C++ class at the University I only had to learn some different syntax stuff. There's no point in learning a language, many people open their VB or VC++ environment and copy lines of codes from templates and the online help, and they're even likely to get working programs in this way, but that's not programming. You won't have the basis. This is something that's always understimate by a lot of people, you need to learn how to program, not how to use [insert language here]'s online help.
    I agree with every single line of your post, programming nowadays is taking a very bad direction. I even posted about that some months ago. The direction of my rant was slightly different, but I believe it's complementary.

    jman, I looked several times at what you've done (like your custom DAC thing), and let me take this chance to say I have a very high respect and consideration of you, as you've proven more than once to be a good programmer. And, what's important, you've proven to be a real programmer. People like you, Cinossu, JoseTB, Hayate, Nemesis, Puto, Stealth really deserve that green label near your names.

    I'd have more to say on this topic but I'm at work right now and I don't have enough time.
     
  5. Rika Chou

    Rika Chou

    Tech Member
    5,276
    169
    43
    I know I suck at programming. :P

    It's one of the many reasons I've stopped working on my hack. I simply don't have the time or patience (or brain capacity, probably) to learn how to program anything.
     
  6. I understand where your frustration comes from, but for some people, this is how they learn the way to do things. Now sadly, it is true that people will just say "this isn't documented? Ah well, not gonna bother doing it myself." but there are plenty of people who take this in another direction.

    The way I learn is this - I find a program or a skill I want to learn. I find some tutorials about this skill or program. Now after a few basic tutorials, I start to get curious and I want to explore my own ideas.

    BUT, there is one thing that any smart programmer should know - you shouldn't go through the hassle of doing certain pieces of work if it's already done and available. It's pointless and unwise to waste your time on something that's already been done. Just give credit where credit is due.

    So do you see where I'm coming from? Yes, it's very true that some people have a total lack of real skill, and just use others work to create their own. That sucks. But it's not something you should get too wrapped up in. If you do, and it catches on, we'll end up like the Zelda hacking community. And right now, they're in a bad place.

    Sites are attacking one another and nothing is really getting done on either side. There's been a divide created between the "1337" hackers and the lesser-skilled people who just want to see the cool things that come up. Sometimes they like to use the available resources to try their hand at "hacking" with tools that hackers have made available, and there's nothing wrong with that either. When someone uses another hacker's program to create something, we already know who to give credit to even if they don't mention it.

    anyway, put simply:

    Some people are n00bs, but some people are just trying to gain legitimate skills. Don't let it eat at you. The bad seeds will die off if that's really what they are.
     
  7. Upthorn

    Upthorn

    TAS Tech Member
    239
    0
    0
    Fixed.
     
  8. Tets

    Tets

    one rude dude Oldbie
    904
    70
    28
    I'll be the first to admit that I'm absolutely shit at programming, but a lot of what I've done hasn't been lifted from any guides, so I can't be doing too bad. That said, I really prefer to work on level design, but my first priority when getting into this was to add all the features to Sonic 2 that I ever wanted, and I feel that I've accomplished that. I doubt I'll even bother to do music ports and the like because that stuff is really over my head.
     
  9. Tweaker

    Tweaker

    Banned
    12,387
    2
    0
    Haha.. I know I can't program for shit—I've always been more of a reverse-engineer by nature. I see how things work, and I try and replicate or modify it to suit my needs in whatever way necessary. When it came to coding things from scratch, I could always work out the process, but when it came time to write something I'd always freeze. That's probably why I'm never going to write any Megadrive programs from scratch—I don't have the testicular fortitude for it. =P

    To be honest, the only reason I've even touched a programming language (and my first was still 68k) was because fuzzbuzz bugged me to do so. I didn't really "get it" until I had a summer without internet access. Within that time, I worked on a Sonic 3 hack where I had little online reference, so I started programming in machine code, starting to do some pretty neat things with it. As I got more comfortable with things, the concept of 68k ASM (and programming in general) became extremely simple to me. No longer was I stuck wondering "How do I do this?" because I understood the logical flow behind programming. I couldn't tell you the kind of feeling that was—yeah, programming is tedious and sometimes boring, but once you first understand things, you're a lot more eager to try and push your skills further than you ever thought they could go before.

    My programming abilities are usually limited to analyzation, understanding, and modification. That's why I work with the Sonic engine—it's well documented enough to be able to do what I want to do, especially with the modular nature of the SST and other related aspects of the engine. Generally speaking, it doesn't take a huge amount of programming experience to do some neat things, especially when it comes to Sonic hacking, but the more the merrier, I say.

    My concern is, rather, how you consider those who excel in manipulating data, rather than code. For example, since my main specialty is and always has been editing music in the SMPS format, do I "suck" too because my programming skill isn't superb? I think there's many factors to consider in a situation like this when it comes to judging a person's competency.
     
  10. Lostgame

    Lostgame

    producer/turnablist. homebrew dev. cosplayer. Oldbie
    4,134
    58
    28
    Toronto, ON
    The O.I.C.
    It's ironic, because I program professionally in C/C++/C#/VB/Java, but I can't program in ASM worth shit because I never bothered to learn. I'm like the opposite of half this forum.
     
  11. Hayate

    Hayate

    Tech Member
    I contradict the title of this topic.

    Yeah, so I use guides when they exist and ask people when I can, but otherwise I damn well do it myself. I believe there's no point re-doing something if someone else has already done it in a way you can use.
     
  12. nineko

    nineko

    I am the Holy Cat Tech Member
    6,308
    486
    63
    italy
    This sums it up pretty well. In my hack, I used a guide and Puto's help to add the Spin Dash, since there was no point into redoing that from scratch; maybe I would have been able to, maybe I wouldn't, but that's not relevant. For the music, instead, as there was no public guide about using a different song in each act, I had to think about it, and so I did.
    I don't like to rely on other people's code if I can avoid that, but it can still be good under certain circumstances. And this is why in xm3smps there are credits for Puto, Solaris, Tweaker, and Wiz.

    You're not alone. C, C++, QB, VB, Pascal here. I'm not that bad at x86 asm btw, so I can understand some of 68k asm.
     
  13. Quickman

    Quickman

    be attitude for gains Tech Member
    5,595
    18
    18
    :x
    omg porjcet
    I think the problem isn't that there are guides, but that the guides assume you know too little and end up at the "copy this code to this point in the disassembly" level, which is really no better than the old graphics hacking techniques (decompress data from address, edit, compress, paste back into ROM). The best guides are the ones which say "here's how it works in broad detail giving pointers into the code to illustrate and allow people to read" and leaving it as an exercise to the reader to come up with different ways of doing it.

    Given two guides which explain the drawing code for S2 and S3K in this fashion I'm fairly certain I'd be able to make some headway towards recreating the S3K drawing code in S2 (which is something I really want to do - the problem is I can't because I can't read the code so well due to it being so tightly optimised and using a lot of memory addresses nobody has identified).
     
  14. muteKi

    muteKi

    Fuck it Member
    7,851
    131
    43
    Well, in any case there's a reason that my title isn't in green.
     
  15. Tweaker

    Tweaker

    Banned
    12,387
    2
    0
    You know, actually, I'm seeing a tend here: Nobody wants to take the initiative. It's all about waiting for a "bigwig" to do a majority of the work, and then making rather uneducated edits based on that work. Why can't people, like... do things themselves?

    Case in point, Sonic for MegaCD. There's a huge fight over why "reinventing the wheel" is unnecessary and that therefore Stealth must release his work. I'm sorry, but... what? What the hell is stopping you from going out and doing the same damn thing? The documents are there, the utilities are there, and there is nothing that Stealth used that anyone else couldn't find and use themselves!

    Is it due to intimidation? Probably. But don't ever "expect" things to get done by other people. There is no wheel to reinvent—the method is, and always was, there. But if you want to make a version of Sonic for MegaCD that anyone can edit as they please, continuing this trend further, then you can be their savior, not people like Stealth and co who actually give enough of a damn to do their own research, testing, and come out with a quality product.
     
  16. Kind of like what Quickman said, I find lists of pointers to be VERY useful. Knowing what does what seems to be the most important thing in our case when trying to understand the assembly. This is why I'm REALLY thankful for those who comment the dissasemblies. Maybe I wouldn't be TOTALLY lost without them, but I'd certainly have a much tougher time doing anything. Knowing what object number corresponds to which badnik or level object really makes all the difference. Once you know the objects, just observing how they interact in the code is really enough to try and start understand it all.
     
  17. Qjimbo

    Qjimbo

    Your friendly neighbourhood lemming. Oldbie
    I believe the reason behind this is that people feel that if they don't use Assembly in their hacks, they won't be treated with much respect, even if they don't have a peticular interest in learning ASM. So they take the easy option in order to furfill this demand.

    However, those things alone without any ASM often tend to recieve critisism, though there is a definate lack of good level edits. People have almost come to expect some level of ASM usage now though.

    I don't see what is peticularly wrong with this for one simple reason: it's how a lot of people learn. I mean in my guides for example I explain how EVERYTHING happens, I don't just do all the legwork. There are other guides that are basically copypasta guides, and I agree those can be percieved as a problem.
    I do think it's rather patronising to assume that when people do this they consider themselves programmers. I think most people know they don't really understand the ASM code they've just pasted or whatever.


    This is an interesting point though. What is programming? I mean if you look at Basic, to print something to the screen, all you have to use is "PRINT". Could that be considered cheating because the person has not written their own PRINT command?

    It wouldn't be unreasonable to suggest that copy and pasting specific features into Sonic was just very high level (not high as in skill) programming. Certainly not ASM programming though.

    I disagree, in some cases ASM can be used as a stepping stone to learning how to program.

    How depressing is that! I personally find whipping together a program quite fun, with it's problem solving. Sure you sometimes hit brick walls but just because YOU feel those feelings about it doesn't mean everyone else does.

    Hardly a secret.

    You do have a valid point with this. Programming is a lot more than just the codes and commands. It is a methology.

    SONIC SEZ: Kids there's nothing more cool than putting ASM in a Sonic hack, but when someone tries to learn ASM without first learning the concepts of programming that's no guuud!

    Seems completely justified to me. Interesting post, nice to see you care to be honest!
     
  18. drx

    drx

    mfw Researcher
    2,254
    350
    63
    :rolleyes:
    I'm glad to have brought up this topic on IRC yesterday.

    I agree with most of what you say, except this:

    You don't get born with programming skills, yes. To be a good programmer can take several years of experience (whether it be learning algorithms, discovering how computing/programming works, etc.)

    However, not everyone can be a programmer. To be a programmer, one must have a certain set of abilities that you can only be born with. So yes, it's also a gift. Not many people can wake up one day, say 'Hey, I want to be a programmer' and become one.

    Programmers need to have the curiosity, the patience, the wits, the logical way of thinking. Most people can tell OR from XOR, in regular English sentences. Most people have sucky mathematical skills, and as a result, suck at programming.

    How to tell a good programmer? Easy. Good programmers tend to enjoy programming, despite all the hard work it requires. You'll always see a good programmer tinker with code, hardware, new things, functions, etc. in his free time. You'll never see a good programmer count seconds until the end of work, waiting for the magic hour to happen (unless he's finished already, or has a crappy job, but that's another thing). Good programmers generally (not always) have started their journeys with programming at an early age - 10, 15, 20 (it's all relatively early). Good programmers are akin to good mathematicians/logicians -- if you ask them an interesting question, one that will spark their curiosity, you will see them wonder for hours until they find a solution.

    What about the rest?

    Well, that's where the very important yet often overlooked distinction between the words 'programmer' and 'coder' kick in. It doesn't take a good programmer to code. Even a fucking chimpanzee with a keyboard could code. That's what your average code specialist or junior programmer does -- punch the keyboard like mad to produce that 100000 lines a day. Is there any thinking involved in that? Fuck no.

    It's the programmers who do the actual thinking. It's a very important distinction to remember.

    Of course, the code monkeys will get very defensive when you call them code monkeys, but that's the way it is, and don't let anyone tell you otherwise ;)

    This is an interesting topic indeed.
     
  19. JoseTB

    JoseTB

    Tech Member
    716
    59
    28
    While I do agree with most of what has been said in this topic, I don't see what's the point on getting mad about other people's effort. Sorry but as much as some may hate it this is not about recognition. Everyone can come up with an assembly hack fully done by copy pasting from tutorials and still have nearly no idea about programming - so what? If anything, this could motivate the author to actually learn to do something real. But getting mad about it? Why?

    Regarding the wheel being reinvented all the time - I'd love to have 48 hours each day to work and finish whatever I want, but the truth is that real life + real job, etc is consuming most of my time, in my case. Several unfinished/frozen projects know this quite well...
     
  20. drx

    drx

    mfw Researcher
    2,254
    350
    63
    :rolleyes:
    A bit on topic, a bit not -- a bit of personal pet peeve is when people can't tell O(n log n) algorithms from O(2^n)... Or don't know SHIT about programming (or algorithms) and write commercial software. I'm tired of people writing really crappy software only because the processing power is huge on personal computers, resulting in lots of bloat. This wouldn't slide 20 years ago.

    Hopefully this will change soon, as I think we are slowly approaching a limit in CPU power (as evidenced by CPU manufacturers going for more cores rather than bigger clocks speeds / smaller chips / better code).
     
Thread Status:
Not open for further replies.