fiancially, programming - assuming of course that you do it very well.
rewarding as in giving you a sense of esteeme, either is good, it's nice to have built a kick ass computer, but it's also a nice feeling to have spent days producing a piece of software and finally finish it, knowing that yuo have tried your best and come out with a good piece of software.
Downsides to each, sometimes hardware breaks inexplicable, there ar softwre comflicts on the machines you'll be building/serviceing and it'll al turn into a headache
downsides to programming, no matter how hard you try there wil always be someone trying to rubbish your work.