So how _do_ you handle nil without those things? You've said you try to just avoid it, but many functions return nil and there's no easy way around it (e.g. trying to get the max value of an empty list)
Programs DO things, use what you're doing to describe your program, whenever possible.
In a better world, max([]) # -> None(T)
But sometimes we have to get creative...