I think writing a new shader every time I want to test or understand a new function is counter-productive.
With graphtoy I can do this much faster. So I'll be writing some functions there, screenshot the result and place those images here with a link to the function on the website. Easier.
Plus, it's very useful to go through the process of shaping the function, like so:
(oh, and you can just right-click on the graph to save it as an image)
This chapter explains what the mix() function does and references easing functions and how to implement them in GLSL.
It then presents 4 challenges:
Turning this:
Into this:
shader here