The MX-350 is programmed manually, directly on the remote itself. Like most universal remotes, it includes a database of 'setup codes' but I would advise against using them. The main reason being that you have no control over what commands are placed in what order on the LCD buttons on the side of the screen.
If you don't have an original remote for a piece of equipment, you'd have to use the built-in setup codes but if you do have the original remote it is far better to plan your layout, label all the LCD buttons, and then teach the MX all of the commands from the original remotes.
Programming goes really quickly once you become familiar with the process and one advantage to manual programming IMO is that you can make changes on the fly while sitting in front of your equipment. Macros in particular are things you often don't get perfect on the first try and being able to do it while sitting in front of the equipment is a lot easier than connecting it to a computer, firing up the software, making changes, disconnecting, testing, and repeating that process again and again until you get it right.