I vaguely remember a recent thread discussing differences between 8 and 9 that affect migration, but I cannot find it for the moment, so here's a very short and incomplete, but perhaps still useful overview:
* A lot of the ideology is the same: there are components, they can be stored in a single MAP file, there are selections and transforms, the UI has multiple windows / panes / toolbars, etc. But there are a lot of differences too: you can link data in every format which you can import, all components use tables to store their data, transforms generate SQL code, the multiple windows are tabbed, there's only one toolbar and most commands are moved into panes / dropdown menus, etc. Watch the videos / read Help topics to see what is still the same vs what is different.
* SQL code for 8 will not work in 9 out of the box, it has to be adjusted. First off, the function names and parameters are different, 9 plain has more of them and they do more. Things like Surface Evaluator which were separate tools in 8 are now part of the SQL engine in 9. Same for geocoding and a lot of other things. 9 also has many different constructs which were not present in 8 - multi-statement queries, user-defined SQL functions, values, clauses for parallel computations, means to run parts of a query on a remote database, etc.
* Script code for 8 will not work in 9 out of the box either, it has to be adjusted, too. The differences are even bigger than with SQL because the object model is a lot different: it concentrates on working with databases / tables / queries / records, leaving higher-level things like transforms to SQL. SQL and scripts make for a powerful combo in 9, you can write a script function and call it from a query plus, obviously, you can call a query from a script as well, but scripts end up being different from what they were in 8. Add-ins are scripts, so all of this applies to them as well.
It is perhaps worth mentioning that you can use 8 and 9 together, at least in the beginning. 9 will read MAP files created by 8, and 8 can access data managed by 9 through 9's ODBC driver (8 connects to 9 via ODBC, 9 reads data from its MAP file or perhaps connects to a different data source, both options are there). 9 will also read Enterprise storages created by 8 if you have those, plus 9 obviously will work with any tables created / used by 8 that are stored on databases. The important thing to watch for when using 8 and 9 together is MAP files: a MAP file saved from 9 will not be readable in 8, so it is better to keep these MAP files separate (maybe name them 'data-8.map' / 'data-9.map').
Hope this helps somewhat.