I am a big believer in do-it-yourself (DIY) backtesting and data analysis, that is, obtaining your own data and writing your own code. I use my own simple Python scripts to process, test, analyze, and backtest, starting with text-input data files (either OHLC bars or tick data). The reason for DIY: in order to have an effective backtest, analysis, etc., you must completely understand all the assumptions, explicit and implicit, that go into the test or analysis. You must understand how that relates to the trading algorithm you implement.
As a quick example, people commonly say you must take off a tick or two in backtest results to account for slippage. However, I have found that for several of my backtest methods, I can actually count on getting better entries, on average, than the backtest. Whatever the case, I can sleep at night without worrying about someone changing something in the way the software works, which would throw off my tests without me knowing about it.
For algorithm execution, I also use a DIY Java API and Java applications build on the TWS API. However, the reason for that is just to save a few bucks.
Edit: Not sure I got this point across, but there is an intimate connection between back-test code, historical data, execution code, and real-time data. The relationship is different depending on what you are doing and what you are using, but it always important to understand the relationship.