There are lots of ideas on how magic should work, but Toady One is not going to get around to it soon (before the more popular requests) unless there is a unified push for a (relatively) simple system that we all can agree on and that's not going to take 5 years to program. To accomplish this goal, I propose that as much about magic as is possible be put in the raws. That way, everyone could create and use the magic system they like best. Toady doesn't even have to include a system for the unmodded game, we can do that for him!
In this system, spells are just reactions occurring 'in' a character instead of a workshop (but eventually things like self-powered mechanisms and dwarven enchantments can be included). The syntax for it could look something like this:
magic_standard
[OBJECT:SPELL]
[SPELL:<spell designation>]
[Name:<spell name>:<announcement_self>:<announcement_other>]
[SKILL:]
Toady can start with just one Mage skill/profession (possibly using Lt Cyan for profession color) if he wants, but I would start with three for variety: Wizard, Priest and Druid. (eventually including more specialized skills, maybe even making overall magic level an attribute)
[SPHERE:]
Mainly for Priests/Druids, requires worship oa a deity/force of a particular sphere. (need only match one SPHERE tag, not all)
[Alignment:<min>:<max>]
Placeholder for eventual expansions, could use a simple personality trait tag.
[REQ_SACRIFICE:<sentient, animal, specific creature, etc.>]
Another placeholder, good for goblins (in more ways than one...)
[Reagent:<amount>:<type>:<subtype>:<material>:<matgloss>]
As for reactions; essentially 'magic ammo'
[CATALYST:<amount>:<type>:<subtype>:<material>:<matgloss>:<in_possession, worn, wielded>]
Item is needed but not consumed, useful for staffs, wands, etc. possibly a second update item.
[PRODUCT:<chance>:<amount>:<type>:<subtype>:<material>:<matgloss>]
As for reactions
[EFFECT:ATTACK:<min_dam>:<max_dam>:<damtype>]
For standard attacks, eventually including new damtypes like lightning.
[EFFECT:ARMOR:<mainblock>:<secondblock>]
An extra(?) layer of armor.
[EFFECT:SHIELD:<blockchance>:<blockpower>]
Replace shield user with relevant Mage skill.
[EFFECT:HEAL:<?>]
Don't know enough about the wound system, but this is VERY important for priests. (eventually you'll have priests from your temple visiting your barracks to heal wounded dwarves.)
[EFFECT:SUMMON:<creature>]
Creates a friendly creature to fight by your side (or for you). A miscast (see miscasts, below) while summoning a demon can be very Fun.
[EFFECT:ENCHANT<_WEAPON _ARMOR _OBJECT _CREATURE>:<effect>]
Adds a new tag/token (ex. [NOPAIN] or [FIREIMMUNE]) to a creature or strengthens the attack/damblock value of a creature, weapon, or armor. Might eventually give special tags to miscellaneous objects (crystal balls, magical decorations, etc.)
[SPECIAL:]
Other random stuff. Here's a list of possible (but not guaranteed) inclusions
[SPECIAL:FIREBALL]
[SPECIAL:DRAGONFIRE]
[SPECIAL:EARTHQUAKE]
[SPECIAL:TELEPORT]
[SPECIAL:CHARM]
[SPECIAL:STOPBLEED]
[SPECIAL:REGENERATE]
[SPECIAL:RE_CONSCIOUS]
[SPECIAL:TURN_UNDEAD]
[SPECIAL:REANIMATE_CORPSE]
[SPECIAL:REANIMATE_SKELETON]
[SPECIAL:SPEAK_WITH_DEAD]
[SPECIAL:RESURRECT]
[SPECIAL:REINCARNATE]
[SPECIAL:SHAPESHIFT]
[SPECIAL:INVISIBILITY]
These are just possibilities. If any are to be included, it most likely will be in a later update.
[RANGED]
[MELEE]
[TARGET_FRIENDLY]
[SELF]
[PARTY]
Defines target
[CAST_TIME:]
How long (in steps) to cast. You can be interrupted. High levels decrease this (and lows increase). 0 means it happens immediately, but you still move a step.
[DURATION:<mindur>:<maxdur>]
In frames. 0:0 for permanent/nonvalue.
[BUILDING:<altar, casting chamber, etc.>]
Requires a building to cast. Also enables you to order your dwarf priests etc. to cast that spell at that building in fortress mode.
[MINSKILL:]
Minimum skill level to cast. Also determines the difficulty to cast, as well as the chance and severity of a miscast.
[MISCASTS]
The spell can miscast if fails. All spells can miscast if interrupted (exception: see below). A miscast can range from switching targets to opposite effects to other Fun stuff.
[NO_MISCAST]
The spell won't miscast, even if interrupted.
Just who or what can cast a particular spell is determined by an entry in the Entity and/or Creature files. That way, you can make elves use only nature magic, while goblins use human (and dwarven) sacrifice. (Why do you think they steal so many babies?)
There is so much that can be added, like local magic levels (which also can relate to how realistic/fantastical the local wildlife is), learning spells (requires books/parchment), specialist skill types and more; but all that can be put in a later update. The point is: you have to start somewhere, we can worry about the final system later. I will be putting this suggestion on DF Eternal Suggestion Voting
http://www.bay12games.com/forum/index.php?topic=24818.0, vote for it if you want some magic!