I am reading up on how things work offline and things like synchronization and wondering what the difference is between and OfflineMap and Geodatabase, and they seem to both refer to offline data.... for example what is the difference between the methods GenerateGeodatabaseJob and GenerateOfflineMapJob
The GenerateGeodatabaseJob is used for taking data offline from a single feature service.
The GenerateOfflineMapJob downloads an ad-hoc area of a web map to use offline, including data in the web map. It will download various components of the web map and its contents as an offline map (it's really a folder on the device containing the downloaded components, but you typically don't dig around in there and just work with the downloaded offline map - see here).
Behind the scenes, the GenerateOfflineMapJob could spawn one or more GenerateGeodatabaseJobs to download data from one or more feature services that the web map references. That's why both refer to offline data, since your ability to work with the data is the same, whether it's downloaded directly from the service, or behind the scenes as part of downloading the web map. In the GenerateGeodatabase case you access that offline data directly. In the GenerateOfflineMap case, you access it through the offline map.
Whether you would use a GenerateOfflineMapJob or GenerateGeodatabaseJob depends on whether you are working with web maps or directly with feature services. If you are taking multiple feature services, tiled layers, vector tiled layers, and basemaps offline, try to use a web map and the GenerateOfflineMapJob (or a preplanned offline map). It will save a lot of code, and is typically the more appropriate option.
This page can help determine which option you want to use.
Hope this helps.