Ok people... I didn't want to... but damn, now I must...
* Earth-Fury inhales deeply
I've been in the WC3 community since right around the time of RoC's release. In that time, I've used both the GUI and the JASS programming language extensively. (Years for each.) In all of that time, and throgh learning things beyond the scope of WC3, but applicable to it, I have this to say on the whole "GUI VS JASS" debate:
- Anyone who claims the GUI is better suited to any task is wrong, unless they are too mentally deficient to learn to program well. (If that is the case, they shouldn't even be using the GUI. They should be playing with coloured blocks like all special people.)
- Anyone who claims the GUI is techincally equal or superior to JASS ("GUI can do everything JASS can" / "A clever GUI user can do everything a JASS user can") is wrong.
- Those who believe the main reason to use JASS is because of BJ functions (or the lack theirof) are missinformed. (It is a reason, and in the end, a rather small one.)
- Those who believe the main reason to use JASS is because of locals are also missinformed. (It is much more complex than that.)
- Those who believe the main reason to use JASS is basically any one specific thing are wrong.
- Those who believe the GUI is completely useless and unable to be used to create something of worth are wrong
- Most people who get in to WC3 modding and get really good at it eventually learn to use JASS, and eventually agree with all us "GUI haters".
- In the end, the language you use to script your map does not matter as much as creating a fun an unique map.
- And finally, 99.99% of the WC3 community is incapable of creating fun and unique maps, using either the GUI or JASS.
Why JASS is better
Note: This list is far from complete
- The GUI is based around Triggers. While triggers also make up a large part of the logic behind JASS code, triggers in JASS are much more a feature than a design paradigm. Basing a language around event-based objects is not so bad, however it lacks the flexability of a function-based language. It should also be noted that the GUI is a horrible implimentation of an event-based language.
- The GUI uses many functions which serve little purpose other than simplifying the interface by compressing a lot of logic in to a single "action". When coding in pure JASS, the responsability of compressing logic falls mostly on the coder, instead of the system designer. That adds additional flexability, at the cost of some ease of use.
- The GUI uses many extra function calls which serve no purpose at all. (Namely, wraper functions which simply call a native with a few paramiters changed around, or with the exact same paramiters. Function calls in JASS are slow, and thus such useless functions do have a mesurable effect.)
- The GUI, when writing code of its own for things such as conditionals (If-Then-Else) writes horrible code. Not simply from the perspective of editing the code it writes, but from the perspective of speed. It again uses many function calls which are not needed, as well as other stupid, stupid things. (If-Not Condition-Return False-Else-Return True, such a thing can be compacted down to Return Condition)
- The GUI's abstractness from the underlying JASS language can cause confusion and unseeable errors. (An example of which is the lact of distinction between a Rect and a Region.)
- Some functions from blizzard.j (The script file from where most of the functions the GUI uses come from.) are coded poorly and contain errors. (Destroying a boolexpr is, within JASS, an error. Condition() returns the same boolexpr for the same function input, thus it does not create a new handle object on every call with the same input. That means destroying a boolexpr can have unforeseen consiquences.)
- When a user has a decent and equal level of experience in both the GUI and in JASS, most and eventually all things become easyer to do in raw JASS code.
- The inflexability of the GUIs basic design means that some things which are often simple when coding in raw JASS, are insane to impliment or completely impossible to do in the GUI.
This goes outside of the list as it is so important: The main and biggest reason why JASS is better is because of the flexability it offers. You are able to effectively reuse code, create fast and efficient code that, in a few dozen lines, does what it could take 20 long GUI triggers to do. The general way in which you program when you begin to get good at programming changes, and things become much easyer, simpler, and generally better. You begin using more complex data structures as you understand them. You begin using systems which are more complex to write, but much simpler to use. You eventually far surpass the limits of the GUI, and do things you probobly didn't think possible before. (And yes, it takes time and effort, like all good things.) (Let it also be noted that no, GUI users can not evolve to that stage of programming simply because of the limits the GUI enviroment places on them. Period.)
Why People Who Say the GUI is Easyer to Learn are Wrong
The title of this section is a bit misleading. The GUI is easyer to learn to use. And using it effectively and easily requires no third party tools. However, most people who say that the GUI is easyer to learn also attempt to say that JASS is much harder to learn. A long time ago, that was true. Not anymore.
In the modern WC3 modding community, there is a massive amount of documentation on the JASS language. There are also tools such as the JASS NewGen pack which make coding in JASS easyer and faster. Such tools also often provide refrences, such as the function finder and auto-complete features found in NewGen.
However, back in the day there was much less documentation, fewer tutorials, and less powerful and verbose tools. The diffrence in the learning curve of the GUI and JASS was much wider a gap. However, it should also be noted that most users of the GUI at the time did not know about things like memory leaks, causing maps to be generally slower and less stable. (There was also no method of adding single lines of JASS script to a GUI trigger. It was one, or the other.)
In summation, GUI is easyer to learn than JASS. It will always be so by the very design of GUI: lists of possibilitys presented to you at every point along the line. However, JASS is rather easy to learn these days. There are also many tools such as the JASS NewGen pack which aid greatly in learning and using the JASS language.
Why People Who Say JASS is Not Worth Learning are Wrong
In this modern world, computers are becoming bigger and bigger parts of our lives. Learning to use common programs such as a web browser, a file manager (Windows Explorer), and a word processor are becoming necessities in this world. Learning to use the GUI does give some usable skills which can be applied elsewhere; however learning and using JASS gives you many more useful skills. Learning to program may seem like a useless effort to some of you, but it is not. It is an awesome way to "break in" to learning a lot more about not just how to use computers, but also how to simplify or change the basic way they act.
Learning JASS gives you a much clearer understaning of how most modern programming languages work. Learning JASS also gives you much better actual experience in programming than the GUI does. JASS is also a relitively simple language to learn, while still being based around the same constructs and concepts most modern languages are. That makes JASS a wonderful language to get started with.
The End
If I think of anything else to say,
I will edit this post.
Edit History:
- Minor changes and new section, "Why People Who Say JASS is Not Worth Learning are Wrong"