Pattern Abstraction In Computational Thinking