Are there things that can be done with MapScript and not Map file or vice versa? What are the scenarios to use each one?
Mapfiles are good for making standard WMS, WFS and WCS services. They are mostly stable even some limited set of the mapfile parameters can be changed on-the-fly by using the variable substitution mechanism. Static mapfiles are enough for serving data to GIS clients like ArcGIS, QGIS, OpenJUMP etc. and also for browser applications made with OpenLayers or Leaflet if there is not big need for user interaction.
MapScript is not an alternative for mapfiles but it is a scripting language for controlling functions which are supported by Mapserver. MapScript can for example offer users a possibility to change the mapfile parameters on-the-fly and control how the rendered map looks like but it can be used to much more. See for example what p.mapper can do http://pmapper.net/.
Found a good overview course here: Pluralsight course on mapserver mapscript and gdal