Yes - the problem is that your browser executes the 'points' block before your browser has a chance to load the CSV and draw the points to your canvas.
Let me explain.
Your browser executes the code from the top to the bottom, sequentially. This part -
d3.csv('salaries.csv', function(dset){
data = dset.map(function(d) {
return [
+d["Year"],
+d["MU_Professor"],
+d["NAS_Professor"],
d["Department"]
]; });
});
Tells D3 to go off on its own and load the .csv - but before that finishes, the browser moves on and executes the rest of the code. This is an 'Asynchronous' method.
You could try moving the //points block into the same function that maps the points from the csv.