First you create 3 groups (g_software, g_hardware, g_other) and then 3 queues (q_software, q_hardware, q_other), assigning each queue to its corresponding group (q_software to g_software, etc.).
Now create agents and assign them to groups according to your needs. One agent can be in many groups, no problem.
When customers post tickets, they must choose the queue where the ticket is assigned. This acts like a category for you.
You don't setup separate customers for each category. I assume the ticket field "Type" threw you off. That is designed for situations where you have to categorize tickets independently of the queue they're in. This doesn't seem to be your case.