Hi! First off I think a lot of great ideas have come out of this thread; honestly if any one of them were implemented I think it would help with organisation / migrant usage a lot.
That said I think some of the descriptions of the ideas may be difficult to visualise and in the hopes of clarifying I used my Competent: Spreadsheets skill to throw something together. Sorry if this is repetitive / unecessary, I just thought it might help explain things to people who, like me, may have had trouble grasping some of the concepts here.
Also, this does not include Medical, Military, Social, or Hauling Labours. I figure those are pretty well handled by the current system and could continue to use the same structure. I also counted "Siege Operator" as a Military Skill, "Architecture" as a Social Skill, and "Pump Operator" as a Hauling/Unskilled Labour, but that's beside the point.
Below is what I envisioned when reading about the Skill Matrix Idea. The Columns are materials handled, and the Rows are Actions performed. This is independent of any reorganisations of Labours/Jobs and workshops; this example could use exactly the same Labours/Tasks and Workshops as in current DF. I.E. you could enable "Carpentry' but disable "Woodcrafter" and "Siege Engineer" on a dwarf. (Although adding a few new Labours, the ones in brackets "()" might make thing clearer.)
EDIT: Oops, ignore any mention of "Blacksmith"
In the example the 'Detailing' row could easily be merged with the "Crafting" row.
The main idea behind it is that, for the displayed Labours, you do not actually earn experience points / levels in that Labour, but in the appropiate Row and Column. To determine the effective skill level for a Labour, you just average the Row and Column together. (Again, this is more of a conceptual tool, so if in practice it's bit unbalanced, you could instead multiply the Row and Coulmn together, or take the average of the square of the Row and Column etc.)
So for any cell containing multiple labours, all the labours draw from the same values. For example, "Carpenter" and "Siege Engineer" could still be two separate Labours (Or not, however you want to organise things), but they will always be done at the same level by a particular dwarf. E.G. if a dwarf draws on the "Wood" Column and "Construction" Row for both Carpentry and Siege Engineering, so he will perform both tasks equally well.
What this does is limit the number of effective "Things to level up in by performing tasks" to the number of filled Cells in the matrix. There are 51 filled cells, where there used be 52 (I think?) separate Labours in vanilla DF. Even with the "Detailing" Row included, there is the same number of possible items that you could spend time training in, as in vanilla DF. (Since any Carpentry task also trains the same values for Siege Engineering, they count as one "thing to train in"). The X's are just cells where there are no current tasks. So no matter what, this does not increase the number of available skill slots / increase the chance to get a crappy skill on a migrant. If you combine the Detailing Row, it actually
reduces the number of options.
So, onto practical examples. The situation of the dreaded Lyemaker Migrant. In this case, let's say what your Fortress
really needs is glassmakers, not lyemakers. Here is an example a migrant who would be a "Level 5 Lyemaker" in vanilla DF, upon arrival, and then after a few seasons of making green glass blocks. (I'm assuming, for the way I'm calculating skill levels, any action that gives, say, 30xp to "Glassmaker" in vanilla DF, instead gives 30xp to the "Gems/glass" Column, and also 30xp to the "Processing" Row.)
The difference from vanilla DF is that he normally would still only be at level 5 Lyemaker and Level 4 glassmaker, but with the matrix he is at level 6.5 Glassmaker. Also, he is an even better Lyemaker (Hooray?), and partly skilled in a bunch of other areas, if flexibility is a concern.
So, this does mitigate getting migrants skilled in areas you won't use. Also, having multiple Labours in the same cell helps, since someone with 10 levels in "Processing" and "Animal Products" isn't just a good (useless) Cheesemaker, they are equally skilled at Cooking, Soaping, etc.
As has already been mentioned, it would be extremely simple to just hardcode it so that migrants do not arrive with a Row and Column skill that converge on an "X" (No Labours.) But even if, for some reason, that wasn't done, it wouldn't be a big problem. Here's a migrant who by all appearances would be just great at making Leather Swords. Somehow:
Since he's already pretty good at "Weaponing," he can get to level 8 Metal Weaponsmith in the same time that an otherwise useless (legendary Milker) migrant would get to level 4.
Again, it's still reasonable to assume that migrants just wouldn't come with a Row and Column that don't synergise. (Since there's no labour to train "Leather" and "Weaponing" together, the migrant should never be able to get that skill level in the first place. If the migrant behaviour is smart enough to know that a footless migrant should come with a crutch and already have skill in Crutchwalking, this is a snap.)
Finally, I was just using a single Row and Column to simplify things. Since we get migrants with varied skills now, it may make more sense to just limit them to a single cell in the matrix (like my first example), but if we want randomization like in vanilla we could migrants like this:
At any rate, this alleviates two problems:
1. All migrants will have at least some skill in something you can use
2. You won't have to go out of your way to train, say, "Presser," at the expense of something else, since it also trains Cooking etc. Even if you did, you'd still be getting skill increases in other areas that will be useful.
tl;dr Wow this is huge. Hopefully I didn't complicate things even more...
EDIT: Forgot Architecture. ALSO, forgot Blacksmith and Metalsmith are the same thing. Anyway this is just an example of how a Matrix system could work. The actual merging of skills, which rows / columns to use etc. is up to you guys.