Is this a proper way to find the derivate of a 12-bit ADC?
Your understanding of the concept looks basically correct but there are a couple of issues.
Unless your sampling time is variable, you should not need to read the time. You should already know the sampling interval beforehand
If the sampling time is variable, you need to record the time associated with when the actual sample was taken. Your current code doesn't do that. It records the time completely independently of the sample some time after the sample has already been taken. If you are behind an RTOS there is probably a much better way to do it like setting the ADC to automatically sample and automatically writie the samples into a buffer so you can read the samples and differentiate whenever you want knowing that the interval time is constant.
Yes, noise will be an issue. You want to filter the ADC readings before differentiating since it is very sensitive to noise. Even a small magnitude change over a small time interval (such as when sampling at a very high frequency) results in enormous slopes that may completely swamp your graph. I've found the easiest way to deal with this is to actually reduce the sampling rate which reduces the slope of the line between adjacent samples.