Author Topic: If I wanted to learn code?  (Read 14991 times)

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #40 on: January 14, 2014, 05:52:26 AM »
C provides ways to do object-oriented programming. I've seen a lot of people make the assumption that some languages are "procedural languages" while others are "object-oriented languages", but that's a misrepresentation of what a paradigm is. (-:

Although C doesn't implement the popular "class" approach, you can still create and manipulate objects in memory.
Technically speaking, the ability to manipulate object-like data like C structs only make a language "object based" or really "supports objects."  "Object oriented" normally refers to languages that support some means of class-like inheritance and associative methods or message passing.  And to be honest I still consider ObjC to be more in keeping with the original spirit of object-oriented programming than C++ (and really the only reason that debate died out is C++ became the VHS to ObjC's Betamax).

You can recreate the paradigm in C, just like you can recreate anything in assembly, but it is fair to say some languages are designed to directly support certain paradigms.  There's no question that Scheme and COBOL and RPG support three different programming paradigms.  C doesn't really "support" any one programming paradigm strongly in my opinion, but it tends to be considered procedural by default, because it doesn't directly implement the restrictions that functional programming demands.  Modern CPUs are basically imperative systems intrinsically (except for that crazy LISP system, assuming anyone still runs it).

GuyPerfect

  • Mary Poppins
  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 1,740
Re: If I wanted to learn code?
« Reply #41 on: January 14, 2014, 05:29:58 PM »
"Object oriented" normally refers to languages that support some means of class-like inheritance and associative methods or message passing.

That's the part I take issue with. The "class" approach so nicely couples the ideas of objects and the code that processes them, that people started to talk about the object-oriented technique as though the class is the only context in which it's even possible. And that's certainly not the case.

Back in the days when Microsoft was trying to make ActiveX a thing, they introduced what they (true to form) called the bland and overly-technical name of Component Object Model, which was only intended to be used by languages (primarily C++) that intrinsically support object↔code mechanisms. DirectX is built on COM, and I've had the pleasure of working with DirectX through C in one project. I may have been a pioneer in the field, since using DirectX in C is something that, as far as Google would have me believe, is not possible. (-:

What's the point? Well, the way the COM actually works, and what code gets produced by C++ compilers, is that whenever you say "interface->method(args)", it winds up becoming "method(interface, args)". It's exactly the same thing as passing a struct reference in vanilla C, which is exactly how I implemented those interfaces in C.

DirectX is decidedly object-oriented, and you can do it in C. C doesn't support interfaces or classes, yet it can still use DirectX. Therefore, object-oriented programming isn't about interfaces and classes. (-:

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #42 on: January 14, 2014, 06:02:05 PM »
That's the part I take issue with. The "class" approach so nicely couples the ideas of objects and the code that processes them, that people started to talk about the object-oriented technique as though the class is the only context in which it's even possible. And that's certainly not the case.
Well, that's certainly true, although what people call a "class" isn't uniformly the same thing either.  The class terminology is so ingrained that there's a tendency to refer to any new object implementation as classes simply for conformity, which blurs this distinction quite a bit.

Quote
DirectX is decidedly object-oriented, and you can do it in C. C doesn't support interfaces or classes, yet it can still use DirectX. Therefore, object-oriented programming isn't about interfaces and classes. (-:
Waitaminute.  That doesn't logically follow to me.  Being able to *call* libraries that implement object-oriented programming methodologies from a language doesn't seem to me to be sufficient to describe the language itself as supporting object oriented programming, because the object-oriented stuff isn't being constructed strictly speaking with the language itself.  There's a difference between generating object-oriented behavior with code, and the language itself directly supporting such behaviors. 

I do agree in this sense.  Can you, the programmer, use object-oriented techniques with C?  Absolutely, that's not in dispute I don't think.  So if you mean object oriented programming doesn't absolutely require using an object oriented language, I think that's true.  But is C itself an object-oriented language, I'd say no, because the language itself doesn't directly support the primitives necessary to support that style of programming.  You can implement them yourself in your code, or interface to external libraries or systems that themselves support it, but that's not the same thing as the language itself supporting you. 

ObjC is definitely object-oriented, and its effectively written entirely in C.  Moreover, the language itself is a strict extension of vanilla C.  So of course anyone starting from vanilla C could implement and then use all the object oriented syntax of ObjC.  But I don't consider that a case of C supporting object oriented programming, I consider that a case of C being capable of implementing almost anything at a low level.

ROBOKiTTY

  • Boss
  • ****
  • Posts: 183
  • KiTTYRiffic
    • KiTTYLand
Re: If I wanted to learn code?
« Reply #43 on: January 15, 2014, 02:15:04 AM »
Also, not to get too deep into the delarative/imperative debate and why Lisp is the greatest language in the world, but anyone who thinks this is the perfectly normal way to create a list:

Is batsh*t insane.  My final project in advanced programming in college was an expert reasoner in LISP, and today I would sooner set my own feet on fire than write anything more sophisticated than Hello World in that lunatic language or any of its offspring.  Inflicting that on beginners is a crime against humanity.

I used to think that way about Lisp, too, and then I had a mentor who truly opened my eyes to the wonders of Lisp. It was a wonder-filled moment of awe and feelings of oneness with the universe. And why would you build a list like that and not defining a recursive function to tell the list to build itself? Using that as an example of ugly Lisp code would be like me saying the following is characteristic of C:

Code: [Select]
/* build an array of size 10 and set every element to 1 */
int *array = (int *) malloc(10 * sizeof(int));
/* OMG, look at how ugly C is!! O.O */
array ? array[0]
= array[1]
= array[2]
= array[3]
= array[4]
= array[5]
= array[6]
= array[7]
= array[8]
= array[9]
= 1
: (void) 0;
free(array);

To convert HtDP to C, you only need to add an extra chapter or two to talk about pointers and their management. GCC provides a lot of support for functional programming, and with nested functions, lambdas are just one macro away.

And on OOP, Lua is an excellent example of a non-object-oriented language that is nevertheless incredibly easy to do OOP with.
« Last Edit: January 15, 2014, 02:54:57 AM by ROBOKiTTY »
Have you played with a KiTTY today?

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #44 on: January 15, 2014, 05:31:17 AM »
I used to think that way about Lisp, too, and then I had a mentor who truly opened my eyes to the wonders of Lisp. It was a wonder-filled moment of awe and feelings of oneness with the universe.
It is wonderful, within its own wheelhouse.  What it does well it does spectacularly well.  But it doesn't do everything well, and in my opinion it does one thing critically bad.  People are intrinsically linear thinkers.  They can be trained to be recursize thinkers, but that takes time, skill, and lots of practice.  All LISP adherents have that "eureka" moment when they seem to suddenly see the language in a different way that makes it seem suddenly more powerful.  I've been there, and I believe that moment is not a moment of enlightenment or realization or recognition.  Its the moment when all the practice in juggling suddenly starts paying off and you can juggle.  You weren't doing anything differently yesterday, but your brain's been rewired enough to overcome the primary barriers to performing the task.  It happens to people when they learn to drive as well.  At some point the brain gets rewired to intuitively see the code/data model of LISP and the eval/recursive/functional algorithms comfortably on sight.  It can be very seductive.

But not everyone tries to reach that point, and not everyone who tries gets there.  And that creates a problem for LISP that in my opinion is ultimately insurmountable.  LISP generates unreadable code.  Its not unreadable in the sense that its messy or obfuscated.  Its that its function-follows-form code expresses itself in a way that most other people can't understand.  Its Perl written in Minoan Linear B by dolphins.  That impenetrability means LISP might be great for LISP programmers, but it will never be worth a damn for most programmers as a whole.  And if you can't share your work, your work will ultimately be strictly limited.

And in terms of teaching programming, in my opinion it makes no sense to force people to overcome the sizeable learning curve that LISP and Scheme have in an *introductory* course.  That's like forcing first year students to culinary school to learn quantum physics before they are allowed to turn on a stove.

Quote
And why would you build a list like that and not defining a recursive function to tell the list to build itself?
Don't ask me: ask the author of HtDP.  Absolutely no one *ever* uses the array example you posted in any C class, ever, not even as a joke.  I'm assuming you made it up just now.  I just quoted HtDP.  Although the text (significantly) later mentions the list operator, there exists no good reason to teach students car/cons semantics constantly *except* that its critical to Scheme/LISP - but its inconsequential of a concept ("everything is a linked list") to anyone learning just about any other language outside the LISP sphere.  That makes the statement that HtDP trivial to convert into any language very difficult to concur with.  A lot of what it teaches you would not need to or even want to teach to people learning C, and vice versa.

One really critical but often overlooked difference between languages like C and LISP-like languages is that languages like C go out of their way to emphasize the distinction between code (functions) and data.  LISP explicitly, and by design, attempts to collapse that distinction.  And that becoming comfortable with that collapse is critical, I believe, to genuinely understanding LISP.  But that makes the frame of mind necessary to "think in LISP" fundamentally mutually exclusive to the frame of mind necessary to "think in C++" say.  Any programming course that could easily flip between the two languages would be, in my opinion, automatically a bad one, or a very superficial one.

GuyPerfect

  • Mary Poppins
  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 1,740
Re: If I wanted to learn code?
« Reply #45 on: January 15, 2014, 05:59:29 AM »
One really critical but often overlooked difference between languages like C and LISP-like languages is that languages like C go out of their way to emphasize the distinction between code (functions) and data.  LISP explicitly, and by design, attempts to collapse that distinction.  And that becoming comfortable with that collapse is critical, I believe, to genuinely understanding LISP.

Is this along the same lines as a JavaScript variable's value being a function in and of itself? While I know the language supports that, and you cay say things like "object.method = somefunc;" to assign code as though it were data, it makes a part of me feel dirty. I keep thinking about what ultimately passes through the CPU, and it makes me huddle in the corner and rock back and forth.

ROBOKiTTY

  • Boss
  • ****
  • Posts: 183
  • KiTTYRiffic
    • KiTTYLand
Re: If I wanted to learn code?
« Reply #46 on: January 15, 2014, 06:34:20 AM »
@Arcana

I agree with parts of what you said, but I think your opinion of Lisp is still exaggeratedly and unreasonably low. I will argue though that people are naturally quite good at recursive thinking, at least as good as they are at other forms of iterative thinking. For example, a lot of common problem solving skills and algorithms are naturally recursive -- binary search, data structures, etc. On the other hand, off-by-one errors in loop conditions are notoriously common, and it can take a while for people to internalize the logic behind terminating conditions.

@GuyPerfect

Why is that so bad? First-class functions are a great time saver, and one only needs to look at anonymous inner classes in Java to appreciate them. In most high-level languages, everything that isn't a primitive value type is just a pointer. It's not as though function bodies themselves get copied into data by value.
Have you played with a KiTTY today?

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #47 on: January 15, 2014, 09:43:02 AM »
Is this along the same lines as a JavaScript variable's value being a function in and of itself? While I know the language supports that, and you cay say things like "object.method = somefunc;" to assign code as though it were data, it makes a part of me feel dirty. I keep thinking about what ultimately passes through the CPU, and it makes me huddle in the corner and rock back and forth.
I think the Javascript case is more like message passing, or function pointer passing, or vector dispatch.  Lisp is a bit different.  It would take a while to explain, and I'm not the best at explaining, but I can point you to an article that might help, focused specifically on two critical aspects of LISP's self-modifying code capabilities: macros and extensible (and uniform) syntax.

Macros allow programmers to extend the LISP language syntax to make programs more efficient.  Uniform syntax is why it works in LISP in ways that cause other language's macro preprocessors to gag.

Try this: http://lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html

LISP "self-modifying code" is *not* like you think about self-modifying code or data execution in other languages.  Its more correct to say that LISP itself is primarily about list processing as its core syntax, and that therefore *all* LISP programs are really semantic processing of data.

FatherXmas

  • Elite Boss
  • *****
  • Posts: 1,646
  • You think the holidays are bad for you ...
Re: If I wanted to learn code?
« Reply #48 on: January 15, 2014, 09:45:39 AM »
Some are forgetting that in it's earliest days, C++ was a pre-processor that converted C++ to C so existing compiler tool chains of your choice could be used.  The output C was ... unique to look at since it was machine generated.  Just like before that I once used a C "compiler" that generated ASM source, again assuming you already had an assembler (plus this was in the days of 64KB and floppy only systems so I'm dating myself).
Tempus unum hominem manet

Twitter - AtomicSamuraiRobot@NukeSamuraiBot

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #49 on: January 15, 2014, 10:06:31 AM »
@Arcana

I agree with parts of what you said, but I think your opinion of Lisp is still exaggeratedly and unreasonably low.

I actually think LISP as a language is probably the most powerful language in terms of algorithmic expressiveness.  I'm not sure how you could possibly characterize my opinion of LISP as unreasonably low.  My criticism of the language centers on the meatbags that have to learn and master it.  In spite of every article I've written that talks about how easy it is to learn LISP, not only has that been completely contrary to my direct experience, its also been contrary to the direct experience of Planet Earth.  *Most* people who approach the language point to its difficulty in learning.  Why that's true is often debated, whether its due to poor teaching environments or pre-exposure to other languages or programmatic cultural skews, but that's irrelevant.  The primary problem with LISP is that you're unlikely to find yourself in an environment that encourages its use, and even less likely to convert a pre-existing environment to it, because its hard to teach and hard to learn purely on a statistical basis.

Its other limitations are acknowledged even by the strongest LISP evangelists: as powerful as the language is, its unlikely to outperform (in terms of programming speed) languages optimized for specific domains with extensive support libraries for same: starting from scratch you might be able to write a complex program faster in LISP than I can in python, say, starting from zero.  But if I'm not starting from zero: if we're writing glue scripts for cloud provisioning automation and I already have most of the heavy lifting done with standard libraries, you're going to lose.  That's not a knock on LISP itself, but rather a recognition that language is only part of the equation, and no amount of language superiority can overcome a sufficient advantage in other areas.  Also, if you have to integrate with other programs on a closely coupled level, using languages similar to the target environment also tend to have strong advantages LISP can't always overcome.  You're not going to write kernel modules for linux in anything but C for that reason no matter how good LISP is.

Quote
I will argue though that people are naturally quite good at recursive thinking, at least as good as they are at other forms of iterative thinking. For example, a lot of common problem solving skills and algorithms are naturally recursive -- binary search, data structures, etc. On the other hand, off-by-one errors in loop conditions are notoriously common, and it can take a while for people to internalize the logic behind terminating conditions.
Honestly, that's a bet I would take on any terms.  The number of people I've met, programmers and otherwise, that are naturally good recursive thinkers is sufficiently low that to a first order approximation the number is zero.  If people were naturally better at recursion than iteration, functional programming classes wouldn't spend so much time teaching recursion while iterative language classes spend almost no time explaining how iteration works beyond teaching the syntax to implement it.  Nobody spends days of class time teaching students to become familiar with step by step iteration.

Ironwolf

  • Stubborn as a
  • Elite Boss
  • *****
  • Posts: 1,503
Re: If I wanted to learn code?
« Reply #50 on: January 15, 2014, 03:29:39 PM »
Following this thread makes me absolutely sure there are aliens among us.

http://www.ancient-code.com/aliens-among-us/

GuyPerfect

  • Mary Poppins
  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 1,740
Re: If I wanted to learn code?
« Reply #51 on: January 15, 2014, 03:46:40 PM »
Why is that so bad? First-class functions are a great time saver, and one only needs to look at anonymous inner classes in Java to appreciate them. In most high-level languages, everything that isn't a primitive value type is just a pointer. It's not as though function bodies themselves get copied into data by value.

The more abstract a language is, the more complex it necessarily becomes to compile/execute/interpret code written in that language. The CPU/core only performs one simple operation at a time, and even something as simple as variable-sized array allocation is quite involved at that level.

I'm the kind of guy who rounds up to the next nearest multiple of 4 by saying "x + 3 & -4" (-: Throw something like loose types or garbage collection at me and I go into anaphylactic shock.

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #52 on: January 15, 2014, 06:36:34 PM »
The more abstract a language is, the more complex it necessarily becomes to compile/execute/interpret code written in that language. The CPU/core only performs one simple operation at a time, and even something as simple as variable-sized array allocation is quite involved at that level.

I'm the kind of guy who rounds up to the next nearest multiple of 4 by saying "x + 3 & -4" (-: Throw something like loose types or garbage collection at me and I go into anaphylactic shock.
LISP doesn't have that kind of abstractness.  Because everything is a prefix expression, there's no way to mangle LISP code in a way that makes it difficult to compile or interpret.  At least for compilers and interpreters.  Human beings are another story: because LISP supports and encourages meta-syntax, LISP code tends to be abstract in a very specific way.  In C, you tend to read source code as a bunch of functions written in C and then blocks of code also written in C that invoke those functions.  But in LISP you tend to read source code as a bunch of syntax-defining expressions and then blocks of code written in that defined syntax.  So LISP tends to be meta: as more than one person has put it, C source is the code that does the thing, but LISP code tends to be the code that writes the code that does the thing.

Neither the compilers nor the interpreters have any problem with that, because macro resolution is itself performed strictly through the rules of LISP expression evaluation.  Now, there are complexities to the runtime environment of some versions of LISP such as the allocator and GC.  But those aren't things the interpreter itself has to worry about.  The compiler sometimes does, but in exchange for having to worry about those things there are things LISP compilers don't have to worry about, like side effects or undefined behaviors.  They don't exist in LISP, which opens the door to optimizations that are much trickier or dangerous in other languages (including C).

Which is really what I ultimately don't like about LISP: its syntactic neutrality.  Because every LISP program tends to implement meta-syntax, it causes long-term headaches when it comes to readability and reusability.  I haven't done a major (>5000 lines) project in C in over a decade.  But when I had questions about ZFS, I went to the source code.  I first learned C in 1985, and I can still read it today.  What's more, I can read virtually *everyone's* C.  True, some C is prettier, some C is messier, some C is stone-cold stupid.  But its all dialects of C I can understand.  The same is true for Fortran, COBOL, RPG, Python, even shell script.  Unless its an entry into the OCCC, chances are pretty good that at a glance I can tell what the code does.  Learn once, transparent forever.

That's not true with LISP.  No matter how much LISP I wrote, it did not make me particularly good at reading other people's LISP code, because of meta-syntax.  In fact, I had trouble reading my own code after enough time had passed that I no longer had the same mindset and way of doing things.  In C, style is style.  In LISP, style is substance.  To read someone's code, you have to absorb the mindset of the person who wrote it, so that their metacode becomes transparent.  And you have to do this over and over and over again.

Its that kind of abstraction that ultimately just doesn't work for me.  I need a language I can pick up, work on, put down, come back whenever, steal code from different places, work some more, put down, forget about, and then return later as if it was yesterday.  For me, LISP is not that language.  LISP itself at its core is easy to remember and easy to read, but no one programs in LISP.  They program in their own JohnDoe language that LISP compiles for them.  And I don't have enough free space in my brain to keep a functioning LISP compiler in there for when I might need it. 

Joshex

  • [citation needed]
  • Elite Boss
  • *****
  • Posts: 1,027
    • my talk page
Re: If I wanted to learn code?
« Reply #53 on: January 16, 2014, 01:11:01 AM »
I can teach you to program, but my regimen isn't for the faint of heart. (-:

What I do is start with the basics of how a computer architecture works (in very simple terms), then proceed to the best beginner language I've ever come across... QBasic. From there, fundamental concepts are taught, then further academics proceed to C (not C++ or C#). And then, after C concepts are covered, I delve into assembly and describe the low-level functions of the machine code and CPU operations.

I very strongly believe that you can't be a good programmer without understanding what your code ultimately becomes by the time the computer gets to it. Not that you can't use abstract languages like Java or .NET, but I've seen way too many programs that were written poorly for the fact that the programmer didn't know any better. I want to make the world a better place by laying everything out in the open!

I just passed a college course on computer system arch with an 'A'. had to learn alot, it was a bit mind numbing but already I have applied a few things I learned to my coding techniques in python.
There is always another way. But it might not work exactly like you may desire.

A wise old rabbit once told me "Never give-up!, Trust your instincts!" granted the advice at the time led me on a tripped-out voyage out of an asteroid belt, but hey it was more impressive than a bunch of rocks and space monkies.

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #54 on: January 16, 2014, 01:19:55 AM »
I just passed a college course on computer system arch with an 'A'. had to learn alot, it was a bit mind numbing but already I have applied a few things I learned to my coding techniques in python.
When I was in college, circa 1,000,000 BC, "Computer System Architecture" was usually "evolution of CPUs."  I think its good to know for C programmers in the sense that when you're programming in C that's usually the view out the window, so to speak.  I'm curious to hear what specific things your courseware taught that you're making good use of in your python technique.

OzonePrime

  • Elite Boss
  • *****
  • Posts: 376
  • Never Give Up! Never Surrender!
Re: If I wanted to learn code?
« Reply #55 on: January 16, 2014, 12:46:01 PM »
I can teach you to program, but my regimen isn't for the faint of heart. (-:

What I do is start with the basics of how a computer architecture works (in very simple terms), then proceed to the best beginner language I've ever come across... QBasic. From there, fundamental concepts are taught, then further academics proceed to C (not C++ or C#). And then, after C concepts are covered, I delve into assembly and describe the low-level functions of the machine code and CPU operations.


Do you use the "99c computer"?



I very strongly believe that you can't be a good programmer without understanding what your code ultimately becomes by the time the computer gets to it. Not that you can't use abstract languages like Java or .NET, but I've seen way too many programs that were written poorly for the fact that the programmer didn't know any better. I want to make the world a better place by laying everything out in the open!

Ironwolf

  • Stubborn as a
  • Elite Boss
  • *****
  • Posts: 1,503
Re: If I wanted to learn code?
« Reply #56 on: January 16, 2014, 07:32:00 PM »
Ok Codemaster I am starting using this tutorial:
http://lua.gts-stolberg.de/en/Variablen.php

I will be ordering the book http://store.feistyduck.com/products/programming-in-lua  as soon as I get home tonight.

Would it be helpful to take a course in Corona SDK? http://www.otis.edu/ce-course?crs=606&dsc=2

Can you give me any ideas as to what specific parts would be most helpful to a hypothetical emulator in the future?

Arcana

  • Sultaness of Stats
  • Elite Boss
  • *****
  • Posts: 3,672
Re: If I wanted to learn code?
« Reply #57 on: January 17, 2014, 06:43:55 AM »
Can you give me any ideas as to what specific parts would be most helpful to a hypothetical emulator in the future?
True story: Paragon was working on an embedded Lua engine in City of Heroes itself.  In fact, it was working in the I24 server build.  They were just starting to stick their toes into using it for mission scripting.

Not speaking for Codewalker, but what specifically do you mean by "helpful?"

Ironwolf

  • Stubborn as a
  • Elite Boss
  • *****
  • Posts: 1,503
Re: If I wanted to learn code?
« Reply #58 on: January 17, 2014, 11:36:01 AM »
Programming has many various parts - graphics, game control (pathing, hits and other movement) - database structure and of course many other things.

I don't imagine in a short time I can become expert at everything. If however I spend more time on the things that would be needed - in a Score effort - then I could be of more use, faster.

Codewalker

  • Hero of the City
  • Titan Network Admin
  • Elite Boss
  • *****
  • Posts: 2,740
  • Moar Dots!
Re: If I wanted to learn code?
« Reply #59 on: January 17, 2014, 02:45:26 PM »
True story: Paragon was working on an embedded Lua engine in City of Heroes itself.  In fact, it was working in the I24 server build.  They were just starting to stick their toes into using it for mission scripting.

I got to play with it a little bit on the beta server just before the shutdown. The lua integration was still pretty early and mostly only had hooks into the "old" mission script infrastructure, so what you could do with it was somewhat limited. Less limited than nothing at all, of course, but not a magic bullet that can do anything.

Lua was used by a redname after Arcana's event to grant everyone all the badges, though there are so many that it almost crashed the zone again. Using Lua I also managed to make it snow (sort of, kind of a hack by making the instant snowstorm FX play on everyone in the zone), and make NPCs say various things on a timer.

Presumably more and more hooks would have been added as time went on, adding even more ability to do cool things.

In a hyptothetical future secret server implementation, I would expect Lua to be much more fully integrated, possibly forming the backbone of the mission system itself so ALL missions would effectively be driven by Lua scripts, even if they were just a single line to call a DefeatAll() premade function.