One of my biggest gripes with model trains when I was a kid was that you could really only run one train on one track at one time (I didn't know about blocks or isolating sections at the time and probably couldn't have been bothered with them even if I had). Not very realistic in my opinion. Trying to run two trains through one controller usually ended in disaster and even if you had separate tracks and controllers, flicking the wrong set of points could result in some expected behavior. When I discovered that DCC was readily available at a reasobale price I knew it was something I had to implement. I've always been pretty good with computers and technology so when I read that I could build a DCC base station and control trains via the computer for significantly cheaper than buying an off the shelf digital controller I was sold!
I opted to build a DCC++ base station (https://github.com/DccPlusPlus/BaseStation/wiki/What-is-DCC--Plus-Plus) using a generic Arduino clone from Amazon with a generic motor shield plonked on top (I'd never heard of Arduino before and I don't know how, it's amazing! I now use three on the layout to control everything, more on that later). The code to upload into the board is available free from the genius that designed the base station (what a amazing guy). Total cost was probably around £20. Tornado is DCC ready so I purchased my first decoder and wired it all up. Nothing happened. My brother was visiting at the time and, as he's pretty handy with computers, I'd got him involved with it. After a few hours of messing about with settings and connections I think he was ready to pack his bags and head home. The main issue we had was that the only power supply available to us was one I'd mutilated for a project many years ago and I suspected this was part of the issue. I eventually bit the bullet and chopped the end off my brand new Hornby power supply to expose the wires and hooked them up. HAZZAH! Lights appeared on the motor shield and Tornado took her first trip under digital control.
I started off using the DCC++ graphical user interface which was developed alongside the base station, which I don't think is supported any more. Then I discovered JMRI. I now use this to control all my locomotives, points/turnouts, sensors, signals and whatever else I can attache a servo to. More on JMRI later as I'm still getting it set up.
DCC++ and JMRI is such a powerful (and cheap!) combination if you're prepared to put the time into understanding it and setting it up.